# 2005 Mar 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 regression tests for SQLite library.
#
# This file implements tests for miscellanous features that were
# left out of other test files.
#
# $Id: misc5.test,v 1.22 2008/07/29 10:26:45 danielk1977 Exp $

set testdir [file dirname $argv0]
source $testdir/tester.tcl

# Build records using the MakeRecord opcode such that the size of the 
# header is at the transition point in the size of a varint.
#
# This test causes an assertion failure or a buffer overrun in version
# 3.1.5 and earlier.
#
for {set i 120} {$i<140} {incr i} {
  do_test misc5-1.$i {
    catchsql {DROP TABLE t1}
    set sql1 {CREATE TABLE t1}
    set sql2 {INSERT INTO t1 VALUES}
    set sep (
    for {set j 0} {$j<$i} {incr j} {
      append sql1 ${sep}a$j
      append sql2 ${sep}$j
      set sep ,
    }
    append sql1 {);}
    append sql2 {);}
    execsql $sql1$sql2
  } {}
}

# Make sure large integers are stored correctly.
#
ifcapable conflict {
  do_test misc5-2.1 {
    execsql {
      create table t2(x unique);
      insert into t2 values(1);
      insert or ignore into t2 select x*2 from t2;
      insert or ignore into t2 select x*4 from t2;
      insert or ignore into t2 select x*16 from t2;
      insert or ignore into t2 select x*256 from t2;
      insert or ignore into t2 select x*65536 from t2;
      insert or ignore into t2 select x*2147483648 from t2;
      insert or ignore into t2 select x-1 from t2;
      insert or ignore into t2 select x+1 from t2;
      insert or ignore into t2 select -x from t2;
      select count(*) from t2;
    }
  } 371
} else {
  do_test misc5-2.1 {
    execsql {
      BEGIN;
      create table t2(x unique);
      create table t2_temp(x);
      insert into t2_temp values(1);
      insert into t2_temp select x*2 from t2_temp;
      insert into t2_temp select x*4 from t2_temp;
      insert into t2_temp select x*16 from t2_temp;
      insert into t2_temp select x*256 from t2_temp;
      insert into t2_temp select x*65536 from t2_temp;
      insert into t2_temp select x*2147483648 from t2_temp;
      insert into t2_temp select x-1 from t2_temp;
      insert into t2_temp select x+1 from t2_temp;
      insert into t2_temp select -x from t2_temp;
      INSERT INTO t2 SELECT DISTINCT(x) FROM t2_temp;
      DROP TABLE t2_temp;
      COMMIT;
      select count(*) from t2;
    }
  } 371
}
do_test misc5-2.2 {
  execsql {
    select x from t2 order by x;
  }
} \
"-4611686018427387905\
-4611686018427387904\
-4611686018427387903\
-2305843009213693953\
-2305843009213693952\
-2305843009213693951\
-1152921504606846977\
-1152921504606846976\
-1152921504606846975\
-576460752303423489\
-576460752303423488\
-576460752303423487\
-288230376151711745\
-288230376151711744\
-288230376151711743\
-144115188075855873\
-144115188075855872\
-144115188075855871\
-72057594037927937\
-72057594037927936\
-72057594037927935\
-36028797018963969\
-36028797018963968\
-36028797018963967\
-18014398509481985\
-18014398509481984\
-18014398509481983\
-9007199254740993\
-9007199254740992\
-9007199254740991\
-4503599627370497\
-4503599627370496\
-4503599627370495\
-2251799813685249\
-2251799813685248\
-2251799813685247\
-1125899906842625\
-1125899906842624\
-1125899906842623\
-562949953421313\
-562949953421312\
-562949953421311\
-281474976710657\
-281474976710656\
-281474976710655\
-140737488355329\
-140737488355328\
-140737488355327\
-70368744177665\
-70368744177664\
-70368744177663\
-35184372088833\
-35184372088832\
-35184372088831\
-17592186044417\
-17592186044416\
-17592186044415\
-8796093022209\
-8796093022208\
-8796093022207\
-4398046511105\
-4398046511104\
-4398046511103\
-2199023255553\
-2199023255552\
-2199023255551\
-1099511627777\
-1099511627776\
-1099511627775\
-549755813889\
-549755813888\
-549755813887\
-274877906945\
-274877906944\
-274877906943\
-137438953473\
-137438953472\
-137438953471\
-68719476737\
-68719476736\
-68719476735\
-34359738369\
-34359738368\
-34359738367\
-17179869185\
-17179869184\
-17179869183\
-8589934593\
-8589934592\
-8589934591\
-4294967297\
-4294967296\
-4294967295\
-2147483649\
-2147483648\
-2147483647\
-1073741825\
-1073741824\
-1073741823\
-536870913\
-536870912\
-536870911\
-268435457\
-268435456\
-268435455\
-134217729\
-134217728\
-134217727\
-67108865\
-67108864\
-67108863\
-33554433\
-33554432\
-33554431\
-16777217\
-16777216\
-16777215\
-8388609\
-8388608\
-8388607\
-4194305\
-4194304\
-4194303\
-2097153\
-2097152\
-2097151\
-1048577\
-1048576\
-1048575\
-524289\
-524288\
-524287\
-262145\
-262144\
-262143\
-131073\
-131072\
-131071\
-65537\
-65536\
-65535\
-32769\
-32768\
-32767\
-16385\
-16384\
-16383\
-8193\
-8192\
-8191\
-4097\
-4096\
-4095\
-2049\
-2048\
-2047\
-1025\
-1024\
-1023\
-513\
-512\
-511\
-257\
-256\
-255\
-129\
-128\
-127\
-65\
-64\
-63\
-33\
-32\
-31\
-17\
-16\
-15\
-9\
-8\
-7\
-5\
-4\
-3\
-2\
-1\
0\
1\
2\
3\
4\
5\
7\
8\
9\
15\
16\
17\
31\
32\
33\
63\
64\
65\
127\
128\
129\
255\
256\
257\
511\
512\
513\
1023\
1024\
1025\
2047\
2048\
2049\
4095\
4096\
4097\
8191\
8192\
8193\
16383\
16384\
16385\
32767\
32768\
32769\
65535\
65536\
65537\
131071\
131072\
131073\
262143\
262144\
262145\
524287\
524288\
524289\
1048575\
1048576\
1048577\
2097151\
2097152\
2097153\
4194303\
4194304\
4194305\
8388607\
8388608\
8388609\
16777215\
16777216\
16777217\
33554431\
33554432\
33554433\
67108863\
67108864\
67108865\
134217727\
134217728\
134217729\
268435455\
268435456\
268435457\
536870911\
536870912\
536870913\
1073741823\
1073741824\
1073741825\
2147483647\
2147483648\
2147483649\
4294967295\
4294967296\
4294967297\
8589934591\
8589934592\
8589934593\
17179869183\
17179869184\
17179869185\
34359738367\
34359738368\
34359738369\
68719476735\
68719476736\
68719476737\
137438953471\
137438953472\
137438953473\
274877906943\
274877906944\
274877906945\
549755813887\
549755813888\
549755813889\
1099511627775\
1099511627776\
1099511627777\
2199023255551\
2199023255552\
2199023255553\
4398046511103\
4398046511104\
4398046511105\
8796093022207\
8796093022208\
8796093022209\
17592186044415\
17592186044416\
17592186044417\
35184372088831\
35184372088832\
35184372088833\
70368744177663\
70368744177664\
70368744177665\
140737488355327\
140737488355328\
140737488355329\
281474976710655\
281474976710656\
281474976710657\
562949953421311\
562949953421312\
562949953421313\
1125899906842623\
1125899906842624\
1125899906842625\
2251799813685247\
2251799813685248\
2251799813685249\
4503599627370495\
4503599627370496\
4503599627370497\
9007199254740991\
9007199254740992\
9007199254740993\
18014398509481983\
18014398509481984\
18014398509481985\
36028797018963967\
36028797018963968\
36028797018963969\
72057594037927935\
72057594037927936\
72057594037927937\
144115188075855871\
144115188075855872\
144115188075855873\
288230376151711743\
288230376151711744\
288230376151711745\
576460752303423487\
576460752303423488\
576460752303423489\
1152921504606846975\
1152921504606846976\
1152921504606846977\
2305843009213693951\
2305843009213693952\
2305843009213693953\
4611686018427387903\
4611686018427387904\
4611686018427387905"

# Ticket #1210.  Do proper reference counting of Table structures
# so that deeply nested SELECT statements can be flattened correctly.
#
ifcapable subquery {
  do_test misc5-3.1 {
    execsql {
      CREATE TABLE songs(songid, artist, timesplayed);
      INSERT INTO songs VALUES(1,'one',1);
      INSERT INTO songs VALUES(2,'one',2);
      INSERT INTO songs VALUES(3,'two',3);
      INSERT INTO songs VALUES(4,'three',5);
      INSERT INTO songs VALUES(5,'one',7);
      INSERT INTO songs VALUES(6,'two',11);
      SELECT DISTINCT artist 
      FROM (    
       SELECT DISTINCT artist    
       FROM songs      
       WHERE songid IN (    
        SELECT songid    
        FROM songs    
        WHERE LOWER(artist) = (    
          -- This sub-query is indeterminate. Because there is no ORDER BY,
          -- it may return 'one', 'two' or 'three'. Because of this, the
	  -- outermost parent query may correctly return any of 'one', 'two' 
          -- or 'three' as well.
          SELECT DISTINCT LOWER(artist)    
          FROM (      
            -- This sub-query returns the table:
            --
            --     two      14
            --     one      10
            --     three    5
            --
            SELECT DISTINCT artist,sum(timesplayed) AS total      
            FROM songs      
            GROUP BY LOWER(artist)      
            ORDER BY total DESC      
            LIMIT 10    
          )    
          WHERE artist <> '' 
        )  
       )       
      )  
      ORDER BY LOWER(artist) ASC;
    }
  } {two}
}

# Ticket #1370.  Do not overwrite small files (less than 1024 bytes)
# when trying to open them as a database.
#
if {[permutation] == ""} {
  do_test misc5-4.1 {
    db close
    forcedelete test.db
    set fd [open test.db w]
    puts $fd "This is not really a database"
    close $fd
    sqlite3 db test.db
    catchsql {
      CREATE TABLE t1(a,b,c);
    }
  } {1 {file is not a database}}
}

# Ticket #1371.  Allow floating point numbers of the form .N  or N.
#
do_test misc5-5.1 {
  execsql {SELECT .1 }
} 0.1
do_test misc5-5.2 {
  execsql {SELECT 2. }
} 2.0
do_test misc5-5.3 {
  execsql {SELECT 3.e0 }
} 3.0
do_test misc5-5.4 {
  execsql {SELECT .4e+1}
} 4.0

# Ticket #1582.  Ensure that an unknown table in a LIMIT clause applied to
# a UNION ALL query causes an error, not a crash.
#
db close
forcedelete test.db
sqlite3 db test.db
ifcapable subquery&&compound {
  do_test misc5-6.1 {
    catchsql {
      SELECT * FROM sqlite_master 
      UNION ALL 
      SELECT * FROM sqlite_master
      LIMIT (SELECT count(*) FROM blah);
    }
  } {1 {no such table: blah}}
  do_test misc5-6.2 {
    execsql {
      CREATE TABLE logs(msg TEXT, timestamp INTEGER, dbtime TEXT);
    }
    catchsql {
      SELECT * FROM logs WHERE logs.oid >= (SELECT head FROM logs_base) 
      UNION ALL 
      SELECT * FROM logs 
      LIMIT (SELECT lmt FROM logs_base) ;
    }
  } {1 {no such table: logs_base}}
}

# Overflow the lemon parser stack by providing an overly complex
# expression.  Make sure that the overflow is detected and reported.
#
# This test fails when building with -DYYSTACKDEPTH=0
#
do_test misc5-7.1 {
  execsql {CREATE TABLE t1(x)}
  set sql "INSERT INTO t1 VALUES("
  set tail ""
  for {set i 0} {$i<200} {incr i} {
    append sql "(1+"
    append tail ")"
  }
  append sql 2$tail
  catchsql $sql
} {1 {parser stack overflow}}

# Parser stack overflow is silently ignored when it occurs while parsing the
# schema and PRAGMA writable_schema is turned on.
#
do_test misc5-7.2 {
  sqlite3 db2 :memory:
  sqlite3_db_config db2 DEFENSIVE 0
  catchsql {
    CREATE TABLE t1(x UNIQUE);
    PRAGMA writable_schema=ON;
    UPDATE sqlite_master SET sql='CREATE table t(o CHECK(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((;VALUES(o)';
    BEGIN;
    CREATE TABLE t2(y);
    ROLLBACK;
    DROP TABLE IF EXISTS D;
  } db2
} {0 {}}
db2 close
  

# Ticket #1911
#
ifcapable compound {
  do_test misc5-9.1 {
    execsql {
      SELECT name, type FROM sqlite_master WHERE name IS NULL
      UNION
      SELECT type, name FROM sqlite_master WHERE type IS NULL
      ORDER BY 1, 2, 1, 2, 1, 2
    }
  } {}
  do_test misc5-9.2 {
    execsql {
      SELECT name, type FROM sqlite_master WHERE name IS NULL
      UNION
      SELECT type, name FROM sqlite_master WHERE type IS NULL
      ORDER BY 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2
    }
  } {}
}

# Ticket #1912.  Make the tokenizer require a space after a numeric
# literal.
#
do_test misc5-10.1 {
  catchsql {
    SELECT 123abc
  }
} {1 {unrecognized token: "123abc"}}
do_test misc5-10.2 {
  catchsql {
    SELECT 1*123.4e5ghi;
  }
} {1 {unrecognized token: "123.4e5ghi"}}


# Additional integer encoding tests.
#
do_test misc5-11.1 {
  db eval {
    CREATE TABLE t3(x);
    INSERT INTO t3 VALUES(-18);
    INSERT INTO t3 VALUES(-17);
    INSERT INTO t3 VALUES(-16);
    INSERT INTO t3 VALUES(-15);
    INSERT INTO t3 VALUES(-14);
    INSERT INTO t3 VALUES(-13);
    INSERT INTO t3 VALUES(-12);
    INSERT INTO t3 VALUES(-11);
    INSERT INTO t3 VALUES(-10);
    INSERT INTO t3 VALUES(-9);
    INSERT INTO t3 VALUES(-8);
    INSERT INTO t3 VALUES(-7);
    INSERT INTO t3 VALUES(-6);
    INSERT INTO t3 VALUES(-5);
    INSERT INTO t3 VALUES(-4);
    INSERT INTO t3 VALUES(-3);
    INSERT INTO t3 VALUES(-2);
    INSERT INTO t3 VALUES(-1);
    INSERT INTO t3 VALUES(0);
    INSERT INTO t3 VALUES(1);
    INSERT INTO t3 VALUES(2);
    INSERT INTO t3 VALUES(3);
    INSERT INTO t3 VALUES(4);
    INSERT INTO t3 VALUES(5);
    INSERT INTO t3 VALUES(6);
    INSERT INTO t3 VALUES(7);
    INSERT INTO t3 VALUES(8);
    INSERT INTO t3 VALUES(9);
    INSERT INTO t3 VALUES(10);
    INSERT INTO t3 VALUES(11);
    INSERT INTO t3 VALUES(12);
    INSERT INTO t3 VALUES(13);
    INSERT INTO t3 VALUES(14);
    INSERT INTO t3 VALUES(15);
    INSERT INTO t3 VALUES(16);
    INSERT INTO t3 VALUES(17);
    INSERT INTO t3 VALUES(18);
    INSERT INTO t3 VALUES(30);
    INSERT INTO t3 VALUES(31);
    INSERT INTO t3 VALUES(32);
    INSERT INTO t3 VALUES(33);
    INSERT INTO t3 VALUES(34);
    INSERT INTO t3 VALUES(-30);
    INSERT INTO t3 VALUES(-31);
    INSERT INTO t3 VALUES(-32);
    INSERT INTO t3 VALUES(-33);
    INSERT INTO t3 VALUES(-34);
    INSERT INTO t3 VALUES(62);
    INSERT INTO t3 VALUES(63);
    INSERT INTO t3 VALUES(64);
    INSERT INTO t3 VALUES(65);
    INSERT INTO t3 VALUES(66);
    INSERT INTO t3 VALUES(-62);
    INSERT INTO t3 VALUES(-63);
    INSERT INTO t3 VALUES(-64);
    INSERT INTO t3 VALUES(-65);
    INSERT INTO t3 VALUES(-66);
    INSERT INTO t3 VALUES(126);
    INSERT INTO t3 VALUES(127);
    INSERT INTO t3 VALUES(128);
    INSERT INTO t3 VALUES(129);
    INSERT INTO t3 VALUES(130);
    INSERT INTO t3 VALUES(-126);
    INSERT INTO t3 VALUES(-127);
    INSERT INTO t3 VALUES(-128);
    INSERT INTO t3 VALUES(-129);
    INSERT INTO t3 VALUES(-130);
    INSERT INTO t3 VALUES(254);
    INSERT INTO t3 VALUES(255);
    INSERT INTO t3 VALUES(256);
    INSERT INTO t3 VALUES(257);
    INSERT INTO t3 VALUES(258);
    INSERT INTO t3 VALUES(-254);
    INSERT INTO t3 VALUES(-255);
    INSERT INTO t3 VALUES(-256);
    INSERT INTO t3 VALUES(-257);
    INSERT INTO t3 VALUES(-258);
    INSERT INTO t3 VALUES(510);
    INSERT INTO t3 VALUES(511);
    INSERT INTO t3 VALUES(512);
    INSERT INTO t3 VALUES(513);
    INSERT INTO t3 VALUES(514);
    INSERT INTO t3 VALUES(-510);
    INSERT INTO t3 VALUES(-511);
    INSERT INTO t3 VALUES(-512);
    INSERT INTO t3 VALUES(-513);
    INSERT INTO t3 VALUES(-514);
    INSERT INTO t3 VALUES(1022);
    INSERT INTO t3 VALUES(1023);
    INSERT INTO t3 VALUES(1024);
    INSERT INTO t3 VALUES(1025);
    INSERT INTO t3 VALUES(1026);
    INSERT INTO t3 VALUES(-1022);
    INSERT INTO t3 VALUES(-1023);
    INSERT INTO t3 VALUES(-1024);
    INSERT INTO t3 VALUES(-1025);
    INSERT INTO t3 VALUES(-1026);
    INSERT INTO t3 VALUES(2046);
    INSERT INTO t3 VALUES(2047);
    INSERT INTO t3 VALUES(2048);
    INSERT INTO t3 VALUES(2049);
    INSERT INTO t3 VALUES(2050);
    INSERT INTO t3 VALUES(-2046);
    INSERT INTO t3 VALUES(-2047);
    INSERT INTO t3 VALUES(-2048);
    INSERT INTO t3 VALUES(-2049);
    INSERT INTO t3 VALUES(-2050);
    INSERT INTO t3 VALUES(4094);
    INSERT INTO t3 VALUES(4095);
    INSERT INTO t3 VALUES(4096);
    INSERT INTO t3 VALUES(4097);
    INSERT INTO t3 VALUES(4098);
    INSERT INTO t3 VALUES(-4094);
    INSERT INTO t3 VALUES(-4095);
    INSERT INTO t3 VALUES(-4096);
    INSERT INTO t3 VALUES(-4097);
    INSERT INTO t3 VALUES(-4098);
    INSERT INTO t3 VALUES(8190);
    INSERT INTO t3 VALUES(8191);
    INSERT INTO t3 VALUES(8192);
    INSERT INTO t3 VALUES(8193);
    INSERT INTO t3 VALUES(8194);
    INSERT INTO t3 VALUES(-8190);
    INSERT INTO t3 VALUES(-8191);
    INSERT INTO t3 VALUES(-8192);
    INSERT INTO t3 VALUES(-8193);
    INSERT INTO t3 VALUES(-8194);
    INSERT INTO t3 VALUES(16382);
    INSERT INTO t3 VALUES(16383);
    INSERT INTO t3 VALUES(16384);
    INSERT INTO t3 VALUES(16385);
    INSERT INTO t3 VALUES(16386);
    INSERT INTO t3 VALUES(-16382);
    INSERT INTO t3 VALUES(-16383);
    INSERT INTO t3 VALUES(-16384);
    INSERT INTO t3 VALUES(-16385);
    INSERT INTO t3 VALUES(-16386);
    INSERT INTO t3 VALUES(32766);
    INSERT INTO t3 VALUES(32767);
    INSERT INTO t3 VALUES(32768);
    INSERT INTO t3 VALUES(32769);
    INSERT INTO t3 VALUES(32770);
    INSERT INTO t3 VALUES(-32766);
    INSERT INTO t3 VALUES(-32767);
    INSERT INTO t3 VALUES(-32768);
    INSERT INTO t3 VALUES(-32769);
    INSERT INTO t3 VALUES(-32770);
    INSERT INTO t3 VALUES(65534);
    INSERT INTO t3 VALUES(65535);
    INSERT INTO t3 VALUES(65536);
    INSERT INTO t3 VALUES(65537);
    INSERT INTO t3 VALUES(65538);
    INSERT INTO t3 VALUES(-65534);
    INSERT INTO t3 VALUES(-65535);
    INSERT INTO t3 VALUES(-65536);
    INSERT INTO t3 VALUES(-65537);
    INSERT INTO t3 VALUES(-65538);
    INSERT INTO t3 VALUES(131070);
    INSERT INTO t3 VALUES(131071);
    INSERT INTO t3 VALUES(131072);
    INSERT INTO t3 VALUES(131073);
    INSERT INTO t3 VALUES(131074);
    INSERT INTO t3 VALUES(-131070);
    INSERT INTO t3 VALUES(-131071);
    INSERT INTO t3 VALUES(-131072);
    INSERT INTO t3 VALUES(-131073);
    INSERT INTO t3 VALUES(-131074);
    INSERT INTO t3 VALUES(262142);
    INSERT INTO t3 VALUES(262143);
    INSERT INTO t3 VALUES(262144);
    INSERT INTO t3 VALUES(262145);
    INSERT INTO t3 VALUES(262146);
    INSERT INTO t3 VALUES(-262142);
    INSERT INTO t3 VALUES(-262143);
    INSERT INTO t3 VALUES(-262144);
    INSERT INTO t3 VALUES(-262145);
    INSERT INTO t3 VALUES(-262146);
    INSERT INTO t3 VALUES(524286);
    INSERT INTO t3 VALUES(524287);
    INSERT INTO t3 VALUES(524288);
    INSERT INTO t3 VALUES(524289);
    INSERT INTO t3 VALUES(524290);
    INSERT INTO t3 VALUES(-524286);
    INSERT INTO t3 VALUES(-524287);
    INSERT INTO t3 VALUES(-524288);
    INSERT INTO t3 VALUES(-524289);
    INSERT INTO t3 VALUES(-524290);
    INSERT INTO t3 VALUES(1048574);
    INSERT INTO t3 VALUES(1048575);
    INSERT INTO t3 VALUES(1048576);
    INSERT INTO t3 VALUES(1048577);
    INSERT INTO t3 VALUES(1048578);
    INSERT INTO t3 VALUES(-1048574);
    INSERT INTO t3 VALUES(-1048575);
    INSERT INTO t3 VALUES(-1048576);
    INSERT INTO t3 VALUES(-1048577);
    INSERT INTO t3 VALUES(-1048578);
    INSERT INTO t3 VALUES(2097150);
    INSERT INTO t3 VALUES(2097151);
    INSERT INTO t3 VALUES(2097152);
    INSERT INTO t3 VALUES(2097153);
    INSERT INTO t3 VALUES(2097154);
    INSERT INTO t3 VALUES(-2097150);
    INSERT INTO t3 VALUES(-2097151);
    INSERT INTO t3 VALUES(-2097152);
    INSERT INTO t3 VALUES(-2097153);
    INSERT INTO t3 VALUES(-2097154);
    INSERT INTO t3 VALUES(4194302);
    INSERT INTO t3 VALUES(4194303);
    INSERT INTO t3 VALUES(4194304);
    INSERT INTO t3 VALUES(4194305);
    INSERT INTO t3 VALUES(4194306);
    INSERT INTO t3 VALUES(-4194302);
    INSERT INTO t3 VALUES(-4194303);
    INSERT INTO t3 VALUES(-4194304);
    INSERT INTO t3 VALUES(-4194305);
    INSERT INTO t3 VALUES(-4194306);
    INSERT INTO t3 VALUES(8388606);
    INSERT INTO t3 VALUES(8388607);
    INSERT INTO t3 VALUES(8388608);
    INSERT INTO t3 VALUES(8388609);
    INSERT INTO t3 VALUES(8388610);
    INSERT INTO t3 VALUES(-8388606);
    INSERT INTO t3 VALUES(-8388607);
    INSERT INTO t3 VALUES(-8388608);
    INSERT INTO t3 VALUES(-8388609);
    INSERT INTO t3 VALUES(-8388610);
    INSERT INTO t3 VALUES(16777214);
    INSERT INTO t3 VALUES(16777215);
    INSERT INTO t3 VALUES(16777216);
    INSERT INTO t3 VALUES(16777217);
    INSERT INTO t3 VALUES(16777218);
    INSERT INTO t3 VALUES(-16777214);
    INSERT INTO t3 VALUES(-16777215);
    INSERT INTO t3 VALUES(-16777216);
    INSERT INTO t3 VALUES(-16777217);
    INSERT INTO t3 VALUES(-16777218);
    INSERT INTO t3 VALUES(33554430);
    INSERT INTO t3 VALUES(33554431);
    INSERT INTO t3 VALUES(33554432);
    INSERT INTO t3 VALUES(33554433);
    INSERT INTO t3 VALUES(33554434);
    INSERT INTO t3 VALUES(-33554430);
    INSERT INTO t3 VALUES(-33554431);
    INSERT INTO t3 VALUES(-33554432);
    INSERT INTO t3 VALUES(-33554433);
    INSERT INTO t3 VALUES(-33554434);
    INSERT INTO t3 VALUES(67108862);
    INSERT INTO t3 VALUES(67108863);
    INSERT INTO t3 VALUES(67108864);
    INSERT INTO t3 VALUES(67108865);
    INSERT INTO t3 VALUES(67108866);
    INSERT INTO t3 VALUES(-67108862);
    INSERT INTO t3 VALUES(-67108863);
    INSERT INTO t3 VALUES(-67108864);
    INSERT INTO t3 VALUES(-67108865);
    INSERT INTO t3 VALUES(-67108866);
    INSERT INTO t3 VALUES(134217726);
    INSERT INTO t3 VALUES(134217727);
    INSERT INTO t3 VALUES(134217728);
    INSERT INTO t3 VALUES(134217729);
    INSERT INTO t3 VALUES(134217730);
    INSERT INTO t3 VALUES(-134217726);
    INSERT INTO t3 VALUES(-134217727);
    INSERT INTO t3 VALUES(-134217728);
    INSERT INTO t3 VALUES(-134217729);
    INSERT INTO t3 VALUES(-134217730);
    INSERT INTO t3 VALUES(268435454);
    INSERT INTO t3 VALUES(268435455);
    INSERT INTO t3 VALUES(268435456);
    INSERT INTO t3 VALUES(268435457);
    INSERT INTO t3 VALUES(268435458);
    INSERT INTO t3 VALUES(-268435454);
    INSERT INTO t3 VALUES(-268435455);
    INSERT INTO t3 VALUES(-268435456);
    INSERT INTO t3 VALUES(-268435457);
    INSERT INTO t3 VALUES(-268435458);
    INSERT INTO t3 VALUES(536870910);
    INSERT INTO t3 VALUES(536870911);
    INSERT INTO t3 VALUES(536870912);
    INSERT INTO t3 VALUES(536870913);
    INSERT INTO t3 VALUES(536870914);
    INSERT INTO t3 VALUES(-536870910);
    INSERT INTO t3 VALUES(-536870911);
    INSERT INTO t3 VALUES(-536870912);
    INSERT INTO t3 VALUES(-536870913);
    INSERT INTO t3 VALUES(-536870914);
    INSERT INTO t3 VALUES(1073741822);
    INSERT INTO t3 VALUES(1073741823);
    INSERT INTO t3 VALUES(1073741824);
    INSERT INTO t3 VALUES(1073741825);
    INSERT INTO t3 VALUES(1073741826);
    INSERT INTO t3 VALUES(-1073741822);
    INSERT INTO t3 VALUES(-1073741823);
    INSERT INTO t3 VALUES(-1073741824);
    INSERT INTO t3 VALUES(-1073741825);
    INSERT INTO t3 VALUES(-1073741826);
    INSERT INTO t3 VALUES(2147483646);
    INSERT INTO t3 VALUES(2147483647);
    INSERT INTO t3 VALUES(2147483648);
    INSERT INTO t3 VALUES(2147483649);
    INSERT INTO t3 VALUES(2147483650);
    INSERT INTO t3 VALUES(-2147483646);
    INSERT INTO t3 VALUES(-2147483647);
    INSERT INTO t3 VALUES(-2147483648);
    INSERT INTO t3 VALUES(-2147483649);
    INSERT INTO t3 VALUES(-2147483650);
    INSERT INTO t3 VALUES(4294967294);
    INSERT INTO t3 VALUES(4294967295);
    INSERT INTO t3 VALUES(4294967296);
    INSERT INTO t3 VALUES(4294967297);
    INSERT INTO t3 VALUES(4294967298);
    INSERT INTO t3 VALUES(-4294967294);
    INSERT INTO t3 VALUES(-4294967295);
    INSERT INTO t3 VALUES(-4294967296);
    INSERT INTO t3 VALUES(-4294967297);
    INSERT INTO t3 VALUES(-4294967298);
    INSERT INTO t3 VALUES(8589934590);
    INSERT INTO t3 VALUES(8589934591);
    INSERT INTO t3 VALUES(8589934592);
    INSERT INTO t3 VALUES(8589934593);
    INSERT INTO t3 VALUES(8589934594);
    INSERT INTO t3 VALUES(-8589934590);
    INSERT INTO t3 VALUES(-8589934591);
    INSERT INTO t3 VALUES(-8589934592);
    INSERT INTO t3 VALUES(-8589934593);
    INSERT INTO t3 VALUES(-8589934594);
    INSERT INTO t3 VALUES(17179869182);
    INSERT INTO t3 VALUES(17179869183);
    INSERT INTO t3 VALUES(17179869184);
    INSERT INTO t3 VALUES(17179869185);
    INSERT INTO t3 VALUES(17179869186);
    INSERT INTO t3 VALUES(-17179869182);
    INSERT INTO t3 VALUES(-17179869183);
    INSERT INTO t3 VALUES(-17179869184);
    INSERT INTO t3 VALUES(-17179869185);
    INSERT INTO t3 VALUES(-17179869186);
    INSERT INTO t3 VALUES(34359738366);
    INSERT INTO t3 VALUES(34359738367);
    INSERT INTO t3 VALUES(34359738368);
    INSERT INTO t3 VALUES(34359738369);
    INSERT INTO t3 VALUES(34359738370);
    INSERT INTO t3 VALUES(-34359738366);
    INSERT INTO t3 VALUES(-34359738367);
    INSERT INTO t3 VALUES(-34359738368);
    INSERT INTO t3 VALUES(-34359738369);
    INSERT INTO t3 VALUES(-34359738370);
    INSERT INTO t3 VALUES(68719476734);
    INSERT INTO t3 VALUES(68719476735);
    INSERT INTO t3 VALUES(68719476736);
    INSERT INTO t3 VALUES(68719476737);
    INSERT INTO t3 VALUES(68719476738);
    INSERT INTO t3 VALUES(-68719476734);
    INSERT INTO t3 VALUES(-68719476735);
    INSERT INTO t3 VALUES(-68719476736);
    INSERT INTO t3 VALUES(-68719476737);
    INSERT INTO t3 VALUES(-68719476738);
    INSERT INTO t3 VALUES(137438953470);
    INSERT INTO t3 VALUES(137438953471);
    INSERT INTO t3 VALUES(137438953472);
    INSERT INTO t3 VALUES(137438953473);
    INSERT INTO t3 VALUES(137438953474);
    INSERT INTO t3 VALUES(-137438953470);
    INSERT INTO t3 VALUES(-137438953471);
    INSERT INTO t3 VALUES(-137438953472);
    INSERT INTO t3 VALUES(-137438953473);
    INSERT INTO t3 VALUES(-137438953474);
    INSERT INTO t3 VALUES(274877906942);
    INSERT INTO t3 VALUES(274877906943);
    INSERT INTO t3 VALUES(274877906944);
    INSERT INTO t3 VALUES(274877906945);
    INSERT INTO t3 VALUES(274877906946);
    INSERT INTO t3 VALUES(-274877906942);
    INSERT INTO t3 VALUES(-274877906943);
    INSERT INTO t3 VALUES(-274877906944);
    INSERT INTO t3 VALUES(-274877906945);
    INSERT INTO t3 VALUES(-274877906946);
    INSERT INTO t3 VALUES(549755813886);
    INSERT INTO t3 VALUES(549755813887);
    INSERT INTO t3 VALUES(549755813888);
    INSERT INTO t3 VALUES(549755813889);
    INSERT INTO t3 VALUES(549755813890);
    INSERT INTO t3 VALUES(-549755813886);
    INSERT INTO t3 VALUES(-549755813887);
    INSERT INTO t3 VALUES(-549755813888);
    INSERT INTO t3 VALUES(-549755813889);
    INSERT INTO t3 VALUES(-549755813890);
    INSERT INTO t3 VALUES(1099511627774);
    INSERT INTO t3 VALUES(1099511627775);
    INSERT INTO t3 VALUES(1099511627776);
    INSERT INTO t3 VALUES(1099511627777);
    INSERT INTO t3 VALUES(1099511627778);
    INSERT INTO t3 VALUES(-1099511627774);
    INSERT INTO t3 VALUES(-1099511627775);
    INSERT INTO t3 VALUES(-1099511627776);
    INSERT INTO t3 VALUES(-1099511627777);
    INSERT INTO t3 VALUES(-1099511627778);
    INSERT INTO t3 VALUES(2199023255550);
    INSERT INTO t3 VALUES(2199023255551);
    INSERT INTO t3 VALUES(2199023255552);
    INSERT INTO t3 VALUES(2199023255553);
    INSERT INTO t3 VALUES(2199023255554);
    INSERT INTO t3 VALUES(-2199023255550);
    INSERT INTO t3 VALUES(-2199023255551);
    INSERT INTO t3 VALUES(-2199023255552);
    INSERT INTO t3 VALUES(-2199023255553);
    INSERT INTO t3 VALUES(-2199023255554);
    INSERT INTO t3 VALUES(4398046511102);
    INSERT INTO t3 VALUES(4398046511103);
    INSERT INTO t3 VALUES(4398046511104);
    INSERT INTO t3 VALUES(4398046511105);
    INSERT INTO t3 VALUES(4398046511106);
    INSERT INTO t3 VALUES(-4398046511102);
    INSERT INTO t3 VALUES(-4398046511103);
    INSERT INTO t3 VALUES(-4398046511104);
    INSERT INTO t3 VALUES(-4398046511105);
    INSERT INTO t3 VALUES(-4398046511106);
    INSERT INTO t3 VALUES(8796093022206);
    INSERT INTO t3 VALUES(8796093022207);
    INSERT INTO t3 VALUES(8796093022208);
    INSERT INTO t3 VALUES(8796093022209);
    INSERT INTO t3 VALUES(8796093022210);
    INSERT INTO t3 VALUES(-8796093022206);
    INSERT INTO t3 VALUES(-8796093022207);
    INSERT INTO t3 VALUES(-8796093022208);
    INSERT INTO t3 VALUES(-8796093022209);
    INSERT INTO t3 VALUES(-8796093022210);
    INSERT INTO t3 VALUES(17592186044414);
    INSERT INTO t3 VALUES(17592186044415);
    INSERT INTO t3 VALUES(17592186044416);
    INSERT INTO t3 VALUES(17592186044417);
    INSERT INTO t3 VALUES(17592186044418);
    INSERT INTO t3 VALUES(-17592186044414);
    INSERT INTO t3 VALUES(-17592186044415);
    INSERT INTO t3 VALUES(-17592186044416);
    INSERT INTO t3 VALUES(-17592186044417);
    INSERT INTO t3 VALUES(-17592186044418);
    INSERT INTO t3 VALUES(35184372088830);
    INSERT INTO t3 VALUES(35184372088831);
    INSERT INTO t3 VALUES(35184372088832);
    INSERT INTO t3 VALUES(35184372088833);
    INSERT INTO t3 VALUES(35184372088834);
    INSERT INTO t3 VALUES(-35184372088830);
    INSERT INTO t3 VALUES(-35184372088831);
    INSERT INTO t3 VALUES(-35184372088832);
    INSERT INTO t3 VALUES(-35184372088833);
    INSERT INTO t3 VALUES(-35184372088834);
    INSERT INTO t3 VALUES(70368744177662);
    INSERT INTO t3 VALUES(70368744177663);
    INSERT INTO t3 VALUES(70368744177664);
    INSERT INTO t3 VALUES(70368744177665);
    INSERT INTO t3 VALUES(70368744177666);
    INSERT INTO t3 VALUES(-70368744177662);
    INSERT INTO t3 VALUES(-70368744177663);
    INSERT INTO t3 VALUES(-70368744177664);
    INSERT INTO t3 VALUES(-70368744177665);
    INSERT INTO t3 VALUES(-70368744177666);
    INSERT INTO t3 VALUES(140737488355326);
    INSERT INTO t3 VALUES(140737488355327);
    INSERT INTO t3 VALUES(140737488355328);
    INSERT INTO t3 VALUES(140737488355329);
    INSERT INTO t3 VALUES(140737488355330);
    INSERT INTO t3 VALUES(-140737488355326);
    INSERT INTO t3 VALUES(-140737488355327);
    INSERT INTO t3 VALUES(-140737488355328);
    INSERT INTO t3 VALUES(-140737488355329);
    INSERT INTO t3 VALUES(-140737488355330);
    INSERT INTO t3 VALUES(281474976710654);
    INSERT INTO t3 VALUES(281474976710655);
    INSERT INTO t3 VALUES(281474976710656);
    INSERT INTO t3 VALUES(281474976710657);
    INSERT INTO t3 VALUES(281474976710658);
    INSERT INTO t3 VALUES(-281474976710654);
    INSERT INTO t3 VALUES(-281474976710655);
    INSERT INTO t3 VALUES(-281474976710656);
    INSERT INTO t3 VALUES(-281474976710657);
    INSERT INTO t3 VALUES(-281474976710658);
    INSERT INTO t3 VALUES(562949953421310);
    INSERT INTO t3 VALUES(562949953421311);
    INSERT INTO t3 VALUES(562949953421312);
    INSERT INTO t3 VALUES(562949953421313);
    INSERT INTO t3 VALUES(562949953421314);
    INSERT INTO t3 VALUES(-562949953421310);
    INSERT INTO t3 VALUES(-562949953421311);
    INSERT INTO t3 VALUES(-562949953421312);
    INSERT INTO t3 VALUES(-562949953421313);
    INSERT INTO t3 VALUES(-562949953421314);
    INSERT INTO t3 VALUES(1125899906842622);
    INSERT INTO t3 VALUES(1125899906842623);
    INSERT INTO t3 VALUES(1125899906842624);
    INSERT INTO t3 VALUES(1125899906842625);
    INSERT INTO t3 VALUES(1125899906842626);
    INSERT INTO t3 VALUES(-1125899906842622);
    INSERT INTO t3 VALUES(-1125899906842623);
    INSERT INTO t3 VALUES(-1125899906842624);
    INSERT INTO t3 VALUES(-1125899906842625);
    INSERT INTO t3 VALUES(-1125899906842626);
    INSERT INTO t3 VALUES(2251799813685246);
    INSERT INTO t3 VALUES(2251799813685247);
    INSERT INTO t3 VALUES(2251799813685248);
    INSERT INTO t3 VALUES(2251799813685249);
    INSERT INTO t3 VALUES(2251799813685250);
    INSERT INTO t3 VALUES(-2251799813685246);
    INSERT INTO t3 VALUES(-2251799813685247);
    INSERT INTO t3 VALUES(-2251799813685248);
    INSERT INTO t3 VALUES(-2251799813685249);
    INSERT INTO t3 VALUES(-2251799813685250);
    INSERT INTO t3 VALUES(4503599627370494);
    INSERT INTO t3 VALUES(4503599627370495);
    INSERT INTO t3 VALUES(4503599627370496);
    INSERT INTO t3 VALUES(4503599627370497);
    INSERT INTO t3 VALUES(4503599627370498);
    INSERT INTO t3 VALUES(-4503599627370494);
    INSERT INTO t3 VALUES(-4503599627370495);
    INSERT INTO t3 VALUES(-4503599627370496);
    INSERT INTO t3 VALUES(-4503599627370497);
    INSERT INTO t3 VALUES(-4503599627370498);
    INSERT INTO t3 VALUES(9007199254740990);
    INSERT INTO t3 VALUES(9007199254740991);
    INSERT INTO t3 VALUES(9007199254740992);
    INSERT INTO t3 VALUES(9007199254740993);
    INSERT INTO t3 VALUES(9007199254740994);
    INSERT INTO t3 VALUES(-9007199254740990);
    INSERT INTO t3 VALUES(-9007199254740991);
    INSERT INTO t3 VALUES(-9007199254740992);
    INSERT INTO t3 VALUES(-9007199254740993);
    INSERT INTO t3 VALUES(-9007199254740994);
    INSERT INTO t3 VALUES(18014398509481982);
    INSERT INTO t3 VALUES(18014398509481983);
    INSERT INTO t3 VALUES(18014398509481984);
    INSERT INTO t3 VALUES(18014398509481985);
    INSERT INTO t3 VALUES(18014398509481986);
    INSERT INTO t3 VALUES(-18014398509481982);
    INSERT INTO t3 VALUES(-18014398509481983);
    INSERT INTO t3 VALUES(-18014398509481984);
    INSERT INTO t3 VALUES(-18014398509481985);
    INSERT INTO t3 VALUES(-18014398509481986);
    INSERT INTO t3 VALUES(36028797018963966);
    INSERT INTO t3 VALUES(36028797018963967);
    INSERT INTO t3 VALUES(36028797018963968);
    INSERT INTO t3 VALUES(36028797018963969);
    INSERT INTO t3 VALUES(36028797018963970);
    INSERT INTO t3 VALUES(-36028797018963966);
    INSERT INTO t3 VALUES(-36028797018963967);
    INSERT INTO t3 VALUES(-36028797018963968);
    INSERT INTO t3 VALUES(-36028797018963969);
    INSERT INTO t3 VALUES(-36028797018963970);
    INSERT INTO t3 VALUES(72057594037927934);
    INSERT INTO t3 VALUES(72057594037927935);
    INSERT INTO t3 VALUES(72057594037927936);
    INSERT INTO t3 VALUES(72057594037927937);
    INSERT INTO t3 VALUES(72057594037927938);
    INSERT INTO t3 VALUES(-72057594037927934);
    INSERT INTO t3 VALUES(-72057594037927935);
    INSERT INTO t3 VALUES(-72057594037927936);
    INSERT INTO t3 VALUES(-72057594037927937);
    INSERT INTO t3 VALUES(-72057594037927938);
    INSERT INTO t3 VALUES(144115188075855870);
    INSERT INTO t3 VALUES(144115188075855871);
    INSERT INTO t3 VALUES(144115188075855872);
    INSERT INTO t3 VALUES(144115188075855873);
    INSERT INTO t3 VALUES(144115188075855874);
    INSERT INTO t3 VALUES(-144115188075855870);
    INSERT INTO t3 VALUES(-144115188075855871);
    INSERT INTO t3 VALUES(-144115188075855872);
    INSERT INTO t3 VALUES(-144115188075855873);
    INSERT INTO t3 VALUES(-144115188075855874);
    INSERT INTO t3 VALUES(288230376151711742);
    INSERT INTO t3 VALUES(288230376151711743);
    INSERT INTO t3 VALUES(288230376151711744);
    INSERT INTO t3 VALUES(288230376151711745);
    INSERT INTO t3 VALUES(288230376151711746);
    INSERT INTO t3 VALUES(-288230376151711742);
    INSERT INTO t3 VALUES(-288230376151711743);
    INSERT INTO t3 VALUES(-288230376151711744);
    INSERT INTO t3 VALUES(-288230376151711745);
    INSERT INTO t3 VALUES(-288230376151711746);
    INSERT INTO t3 VALUES(576460752303423486);
    INSERT INTO t3 VALUES(576460752303423487);
    INSERT INTO t3 VALUES(576460752303423488);
    INSERT INTO t3 VALUES(576460752303423489);
    INSERT INTO t3 VALUES(576460752303423490);
    INSERT INTO t3 VALUES(-576460752303423486);
    INSERT INTO t3 VALUES(-576460752303423487);
    INSERT INTO t3 VALUES(-576460752303423488);
    INSERT INTO t3 VALUES(-576460752303423489);
    INSERT INTO t3 VALUES(-576460752303423490);
    INSERT INTO t3 VALUES(1152921504606846974);
    INSERT INTO t3 VALUES(1152921504606846975);
    INSERT INTO t3 VALUES(1152921504606846976);
    INSERT INTO t3 VALUES(1152921504606846977);
    INSERT INTO t3 VALUES(1152921504606846978);
    INSERT INTO t3 VALUES(-1152921504606846974);
    INSERT INTO t3 VALUES(-1152921504606846975);
    INSERT INTO t3 VALUES(-1152921504606846976);
    INSERT INTO t3 VALUES(-1152921504606846977);
    INSERT INTO t3 VALUES(-1152921504606846978);
    INSERT INTO t3 VALUES(2305843009213693950);
    INSERT INTO t3 VALUES(2305843009213693951);
    INSERT INTO t3 VALUES(2305843009213693952);
    INSERT INTO t3 VALUES(2305843009213693953);
    INSERT INTO t3 VALUES(2305843009213693954);
    INSERT INTO t3 VALUES(-2305843009213693950);
    INSERT INTO t3 VALUES(-2305843009213693951);
    INSERT INTO t3 VALUES(-2305843009213693952);
    INSERT INTO t3 VALUES(-2305843009213693953);
    INSERT INTO t3 VALUES(-2305843009213693954);
    INSERT INTO t3 VALUES(4611686018427387902);
    INSERT INTO t3 VALUES(4611686018427387903);
    INSERT INTO t3 VALUES(4611686018427387904);
    INSERT INTO t3 VALUES(4611686018427387905);
    INSERT INTO t3 VALUES(4611686018427387906);
    INSERT INTO t3 VALUES(-4611686018427387902);
    INSERT INTO t3 VALUES(-4611686018427387903);
    INSERT INTO t3 VALUES(-4611686018427387904);
    INSERT INTO t3 VALUES(-4611686018427387905);
    INSERT INTO t3 VALUES(-4611686018427387906);
    INSERT INTO t3 VALUES(9223372036854775806);
    INSERT INTO t3 VALUES(9223372036854775807);
    INSERT INTO t3 VALUES(-9223372036854775806);
    INSERT INTO t3 VALUES(-9223372036854775807);
    INSERT INTO t3 VALUES(-9223372036854775808);
    SELECT x FROM t3 ORDER BY x;
  }
} {-9223372036854775808\
-9223372036854775807\
-9223372036854775806\
-4611686018427387906\
-4611686018427387905\
-4611686018427387904\
-4611686018427387903\
-4611686018427387902\
-2305843009213693954\
-2305843009213693953\
-2305843009213693952\
-2305843009213693951\
-2305843009213693950\
-1152921504606846978\
-1152921504606846977\
-1152921504606846976\
-1152921504606846975\
-1152921504606846974\
-576460752303423490\
-576460752303423489\
-576460752303423488\
-576460752303423487\
-576460752303423486\
-288230376151711746\
-288230376151711745\
-288230376151711744\
-288230376151711743\
-288230376151711742\
-144115188075855874\
-144115188075855873\
-144115188075855872\
-144115188075855871\
-144115188075855870\
-72057594037927938\
-72057594037927937\
-72057594037927936\
-72057594037927935\
-72057594037927934\
-36028797018963970\
-36028797018963969\
-36028797018963968\
-36028797018963967\
-36028797018963966\
-18014398509481986\
-18014398509481985\
-18014398509481984\
-18014398509481983\
-18014398509481982\
-9007199254740994\
-9007199254740993\
-9007199254740992\
-9007199254740991\
-9007199254740990\
-4503599627370498\
-4503599627370497\
-4503599627370496\
-4503599627370495\
-4503599627370494\
-2251799813685250\
-2251799813685249\
-2251799813685248\
-2251799813685247\
-2251799813685246\
-1125899906842626\
-1125899906842625\
-1125899906842624\
-1125899906842623\
-1125899906842622\
-562949953421314\
-562949953421313\
-562949953421312\
-562949953421311\
-562949953421310\
-281474976710658\
-281474976710657\
-281474976710656\
-281474976710655\
-281474976710654\
-140737488355330\
-140737488355329\
-140737488355328\
-140737488355327\
-140737488355326\
-70368744177666\
-70368744177665\
-70368744177664\
-70368744177663\
-70368744177662\
-35184372088834\
-35184372088833\
-35184372088832\
-35184372088831\
-35184372088830\
-17592186044418\
-17592186044417\
-17592186044416\
-17592186044415\
-17592186044414\
-8796093022210\
-8796093022209\
-8796093022208\
-8796093022207\
-8796093022206\
-4398046511106\
-4398046511105\
-4398046511104\
-4398046511103\
-4398046511102\
-2199023255554\
-2199023255553\
-2199023255552\
-2199023255551\
-2199023255550\
-1099511627778\
-1099511627777\
-1099511627776\
-1099511627775\
-1099511627774\
-549755813890\
-549755813889\
-549755813888\
-549755813887\
-549755813886\
-274877906946\
-274877906945\
-274877906944\
-274877906943\
-274877906942\
-137438953474\
-137438953473\
-137438953472\
-137438953471\
-137438953470\
-68719476738\
-68719476737\
-68719476736\
-68719476735\
-68719476734\
-34359738370\
-34359738369\
-34359738368\
-34359738367\
-34359738366\
-17179869186\
-17179869185\
-17179869184\
-17179869183\
-17179869182\
-8589934594\
-8589934593\
-8589934592\
-8589934591\
-8589934590\
-4294967298\
-4294967297\
-4294967296\
-4294967295\
-4294967294\
-2147483650\
-2147483649\
-2147483648\
-2147483647\
-2147483646\
-1073741826\
-1073741825\
-1073741824\
-1073741823\
-1073741822\
-536870914\
-536870913\
-536870912\
-536870911\
-536870910\
-268435458\
-268435457\
-268435456\
-268435455\
-268435454\
-134217730\
-134217729\
-134217728\
-134217727\
-134217726\
-67108866\
-67108865\
-67108864\
-67108863\
-67108862\
-33554434\
-33554433\
-33554432\
-33554431\
-33554430\
-16777218\
-16777217\
-16777216\
-16777215\
-16777214\
-8388610\
-8388609\
-8388608\
-8388607\
-8388606\
-4194306\
-4194305\
-4194304\
-4194303\
-4194302\
-2097154\
-2097153\
-2097152\
-2097151\
-2097150\
-1048578\
-1048577\
-1048576\
-1048575\
-1048574\
-524290\
-524289\
-524288\
-524287\
-524286\
-262146\
-262145\
-262144\
-262143\
-262142\
-131074\
-131073\
-131072\
-131071\
-131070\
-65538\
-65537\
-65536\
-65535\
-65534\
-32770\
-32769\
-32768\
-32767\
-32766\
-16386\
-16385\
-16384\
-16383\
-16382\
-8194\
-8193\
-8192\
-8191\
-8190\
-4098\
-4097\
-4096\
-4095\
-4094\
-2050\
-2049\
-2048\
-2047\
-2046\
-1026\
-1025\
-1024\
-1023\
-1022\
-514\
-513\
-512\
-511\
-510\
-258\
-257\
-256\
-255\
-254\
-130\
-129\
-128\
-127\
-126\
-66\
-65\
-64\
-63\
-62\
-34\
-33\
-32\
-31\
-30\
-18\
-17\
-16\
-15\
-14\
-13\
-12\
-11\
-10\
-9\
-8\
-7\
-6\
-5\
-4\
-3\
-2\
-1\
0\
1\
2\
3\
4\
5\
6\
7\
8\
9\
10\
11\
12\
13\
14\
15\
16\
17\
18\
30\
31\
32\
33\
34\
62\
63\
64\
65\
66\
126\
127\
128\
129\
130\
254\
255\
256\
257\
258\
510\
511\
512\
513\
514\
1022\
1023\
1024\
1025\
1026\
2046\
2047\
2048\
2049\
2050\
4094\
4095\
4096\
4097\
4098\
8190\
8191\
8192\
8193\
8194\
16382\
16383\
16384\
16385\
16386\
32766\
32767\
32768\
32769\
32770\
65534\
65535\
65536\
65537\
65538\
131070\
131071\
131072\
131073\
131074\
262142\
262143\
262144\
262145\
262146\
524286\
524287\
524288\
524289\
524290\
1048574\
1048575\
1048576\
1048577\
1048578\
2097150\
2097151\
2097152\
2097153\
2097154\
4194302\
4194303\
4194304\
4194305\
4194306\
8388606\
8388607\
8388608\
8388609\
8388610\
16777214\
16777215\
16777216\
16777217\
16777218\
33554430\
33554431\
33554432\
33554433\
33554434\
67108862\
67108863\
67108864\
67108865\
67108866\
134217726\
134217727\
134217728\
134217729\
134217730\
268435454\
268435455\
268435456\
268435457\
268435458\
536870910\
536870911\
536870912\
536870913\
536870914\
1073741822\
1073741823\
1073741824\
1073741825\
1073741826\
2147483646\
2147483647\
2147483648\
2147483649\
2147483650\
4294967294\
4294967295\
4294967296\
4294967297\
4294967298\
8589934590\
8589934591\
8589934592\
8589934593\
8589934594\
17179869182\
17179869183\
17179869184\
17179869185\
17179869186\
34359738366\
34359738367\
34359738368\
34359738369\
34359738370\
68719476734\
68719476735\
68719476736\
68719476737\
68719476738\
137438953470\
137438953471\
137438953472\
137438953473\
137438953474\
274877906942\
274877906943\
274877906944\
274877906945\
274877906946\
549755813886\
549755813887\
549755813888\
549755813889\
549755813890\
1099511627774\
1099511627775\
1099511627776\
1099511627777\
1099511627778\
2199023255550\
2199023255551\
2199023255552\
2199023255553\
2199023255554\
4398046511102\
4398046511103\
4398046511104\
4398046511105\
4398046511106\
8796093022206\
8796093022207\
8796093022208\
8796093022209\
8796093022210\
17592186044414\
17592186044415\
17592186044416\
17592186044417\
17592186044418\
35184372088830\
35184372088831\
35184372088832\
35184372088833\
35184372088834\
70368744177662\
70368744177663\
70368744177664\
70368744177665\
70368744177666\
140737488355326\
140737488355327\
140737488355328\
140737488355329\
140737488355330\
281474976710654\
281474976710655\
281474976710656\
281474976710657\
281474976710658\
562949953421310\
562949953421311\
562949953421312\
562949953421313\
562949953421314\
1125899906842622\
1125899906842623\
1125899906842624\
1125899906842625\
1125899906842626\
2251799813685246\
2251799813685247\
2251799813685248\
2251799813685249\
2251799813685250\
4503599627370494\
4503599627370495\
4503599627370496\
4503599627370497\
4503599627370498\
9007199254740990\
9007199254740991\
9007199254740992\
9007199254740993\
9007199254740994\
18014398509481982\
18014398509481983\
18014398509481984\
18014398509481985\
18014398509481986\
36028797018963966\
36028797018963967\
36028797018963968\
36028797018963969\
36028797018963970\
72057594037927934\
72057594037927935\
72057594037927936\
72057594037927937\
72057594037927938\
144115188075855870\
144115188075855871\
144115188075855872\
144115188075855873\
144115188075855874\
288230376151711742\
288230376151711743\
288230376151711744\
288230376151711745\
288230376151711746\
576460752303423486\
576460752303423487\
576460752303423488\
576460752303423489\
576460752303423490\
1152921504606846974\
1152921504606846975\
1152921504606846976\
1152921504606846977\
1152921504606846978\
2305843009213693950\
2305843009213693951\
2305843009213693952\
2305843009213693953\
2305843009213693954\
4611686018427387902\
4611686018427387903\
4611686018427387904\
4611686018427387905\
4611686018427387906\
9223372036854775806\
9223372036854775807}

finish_test