Untitled

mail@pastecode.io avatar
unknown
plain_text
2 months ago
888 kB
11
No Index
Never
root@server:/var/discourse# ./discourse-setup
Ports 80 and 443 are free for use
'samples/standalone.yml' -> 'containers/app.yml'
Found 4GB of memory and 4 physical CPU cores
setting db_shared_buffers = 1024MB
setting UNICORN_WORKERS = 8
containers/app.yml memory parameters updated.

Hostname for your Discourse? [discourse.example.com]: forums.domain.tld

Checking your domain name . . .
Connection to forums.domain.tld succeeded.
Email address for admin account(s)? [me@example.com,you@example.com]: <email>
SMTP server address? [smtp.example.com]: forums.domain.tld
SMTP port? [587]:
SMTP user name? [user@example.com]: noreply
SMTP password? [pa$$word]: <password>
notification email address? [noreply@forums.domain.tld]:
Optional email address for Let's Encrypt warnings? (ENTER to skip) [me@example.com]: <email>
Optional Maxmind License key (ENTER to continue without MAXMIND GeoLite2 geolocation database) [1234567890123456]: <maxmind_key>

Does this look right?

Hostname          : forums.domain.tld
Email             : <email>
SMTP address      : forums.domain.tld
SMTP port         : 587
SMTP username     : noreply
SMTP password     : <password>
Notification email: noreply@forums.domain.tld
Let's Encrypt : <email>
Maxmind license: <maxmind_key>

ENTER to continue, 'n' to try again, Ctrl+C to exit:
letsencrypt.ssl.template.yml enabled


Configuration file at containers/app.yml updated successfully!

Updates successful. Rebuilding in 5 seconds.
Building app
x86_64 arch detected.

WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed

Please be patient

2.0.20231218-0429: Pulling from discourse/base
b7f91549542c: Pulling fs layer
5cdde94355fe: Pull complete
434a387f7a80: Pull complete
0e5fc7c719a4: Pull complete
7961e0d55220: Pull complete
4f4fb700ef54: Pull complete
8b82d7bdf4f9: Pull complete
1eed080638e9: Pull complete
4f538be5ec28: Pull complete
c1785d501d24: Pull complete
bd81830e80bd: Pull complete
827b2e2e3ed5: Pull complete
8786b6008a7c: Pull complete
38bde042d779: Pull complete
6ad6d11f72f0: Pull complete
625443f7f5de: Pull complete
91ba136bdf2b: Pull complete
6cd5f4616e9f: Pull complete
6d71c539d3d7: Pull complete
adfdc80b4cd5: Pull complete
17d7850d477d: Pull complete
130866fdb8a5: Pull complete
281e1348fc3a: Pull complete
f1da19761d59: Pull complete
4aeedd43e8bd: Pull complete
cb2c595282ad: Pull complete
35fc9870d600: Pull complete
71238037e7c0: Pull complete
c143b5764eed: Pull complete
906cdb3a6da0: Pull complete
d3527541c22c: Pull complete
a6a16a7e1001: Pull complete
eb6a1c388227: Pull complete
cd562cb91c76: Pull complete
a62b13524252: Pull complete
d510eec47d7a: Pull complete
e9001e5714e9: Pull complete
f827746a2eb4: Pull complete
42b8ce37112e: Pull complete
2d9a732e38ef: Pull complete
15219e09fc41: Pull complete
927c2a1aa345: Pull complete
0c00c50ac00f: Pull complete
45f11782ebad: Pull complete
516206729574: Pull complete
Digest: sha256:468f70b9bb4c6d0c6c2bbb3efc1a5e12d145eae57bdb6946b7fe5558beb52dc1
Status: Downloaded newer image for discourse/base:2.0.20231218-0429
docker.io/discourse/base:2.0.20231218-0429
Ensuring launcher is up to date
Launcher is up-to-date
2.0.20231218-0429: Pulling from discourse/base
Digest: sha256:468f70b9bb4c6d0c6c2bbb3efc1a5e12d145eae57bdb6946b7fe5558beb52dc1
Status: Image is up to date for discourse/base:2.0.20231218-0429
docker.io/discourse/base:2.0.20231218-0429
/usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2024-03-18T01:53:21.482570 #1]  INFO -- : Reading from stdin
I, [2024-03-18T01:53:21.488924 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2024-03-18T01:53:21.554369 #1]  INFO -- : Generating locales (this might take a while)...
Generation complete.

I, [2024-03-18T01:53:21.554585 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2024-03-18T01:53:21.560371 #1]  INFO -- :
I, [2024-03-18T01:53:21.561128 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2024-03-18T01:53:21.564646 #1]  INFO -- :
I, [2024-03-18T01:53:21.564837 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2024-03-18T01:53:21.568217 #1]  INFO -- :
I, [2024-03-18T01:53:21.568359 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2024-03-18T01:53:21.572149 #1]  INFO -- :
I, [2024-03-18T01:53:21.572402 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2024-03-18T01:53:21.575792 #1]  INFO -- :
I, [2024-03-18T01:53:21.575959 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
2024/03/18 01:53:21 socat[18] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): No such file or directory
I, [2024-03-18T01:53:21.604942 #1]  INFO -- :
I, [2024-03-18T01:53:21.605157 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2024-03-18T01:53:21.609326 #1]  INFO -- :
I, [2024-03-18T01:53:21.609466 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2024-03-18T01:53:21.612864 #1]  INFO -- :
I, [2024-03-18T01:53:21.613399 #1]  INFO -- : > mkdir -p /shared/postgres_run/13-main.pg_stat_tmp
I, [2024-03-18T01:53:21.616079 #1]  INFO -- :
I, [2024-03-18T01:53:21.616367 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/13-main.pg_stat_tmp
I, [2024-03-18T01:53:21.619812 #1]  INFO -- :
I, [2024-03-18T01:53:21.626817 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown:
I, [2024-03-18T01:53:21.632508 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2024-03-18T01:53:21.638162 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2024-03-18T01:53:21.644123 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown:
I, [2024-03-18T01:53:21.644439 #1]  INFO -- : > chown -R root /var/lib/postgresql/13/main
I, [2024-03-18T01:53:22.894992 #1]  INFO -- :
I, [2024-03-18T01:53:22.895143 #1]  INFO -- : > [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data || exit 0
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
I, [2024-03-18T01:53:23.871891 #1]  INFO -- : The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /shared/postgres_data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Etc/UTC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok


Success. You can now start the database server using:

    /usr/lib/postgresql/13/bin/pg_ctl -D /shared/postgres_data -l logfile start


I, [2024-03-18T01:53:23.872081 #1]  INFO -- : > chown -R postgres:postgres /shared/postgres_data
I, [2024-03-18T01:53:23.879192 #1]  INFO -- :
I, [2024-03-18T01:53:23.879314 #1]  INFO -- : > chown -R postgres:postgres /var/run/postgresql
I, [2024-03-18T01:53:23.882893 #1]  INFO -- :
I, [2024-03-18T01:53:23.883202 #1]  INFO -- : > /root/upgrade_postgres
I, [2024-03-18T01:53:23.890476 #1]  INFO -- :
I, [2024-03-18T01:53:23.890745 #1]  INFO -- : > rm /root/upgrade_postgres
I, [2024-03-18T01:53:23.894453 #1]  INFO -- :
I, [2024-03-18T01:53:23.895824 #1]  INFO -- : Replacing data_directory = '/var/lib/postgresql/13/main' with data_directory = '/shared/postgres_data' in /etc/postgresql/13/main/postgresql.conf
I, [2024-03-18T01:53:23.896387 #1]  INFO -- : Replacing (?-mix:#?listen_addresses *=.*) with listen_addresses = '*' in /etc/postgresql/13/main/postgresql.conf
I, [2024-03-18T01:53:23.896660 #1]  INFO -- : Replacing (?-mix:#?synchronous_commit *=.*) with synchronous_commit = $db_synchronous_commit in /etc/postgresql/13/main/postgresql.conf
I, [2024-03-18T01:53:23.897943 #1]  INFO -- : Replacing (?-mix:#?shared_buffers *=.*) with shared_buffers = $db_shared_buffers in /etc/postgresql/13/main/postgresql.conf
I, [2024-03-18T01:53:23.898506 #1]  INFO -- : Replacing (?-mix:#?work_mem *=.*) with work_mem = $db_work_mem in /etc/postgresql/13/main/postgresql.conf
I, [2024-03-18T01:53:23.899505 #1]  INFO -- : Replacing (?-mix:#?default_text_search_config *=.*) with default_text_search_config = '$db_default_text_search_config' in /etc/postgresql/13/main/postgresql.conf
I, [2024-03-18T01:53:23.900405 #1]  INFO -- : > install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
I, [2024-03-18T01:53:23.904826 #1]  INFO -- :
I, [2024-03-18T01:53:23.905184 #1]  INFO -- : Replacing (?-mix:#?checkpoint_segments *=.*) with checkpoint_segments = $db_checkpoint_segments in /etc/postgresql/13/main/postgresql.conf
I, [2024-03-18T01:53:23.905592 #1]  INFO -- : Replacing (?-mix:#?logging_collector *=.*) with logging_collector = $db_logging_collector in /etc/postgresql/13/main/postgresql.conf
I, [2024-03-18T01:53:23.906113 #1]  INFO -- : Replacing (?-mix:#?log_min_duration_statement *=.*) with log_min_duration_statement = $db_log_min_duration_statement in /etc/postgresql/13/main/postgresql.conf
I, [2024-03-18T01:53:23.907668 #1]  INFO -- : Replacing (?-mix:^#local +replication +postgres +peer$) with local replication postgres  peer in /etc/postgresql/13/main/pg_hba.conf
I, [2024-03-18T01:53:23.907972 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*127.*$) with host all all 0.0.0.0/0 md5 in /etc/postgresql/13/main/pg_hba.conf
I, [2024-03-18T01:53:23.908189 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*::1\/128.*$) with host all all ::/0 md5 in /etc/postgresql/13/main/pg_hba.conf
I, [2024-03-18T01:53:23.908843 #1]  INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
I, [2024-03-18T01:53:23.911948 #1]  INFO -- : > sleep 5
2024-03-18 01:53:23.953 UTC [56] LOG:  starting PostgreSQL 13.13 (Debian 13.13-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
2024-03-18 01:53:23.956 UTC [56] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2024-03-18 01:53:23.960 UTC [56] LOG:  could not create IPv6 socket for address "::": Address family not supported by protocol
2024-03-18 01:53:23.962 UTC [56] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2024-03-18 01:53:23.969 UTC [59] LOG:  database system was shut down at 2024-03-18 01:53:23 UTC
2024-03-18 01:53:23.974 UTC [56] LOG:  database system is ready to accept connections
I, [2024-03-18T01:53:28.915964 #1]  INFO -- :
I, [2024-03-18T01:53:28.916290 #1]  INFO -- : > su postgres -c 'createdb discourse' || true
I, [2024-03-18T01:53:29.050358 #1]  INFO -- :
I, [2024-03-18T01:53:29.050645 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
I, [2024-03-18T01:53:29.104519 #1]  INFO -- : CREATE ROLE

I, [2024-03-18T01:53:29.105075 #1]  INFO -- : > su postgres -c 'psql discourse -c "grant all privileges on database discourse to discourse;"' || true
I, [2024-03-18T01:53:29.151007 #1]  INFO -- : GRANT

I, [2024-03-18T01:53:29.151388 #1]  INFO -- : > su postgres -c 'psql discourse -c "alter schema public owner to discourse;"'
I, [2024-03-18T01:53:29.205446 #1]  INFO -- : ALTER SCHEMA

I, [2024-03-18T01:53:29.205625 #1]  INFO -- : > su postgres -c 'psql template1 -c "create extension if not exists hstore;"'
I, [2024-03-18T01:53:29.279120 #1]  INFO -- : CREATE EXTENSION

I, [2024-03-18T01:53:29.279366 #1]  INFO -- : > su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
I, [2024-03-18T01:53:29.344010 #1]  INFO -- : CREATE EXTENSION

I, [2024-03-18T01:53:29.344460 #1]  INFO -- : > su postgres -c 'psql template1 -c "create extension if not exists vector;"'
I, [2024-03-18T01:53:29.403453 #1]  INFO -- : CREATE EXTENSION

I, [2024-03-18T01:53:29.403718 #1]  INFO -- : > su postgres -c 'psql discourse -c "create extension if not exists hstore;"'
I, [2024-03-18T01:53:29.466061 #1]  INFO -- : CREATE EXTENSION

I, [2024-03-18T01:53:29.466596 #1]  INFO -- : > su postgres -c 'psql discourse -c "create extension if not exists pg_trgm;"'
I, [2024-03-18T01:53:29.527184 #1]  INFO -- : CREATE EXTENSION

I, [2024-03-18T01:53:29.527432 #1]  INFO -- : > su postgres -c 'psql discourse -c "create extension if not exists vector;"'
I, [2024-03-18T01:53:29.584215 #1]  INFO -- : CREATE EXTENSION

I, [2024-03-18T01:53:29.584589 #1]  INFO -- : > sudo -u postgres psql discourse
I, [2024-03-18T01:53:29.587771 #1]  INFO -- : update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'discourse' AND encoding = pg_char_to_encoding('SQL_ASCII');

I, [2024-03-18T01:53:29.641337 #1]  INFO -- : File > /var/lib/postgresql/take-database-backup  chmod: +x  chown: postgres:postgres
I, [2024-03-18T01:53:29.645536 #1]  INFO -- : File > /var/spool/cron/crontabs/postgres  chmod:   chown:
I, [2024-03-18T01:53:29.645657 #1]  INFO -- : > echo postgres installed!
I, [2024-03-18T01:53:29.648957 #1]  INFO -- : postgres installed!

I, [2024-03-18T01:53:29.656250 #1]  INFO -- : File > /etc/service/redis/run  chmod: +x  chown:
I, [2024-03-18T01:53:29.662863 #1]  INFO -- : File > /etc/service/redis/log/run  chmod: +x  chown:
I, [2024-03-18T01:53:29.668968 #1]  INFO -- : File > /etc/runit/3.d/10-redis  chmod: +x  chown:
I, [2024-03-18T01:53:29.670258 #1]  INFO -- : Replacing daemonize yes with  in /etc/redis/redis.conf
I, [2024-03-18T01:53:29.670874 #1]  INFO -- : Replacing (?-mix:^pidfile.*$) with  in /etc/redis/redis.conf
I, [2024-03-18T01:53:29.671248 #1]  INFO -- : > install -d -m 0755 -o redis -g redis /shared/redis_data
I, [2024-03-18T01:53:29.674514 #1]  INFO -- :
I, [2024-03-18T01:53:29.675363 #1]  INFO -- : Replacing (?-mix:^logfile.*$) with logfile "" in /etc/redis/redis.conf
I, [2024-03-18T01:53:29.676148 #1]  INFO -- : Replacing (?-mix:^bind .*$) with  in /etc/redis/redis.conf
I, [2024-03-18T01:53:29.677106 #1]  INFO -- : Replacing (?-mix:^dir .*$) with dir /shared/redis_data in /etc/redis/redis.conf
I, [2024-03-18T01:53:29.677662 #1]  INFO -- : Replacing (?-mix:^protected-mode yes) with protected-mode no in /etc/redis/redis.conf
I, [2024-03-18T01:53:29.679278 #1]  INFO -- : Replacing # io-threads 4 with io-threads $redis_io_threads in /etc/redis/redis.conf
I, [2024-03-18T01:53:29.680146 #1]  INFO -- : > echo redis installed
I, [2024-03-18T01:53:29.683508 #1]  INFO -- : redis installed

I, [2024-03-18T01:53:29.683852 #1]  INFO -- : > cat /etc/redis/redis.conf | grep logfile
I, [2024-03-18T01:53:29.696275 #1]  INFO -- : logfile ""

I, [2024-03-18T01:53:29.696631 #1]  INFO -- : > exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf
I, [2024-03-18T01:53:29.699186 #1]  INFO -- : > sleep 10
125:C 18 Mar 2024 01:53:29.715 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
125:C 18 Mar 2024 01:53:29.715 # Redis version=7.0.7, bits=64, commit=00000000, modified=0, pid=125, just started
125:C 18 Mar 2024 01:53:29.715 # Configuration loaded
125:M 18 Mar 2024 01:53:29.716 * monotonic clock: POSIX clock_gettime
125:M 18 Mar 2024 01:53:29.718 # Warning: Could not create server TCP listening socket ::*:6379: unable to bind socket, errno: 97
125:M 18 Mar 2024 01:53:29.723 * Running mode=standalone, port=6379.
125:M 18 Mar 2024 01:53:29.723 # Server initialized
125:M 18 Mar 2024 01:53:29.723 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
125:M 18 Mar 2024 01:53:29.723 # WARNING Your system is configured to use the 'xen' clocksource which might lead to degraded performance. Check the result of the [slow-clocksource] system check: run 'redis-server --check-system' to check if the system's clocksource isn't degrading performance.
125:M 18 Mar 2024 01:53:29.724 * Ready to accept connections
I, [2024-03-18T01:53:39.701803 #1]  INFO -- :
I, [2024-03-18T01:53:39.702074 #1]  INFO -- : > thpoff echo "thpoff is installed!"
I, [2024-03-18T01:53:39.705908 #1]  INFO -- : thpoff is installed!

I, [2024-03-18T01:53:39.706159 #1]  INFO -- : > /usr/local/bin/ruby -e 'if ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com"; puts "Aborting! Mail is not configured!"; exit 1; end'
I, [2024-03-18T01:53:39.771228 #1]  INFO -- :
I, [2024-03-18T01:53:39.771499 #1]  INFO -- : > /usr/local/bin/ruby -e 'if ENV["DISCOURSE_HOSTNAME"] == "discourse.example.com"; puts "Aborting! Domain is not configured!"; exit 1; end'
I, [2024-03-18T01:53:39.841552 #1]  INFO -- :
I, [2024-03-18T01:53:39.841824 #1]  INFO -- : > /usr/local/bin/ruby -e 'if (ENV["DISCOURSE_CDN_URL"] || "")[0..1] == "//"; puts "Aborting! CDN must have a protocol specified. Once fixed you should rebake your posts now to correct all posts."; exit 1; end'
I, [2024-03-18T01:53:39.909596 #1]  INFO -- :
I, [2024-03-18T01:53:39.909987 #1]  INFO -- : > rm -f /etc/cron.d/anacron
I, [2024-03-18T01:53:39.914114 #1]  INFO -- :
I, [2024-03-18T01:53:39.919969 #1]  INFO -- : File > /etc/cron.d/anacron  chmod:   chown:
I, [2024-03-18T01:53:39.928628 #1]  INFO -- : File > /etc/runit/1.d/copy-env  chmod: +x  chown:
I, [2024-03-18T01:53:39.936881 #1]  INFO -- : File > /etc/service/unicorn/run  chmod: +x  chown:
I, [2024-03-18T01:53:39.944378 #1]  INFO -- : File > /etc/service/nginx/run  chmod: +x  chown:
I, [2024-03-18T01:53:39.951618 #1]  INFO -- : File > /etc/runit/3.d/01-nginx  chmod: +x  chown:
I, [2024-03-18T01:53:39.957088 #1]  INFO -- : File > /etc/runit/3.d/02-unicorn  chmod: +x  chown:
I, [2024-03-18T01:53:39.957288 #1]  INFO -- : Replacing # postgres with sv start postgres || exit 1 in /etc/service/unicorn/run
I, [2024-03-18T01:53:39.957523 #1]  INFO -- : > exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf
I, [2024-03-18T01:53:39.960522 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse git reset --hard
152:C 18 Mar 2024 01:53:39.965 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
152:C 18 Mar 2024 01:53:39.965 # Redis version=7.0.7, bits=64, commit=00000000, modified=0, pid=152, just started
152:C 18 Mar 2024 01:53:39.965 # Configuration loaded
152:M 18 Mar 2024 01:53:39.966 * monotonic clock: POSIX clock_gettime
152:M 18 Mar 2024 01:53:39.966 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
152:M 18 Mar 2024 01:53:39.966 # Failed listening on port 6379 (TCP), aborting.
Updating files: 100% (33715/33715), done.
I, [2024-03-18T01:53:43.647782 #1]  INFO -- : HEAD is now at 6ab1a19e9 DEV: Convert min_trust_level_to_allow_invite to groups (#24893)

I, [2024-03-18T01:53:43.649927 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse git clean -f
I, [2024-03-18T01:53:43.817945 #1]  INFO -- :
I, [2024-03-18T01:53:43.818088 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
'
From https://github.com/discourse/discourse
 - [deleted]             (none)     -> origin/0-assets-spec2
 - [deleted]             (none)     -> origin/0-drop-code
 - [deleted]             (none)     -> origin/0-followup
 - [deleted]             (none)     -> origin/0-gjs-iframed-html
 - [deleted]             (none)     -> origin/a11y-sidebar-contrast
 - [deleted]             (none)     -> origin/a11y–focus-tooltip
 - [deleted]             (none)     -> origin/add-ds-store-to-gitignore
 - [deleted]             (none)     -> origin/add-new-chat-indicator-preference-only-mentions
 - [deleted]             (none)     -> origin/add-topic-voting-webhook
 - [deleted]             (none)     -> origin/after-topic-list
 - [deleted]             (none)     -> origin/api-reduce-motion
 - [deleted]             (none)     -> origin/api-topic-title-decorator
 - [deleted]             (none)     -> origin/boosted-searches
 - [deleted]             (none)     -> origin/bulk-button-class
 - [deleted]             (none)     -> origin/card-container-plugin-outlet
 - [deleted]             (none)     -> origin/composer-warnings-use-notice-alt
 - [deleted]             (none)     -> origin/confirm-session-only-after-5-mins
 - [deleted]             (none)     -> origin/dependabot/bundler/excon-0.108.0
 - [deleted]             (none)     -> origin/dependabot/bundler/hashdiff-1.1.0
 - [deleted]             (none)     -> origin/dependabot/bundler/parallel-1.24.0
 - [deleted]             (none)     -> origin/dependabot/bundler/rubocop-discourse-3.6.0
 - [deleted]             (none)     -> origin/dependabot/npm_and_yarn/app/assets/javascripts/uppy/aws-s3-3.6.0
 - [deleted]             (none)     -> origin/dependabot/npm_and_yarn/app/assets/javascripts/uppy/aws-s3-multipart-3.10.0
 - [deleted]             (none)     -> origin/dependabot/npm_and_yarn/app/assets/javascripts/uppy/drop-target-2.0.2
 - [deleted]             (none)     -> origin/dependabot/npm_and_yarn/app/assets/javascripts/uppy/utils-5.7.0
 - [deleted]             (none)     -> origin/desktop-notification-handlers
 - [deleted]             (none)     -> origin/dev-rework-codeblock-fix
 - [deleted]             (none)     -> origin/dev/add-new-chat-metrics
 - [deleted]             (none)     -> origin/dev/allow-chat-mentions-to-have-several-notifications
 - [deleted]             (none)     -> origin/dev/convert-min-trust-level-to-create-tag-to-group
 - [deleted]             (none)     -> origin/dev/convert-min-trust-level-to-ignore-to-groups
 - [deleted]             (none)     -> origin/dev/dry-up-user-status-serializers
 - [deleted]             (none)     -> origin/dev/flaky-chat-details-collapser-spec
 - [deleted]             (none)     -> origin/dev/no-need-to-include-user-status-twice
 - [deleted]             (none)     -> origin/dev/rafactor-the-export-csv-file-job
 - [deleted]             (none)     -> origin/dev/rethink-mass-mentions-polymorphic
 - [deleted]             (none)     -> origin/dev/revert-guardian-devex
 - [deleted]             (none)     -> origin/dev/simplify-lib-test-js
 - [deleted]             (none)     -> origin/dev/test-status-tooltip-in-its-own-test-2
 - [deleted]             (none)     -> origin/dev/trust-level-value-object
 - [deleted]             (none)     -> origin/dev_categories
 - [deleted]             (none)     -> origin/dev_watched_words
 - [deleted]             (none)     -> origin/drop-kit
 - [deleted]             (none)     -> origin/experimantal/deleted-channel-and-messages-export
 - [deleted]             (none)     -> origin/extract_stripper
 - [deleted]             (none)     -> origin/feat-render-images-in-local-onebox
 - [deleted]             (none)     -> origin/feature/admin-sidebar-v0
 - [deleted]             (none)     -> origin/feature/experimental-passkeys
 - [deleted]             (none)     -> origin/feature/migrations-schema-generator
 - [deleted]             (none)     -> origin/feature/watched-word-groups
 - [deleted]             (none)     -> origin/feature_watched_words_validation
 - [deleted]             (none)     -> origin/filtered-events
 - [deleted]             (none)     -> origin/fix-client-tests-for-status
 - [deleted]             (none)     -> origin/fix-join-filter-upload
 - [deleted]             (none)     -> origin/fix-modal-flash-minor
 - [deleted]             (none)     -> origin/fix/count-mass-mentions-correctly
 - [deleted]             (none)     -> origin/fix/do-not-consider-codeblocks-when-parsing-mentions-alt
 - [deleted]             (none)     -> origin/fix/dont-fail-when-exporting-chat-messages-from-deleted-channels-or-of-deleted-users
 - [deleted]             (none)     -> origin/fix/multi-tag-search
 - [deleted]             (none)     -> origin/float-kit-3
 - [deleted]             (none)     -> origin/generic-import-latest-snowflake
 - [deleted]             (none)     -> origin/global-notice-reactive
 - [deleted]             (none)     -> origin/group-directory-cleanup
 - [deleted]             (none)     -> origin/issue/fix-guardian-init-basic-user
 - [deleted]             (none)     -> origin/keyword-site-setting
 - [deleted]             (none)     -> origin/labeler
 - [deleted]             (none)     -> origin/large-notification-table
 - [deleted]             (none)     -> origin/loic-use-ar-enums-posts
 - [deleted]             (none)     -> origin/low-ram-help
 - [deleted]             (none)     -> origin/mobile-categories-refactor
 - [deleted]             (none)     -> origin/mobile-view-param-key
 - [deleted]             (none)     -> origin/move-automation-to-core
 - [deleted]             (none)     -> origin/move-checkbox-public-up
 - [deleted]             (none)     -> origin/move_inflector
 - [deleted]             (none)     -> origin/multi-invite
 - [deleted]             (none)     -> origin/offline-indicator-by-default
 - [deleted]             (none)     -> origin/passkeys-part-3
 - [deleted]             (none)     -> origin/plugin-extra-js
 - [deleted]             (none)     -> origin/poc/auto-after-before-plugin-outlets
 - [deleted]             (none)     -> origin/poc/insert-before-after-wrapping-outlet
 - [deleted]             (none)     -> origin/rails-6.x-update
 - [deleted]             (none)     -> origin/rebake-quotes
 - [deleted]             (none)     -> origin/redirect-cat-trail
 - [deleted]             (none)     -> origin/reply-where-position
 - [deleted]             (none)     -> origin/revert-maxmind
 - [deleted]             (none)     -> origin/rotate-token-on-ip-change
 - [deleted]             (none)     -> origin/search_refactor
 - [deleted]             (none)     -> origin/security/bookmark-notification-unread-visibility
 - [deleted]             (none)     -> origin/support-load-more-btn
 - [deleted]             (none)     -> origin/table-builder-modal-modifier
 - [deleted]             (none)     -> origin/test-issue-temporary
 - [deleted]             (none)     -> origin/test-mentions-duplicates
 - [deleted]             (none)     -> origin/tests-passed-broken
 - [deleted]             (none)     -> origin/tmp/reimplement-all-and-here-mentions
 - [deleted]             (none)     -> origin/topic-list-refactor
 - [deleted]             (none)     -> origin/transform-hooks
 - [deleted]             (none)     -> origin/transform-post-fn-api
 - [deleted]             (none)     -> origin/tweaks-2-fr
 - [deleted]             (none)     -> origin/update-login-modal-mark
 - [deleted]             (none)     -> origin/user-group-messages-after-latest
 - [deleted]             (none)     -> origin/username_cache
 - [deleted]             (none)     -> origin/ux-add-sorting-params-to-outlet
 - [deleted]             (none)     -> origin/watched-words-link
 - [deleted]             (none)     -> origin/webauthn-internal-refactor
 - [deleted]             (none)     -> origin/wip-close-on-click-outside-search
 - [deleted]             (none)     -> origin/wip_categories
 - [deleted]             (none)     -> origin/wizard-split
   6ab1a19e9..a95840d39  main                    -> origin/main
 * [new branch]          0-ember-bump            -> origin/0-ember-bump
 * [new branch]          0-extend-native         -> origin/0-extend-native
 * [new branch]          0-fix-perf-watched-words -> origin/0-fix-perf-watched-words
 * [new branch]          add-chat-button-to-profile -> origin/add-chat-button-to-profile
 * [new branch]          allow-staff-to-tag      -> origin/allow-staff-to-tag
 * [new branch]          asciinema-iframe        -> origin/asciinema-iframe
 * [new branch]          bulk-actions-plugin-api -> origin/bulk-actions-plugin-api
 * [new branch]          d-object                -> origin/d-object
 * [new branch]          decorator-transforms    -> origin/decorator-transforms
 * [new branch]          dependabot/bundler/parallel_tests-4.4.0 -> origin/dependabot/bundler/parallel_tests-4.4.0
 * [new branch]          dependabot/npm_and_yarn/puppeteer-core-22.5.0 -> origin/dependabot/npm_and_yarn/puppeteer-core-22.5.0
 * [new branch]          dev/db-backed-admin-messages -> origin/dev/db-backed-admin-messages
 * [new branch]          dev/deprecate-found-user-with-status-serializer -> origin/dev/deprecate-found-user-with-status-serializer
 * [new branch]          dev/drop-found-user-with-status-serializer -> origin/dev/drop-found-user-with-status-serializer
 + 79ea38776...bd0faffec dev/drop-notification_id-column-on-chat-mentions -> origin/dev/drop-notification_id-column-on-chat-mentions  (forced update)
 * [new branch]          dev/drop-the-user-id-column-from-chat-mentions -> origin/dev/drop-the-user-id-column-from-chat-mentions
 * [new branch]          dev/make-admins-tl4-in-tests -> origin/dev/make-admins-tl4-in-tests
 * [new branch]          dev/promote-block-checks-to-problem-check -> origin/dev/promote-block-checks-to-problem-check
 * [new branch]          dev/proof-of-concept-rewriting-mentions-notification-logic -> origin/dev/proof-of-concept-rewriting-mentions-notification-logic
 * [new branch]          dev/stylesheet_importer_categories_with_background_images-modifier -> origin/dev/stylesheet_importer_categories_with_background_images-modifier
 * [new branch]          dev/timeline-footer-controls-after-outlet--include-fullscreen -> origin/dev/timeline-footer-controls-after-outlet--include-fullscreen
 * [new branch]          dev_refactor_css_generators -> origin/dev_refactor_css_generators
 * [new branch]          dev_update_category_position -> origin/dev_update_category_position
 * [new branch]          extra-js-revert         -> origin/extra-js-revert
   8780daeee..abc9cd9c5  feature/bookmark-menu-and-modal-redesign -> origin/feature/bookmark-menu-and-modal-redesign
 * [new branch]          feature/disable-failing-auth-methods -> origin/feature/disable-failing-auth-methods
 * [new branch]          feature/paste-upload-on-first-upload-input-templates -> origin/feature/paste-upload-on-first-upload-input-templates
 * [new branch]          feature_track_mentions  -> origin/feature_track_mentions
 * [new branch]          first_past_schema_objects_styling -> origin/first_past_schema_objects_styling
 * [new branch]          fix_default_value_validation_fail -> origin/fix_default_value_validation_fail
 * [new branch]          fix_reviewable_translation -> origin/fix_reviewable_translation
 * [new branch]          generic-import-add-suspender -> origin/generic-import-add-suspender
   7f2bdca65..eb3016cad  generic-import-latest   -> origin/generic-import-latest
 * [new branch]          hijacks                 -> origin/hijacks
 * [new branch]          live-cache              -> origin/live-cache
 * [new branch]          member-xp/mobile-modal  -> origin/member-xp/mobile-modal
 + 90a3535b7...54d0135bc migrations-convert      -> origin/migrations-convert  (forced update)
 * [new branch]          morph-composer-preview  -> origin/morph-composer-preview
 * [new branch]          omniauth-2              -> origin/omniauth-2
 * [new branch]          promote-migration-tweak -> origin/promote-migration-tweak
 * [new branch]          reduce_filesize_of_emoji_group_sections_component -> origin/reduce_filesize_of_emoji_group_sections_component
 * [new branch]          remove-bootbox          -> origin/remove-bootbox
 * [new branch]          see_if_yarn_cache_is_working -> origin/see_if_yarn_cache_is_working
 * [new branch]          shared-draft-category   -> origin/shared-draft-category
 * [new branch]          simplify-sidebar        -> origin/simplify-sidebar
   d7f7f79b6..6a0aa03aa  stable                  -> origin/stable
 * [new branch]          support-query-string    -> origin/support-query-string
   6ab1a19e9..a95840d39  tests-passed            -> origin/tests-passed
 * [new branch]          universal-nonce         -> origin/universal-nonce
 * [new branch]          update-add-icons-to-use-float-kit -> origin/update-add-icons-to-use-float-kit
 * [new branch]          user-menu-full-name     -> origin/user-menu-full-name
 * [new branch]          ux-input-sizing         -> origin/ux-input-sizing
 t [tag update]          beta                    -> beta
 t [tag update]          latest-release          -> latest-release
 * [new tag]             v3.1.4                  -> v3.1.4
 * [new tag]             v3.1.5                  -> v3.1.5
 * [new tag]             v3.2.0                  -> v3.2.0
 * [new tag]             v3.2.0.beta4            -> v3.2.0.beta4
 * [new tag]             v3.2.0.beta5            -> v3.2.0.beta5
 * [new tag]             v3.2.1                  -> v3.2.1
 * [new tag]             v3.3.0.beta1            -> v3.3.0.beta1
I, [2024-03-18T01:53:44.769305 #1]  INFO -- :
I, [2024-03-18T01:53:44.769525 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  if [[ $(git symbolic-ref --short HEAD) == tests-passed ]] ; then
      git pull
  else
      git -c advice.detachedHead=false checkout tests-passed
  fi
'
Switched to a new branch 'tests-passed'
I, [2024-03-18T01:53:49.388999 #1]  INFO -- : Branch 'tests-passed' set up to track remote branch 'tests-passed' from 'origin'.

I, [2024-03-18T01:53:49.389118 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse git config user.discourse-version tests-passed
I, [2024-03-18T01:53:49.404117 #1]  INFO -- :
I, [2024-03-18T01:53:49.404329 #1]  INFO -- : > cd /var/www/discourse && mkdir -p tmp
I, [2024-03-18T01:53:49.409807 #1]  INFO -- :
I, [2024-03-18T01:53:49.409936 #1]  INFO -- : > cd /var/www/discourse && chown discourse:www-data tmp
I, [2024-03-18T01:53:49.414244 #1]  INFO -- :
I, [2024-03-18T01:53:49.414363 #1]  INFO -- : > cd /var/www/discourse && mkdir -p tmp/pids
I, [2024-03-18T01:53:49.419267 #1]  INFO -- :
I, [2024-03-18T01:53:49.419372 #1]  INFO -- : > cd /var/www/discourse && mkdir -p tmp/sockets
I, [2024-03-18T01:53:49.423913 #1]  INFO -- :
I, [2024-03-18T01:53:49.424092 #1]  INFO -- : > cd /var/www/discourse && touch tmp/.gitkeep
I, [2024-03-18T01:53:49.429687 #1]  INFO -- :
I, [2024-03-18T01:53:49.429930 #1]  INFO -- : > cd /var/www/discourse && mkdir -p                    /shared/log/rails
I, [2024-03-18T01:53:49.433595 #1]  INFO -- :
I, [2024-03-18T01:53:49.433650 #1]  INFO -- : > cd /var/www/discourse && bash -c "touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log"
I, [2024-03-18T01:53:49.439061 #1]  INFO -- :
I, [2024-03-18T01:53:49.439168 #1]  INFO -- : > cd /var/www/discourse && bash -c "ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log"
I, [2024-03-18T01:53:49.445135 #1]  INFO -- :
I, [2024-03-18T01:53:49.445199 #1]  INFO -- : > cd /var/www/discourse && bash -c "mkdir -p           /shared/{uploads,backups}"
I, [2024-03-18T01:53:49.452440 #1]  INFO -- :
I, [2024-03-18T01:53:49.452690 #1]  INFO -- : > cd /var/www/discourse && bash -c "ln    -s           /shared/{uploads,backups} /var/www/discourse/public"
I, [2024-03-18T01:53:49.458418 #1]  INFO -- :
I, [2024-03-18T01:53:49.458800 #1]  INFO -- : > cd /var/www/discourse && bash -c "mkdir -p           /shared/tmp/{backups,restores}"
I, [2024-03-18T01:53:49.463935 #1]  INFO -- :
I, [2024-03-18T01:53:49.464003 #1]  INFO -- : > cd /var/www/discourse && bash -c "ln    -s           /shared/tmp/{backups,restores} /var/www/discourse/tmp"
I, [2024-03-18T01:53:49.469817 #1]  INFO -- :
I, [2024-03-18T01:53:49.470265 #1]  INFO -- : > cd /var/www/discourse && chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp
I, [2024-03-18T01:53:49.476473 #1]  INFO -- :
I, [2024-03-18T01:53:49.476761 #1]  INFO -- : > cd /var/www/discourse && [ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete
I, [2024-03-18T01:53:49.479597 #1]  INFO -- :
I, [2024-03-18T01:53:49.480367 #1]  INFO -- : Replacing # redis with sv start redis || exit 1 in /etc/service/unicorn/run
I, [2024-03-18T01:53:49.481434 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/discourse/docker_manager.git
Cloning into 'docker_manager'...
I, [2024-03-18T01:53:50.157195 #1]  INFO -- :
I, [2024-03-18T01:53:50.158123 #1]  INFO -- : > cp /var/www/discourse/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf
I, [2024-03-18T01:53:50.163365 #1]  INFO -- :
I, [2024-03-18T01:53:50.163801 #1]  INFO -- : > rm /etc/nginx/sites-enabled/default
I, [2024-03-18T01:53:50.168175 #1]  INFO -- :
I, [2024-03-18T01:53:50.168568 #1]  INFO -- : > mkdir -p /var/nginx/cache
I, [2024-03-18T01:53:50.173508 #1]  INFO -- :
I, [2024-03-18T01:53:50.174215 #1]  INFO -- : Replacing pid /run/nginx.pid; with daemon off; in /etc/nginx/nginx.conf
I, [2024-03-18T01:53:50.175691 #1]  INFO -- : Replacing (?m-ix:upstream[^\}]+\}) with upstream discourse { server 127.0.0.1:3000; } in /etc/nginx/conf.d/discourse.conf
I, [2024-03-18T01:53:50.176175 #1]  INFO -- : Replacing (?-mix:server_name.+$) with server_name _ ; in /etc/nginx/conf.d/discourse.conf
I, [2024-03-18T01:53:50.176702 #1]  INFO -- : Replacing (?-mix:client_max_body_size.+$) with client_max_body_size $upload_size ; in /etc/nginx/conf.d/discourse.conf
I, [2024-03-18T01:53:50.176937 #1]  INFO -- : Replacing (?-mix:worker_connections.+$) with worker_connections $nginx_worker_connections ; in /etc/nginx/nginx.conf
I, [2024-03-18T01:53:50.177206 #1]  INFO -- : > echo "done configuring web"
I, [2024-03-18T01:53:50.180422 #1]  INFO -- : done configuring web

I, [2024-03-18T01:53:50.180867 #1]  INFO -- : > cd /var/www/discourse && gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,""); print $0 }' Gemfile.lock)
I, [2024-03-18T01:53:51.054428 #1]  INFO -- : Successfully installed bundler-2.5.3
1 gem installed

I, [2024-03-18T01:53:51.054925 #1]  INFO -- : > cd /var/www/discourse && find /var/www/discourse ! -user discourse -exec chown discourse {} \+
I, [2024-03-18T01:53:52.052624 #1]  INFO -- :
I, [2024-03-18T01:53:52.053198 #1]  INFO -- : > cd /var/www/discourse && if [ "tests-passed" != "tests-passed" ]; then
  rm -rf app/assets/javascripts/node_modules
fi
I, [2024-03-18T01:53:52.056583 #1]  INFO -- :
I, [2024-03-18T01:53:52.057140 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'yarn install --frozen-lockfile && yarn cache clean'
warning Resolution field "unset-value@2.0.1" is incompatible with requested version "unset-value@^1.0.0"
warning Pattern ["wrap-ansi-cjs@npm:wrap-ansi@^7.0.0"] is trying to unpack in the same destination "/home/discourse/.cache/yarn/v6/npm-wrap-ansi-cjs-7.0.0-67e145cff510a6a6984bdf1152911d69d2eb9e43-integrity/node_modules/wrap-ansi-cjs" as pattern ["wrap-ansi@^7.0.0"]. This could result in non-deterministic behavior, skipping.
warning "@discourse/lint-configs > eslint-plugin-ember > ember-eslint-parser@0.3.8" has unmet peer dependency "@typescript-eslint/parser@^6.15.0".
warning " > @glint/environment-ember-loose@1.3.0" has unmet peer dependency "@glimmer/component@^1.1.2".
warning " > discourse-markdown-it@1.0.0" has unmet peer dependency "xss@*".
warning "workspace-aggregator-480b7633-ce16-498f-b915-306c84ee9492 > discourse > @uppy/aws-s3@3.0.6" has incorrect peer dependency "@uppy/core@^3.1.2".
warning "workspace-aggregator-480b7633-ce16-498f-b915-306c84ee9492 > discourse > @uppy/aws-s3-multipart@3.1.3" has incorrect peer dependency "@uppy/core@^3.1.2".
warning "workspace-aggregator-480b7633-ce16-498f-b915-306c84ee9492 > discourse > @uppy/xhr-upload@3.1.1" has incorrect peer dependency "@uppy/core@^3.1.2".
warning "workspace-aggregator-480b7633-ce16-498f-b915-306c84ee9492 > discourse-plugins > ember-this-fallback@0.4.0" has unmet peer dependency "ember-source@^3.28.11 || ^4.0.0".
warning "workspace-aggregator-480b7633-ce16-498f-b915-306c84ee9492 > admin > ember-source > router_js@8.0.3" has unmet peer dependency "rsvp@^4.8.5".
warning "workspace-aggregator-480b7633-ce16-498f-b915-306c84ee9492 > discourse > @uppy/aws-s3 > @uppy/xhr-upload@3.3.0" has incorrect peer dependency "@uppy/core@^3.2.1".
I, [2024-03-18T01:55:34.041537 #1]  INFO -- : yarn install v1.22.19
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
[4/5] Linking dependencies...
[5/5] Building fresh packages...
$ ./app/assets/javascripts/run-patch-package && rm -rf app/assets/javascripts/node_modules
patch-package 8.0.0
Applying patches...
babel-plugin-debug-macros@0.3.4 ✔
content-tag@2.0.1 ✔
ember-this-fallback@0.4.0 (1 deprecation-name) ✔
ember-this-fallback@0.4.0 (2 themes) ✔
ember-this-fallback@0.4.0 (3 exclude-strict-mode) ✔
virtual-dom@2.1.1 ✔
Done in 92.51s.
yarn cache v1.22.19
success Cleared cache.
Done in 8.79s.

I, [2024-03-18T01:55:34.044300 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle config --local deployment true'
I, [2024-03-18T01:55:34.404337 #1]  INFO -- :
I, [2024-03-18T01:55:34.404552 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle config --local without "development test"'
I, [2024-03-18T01:55:34.609166 #1]  INFO -- : You are replacing the current local value of without, which is currently "test:development"

I, [2024-03-18T01:55:34.609406 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle install --retry 3 --jobs 4'
I, [2024-03-18T01:55:49.546005 #1]  INFO -- : Fetching gem metadata from https://rubygems.org/.........
Fetching minitest 5.22.3
Fetching rack 2.2.8.1
Fetching concurrent-ruby 1.2.3
Fetching aws-partitions 1.894.0
Installing minitest 5.22.3
Installing aws-partitions 1.894.0
Installing rack 2.2.8.1
Installing concurrent-ruby 1.2.3
Fetching bigdecimal 3.1.7
Fetching cbor 0.5.9.8
Installing bigdecimal 3.1.7 with native extensions
Installing cbor 0.5.9.8 with native extensions
Fetching excon 0.110.0
Installing excon 0.110.0
Fetching fastimage 2.3.0
Installing fastimage 2.3.0
Fetching google-protobuf 4.26.0 (x86_64-linux)
Fetching highline 3.0.1
Installing highline 3.0.1
Fetching image_size 3.4.0
Installing google-protobuf 4.26.0 (x86_64-linux)
Installing image_size 3.4.0
Fetching regexp_parser 2.9.0
Installing regexp_parser 2.9.0
Fetching thor 1.3.1
Installing thor 1.3.1
Fetching zeitwerk 2.6.13
Fetching logster 2.19.1
Installing zeitwerk 2.6.13
Fetching stackprof 0.2.26
Installing stackprof 0.2.26 with native extensions
Installing logster 2.19.1
Fetching nokogiri 1.16.3 (x86_64-linux)
Installing nokogiri 1.16.3 (x86_64-linux)
Fetching aws-sigv4 1.8.0
Installing aws-sigv4 1.8.0
Fetching jwt 2.8.1
Installing jwt 2.8.1
Fetching bootsnap 1.18.3
Installing bootsnap 1.18.3 with native extensions
Fetching request_store 1.6.0
Installing request_store 1.6.0
Fetching rack-mini-profiler 3.3.1
Installing rack-mini-profiler 3.3.1
Fetching rack-protection 3.2.0
Installing rack-protection 3.2.0
Fetching net-http 0.4.1
Fetching i18n 1.14.4
Installing net-http 0.4.1
Fetching sass-embedded 1.72.0 (x86_64-linux-gnu)
Installing i18n 1.14.4
Fetching puma 6.4.2
Installing puma 6.4.2 with native extensions
Installing sass-embedded 1.72.0 (x86_64-linux-gnu)
Fetching rbtrace 0.5.1
Installing rbtrace 0.5.1 with native extensions
Fetching net-imap 0.4.10
Installing net-imap 0.4.10
Fetching net-smtp 0.4.0.1
Installing net-smtp 0.4.0.1
Fetching aws-sdk-core 3.191.3
Installing aws-sdk-core 3.191.3
Fetching faraday-net_http 3.1.0
Installing faraday-net_http 3.1.0
Fetching tzinfo-data 1.2024.1
Installing tzinfo-data 1.2024.1
Fetching activesupport 7.0.8.1
Installing activesupport 7.0.8.1
Fetching sassc-embedded 1.70.1
Installing sassc-embedded 1.70.1
Fetching aws-sdk-kms 1.77.0
Installing aws-sdk-kms 1.77.0
Fetching aws-sdk-sns 1.72.0
Installing aws-sdk-sns 1.72.0
Fetching faraday 2.9.0
Installing faraday 2.9.0
Fetching activemodel 7.0.8.1
Installing activemodel 7.0.8.1
Fetching aws-sdk-s3 1.143.0
Installing aws-sdk-s3 1.143.0
Fetching actionview 7.0.8.1
Installing actionview 7.0.8.1
Fetching activejob 7.0.8.1
Installing activejob 7.0.8.1
Fetching activerecord 7.0.8.1
Installing activerecord 7.0.8.1
Fetching actionpack 7.0.8.1
Installing actionpack 7.0.8.1
Fetching actionview_precompiler 0.4.0
Installing actionview_precompiler 0.4.0
Fetching actionmailer 7.0.8.1
Installing actionmailer 7.0.8.1
Fetching railties 7.0.8.1
Installing railties 7.0.8.1
Fetching rails_multisite 6.0.0
Installing rails_multisite 6.0.0
Fetching json_schemer 2.2.1
Installing json_schemer 2.2.1
Bundle complete! 137 Gemfile dependencies, 170 gems now installed.
Gems in the groups 'development' and 'test' were not installed.
Bundled gems are installed into `./vendor/bundle`

I, [2024-03-18T01:55:49.546280 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2024-03-18T01:55:53.471437 #1]  INFO -- : docker_manager is already at latest compatible version

I, [2024-03-18T01:55:53.471914 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
2024-03-18 01:55:56.915 UTC [3330] discourse@discourse ERROR:  relation "translation_overrides" does not exist at character 491
2024-03-18 01:55:56.915 UTC [3330] discourse@discourse STATEMENT:  SELECT a.attname, format_type(a.atttypid, a.atttypmod),
               pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
               c.collname, col_description(a.attrelid, a.attnum) AS comment,
               attgenerated as attgenerated
          FROM pg_attribute a
          LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
          LEFT JOIN pg_type t ON a.atttypid = t.oid
          LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
         WHERE a.attrelid = '"translation_overrides"'::regclass
           AND a.attnum > 0 AND NOT a.attisdropped
         ORDER BY a.attnum

> Seeding theme and color schemes
I, [2024-03-18T01:56:18.075513 #1]  INFO -- : == 20000225050318 AddSchemaMigrationDetails: migrating ========================
-- create_table(:schema_migration_details, {:id=>:integer})
   -> 0.0098s
-- add_index(:schema_migration_details, [:version])
   -> 0.0022s
-- execute("INSERT INTO schema_migration_details(version, created_at)\n             SELECT version, current_timestamp\n             FROM schema_migrations\n             ORDER BY version\n            ")
   -> 0.0004s
== 20000225050318 AddSchemaMigrationDetails: migrated (0.0136s) ===============

== 20120311163914 CreateForumThreads: migrating ===============================
-- create_table(:forum_threads, {:id=>:integer})
   -> 0.0053s
== 20120311163914 CreateForumThreads: migrated (0.0065s) ======================

== 20120311164326 CreatePosts: migrating ======================================
-- create_table(:posts, {:id=>:integer})
   -> 0.0050s
-- add_index(:posts, [:forum_thread_id, :created_at])
   -> 0.0024s
== 20120311164326 CreatePosts: migrated (0.0086s) =============================

== 20120311170118 CreateUsers: migrating ======================================
-- create_table(:users, {:id=>:integer})
   -> 0.0062s
== 20120311170118 CreateUsers: migrated (0.0070s) =============================

== 20120311201341 CreateForums: migrating =====================================
-- create_table(:forums, {:id=>:integer})
   -> 0.0028s
== 20120311201341 CreateForums: migrated (0.0041s) ============================

== 20120311210245 CreateSites: migrating ======================================
-- create_table(:sites, {:id=>:integer})
   -> 0.0028s
== 20120311210245 CreateSites: migrated (0.0034s) =============================

== 20120416201606 AddReplyToToPosts: migrating ================================
-- add_column(:posts, :reply_to_post_number, :integer, {:null=>true})
   -> 0.0006s
-- add_index(:posts, :reply_to_post_number)
   -> 0.0028s
== 20120416201606 AddReplyToToPosts: migrated (0.0039s) =======================

== 20120420183447 AddViewsToForumThreads: migrating ===========================
-- add_column(:forum_threads, :views, :integer, {:default=>0, :null=>false})
   -> 0.0013s
== 20120420183447 AddViewsToForumThreads: migrated (0.0019s) ==================

== 20120423140906 AddPostsCountToForumThreads: migrating ======================
-- add_column(:forum_threads, :posts_count, :integer, {:default=>0, :null=>false})
   -> 0.0011s
-- execute("UPDATE forum_threads SET posts_count = (SELECT count(*) FROM posts WHERE posts.forum_thread_id = forum_threads.id)")
   -> 0.0010s
== 20120423140906 AddPostsCountToForumThreads: migrated (0.0025s) =============

== 20120423142820 FixPostIndices: migrating ===================================
-- remove_index(:posts, [:forum_thread_id, :created_at], {:name=>"index_posts_on_forum_thread_id_and_created_at"})
   -> 0.0044s
-- add_index(:posts, [:forum_thread_id, :post_number])
   -> 0.0029s
== 20120423142820 FixPostIndices: migrated (0.0093s) ==========================

== 20120423151548 RemoveLastPostId: migrating =================================
-- remove_column(:forum_threads, :last_post_id)
   -> 0.0005s
== 20120423151548 RemoveLastPostId: migrated (0.0011s) ========================

== 20120425145456 AddDisplayUsernameToUsers: migrating ========================
-- add_column(:users, :display_username, :string)
   -> 0.0007s
-- execute("UPDATE users SET display_username = username")
   -> 0.0005s
-- execute("UPDATE users SET username = REPLACE(username, ' ', '')")
   -> 0.0003s
-- add_index(:users, :username, {:unique=>true})
   -> 0.0018s
== 20120425145456 AddDisplayUsernameToUsers: migrated (0.0041s) ===============

== 20120427150624 AddUserIdIndexToPosts: migrating ============================
-- add_index(:posts, :user_id)
   -> 0.0023s
== 20120427150624 AddUserIdIndexToPosts: migrated (0.0030s) ===================

== 20120427151452 CookedMigration: migrating ==================================
-- rename_column(:posts, :content, :raw)
   -> 0.0030s
-- rename_column(:posts, :formatted_content, :cooked)
   -> 0.0028s
== 20120427151452 CookedMigration: migrated (0.0066s) =========================

== 20120427154330 CreateVestalVersions: migrating =============================
-- create_table(:versions, {:id=>:integer})
   -> 0.0063s
-- change_table(:versions)
   -> 0.0122s
== 20120427154330 CreateVestalVersions: migrated (0.0192s) ====================

== 20120427172031 AddVersionToPosts: migrating ================================
-- add_column(:posts, :cached_version, :integer, {:null=>false, :default=>1})
   -> 0.0010s
== 20120427172031 AddVersionToPosts: migrated (0.0019s) =======================

== 20120502183240 AddCreatedByToForumThreads: migrating =======================
-- add_column(:forum_threads, :user_id, :integer)
   -> 0.0004s
-- execute("update forum_threads t\n    set user_id = (select user_id from posts where forum_thread_id = t.Id order by post_number asc limit 1)")
   -> 0.0007s
-- change_column(:forum_threads, :user_id, :integer)
   -> 0.0006s
== 20120502183240 AddCreatedByToForumThreads: migrated (0.0036s) ==============

== 20120502192121 AddLastPostUserIdToForumThreads: migrating ==================
-- add_column(:forum_threads, :last_post_user_id, :integer)
   -> 0.0005s
-- execute("update forum_threads t\n    set last_post_user_id = (select user_id from posts where forum_thread_id = t.Id order by post_number desc limit 1)")
   -> 0.0004s
-- change_column(:forum_threads, :last_post_user_id, :integer)
   -> 0.0003s
== 20120502192121 AddLastPostUserIdToForumThreads: migrated (0.0025s) =========

== 20120503205521 AddSiteIdToUsers: migrating =================================
-- add_column(:users, :site_id, :integer)
   -> 0.0006s
-- add_column(:users, :bio, :text)
   -> 0.0003s
-- add_index(:users, :site_id)
   -> 0.0015s
-- execute("UPDATE users SET site_id = 1")
   -> 0.0003s
== 20120503205521 AddSiteIdToUsers: migrated (0.0034s) ========================

== 20120507144132 CreateExpressions: migrating ================================
-- create_table(:expressions, {:id=>false, :force=>true})
   -> 0.0016s
-- add_index(:expressions, [:parent_id, :parent_type, :expression_type_id, :user_id], {:unique=>true, :name=>"expressions_pk"})
   -> 0.0053s
== 20120507144132 CreateExpressions: migrated (0.0080s) =======================

== 20120507144222 CreateExpressionTypes: migrating ============================
-- create_table(:expression_types, {:id=>:integer})
   -> 0.0039s
-- add_index(:expression_types, [:site_id, :name], {:unique=>true})
   -> 0.0013s
== 20120507144222 CreateExpressionTypes: migrated (0.0058s) ===================

== 20120514144549 AddReplyCountToPosts: migrating =============================
-- add_column(:posts, :reply_count, :integer, {:null=>false, :default=>0})
   -> 0.0008s
-- execute("UPDATE posts\n             SET reply_count = (SELECT count(*) FROM posts AS p2 WHERE p2.reply_to_post_number = posts.post_number)")
   -> 0.0004s
== 20120514144549 AddReplyCountToPosts: migrated (0.0017s) ====================

== 20120514173920 AddFlagToExpressionTypes: migrating =========================
-- add_column(:expression_types, :flag, :boolean, {:default=>false})
   -> 0.0006s
== 20120514173920 AddFlagToExpressionTypes: migrated (0.0011s) ================

== 20120514204934 AddDescriptionToExpressionTypes: migrating ==================
-- add_column(:expression_types, :description, :text, {:null=>true})
   -> 0.0031s
== 20120514204934 AddDescriptionToExpressionTypes: migrated (0.0040s) =========

== 20120517200130 AddQuotelessToPost: migrating ===============================
-- add_column(:posts, :quoteless, :boolean, {:default=>false})
   -> 0.0011s
== 20120517200130 AddQuotelessToPost: migrated (0.0017s) ======================

== 20120518200115 CreateReadPosts: migrating ==================================
-- create_table(:read_posts, {:id=>false})
   -> 0.0011s
-- add_index(:read_posts, [:forum_thread_id, :user_id, :page], {:unique=>true})
   -> 0.0025s
== 20120518200115 CreateReadPosts: migrated (0.0046s) =========================

== 20120519182212 CreateLastReadPosts: migrating ==============================
-- create_table(:last_read_posts, {:id=>:integer})
   -> 0.0038s
-- add_index(:last_read_posts, [:user_id, :forum_thread_id], {:unique=>true})
   -> 0.0018s
== 20120519182212 CreateLastReadPosts: migrated (0.0066s) =====================

== 20120523180723 CreateViews: migrating ======================================
-- create_table(:views, {:id=>false})
   -> 0.0012s
-- add_index(:views, [:parent_id, :parent_type])
   -> 0.0023s
-- add_index(:views, [:parent_id, :parent_type, :ip, :viewed_at], {:unique=>true, :name=>"unique_views"})
   -> 0.0029s
== 20120523180723 CreateViews: migrated (0.0074s) =============================

== 20120523184307 AddRepliesToForumThreads: migrating =========================
-- add_column(:forum_threads, :reply_count, :integer, {:default=>0, :null=>false})
   -> 0.0013s
-- execute("UPDATE forum_threads SET reply_count = (SELECT COUNT(*) FROM posts WHERE posts.reply_to_post_number IS NOT NULL AND posts.forum_thread_id = forum_threads.id)")
   -> 0.0006s
== 20120523184307 AddRepliesToForumThreads: migrated (0.0028s) ================

== 20120523201329 AddFeaturedToForumThreads: migrating ========================
-- add_column(:forum_threads, :featured_user1_id, :integer, {:null=>true})
   -> 0.0006s
-- add_column(:forum_threads, :featured_user2_id, :integer, {:null=>true})
   -> 0.0003s
-- add_column(:forum_threads, :featured_user3_id, :integer, {:null=>true})
   -> 0.0003s
== 20120523201329 AddFeaturedToForumThreads: migrated (0.0021s) ===============

== 20120525194845 AddAvgTimeToForumThreads: migrating =========================
-- add_column(:forum_threads, :avg_time, :integer)
   -> 0.0010s
-- execute("update forum_threads SET avg_time = abs(random() * 1200)")
   -> 0.0007s
== 20120525194845 AddAvgTimeToForumThreads: migrated (0.0025s) ================

== 20120529175956 CreateUploads: migrating ====================================
-- create_table(:uploads, {:id=>:integer})
   -> 0.0045s
-- add_index(:uploads, :forum_thread_id)
   -> 0.0020s
-- add_index(:uploads, :user_id)
   -> 0.0016s
== 20120529175956 CreateUploads: migrated (0.0089s) ===========================

== 20120529202707 CreateStars: migrating ======================================
-- create_table(:stars, {:id=>false})
   -> 0.0008s
-- add_index(:stars, [:parent_id, :parent_type, :user_id])
   -> 0.0015s
== 20120529202707 CreateStars: migrated (0.0029s) =============================

== 20120530150726 CreateForumThreadUser: migrating ============================
-- create_table(:forum_thread_users, {:id=>false})
   -> 0.0016s
-- execute("DELETE FROM read_posts")
   -> 0.0014s
-- add_index(:forum_thread_users, [:forum_thread_id, :user_id], {:unique=>true})
   -> 0.0024s
-- drop_table(:stars)
   -> 0.0008s
-- drop_table(:last_read_posts)
   -> 0.0031s
== 20120530150726 CreateForumThreadUser: migrated (0.0106s) ===================

== 20120530160745 MigratePosted: migrating ====================================
== 20120530160745 MigratePosted: migrated (0.0006s) ===========================

== 20120530200724 AddIndexToForumThreads: migrating ===========================
-- add_index(:forum_threads, :last_posted_at)
   -> 0.0022s
== 20120530200724 AddIndexToForumThreads: migrated (0.0029s) ==================

== 20120530212912 CreateForumThreadLinks: migrating ===========================
-- create_table(:forum_thread_links, {:id=>:integer})
   -> 0.0071s
-- add_index(:forum_thread_links, :forum_thread_id)
   -> 0.0020s
== 20120530212912 CreateForumThreadLinks: migrated (0.0103s) ==================

== 20120614190726 AddTagsToForumThreads: migrating ============================
-- add_column(:forum_threads, :tag, :string, {:null=>true, :limit=>25})
   -> 0.0007s
== 20120614190726 AddTagsToForumThreads: migrated (0.0017s) ===================

== 20120614202024 AddQuoteCountToPosts: migrating =============================
-- add_column(:posts, :quote_count, :integer, {:default=>0, :null=>false})
   -> 0.0008s
-- execute("UPDATE posts SET quote_count = 1 WHERE quoteless = 'f'")
   -> 0.0003s
-- remove_column(:posts, :quoteless)
   -> 0.0003s
== 20120614202024 AddQuoteCountToPosts: migrated (0.0021s) ====================

== 20120615180517 CreateBookmarks: migrating ==================================
-- create_table(:bookmarks, {:id=>:integer})
   -> 0.0043s
-- add_index(:bookmarks, [:user_id, :post_id], {:unique=>true})
   -> 0.0020s
== 20120615180517 CreateBookmarks: migrated (0.0072s) =========================

== 20120618152946 AddReplyBelowToPosts: migrating =============================
-- add_column(:posts, :reply_below_post_number, :integer, {:null=>true})
   -> 0.0008s
== 20120618152946 AddReplyBelowToPosts: migrated (0.0015s) ====================

== 20120618212349 CreatePostTimings: migrating ================================
-- create_table(:post_timings, {:id=>:integer})
   -> 0.0026s
-- add_index(:post_timings, [:thread_id, :post_number])
   -> 0.0022s
-- add_index(:post_timings, [:thread_id, :post_number, :user_id], {:unique=>true})
   -> 0.0019s
== 20120618212349 CreatePostTimings: migrated (0.0079s) =======================

== 20120618214856 CreateMessageBus: migrating =================================
-- create_table(:message_bus, {:id=>:integer})
   -> 0.0055s
-- add_index(:message_bus, [:created_at])
   -> 0.0023s
== 20120618214856 CreateMessageBus: migrated (0.0084s) ========================

== 20120619150807 FixPostTimings: migrating ===================================
-- remove_index(:post_timings, [:thread_id, :post_number], {:name=>"index_post_timings_on_thread_id_and_post_number"})
   -> 0.0030s
-- remove_index(:post_timings, [:thread_id, :post_number, :user_id], {:name=>"index_post_timings_on_thread_id_and_post_number_and_user_id"})
   -> 0.0026s
-- rename_column(:post_timings, :thread_id, :forum_thread_id)
   -> 0.0016s
-- add_index(:post_timings, [:forum_thread_id, :post_number], {:name=>"post_timings_summary"})
   -> 0.0027s
-- add_index(:post_timings, [:forum_thread_id, :post_number, :user_id], {:unique=>true, :name=>"post_timings_unique"})
   -> 0.0025s
== 20120619150807 FixPostTimings: migrated (0.0150s) ==========================

== 20120619153349 DropReadPosts: migrating ====================================
-- drop_table(:read_posts)
   -> 0.0006s
== 20120619153349 DropReadPosts: migrated (0.0012s) ===========================

== 20120619172714 AddPostNumberToBookmarks: migrating =========================
-- drop_table(:bookmarks)
   -> 0.0010s
-- create_table(:bookmarks, {:id=>:integer})
   -> 0.0038s
-- add_index(:bookmarks, [:user_id, :forum_thread_id, :post_number], {:unique=>true})
   -> 0.0034s
== 20120619172714 AddPostNumberToBookmarks: migrated (0.0093s) ================

== 20120621155351 AddSeenPostCountToForumThreadUsers: migrating ===============
-- remove_column(:post_timings, :id)
   -> 0.0006s
-- remove_column(:forum_thread_users, :created_at)
   -> 0.0002s
-- remove_column(:forum_thread_users, :updated_at)
   -> 0.0001s
-- add_column(:forum_thread_users, :seen_post_count, :integer)
   -> 0.0002s
== 20120621155351 AddSeenPostCountToForumThreadUsers: migrated (0.0017s) ======

== 20120621190310 AddDeletedAtToForumThreads: migrating =======================
-- add_column(:forum_threads, :deleted_at, :timestamp, {:precision=>nil})
   -> 0.0004s
== 20120621190310 AddDeletedAtToForumThreads: migrated (0.0008s) ==============

== 20120622200242 CreateNotifications: migrating ==============================
-- create_table(:notifications, {:id=>:integer})
   -> 0.0051s
-- add_index(:notifications, [:user_id, :created_at])
   -> 0.0018s
== 20120622200242 CreateNotifications: migrated (0.0078s) =====================

== 20120625145714 AddSeenNotificationIdToUsers: migrating =====================
-- execute("TRUNCATE TABLE notifications")
   -> 0.0050s
-- add_column(:users, :seen_notificaiton_id, :integer, {:default=>0, :null=>false})
   -> 0.0009s
-- add_column(:notifications, :forum_thread_id, :integer, {:null=>true})
   -> 0.0006s
-- add_column(:notifications, :post_number, :integer, {:null=>true})
   -> 0.0006s
== 20120625145714 AddSeenNotificationIdToUsers: migrated (0.0083s) ============

== 20120625162318 AddDeletedAtToPosts: migrating ==============================
-- add_column(:posts, :deleted_at, :timestamp, {:precision=>nil})
   -> 0.0006s
== 20120625162318 AddDeletedAtToPosts: migrated (0.0015s) =====================

== 20120625174544 AddHighestPostNumberToForumThreads: migrating ===============
-- add_column(:forum_threads, :highest_post_number, :integer, {:default=>0, :null=>false})
   -> 0.0007s
-- execute("UPDATE forum_threads SET highest_post_number = (SELECT MAX(post_number) FROM posts WHERE posts.forum_thread_id = forum_threads.id)")
   -> 0.0006s
== 20120625174544 AddHighestPostNumberToForumThreads: migrated (0.0019s) ======

== 20120625195326 AddImageUrlToForumThreads: migrating ========================
-- add_column(:forum_threads, :image_url, :string)
   -> 0.0005s
== 20120625195326 AddImageUrlToForumThreads: migrated (0.0010s) ===============

== 20120629143908 RenameExpressionTypeId: migrating ===========================
-- add_column(:expression_types, :expression_index, :integer)
   -> 0.0006s
-- execute("UPDATE expression_types SET expression_index = id")
   -> 0.0005s
-- remove_column(:expression_types, :id)
   -> 0.0008s
-- add_index(:expression_types, [:site_id, :expression_index], {:unique=>true})
   -> 0.0022s
== 20120629143908 RenameExpressionTypeId: migrated (0.0052s) ==================

== 20120629150253 DenormalizeExpressions: migrating ===========================
-- add_column(:posts, :expression1_count, :integer, {:null=>false, :default=>0})
   -> 0.0008s
-- add_column(:posts, :expression2_count, :integer, {:null=>false, :default=>0})
   -> 0.0007s
-- add_column(:posts, :expression3_count, :integer, {:null=>false, :default=>0})
   -> 0.0006s
-- add_column(:posts, :expression4_count, :integer, {:null=>false, :default=>0})
   -> 0.0007s
-- add_column(:posts, :expression5_count, :integer, {:null=>false, :default=>0})
   -> 0.0006s
-- add_column(:forum_threads, :expression1_count, :integer, {:null=>false, :default=>0})
   -> 0.0007s
-- add_column(:forum_threads, :expression2_count, :integer, {:null=>false, :default=>0})
   -> 0.0005s
-- add_column(:forum_threads, :expression3_count, :integer, {:null=>false, :default=>0})
   -> 0.0004s
-- add_column(:forum_threads, :expression4_count, :integer, {:null=>false, :default=>0})
   -> 0.0005s
-- add_column(:forum_threads, :expression5_count, :integer, {:null=>false, :default=>0})
   -> 0.0005s
-- execute("update posts set expression1_count = (select count(*) from expressions where parent_id = posts.id and expression_type_id = 1)")
   -> 0.0008s
-- execute("update forum_threads set expression1_count = (select sum(expression1_count) from posts where forum_thread_id = forum_threads.id)")
   -> 0.0011s
-- execute("update posts set expression2_count = (select count(*) from expressions where parent_id = posts.id and expression_type_id = 2)")
   -> 0.0005s
-- execute("update forum_threads set expression2_count = (select sum(expression2_count) from posts where forum_thread_id = forum_threads.id)")
   -> 0.0003s
-- execute("update posts set expression3_count = (select count(*) from expressions where parent_id = posts.id and expression_type_id = 3)")
   -> 0.0002s
-- execute("update forum_threads set expression3_count = (select sum(expression3_count) from posts where forum_thread_id = forum_threads.id)")
   -> 0.0005s
-- execute("update posts set expression4_count = (select count(*) from expressions where parent_id = posts.id and expression_type_id = 4)")
   -> 0.0003s
-- execute("update forum_threads set expression4_count = (select sum(expression4_count) from posts where forum_thread_id = forum_threads.id)")
   -> 0.0005s
-- execute("update posts set expression5_count = (select count(*) from expressions where parent_id = posts.id and expression_type_id = 5)")
   -> 0.0002s
-- execute("update forum_threads set expression5_count = (select sum(expression5_count) from posts where forum_thread_id = forum_threads.id)")
   -> 0.0002s
== 20120629150253 DenormalizeExpressions: migrated (0.0124s) ==================

== 20120629151243 MakeExpressionsLessGeneric: migrating =======================
-- rename_column(:expressions, :parent_id, :post_id)
   -> 0.0014s
-- rename_column(:expressions, :expression_type_id, :expression_index)
   -> 0.0010s
-- remove_column(:expressions, :parent_type)
   -> 0.0008s
-- add_index(:expressions, [:post_id, :expression_index, :user_id], {:unique=>true, :name=>"unique_by_user"})
   -> 0.0023s
== 20120629151243 MakeExpressionsLessGeneric: migrated (0.0066s) ==============

== 20120629182637 CreateIncomingLinks: migrating ==============================
-- create_table(:incoming_links, {:id=>:integer})
   -> 0.0052s
-- add_index(:incoming_links, [:site_id, :forum_thread_id, :post_number], {:name=>"incoming_index"})
   -> 0.0013s
== 20120629182637 CreateIncomingLinks: migrated (0.0073s) =====================

== 20120702211427 CreateReplies: migrating ====================================
-- create_table(:post_replies, {:id=>false})
   -> 0.0013s
-- add_index(:post_replies, [:post_id, :reply_id], {:unique=>true})
   -> 0.0020s
-- execute("INSERT INTO post_replies (post_id, reply_id, created_at, updated_at)\n             SELECT p2.id, p.id, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP\n             FROM posts AS p\n             INNER JOIN posts AS p2 on p2.post_number = p.reply_to_post_number AND p2.forum_thread_id = P.forum_thread_id\n             WHERE p.forum_thread_id IS NOT NULL")
   -> 0.0006s
== 20120702211427 CreateReplies: migrated (0.0047s) ===========================

== 20120703184734 AddReflectionToForumThreadLinks: migrating ==================
-- add_column(:forum_thread_links, :reflection, :boolean, {:default=>false})
   -> 0.0011s
-- change_column(:forum_thread_links, :post_id, :integer)
   -> 0.0008s
== 20120703184734 AddReflectionToForumThreadLinks: migrated (0.0030s) =========

== 20120703201312 AddIncomingLinkCountToPosts: migrating ======================
-- add_column(:posts, :incoming_link_count, :integer, {:default=>0, :null=>false})
   -> 0.0015s
== 20120703201312 AddIncomingLinkCountToPosts: migrated (0.0026s) =============

== 20120703203623 AddIncomingLinkCountToForumThreads: migrating ===============
-- add_column(:forum_threads, :incoming_link_count, :integer, {:default=>0, :null=>false})
   -> 0.0014s
== 20120703203623 AddIncomingLinkCountToForumThreads: migrated (0.0023s) ======

== 20120703210004 AddBookmarkCountToPosts: migrating ==========================
-- add_column(:posts, :bookmark_count, :integer, {:default=>0, :null=>false})
   -> 0.0015s
-- add_column(:forum_threads, :bookmark_count, :integer, {:default=>0, :null=>false})
   -> 0.0009s
-- add_column(:forum_threads, :star_count, :integer, {:default=>0, :null=>false})
   -> 0.0013s
-- execute("UPDATE posts SET bookmark_count = (SELECT COUNT(*)\n                                                FROM bookmarks\n                                                WHERE post_number = posts.post_number AND forum_thread_id = posts.forum_thread_id)")
   -> 0.0006s
-- execute("UPDATE forum_threads SET bookmark_count = (SELECT COUNT(*)\n                                                        FROM bookmarks\n                                                        WHERE forum_thread_id = forum_threads.id)")
   -> 0.0005s
-- execute("UPDATE forum_threads SET star_count = (SELECT COUNT(*)\n                                                        FROM forum_thread_users\n                                                        WHERE forum_thread_id = forum_threads.id AND starred = true)")
   -> 0.0006s
== 20120703210004 AddBookmarkCountToPosts: migrated (0.0063s) =================

== 20120704160659 AddAvgTimeToPosts: migrating ================================
-- add_column(:posts, :avg_time, :integer, {:null=>true})
   -> 0.0007s
-- add_column(:posts, :score, :float, {:null=>true})
   -> 0.0004s
== 20120704160659 AddAvgTimeToPosts: migrated (0.0018s) =======================

== 20120704201743 AddViewCountToPosts: migrating ==============================
-- add_column(:posts, :views, :integer, {:default=>0, :null=>false})
   -> 0.0006s
-- execute("UPDATE posts SET views =\n              (SELECT COUNT(*) FROM post_timings WHERE forum_thread_id = posts.forum_thread_id AND post_number = posts.post_number)")
   -> 0.0009s
== 20120704201743 AddViewCountToPosts: migrated (0.0022s) =====================

== 20120705181724 AddUserToVersions: migrating ================================
-- execute("UPDATE versions SET user_type = 'User', user_id = posts.user_id\n             FROM posts\n             WHERE posts.id = versions.versioned_id")
   -> 0.0008s
== 20120705181724 AddUserToVersions: migrated (0.0020s) =======================

== 20120708210305 AddLastPostedAtToUsers: migrating ===========================
-- add_column(:users, :last_posted_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0006s
-- add_index(:users, :last_posted_at)
   -> 0.0019s
-- execute("UPDATE users\n             SET last_posted_at = (SELECT MAX(posts.created_at)\n                                   FROM posts\n                                   WHERE posts.user_id = users.id)")
   -> 0.0006s
== 20120708210305 AddLastPostedAtToUsers: migrated (0.0036s) ==================

== 20120712150500 CreateCategories: migrating =================================
-- create_table(:categories, {:id=>:integer})
   -> 0.0038s
-- add_index(:categories, :name, {:unique=>true})
   -> 0.0019s
-- add_index(:categories, :forum_thread_count)
   -> 0.0021s
-- execute("INSERT INTO categories (name, forum_thread_count, created_at, updated_At)\n             SELECT tag, count(*), CURRENT_TIMESTAMP, CURRENT_TIMESTAMP from forum_threads\n             WHERE tag IS NOT NULL AND tag <> 'null'\n             GROUP BY tag")
   -> 0.0008s
== 20120712150500 CreateCategories: migrated (0.0101s) ========================

== 20120712151934 AddCategoryIdToForumThreads: migrating ======================
-- add_column(:forum_threads, :category_id, :integer)
   -> 0.0006s
-- execute("UPDATE forum_threads SET category_id =\n             (SELECT id\n              FROM categories\n              WHERE name = forum_threads.tag)")
   -> 0.0005s
-- remove_column(:forum_threads, :tag)
   -> 0.0003s
== 20120712151934 AddCategoryIdToForumThreads: migrated (0.0019s) =============

== 20120713201324 CreateCategoryFeaturedThreads: migrating ====================
-- create_table(:category_featured_threads, {:id=>false})
   -> 0.0009s
-- add_index(:category_featured_threads, [:category_id, :forum_thread_id], {:unique=>true, :name=>"cat_featured_threads"})
   -> 0.0021s
== 20120713201324 CreateCategoryFeaturedThreads: migrated (0.0043s) ===========

== 20120716020835 CreateSiteSettings: migrating ===============================
-- create_table(:site_settings, {:id=>:integer})
   -> 0.0051s
== 20120716020835 CreateSiteSettings: migrated (0.0063s) ======================

== 20120716173544 AddStatsToCategories: migrating =============================
-- add_column(:categories, :posts_year, :integer)
   -> 0.0006s
-- add_column(:categories, :posts_month, :integer)
   -> 0.0005s
-- add_column(:categories, :posts_week, :integer)
   -> 0.0003s
== 20120716173544 AddStatsToCategories: migrated (0.0024s) ====================

== 20120718044955 CreateUserOpenIds: migrating ================================
-- create_table(:user_open_ids, {:id=>:integer})
   -> 0.0058s
-- add_index(:user_open_ids, [:url])
   -> 0.0028s
== 20120718044955 CreateUserOpenIds: migrated (0.0096s) =======================

== 20120719004636 AddEmailHashedPasswordNameSaltToUsers: migrating ============
-- add_column(:users, :email, :string, {:limit=>256})
   -> 0.0005s
-- execute("update users set email= md5(random()::text) || 'domain.com'")
   -> 0.0008s
-- change_column(:users, :email, :string, {:limit=>256})
   -> 0.0005s
-- add_index(:users, [:email], {:unique=>true})
   -> 0.0023s
-- rename_column(:users, :display_username, :name)
   -> 0.0040s
-- add_column(:users, :password_hash, :string, {:limit=>64})
   -> 0.0007s
-- add_column(:users, :salt, :string, {:limit=>32})
   -> 0.0005s
-- add_column(:users, :active, :boolean)
   -> 0.0005s
-- add_column(:users, :activation_key, :string, {:limit=>32})
   -> 0.0006s
-- add_column(:user_open_ids, :active, :boolean, {:null=>false})
   -> 0.0006s
== 20120719004636 AddEmailHashedPasswordNameSaltToUsers: migrated (0.0132s) ===

== 20120720013733 AddUsernameLowerToUsers: migrating ==========================
-- add_column(:users, :username_lower, :string, {:limit=>20})
   -> 0.0005s
-- execute("update users set username_lower = lower(username)")
   -> 0.0005s
-- add_index(:users, [:username_lower], {:unique=>true})
   -> 0.0021s
-- change_column(:users, :username_lower, :string, {:limit=>20})
   -> 0.0011s
== 20120720013733 AddUsernameLowerToUsers: migrated (0.0059s) =================

== 20120720044246 AddAuthTokenToUsers: migrating ==============================
-- add_column(:users, :auth_token, :string, {:limit=>32})
   -> 0.0004s
-- add_index(:users, [:auth_token])
   -> 0.0015s
== 20120720044246 AddAuthTokenToUsers: migrated (0.0026s) =====================

== 20120720162422 AddForumIdToCategories: migrating ===========================
-- add_column(:categories, :forum_id, :integer)
   -> 0.0004s
-- execute("UPDATE categories SET forum_id = (SELECT MIN(id) FROM forums)")
   -> 0.0007s
-- change_column(:categories, :forum_id, :integer)
   -> 0.0008s
== 20120720162422 AddForumIdToCategories: migrated (0.0031s) ==================

== 20120723051512 AddNotNullsToUserOpenIds: migrating =========================
-- change_column(:user_open_ids, :user_id, :integer)
   -> 0.0005s
-- change_column(:user_open_ids, :email, :string)
   -> 0.0005s
-- change_column(:user_open_ids, :url, :string)
   -> 0.0009s
== 20120723051512 AddNotNullsToUserOpenIds: migrated (0.0037s) ================

== 20120724234502 AddLastSeenAtToUsers: migrating =============================
-- add_column(:users, :last_seen_at, :timestamp, {:precision=>nil})
   -> 0.0005s
== 20120724234502 AddLastSeenAtToUsers: migrated (0.0011s) ====================

== 20120724234711 AddWebsiteToUsers: migrating ================================
-- add_column(:users, :website, :string)
   -> 0.0007s
== 20120724234711 AddWebsiteToUsers: migrated (0.0015s) =======================

== 20120725183347 AddExcerptToCategories: migrating ===========================
-- add_column(:categories, :excerpt, :string, {:limit=>250})
   -> 0.0011s
== 20120725183347 AddExcerptToCategories: migrated (0.0020s) ==================

== 20120726201830 AddInvisibleToForumThread: migrating ========================
-- add_column(:forum_threads, :invisible, :boolean, {:default=>false, :null=>false})
   -> 0.0012s
-- change_column(:categories, :excerpt, :text)
   -> 0.0032s
== 20120726201830 AddInvisibleToForumThread: migrated (0.0053s) ===============

== 20120726235129 AddUserIdToCategories: migrating ============================
-- add_column(:categories, :user_id, :integer)
   -> 0.0008s
-- execute("UPDATE categories SET user_id = 1186")
   -> 0.0004s
-- change_column(:categories, :user_id, :integer)
   -> 0.0006s
== 20120726235129 AddUserIdToCategories: migrated (0.0027s) ===================

== 20120727005556 RemoveExcerptFromCategories: migrating ======================
-- remove_column(:categories, :excerpt)
   -> 0.0004s
== 20120727005556 RemoveExcerptFromCategories: migrated (0.0008s) =============

== 20120727150428 RenameInvisible: migrating ==================================
-- add_column(:forum_threads, :visible, :boolean, {:default=>true, :null=>false})
   -> 0.0016s
-- execute("UPDATE forum_threads SET visible = CASE WHEN invisible THEN false ELSE true END")
   -> 0.0006s
-- remove_column(:forum_threads, :invisible)
   -> 0.0007s
== 20120727150428 RenameInvisible: migrated (0.0038s) =========================

== 20120727213543 AddThreadCountsToCategories: migrating ======================
-- add_column(:categories, :threads_year, :integer)
   -> 0.0004s
-- add_column(:categories, :threads_month, :integer)
   -> 0.0002s
-- add_column(:categories, :threads_week, :integer)
   -> 0.0002s
-- remove_column(:categories, :posts_year)
   -> 0.0002s
-- remove_column(:categories, :posts_month)
   -> 0.0001s
-- remove_column(:categories, :posts_week)
   -> 0.0001s
== 20120727213543 AddThreadCountsToCategories: migrated (0.0017s) =============

== 20120802151210 AddIconToExpressionTypes: migrating =========================
-- add_column(:expression_types, :icon, :string, {:limit=>20})
   -> 0.0005s
-- execute("UPDATE expression_types SET icon = 'heart' WHERE expression_index = 1")
   -> 0.0009s
== 20120802151210 AddIconToExpressionTypes: migrated (0.0018s) ================

== 20120803191426 AddAdminFlagToUsers: migrating ==============================
-- add_column(:users, :admin, :boolean, {:default=>false, :null=>false})
   -> 0.0010s
-- add_column(:users, :moderator, :boolean, {:default=>false, :null=>false})
   -> 0.0009s
== 20120803191426 AddAdminFlagToUsers: migrated (0.0025s) =====================

== 20120806030641 AddNewPasswordNewSaltEmailTokenToUsers: migrating ===========
-- add_column(:users, :new_salt, :string, {:limit=>32})
   -> 0.0005s
-- add_column(:users, :new_password_hash, :string, {:limit=>64})
   -> 0.0004s
-- add_column(:users, :email_token, :string, {:limit=>32})
   -> 0.0003s
-- remove_column(:users, :activation_key)
   -> 0.0002s
== 20120806030641 AddNewPasswordNewSaltEmailTokenToUsers: migrated (0.0024s) ==

== 20120806062617 RemoveNewPasswordStuffFromUser: migrating ===================
-- remove_column(:users, :new_password_hash)
   -> 0.0003s
-- remove_column(:users, :new_salt)
   -> 0.0007s
== 20120806062617 RemoveNewPasswordStuffFromUser: migrated (0.0018s) ==========

== 20120807223020 CreateActions: migrating ====================================
-- create_table(:actions, {:id=>:integer})
   -> 0.0037s
-- add_index(:actions, [:user_id, :action_type])
   -> 0.0029s
-- add_index(:actions, [:acting_user_id])
   -> 0.0025s
== 20120807223020 CreateActions: migrated (0.0101s) ===========================

== 20120809020415 RemoveSiteId: migrating =====================================
-- drop_table("sites")
   -> 0.0008s
-- remove_index("incoming_links", nil, {:name=>"incoming_index"})
   -> 0.0004s
-- add_index("incoming_links", ["forum_thread_id", "post_number"], {:name=>"incoming_index"})
   -> 0.0029s
-- remove_column("incoming_links", "site_id")
   -> 0.0005s
-- remove_index("users", nil, {:name=>"index_users_on_site_id"})
   -> 0.0004s
-- remove_column("users", "site_id")
   -> 0.0002s
-- remove_index("expression_types", nil, {:name=>"index_expression_types_on_site_id_and_expression_index"})
   -> 0.0002s
-- remove_index("expression_types", nil, {:name=>"index_expression_types_on_site_id_and_name"})
   -> 0.0002s
-- remove_column("expression_types", "site_id")
   -> 0.0002s
-- add_index("expression_types", ["expression_index"], {:unique=>true})
   -> 0.0015s
-- add_index("expression_types", ["name"], {:unique=>true})
   -> 0.0014s
-- drop_table("forums")
   -> 0.0005s
== 20120809020415 RemoveSiteId: migrated (0.0133s) ============================

== 20120809030647 RemoveForumId: migrating ====================================
-- remove_column("forum_threads", "forum_id")
   -> 0.0004s
-- remove_column("categories", "forum_id")
   -> 0.0003s
== 20120809030647 RemoveForumId: migrated (0.0015s) ===========================

== 20120809053414 CorrectIndexingOnPosts: migrating ===========================
-- execute("update posts pp\nset post_number = c.real_number\nfrom\n(\n\tselect p1.id, count(*) real_number from posts p1\n\tjoin posts p2 on p1.forum_thread_id = p2.forum_thread_id\n\twhere p2.id <= p1.id and p1.forum_thread_id = p2.forum_thread_id\n      group by p1.id\n) as c\nwhere pp.id = c.id and pp.post_number <> c.real_number")
   -> 0.0006s
-- remove_index("posts", ["forum_thread_id", "post_number"], {:name=>"index_posts_on_forum_thread_id_and_post_number"})
   -> 0.0019s
-- add_index("posts", ["forum_thread_id", "post_number"], {:unique=>true})
   -> 0.0015s
== 20120809053414 CorrectIndexingOnPosts: migrated (0.0053s) ==================

== 20120809154750 RemoveIndexForNow: migrating ================================
-- remove_index("posts", ["forum_thread_id", "post_number"], {:name=>"index_posts_on_forum_thread_id_and_post_number"})
   -> 0.0025s
-- add_index("posts", ["forum_thread_id", "post_number"], {:unique=>false})
   -> 0.0020s
== 20120809154750 RemoveIndexForNow: migrated (0.0062s) =======================

== 20120809174649 CreatePostActions: migrating ================================
-- create_table(:post_actions, {:id=>:integer})
   -> 0.0023s
-- add_index(:post_actions, ["post_id"])
   -> 0.0024s
-- execute("create unique index idx_unique_actions on\n      post_actions(user_id, post_action_type_id, post_id) where deleted_at is null")
   -> 0.0021s
== 20120809174649 CreatePostActions: migrated (0.0077s) =======================

== 20120809175110 CreatePostActionTypes: migrating ============================
-- create_table(:post_action_types, {:id=>false})
   -> 0.0056s
== 20120809175110 CreatePostActionTypes: migrated (0.0062s) ===================

== 20120809201855 MigrateBookmarksToPostActions: migrating ====================
-- drop_table("bookmarks")
   -> 0.0009s
== 20120809201855 MigrateBookmarksToPostActions: migrated (0.0015s) ===========

== 20120810064839 RenameActionsToUserActions: migrating =======================
-- rename_table("actions", "user_actions")
   -> 0.0046s
== 20120810064839 RenameActionsToUserActions: migrated (0.0054s) ==============

== 20120812235417 RetireExpressions: migrating ================================
-- execute("insert into post_actions (post_action_type_id, user_id, post_id, created_at, updated_at)\nselect\n\tcase\n\t  when expression_index=1 then 3\n\t  when expression_index=2 then 4\n\t  when expression_index=3 then 2\n\tend\n\n\t, user_id, post_id, created_at, updated_at from expressions")
   -> 0.0005s
-- drop_table("expressions")
   -> 0.0011s
-- drop_table("expression_types")
   -> 0.0012s
== 20120812235417 RetireExpressions: migrated (0.0037s) =======================

== 20120813004347 RenameExpressionColumnsInForumThread: migrating =============
-- rename_column("forum_threads", "expression1_count", "off_topic_count")
   -> 0.0017s
-- rename_column("forum_threads", "expression2_count", "offensive_count")
   -> 0.0014s
-- rename_column("forum_threads", "expression3_count", "like_count")
   -> 0.0020s
-- remove_column("forum_threads", "expression4_count")
   -> 0.0004s
-- remove_column("forum_threads", "expression5_count")
   -> 0.0004s
== 20120813004347 RenameExpressionColumnsInForumThread: migrated (0.0068s) ====

== 20120813042912 RenameExpressionColumnsInPosts: migrating ===================
-- rename_column("posts", "expression1_count", "off_topic_count")
   -> 0.0039s
-- rename_column("posts", "expression2_count", "offensive_count")
   -> 0.0035s
-- rename_column("posts", "expression3_count", "like_count")
   -> 0.0026s
-- remove_column("posts", "expression4_count")
   -> 0.0006s
-- remove_column("posts", "expression5_count")
   -> 0.0004s
== 20120813042912 RenameExpressionColumnsInPosts: migrated (0.0119s) ==========

== 20120813201426 CreateForumThreadLinkClicks: migrating ======================
-- create_table(:forum_thread_link_clicks, {:id=>:integer})
   -> 0.0041s
-- add_column(:forum_thread_links, :clicks, :integer, {:default=>0, :null=>false})
   -> 0.0012s
-- add_index(:forum_thread_link_clicks, :forum_thread_link_id, {:name=>:by_link})
   -> 0.0022s
== 20120813201426 CreateForumThreadLinkClicks: migrated (0.0085s) =============

== 20120815004411 AddUniqueIndexToForumThreadLinks: migrating =================
-- execute("DELETE FROM forum_thread_links USING forum_thread_links ftl2\n              WHERE ftl2.forum_thread_id = forum_thread_links.forum_thread_id\n                              AND ftl2.post_id = forum_thread_links.post_id\n                              AND ftl2.url = forum_thread_links.url\n                              AND ftl2.id < forum_thread_links.id")
   -> 0.0007s
-- add_index(:forum_thread_links, [:forum_thread_id, :post_id, :url], {:unique=>true, :name=>"unique_post_links"})
   -> 0.0021s
== 20120815004411 AddUniqueIndexToForumThreadLinks: migrated (0.0035s) ========

== 20120815180106 AddPostTypeToPosts: migrating ===============================
-- add_column(:posts, :post_type, :integer, {:default=>1, :null=>false})
   -> 0.0009s
== 20120815180106 AddPostTypeToPosts: migrated (0.0013s) ======================

== 20120815204733 AddModeratorPostsCountToForumThreads: migrating =============
-- add_column(:forum_threads, :moderator_posts_count, :integer, {:default=>0, :null=>false})
   -> 0.0007s
-- execute("UPDATE forum_threads\n             SET moderator_posts_count = (SELECT COUNT(*)\n                                          FROM posts WHERE posts.forum_thread_id = forum_threads.id\n                                            AND posts.post_type = 2)")
   -> 0.0005s
== 20120815204733 AddModeratorPostsCountToForumThreads: migrated (0.0017s) ====

== 20120816050526 AddUniqueConstraintToUserActions: migrating =================
-- add_index(:user_actions, ["action_type", "user_id", "target_forum_thread_id", "target_post_id", "acting_user_id"], {:name=>"idx_unique_rows", :unique=>true})
   -> 0.0031s
== 20120816050526 AddUniqueConstraintToUserActions: migrated (0.0038s) ========

== 20120816205537 AddForumThreadStates: migrating =============================
-- add_column(:forum_threads, :closed, :boolean, {:default=>false, :null=>false})
   -> 0.0014s
-- add_column(:forum_threads, :sticky, :boolean, {:default=>false, :null=>false})
   -> 0.0007s
-- add_column(:forum_threads, :archived, :boolean, {:default=>false, :null=>false})
   -> 0.0008s
== 20120816205537 AddForumThreadStates: migrated (0.0038s) ====================

== 20120816205538 AddStarredAtToForumThreadUser: migrating ====================
-- add_column(:forum_thread_users, :starred_at, :timestamp, {:precision=>nil})
   -> 0.0005s
-- execute("alter table forum_thread_users add constraint test_starred_at check(starred = false or starred_at is not null)")
   -> 0.0008s
== 20120816205538 AddStarredAtToForumThreadUser: migrated (0.0035s) ===========

== 20120820191804 AddSearchIndices: migrating =================================
-- execute("CREATE INDEX idx_search_user ON users USING GIN(to_tsvector('english', username))")
   -> 0.0027s
-- execute("CREATE INDEX idx_search_thread ON forum_threads USING GIN(to_tsvector('english', title))")
   -> 0.0006s
== 20120820191804 AddSearchIndices: migrated (0.0041s) ========================

== 20120821191616 AddBumpedAtToForumThreads: migrating ========================
-- add_column(:forum_threads, :bumped_at, :timestamp, {:precision=>nil})
   -> 0.0006s
-- execute("UPDATE forum_threads SET bumped_at = last_posted_at")
   -> 0.0004s
-- change_column(:forum_threads, :bumped_at, :timestamp, {:precision=>nil})
   -> 0.0004s
-- remove_index(:forum_threads, :last_posted_at, {:name=>"index_forum_threads_on_last_posted_at"})
   -> 0.0014s
-- add_index(:forum_threads, :bumped_at, {:order=>{:bumped_at=>:desc}})
   -> 0.0017s
== 20120821191616 AddBumpedAtToForumThreads: migrated (0.0066s) ===============

== 20120823205956 AddSlugToCategories: migrating ==============================
-- add_column(:categories, :slug, :string)
   -> 0.0006s
-- execute("UPDATE categories SET slug = REPLACE(LOWER(name), ' ', '-')")
   -> 0.0005s
-- change_column(:categories, :slug, :string)
   -> 0.0005s
== 20120823205956 AddSlugToCategories: migrated (0.0035s) =====================

== 20120824171908 CreateCategoryFeaturedUsers: migrating ======================
-- create_table(:category_featured_users, {:id=>:integer})
   -> 0.0037s
-- add_index(:category_featured_users, [:category_id, :user_id], {:unique=>true})
   -> 0.0024s
== 20120824171908 CreateCategoryFeaturedUsers: migrated (0.0070s) =============

== 20120828204209 CreateOneboxRenders: migrating ==============================
-- create_table(:onebox_renders, {:id=>:integer})
   -> 0.0041s
-- add_index(:onebox_renders, :url, {:unique=>true})
   -> 0.0022s
== 20120828204209 CreateOneboxRenders: migrated (0.0080s) =====================

== 20120828204624 CreatePostOneboxRenders: migrating ==========================
-- create_table(:post_onebox_renders, {:id=>false})
   -> 0.0010s
-- add_index(:post_onebox_renders, [:post_id, :onebox_render_id], {:unique=>true})
   -> 0.0028s
== 20120828204624 CreatePostOneboxRenders: migrated (0.0045s) =================

== 20120830182736 AddPreviewToOneboxRenders: migrating ========================
-- add_column(:onebox_renders, :preview, :text, {:null=>true})
   -> 0.0006s
-- execute("DELETE FROM onebox_renders")
   -> 0.0004s
-- execute("DELETE FROM post_onebox_renders")
   -> 0.0003s
== 20120830182736 AddPreviewToOneboxRenders: migrated (0.0017s) ===============

== 20120910171504 RemoveDescriptionFromSiteSettings: migrating ================
-- remove_column(:site_settings, :description)
   -> 0.0003s
== 20120910171504 RemoveDescriptionFromSiteSettings: migrated (0.0006s) =======

== 20120918152319 RenameViewsToReads: migrating ===============================
-- rename_column(:posts, :views, :reads)
   -> 0.0021s
== 20120918152319 RenameViewsToReads: migrated (0.0025s) ======================

== 20120918205931 AddSubTagToForumThreads: migrating ==========================
-- add_column(:forum_threads, :sub_tag, :string)
   -> 0.0004s
-- add_index(:forum_threads, [:category_id, :sub_tag, :bumped_at])
   -> 0.0019s
== 20120918205931 AddSubTagToForumThreads: migrated (0.0033s) =================

== 20120919152846 AddHasBestOfToForumThreads: migrating =======================
-- add_column(:forum_threads, :has_best_of, :boolean, {:default=>false, :null=>false})
   -> 0.0006s
-- change_column(:posts, :score, :float)
   -> 0.0002s
== 20120919152846 AddHasBestOfToForumThreads: migrated (0.0014s) ==============

== 20120921055428 AddTwitterUserInfo: migrating ===============================
-- create_table(:twitter_user_infos, {:id=>:integer})
   -> 0.0057s
-- add_index(:twitter_user_infos, [:twitter_user_id], {:unique=>true})
   -> 0.0027s
-- add_index(:twitter_user_infos, [:user_id], {:unique=>true})
   -> 0.0018s
== 20120921055428 AddTwitterUserInfo: migrated (0.0110s) ======================

== 20120921155050 CreateArchetypes: migrating =================================
-- create_table(:archetypes, {:id=>:integer})
   -> 0.0048s
-- add_index(:archetypes, :name_key, {:unique=>true})
   -> 0.0031s
-- execute("INSERT INTO archetypes (name_key, created_at, updated_at) VALUES ('regular', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)")
   -> 0.0005s
-- execute("INSERT INTO archetypes (name_key, created_at, updated_at) VALUES ('poll', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)")
   -> 0.0002s
-- add_column(:forum_threads, :archetype_id, :integer, {:default=>1, :null=>false})
   -> 0.0011s
== 20120921155050 CreateArchetypes: migrated (0.0105s) ========================

== 20120921162512 AddMetaDataToForumThreads: migrating ========================
-- execute("CREATE EXTENSION IF NOT EXISTS hstore")
   -> 0.0003s
-- add_column(:forum_threads, :meta_data, :hstore)
   -> 0.0007s
== 20120921162512 AddMetaDataToForumThreads: migrated (0.0015s) ===============

== 20120921163606 CreateArchetypeOptions: migrating ===========================
-- create_table(:archetype_options, {:id=>:integer})
   -> 0.0059s
-- add_index(:archetype_options, :archetype_id)
   -> 0.0016s
-- execute("INSERT INTO archetype_options (archetype_id, key, option_type, created_at, updated_at)\n              VALUES (2, 'private_poll', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)")
   -> 0.0004s
-- execute("INSERT INTO archetype_options (archetype_id, key, option_type, created_at, updated_at)\n              VALUES (2, 'single_vote', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)")
   -> 0.0005s
== 20120921163606 CreateArchetypeOptions: migrated (0.0090s) ==================

== 20120924182000 AddHstoreExtension: migrating ===============================
-- execute("CREATE EXTENSION IF NOT EXISTS hstore")
   -> 0.0001s
== 20120924182000 AddHstoreExtension: migrated (0.0005s) ======================

== 20120924182031 AddVoteCountToPosts: migrating ==============================
-- add_column(:forum_threads, :vote_count, :integer, {:default=>0, :null=>false})
   -> 0.0009s
-- add_column(:posts, :vote_count, :integer, {:default=>0, :null=>false})
   -> 0.0005s
== 20120924182031 AddVoteCountToPosts: migrated (0.0020s) =====================

== 20120925171620 RemoveEnglishFromPostActionTypes: migrating =================
-- rename_column(:post_action_types, :name, :name_key)
   -> 0.0011s
-- execute("UPDATE post_action_types SET name_key = regexp_replace(lower(name_key), '[^a-z]', '_')")
   -> 0.0002s
-- remove_column(:post_action_types, :long_form)
   -> 0.0003s
-- remove_column(:post_action_types, :description)
   -> 0.0003s
== 20120925171620 RemoveEnglishFromPostActionTypes: migrated (0.0025s) ========

== 20120925190802 AddSequenceToPostActionTypes: migrating =====================
-- remove_column(:post_action_types, :id)
   -> 0.0007s
-- add_column(:post_action_types, :id, :integer, {:primary_key=>true})
   -> 0.0035s
== 20120925190802 AddSequenceToPostActionTypes: migrated (0.0049s) ============

== 20120928170023 AddSortOrderToPosts: migrating ==============================
-- add_column(:posts, :sort_order, :integer)
   -> 0.0009s
-- remove_index(:posts, :user_id, {:name=>"index_posts_on_user_id"})
   -> 0.0034s
-- execute("UPDATE posts AS p SET sort_order = post_number FROM forum_threads AS ft WHERE ft.id = p.forum_thread_id AND ft.archetype_id = 1")
   -> 0.0011s
== 20120928170023 AddSortOrderToPosts: migrated (0.0082s) =====================

== 20121009161116 AddEmailStuffToUsers: migrating =============================
-- add_column(:users, :last_emailed_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0006s
-- add_column(:users, :email_digests, :boolean, {:null=>false, :default=>true})
   -> 0.0011s
== 20121009161116 AddEmailStuffToUsers: migrated (0.0025s) ====================

== 20121011155904 CreateEmailLogs: migrating ==================================
-- create_table(:email_logs, {:id=>:integer})
   -> 0.0059s
-- add_index(:email_logs, :created_at, {:order=>{:created_at=>:desc}})
   -> 0.0021s
-- add_index(:email_logs, [:user_id, :created_at], {:order=>{:created_at=>:desc}})
   -> 0.0020s
== 20121011155904 CreateEmailLogs: migrated (0.0109s) =========================

== 20121017162924 ConvertArchetypes: migrating ================================
-- add_column(:forum_threads, :archetype, :string, {:default=>"regular", :null=>false})
   -> 0.0007s
-- execute("UPDATE forum_threads SET archetype = a.name_key FROM archetypes AS a WHERE a.id = forum_threads.archetype_id")
   -> 0.0007s
-- remove_column(:forum_threads, :archetype_id)
   -> 0.0004s
-- drop_table(:archetypes)
   -> 0.0008s
-- drop_table(:archetype_options)
   -> 0.0012s
== 20121017162924 ConvertArchetypes: migrated (0.0043s) =======================

== 20121018103721 RenameForumThreadTables: migrating ==========================
-- rename_table("forum_threads", "topics")
   -> 0.0059s
-- rename_table("forum_thread_link_clicks", "topic_link_clicks")
   -> 0.0023s
-- rename_table("forum_thread_links", "topic_links")
   -> 0.0029s
-- rename_table("forum_thread_users", "topic_users")
   -> 0.0050s
-- rename_table("category_featured_threads", "category_featured_topics")
   -> 0.0033s
-- rename_column("categories", "forum_thread_id", "topic_id")
   -> 0.0018s
-- rename_column("categories", "top1_forum_thread_id", "top1_topic_id")
   -> 0.0025s
-- rename_column("categories", "top2_forum_thread_id", "top2_topic_id")
   -> 0.0024s
-- rename_column("categories", "forum_thread_count", "topic_count")
   -> 0.0036s
-- rename_column("categories", "threads_year", "topics_year")
   -> 0.0021s
-- rename_column("categories", "threads_month", "topics_month")
   -> 0.0025s
-- rename_column("categories", "threads_week", "topics_week")
   -> 0.0023s
-- rename_column("category_featured_topics", "forum_thread_id", "topic_id")
   -> 0.0023s
-- rename_column("topic_link_clicks", "forum_thread_link_id", "topic_link_id")
   -> 0.0021s
-- rename_column("topic_links", "forum_thread_id", "topic_id")
   -> 0.0033s
-- rename_column("topic_links", "link_forum_thread_id", "link_topic_id")
   -> 0.0028s
-- rename_column("topic_users", "forum_thread_id", "topic_id")
   -> 0.0018s
-- rename_column("incoming_links", "forum_thread_id", "topic_id")
   -> 0.0024s
-- rename_column("notifications", "forum_thread_id", "topic_id")
   -> 0.0024s
-- rename_column("post_timings", "forum_thread_id", "topic_id")
   -> 0.0034s
-- rename_column("posts", "forum_thread_id", "topic_id")
   -> 0.0033s
-- rename_column("user_actions", "target_forum_thread_id", "target_topic_id")
   -> 0.0045s
-- rename_column("uploads", "forum_thread_id", "topic_id")
   -> 0.0029s
== 20121018103721 RenameForumThreadTables: migrated (0.0694s) =================

== 20121018133039 CreateTopicAllowedUsers: migrating ==========================
-- create_table(:topic_allowed_users, {:id=>:integer})
   -> 0.0030s
-- add_index(:topic_allowed_users, [:topic_id, :user_id], {:unique=>true})
   -> 0.0026s
-- add_index(:topic_allowed_users, [:user_id, :topic_id], {:unique=>true})
   -> 0.0020s
== 20121018133039 CreateTopicAllowedUsers: migrated (0.0081s) =================

== 20121018182709 FixNotificationData: migrating ==============================
-- execute("UPDATE notifications SET data = replace(data, 'thread_title', 'topic_title')")
   -> 0.0007s
== 20121018182709 FixNotificationData: migrated (0.0020s) =====================

== 20121106015500 DropAvatarUrlFromUsers: migrating ===========================
-- remove_column(:users, :avatar_url)
   -> 0.0004s
== 20121106015500 DropAvatarUrlFromUsers: migrated (0.0008s) ==================

== 20121108193516 AddPostActionIdToNotifications: migrating ===================
-- add_column(:notifications, :post_action_id, :integer, {:null=>true})
   -> 0.0005s
-- add_index(:notifications, :post_action_id)
   -> 0.0035s
== 20121108193516 AddPostActionIdToNotifications: migrated (0.0045s) ==========

== 20121109164630 CreateTrustLevels: migrating ================================
-- create_table(:trust_levels, {:id=>:integer})
   -> 0.0048s
-- add_column(:users, :trust_level_id, :integer, {:default=>1, :null=>false})
   -> 0.0007s
== 20121109164630 CreateTrustLevels: migrated (0.0059s) =======================

== 20121113200844 BioMarkdownSupport: migrating ===============================
-- rename_column(:users, :bio, :bio_raw)
   -> 0.0044s
-- add_column(:users, :bio_cooked, :text, {:null=>true})
   -> 0.0004s
== 20121113200844 BioMarkdownSupport: migrated (0.0052s) ======================

== 20121113200845 CreateFacebookUserInfos: migrating ==========================
-- create_table(:facebook_user_infos, {:id=>:integer})
   -> 0.0048s
-- add_index(:facebook_user_infos, :user_id, {:unique=>true})
   -> 0.0015s
-- add_index(:facebook_user_infos, :facebook_user_id, {:unique=>true})
   -> 0.0023s
== 20121113200845 CreateFacebookUserInfos: migrated (0.0099s) =================

== 20121115172544 RenameStickyToPinned: migrating =============================
-- rename_column(:topics, :sticky, :pinned)
   -> 0.0024s
== 20121115172544 RenameStickyToPinned: migrated (0.0029s) ====================

== 20121116212424 AddMoreEmailSettingsToUser: migrating =======================
-- add_column(:users, :email_private_messages, :boolean, {:default=>true})
   -> 0.0013s
-- add_column(:users, :email_mentions, :boolean, {:default=>true})
   -> 0.0008s
== 20121116212424 AddMoreEmailSettingsToUser: migrated (0.0030s) ==============

== 20121119190529 AddEmailSettingsToUsers: migrating ==========================
-- add_column(:users, :email_replied, :boolean, {:default=>true})
   -> 0.0011s
-- add_column(:users, :email_quoted, :boolean, {:default=>true})
   -> 0.0006s
== 20121119190529 AddEmailSettingsToUsers: migrated (0.0023s) =================

== 20121119200843 AddEmailDirectToUsers: migrating ============================
-- add_column(:users, :email_direct, :boolean, {:default=>true, :null=>false})
   -> 0.0007s
-- remove_column(:users, :email_mentions)
   -> 0.0004s
-- remove_column(:users, :email_replied)
   -> 0.0003s
-- remove_column(:users, :email_quoted)
   -> 0.0009s
== 20121119200843 AddEmailDirectToUsers: migrated (0.0031s) ===================

== 20121121202035 CreateInvites: migrating ====================================
-- create_table(:invites, {:id=>:integer})
   -> 0.0080s
-- add_index(:invites, :invite_key, {:unique=>true})
   -> 0.0045s
-- add_index(:invites, [:email, :invited_by_id], {:unique=>true})
   -> 0.0019s
== 20121121202035 CreateInvites: migrated (0.0155s) ===========================

== 20121121205215 CreateTopicInvites: migrating ===============================
-- create_table(:topic_invites, {:id=>:integer})
   -> 0.0038s
-- add_index(:topic_invites, [:topic_id, :invite_id], {:unique=>true})
   -> 0.0018s
-- add_index(:topic_invites, :invite_id)
   -> 0.0017s
== 20121121205215 CreateTopicInvites: migrated (0.0083s) ======================

== 20121122033316 AddMutedAtToTopicUser: migrating ============================
-- add_column(:topic_users, :muted_at, :timestamp, {:precision=>nil})
   -> 0.0006s
-- change_column(:topic_users, :last_read_post_number, :integer)
   -> 0.0006s
-- change_column_default(:topic_users, :last_read_post_number, nil)
   -> 0.0023s
== 20121122033316 AddMutedAtToTopicUser: migrated (0.0044s) ===================

== 20121123054127 MakePostNumberDistinct: migrating ===========================
== 20121123054127 MakePostNumberDistinct: migrated (0.0021s) ==================

== 20121123063630 CreateUserVisits: migrating =================================
-- create_table(:user_visits, {:id=>:integer})
   -> 0.0036s
-- add_index(:user_visits, [:user_id, :visited_at], {:unique=>true})
   -> 0.0017s
== 20121123063630 CreateUserVisits: migrated (0.0061s) ========================

== 20121129160035 CreateEmailTokens: migrating ================================
-- create_table(:email_tokens, {:id=>:integer})
   -> 0.0062s
-- add_index(:email_tokens, :token, {:unique=>true})
   -> 0.0016s
== 20121129160035 CreateEmailTokens: migrated (0.0085s) =======================

== 20121129184948 RemoveEmailTokenFromUsers: migrating ========================
-- execute("INSERT INTO email_tokens (user_id, email, token, created_at, updated_at)\n              SELECT id, email, email_token, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP\n              FROM users WHERE email_token IS NOT NULL")
   -> 0.0012s
-- remove_column(:users, :email_token)
   -> 0.0004s
== 20121129184948 RemoveEmailTokenFromUsers: migrated (0.0025s) ===============

== 20121130010400 CreateDrafts: migrating =====================================
-- create_table(:drafts, {:id=>:integer})
   -> 0.0059s
-- add_index(:drafts, [:user_id, :draft_key])
   -> 0.0032s
== 20121130010400 CreateDrafts: migrated (0.0098s) ============================

== 20121130191818 AddLinkPostIdToTopicLinks: migrating ========================
-- add_column(:topic_links, :link_post_id, :integer)
   -> 0.0006s
== 20121130191818 AddLinkPostIdToTopicLinks: migrated (0.0011s) ===============

== 20121202225421 AddVisitedAtToTopicUser: migrating ==========================
-- add_column(:topic_users, :last_visited_at, :timestamp, {:precision=>nil})
   -> 0.0008s
-- add_column(:topic_users, :first_visited_at, :timestamp, {:precision=>nil})
   -> 0.0003s
== 20121202225421 AddVisitedAtToTopicUser: migrated (0.0016s) =================

== 20121203181719 RenameSeenNotificaitonId: migrating =========================
-- rename_column(:users, :seen_notificaiton_id, :seen_notification_id)
   -> 0.0032s
== 20121203181719 RenameSeenNotificaitonId: migrated (0.0040s) ================

== 20121204183855 FixLinkPostId: migrating ====================================
== 20121204183855 FixLinkPostId: migrated (0.0126s) ===========================

== 20121204193747 AddAnotherFeaturedUserToTopics: migrating ===================
-- add_column(:topics, :featured_user4_id, :integer, {:null=>true})
   -> 0.0006s
== 20121204193747 AddAnotherFeaturedUserToTopics: migrated (0.0013s) ==========

== 20121205162143 AddApprovedToUsers: migrating ===============================
-- add_column(:users, :approved, :boolean, {:null=>false, :default=>false})
   -> 0.0013s
-- add_column(:users, :approved_by_id, :integer, {:null=>true})
   -> 0.0004s
-- add_column(:users, :approved_at, :timestamp, {:null=>true})
   -> 0.0003s
== 20121205162143 AddApprovedToUsers: migrated (0.0031s) ======================

== 20121207000741 AddNotificationsToTopicUsers: migrating =====================
-- add_column(:topic_users, :notifications, :integer, {:default=>2})
   -> 0.0009s
-- add_column(:topic_users, :notifications_changed_at, :timestamp, {:precision=>nil})
   -> 0.0003s
-- add_column(:topic_users, :notifications_reason_id, :integer)
   -> 0.0002s
== 20121207000741 AddNotificationsToTopicUsers: migrated (0.0023s) ============

== 20121211233131 CreateSiteCustomizations: migrating =========================
-- create_table(:site_customizations, {:id=>:integer})
   -> 0.0057s
-- add_index(:site_customizations, [:key])
   -> 0.0022s
== 20121211233131 CreateSiteCustomizations: migrated (0.0087s) ================

== 20121216230719 AddOverrideDefaultStyleToSiteCustomization: migrating =======
-- add_column(:site_customizations, :override_default_style, :boolean, {:default=>false, :null=>false})
   -> 0.0012s
-- add_column(:site_customizations, :stylesheet_baked, :text, {:default=>"", :null=>false})
   -> 0.0010s
== 20121216230719 AddOverrideDefaultStyleToSiteCustomization: migrated (0.0031s)

== 20121218205642 AddTopicsEnteredToUsers: migrating ==========================
-- add_column(:users, :topics_entered, :integer, {:default=>0, :null=>false})
   -> 0.0015s
-- add_column(:users, :posts_read_count, :integer, {:default=>0, :null=>false})
   -> 0.0012s
== 20121218205642 AddTopicsEnteredToUsers: migrated (0.0039s) =================

== 20121224072204 AddLastEditorIdToPosts: migrating ===========================
-- add_column(:posts, :last_editor_id, :integer)
   -> 0.0004s
== 20121224072204 AddLastEditorIdToPosts: migrated (0.0009s) ==================

== 20121224095139 CreateDraftSequence: migrating ==============================
-- create_table(:draft_sequences, {:id=>:integer})
   -> 0.0065s
-- add_index(:draft_sequences, [:user_id, :draft_key], {:unique=>true})
   -> 0.0030s
== 20121224095139 CreateDraftSequence: migrated (0.0109s) =====================

== 20121224100650 AddSequenceToDrafts: migrating ==============================
-- add_column(:drafts, :sequence, :integer, {:null=>false, :default=>0})
   -> 0.0008s
== 20121224100650 AddSequenceToDrafts: migrated (0.0014s) =====================

== 20121228192219 AddDeletedAtToInvites: migrating ============================
-- add_column(:invites, :deleted_at, :timestamp, {:precision=>nil})
   -> 0.0005s
== 20121228192219 AddDeletedAtToInvites: migrated (0.0015s) ===================

== 20130107165207 AddDigestAfterDaysToUsers: migrating ========================
-- add_column(:users, :digest_after_days, :integer, {:default=>7, :null=>false})
   -> 0.0011s
== 20130107165207 AddDigestAfterDaysToUsers: migrated (0.0017s) ===============

== 20130108195847 AddPreviousVisitAtToUsers: migrating ========================
-- add_column(:users, :previous_visit_at, :timestamp)
   -> 0.0006s
== 20130108195847 AddPreviousVisitAtToUsers: migrated (0.0015s) ===============

== 20130115012140 MergeMuteOptionsOnTopicUsers: migrating =====================
-- execute("update topic_users set notifications = 0 where notifications = 3")
   -> 0.0006s
-- execute("update topic_users set notifications = 1 where notifications = 2")
   -> 0.0004s
-- execute("update topic_users set notifications = 2 where notifications = 1")
   -> 0.0003s
-- execute("update topic_users set notifications = 0 where muted_at is not null")
   -> 0.0002s
-- rename_column(:topic_users, :notifications, :notification_level)
   -> 0.0027s
-- remove_column(:topic_users, :muted_at)
   -> 0.0006s
== 20130115012140 MergeMuteOptionsOnTopicUsers: migrated (0.0065s) ============

== 20130115021937 CorrectDefaultOnNotificationLevel: migrating ================
-- change_column(:topic_users, :notification_level, :integer)
   -> 0.0007s
== 20130115021937 CorrectDefaultOnNotificationLevel: migrated (0.0059s) =======

== 20130115043603 OopsUnwatchABoatOfWatchedStuff: migrating ===================
-- execute("update topic_users set notification_level = 1 where notifications_reason_id is null and notification_level = 2")
   -> 0.0004s
== 20130115043603 OopsUnwatchABoatOfWatchedStuff: migrated (0.0010s) ==========

== 20130116151829 RemoveSubTagFromTopics: migrating ===========================
-- remove_column(:topics, :sub_tag)
   -> 0.0006s
== 20130116151829 RemoveSubTagFromTopics: migrated (0.0013s) ==================

== 20130120222728 FixSearch: migrating ========================================
-- execute("drop index idx_search_thread")
   -> 0.0006s
-- execute("drop index idx_search_user")
   -> 0.0003s
-- execute("create table posts_search (id integer not null primary key, search_data tsvector)")
   -> 0.0063s
-- execute("create table users_search (id integer not null primary key, search_data tsvector)")
   -> 0.0038s
-- execute("create table categories_search (id integer not null primary key, search_data tsvector)")
   -> 0.0033s
-- execute("create index idx_search_post on posts_search using gin(search_data) ")
   -> 0.0008s
-- execute("create index idx_search_user on users_search using gin(search_data) ")
   -> 0.0005s
-- execute("create index idx_search_category on categories_search using gin(search_data) ")
   -> 0.0006s
== 20130120222728 FixSearch: migrated (0.0174s) ===============================

== 20130121231352 AddTrackingToTopicUsers: migrating ==========================
-- execute("update topic_users set notification_level = 3 where notification_level = 2")
   -> 0.0003s
== 20130121231352 AddTrackingToTopicUsers: migrated (0.0008s) =================

== 20130122051134 AddAutoTrackTopicsToUser: migrating =========================
-- add_column(:users, :auto_track_topics, :boolean, {:null=>false, :default=>false})
   -> 0.0011s
== 20130122051134 AddAutoTrackTopicsToUser: migrated (0.0016s) ================

== 20130122232825 AddAutoTrackAfterSecondsAndBanningAndDobToUser: migrating ===
-- add_column(:users, :banned_at, :timestamp, {:precision=>nil})
   -> 0.0007s
-- add_column(:users, :banned_till, :timestamp, {:precision=>nil})
   -> 0.0004s
-- add_column(:users, :date_of_birth, :date)
   -> 0.0003s
-- add_column(:users, :auto_track_topics_after_msecs, :integer)
   -> 0.0003s
-- add_column(:users, :views, :integer, {:null=>false, :default=>0})
   -> 0.0006s
-- remove_column(:users, :auto_track_topics)
   -> 0.0010s
-- add_column(:topic_users, :total_msecs_viewed, :integer, {:null=>false, :default=>0})
   -> 0.0011s
-- execute("update topic_users set total_msecs_viewed =\n       (\n         select coalesce(sum(msecs) ,0)\n         from post_timings t\n         where topic_users.topic_id = t.topic_id and topic_users.user_id = t.user_id\n       )")
   -> 0.0009s
== 20130122232825 AddAutoTrackAfterSecondsAndBanningAndDobToUser: migrated (0.0063s)

== 20130123070909 AutoTrackAllTopicsRepliedTo: migrating ======================
-- execute("update topic_users set notification_level = 2, notifications_reason_id = 4\n      from posts p\n      where\n        notification_level = 1 and\n        notifications_reason_id is null and\n        p.topic_id = topic_users.topic_id and\n        p.user_id = topic_users.user_id\n    ")
   -> 0.0006s
== 20130123070909 AutoTrackAllTopicsRepliedTo: migrated (0.0011s) =============

== 20130125002652 AddHiddenToPosts: migrating =================================
-- add_column(:posts, :hidden, :boolean, {:null=>false, :default=>false})
   -> 0.0011s
-- add_column(:posts, :hidden_reason_id, :integer)
   -> 0.0010s
== 20130125002652 AddHiddenToPosts: migrated (0.0031s) ========================

== 20130125030305 AddFieldsToPostAction: migrating ============================
-- add_column(:post_actions, :deleted_by, :integer)
   -> 0.0005s
-- add_column(:post_actions, :message, :text)
   -> 0.0028s
== 20130125030305 AddFieldsToPostAction: migrated (0.0041s) ===================

== 20130125031122 CorrectIndexOnPostAction: migrating =========================
-- remove_index("post_actions", nil, {:name=>"idx_unique_actions"})
   -> 0.0004s
-- add_index("post_actions", ["user_id", "post_action_type_id", "post_id", "deleted_at"], {:name=>"idx_unique_actions", :unique=>true})
   -> 0.0026s
== 20130125031122 CorrectIndexOnPostAction: migrated (0.0044s) ================

== 20130127213646 RemoveTrustLevels: migrating ================================
-- drop_table(:trust_levels)
   -> 0.0016s
-- change_column_default(:users, :trust_level_id, 0)
   -> 0.0041s
-- rename_column(:users, :trust_level_id, :trust_level)
   -> 0.0043s
-- update("UPDATE users set trust_level = 1")
   -> 0.0008s
   -> 0 rows
-- remove_column(:users, :moderator)
   -> 0.0004s
-- add_column(:users, :flag_level, :integer, {:null=>false, :default=>0})
   -> 0.0006s
== 20130127213646 RemoveTrustLevels: migrated (0.0141s) =======================

== 20130128182013 TrustLevelDefaultNull: migrating ============================
-- change_column_default(:users, :trust_level, nil)
   -> 0.0032s
== 20130128182013 TrustLevelDefaultNull: migrated (0.0037s) ===================

== 20130129010625 RemovePmReflections: migrating ==============================
-- execute("delete from topic_links where link_topic_id in (select id from topics where archetype = 'private_message') ")
   -> 0.0006s
== 20130129010625 RemovePmReflections: migrated (0.0012s) =====================

== 20130129163244 AddTimeReadToUsers: migrating ===============================
-- add_column(:users, :time_read, :integer, {:default=>0, :null=>false})
   -> 0.0009s
-- execute("UPDATE users SET time_read = posts_read_count * 20")
   -> 0.0006s
== 20130129163244 AddTimeReadToUsers: migrated (0.0025s) ======================

== 20130129174845 AddDaysVisitedToUsers: migrating ============================
-- add_column(:users, :days_visited, :integer, {:null=>false, :default=>0})
   -> 0.0010s
-- execute("UPDATE users AS u SET days_visited = (SELECT COUNT(*) FROM user_visits AS uv WHERE uv.user_id = u.id)")
   -> 0.0007s
== 20130129174845 AddDaysVisitedToUsers: migrated (0.0025s) ===================

== 20130130154611 RemoveIndexFromViews: migrating =============================
-- remove_index("views", nil, {:name=>"unique_views"})
   -> 0.0004s
-- change_column(:views, :viewed_at, :date)
   -> 0.0030s
== 20130130154611 RemoveIndexFromViews: migrated (0.0051s) ====================

== 20130131055710 AddCustomFlagCountToTopics: migrating =======================
-- add_column(:topics, :custom_flag_count, :integer, {:null=>false, :default=>0})
   -> 0.0015s
-- add_column(:posts, :custom_flag_count, :integer, {:null=>false, :default=>0})
   -> 0.0006s
== 20130131055710 AddCustomFlagCountToTopics: migrated (0.0027s) ==============

== 20130201000828 AddColumnSummariesToPostsAndTopics: migrating ===============
-- add_column(:posts, :spam_count, :integer, {:default=>0, :null=>false})
   -> 0.0009s
-- add_column(:topics, :spam_count, :integer, {:default=>0, :null=>false})
   -> 0.0007s
-- add_column(:posts, :illegal_count, :integer, {:default=>0, :null=>false})
   -> 0.0004s
-- add_column(:topics, :illegal_count, :integer, {:default=>0, :null=>false})
   -> 0.0005s
-- add_column(:posts, :inappropriate_count, :integer, {:default=>0, :null=>false})
   -> 0.0005s
-- add_column(:topics, :inappropriate_count, :integer, {:default=>0, :null=>false})
   -> 0.0005s
-- remove_column(:posts, :offensive_count)
   -> 0.0004s
-- remove_column(:topics, :offensive_count)
   -> 0.0003s
== 20130201000828 AddColumnSummariesToPostsAndTopics: migrated (0.0062s) ======

== 20130201023409 AddPositionToPostActionType: migrating ======================
-- add_column(:post_action_types, :position, :integer, {:default=>0, :null=>false})
   -> 0.0010s
== 20130201023409 AddPositionToPostActionType: migrated (0.0016s) =============

== 20130203204338 AddLastVersionAtToPosts: migrating ==========================
-- add_column(:posts, :last_version_at, :timestamp)
   -> 0.0007s
-- execute("UPDATE posts SET last_version_at = COALESCE((SELECT max(created_at)\n                                                 FROM versions WHERE versions.versioned_id = posts.id\n                                                    AND versions.versioned_type = 'Post'), posts.created_at)")
   -> 0.0005s
-- change_column(:posts, :last_version_at, :timestamp)
   -> 0.0005s
== 20130203204338 AddLastVersionAtToPosts: migrated (0.0032s) =================

== 20130204000159 AddIpAddressToUsers: migrating ==============================
-- execute("alter table users add column ip_address inet")
   -> 0.0004s
== 20130204000159 AddIpAddressToUsers: migrated (0.0009s) =====================

== 20130205021905 AlterFacebookUserId: migrating ==============================
-- change_column(:facebook_user_infos, :facebook_user_id, :integer, {:limit=>8})
   -> 0.0115s
== 20130205021905 AlterFacebookUserId: migrated (0.0130s) =====================

== 20130207200019 AddUserDeletedToPosts: migrating ============================
-- add_column(:posts, :user_deleted, :boolean, {:null=>false, :default=>false})
   -> 0.0015s
== 20130207200019 AddUserDeletedToPosts: migrated (0.0021s) ===================

== 20130208220635 RemoveReplyBelowPostNumberFromPosts: migrating ==============
-- remove_column(:posts, :reply_below_post_number)
   -> 0.0003s
== 20130208220635 RemoveReplyBelowPostNumberFromPosts: migrated (0.0007s) =====

== 20130213021450 RemoveTopicResponseActions: migrating =======================
-- execute("delete from user_actions where action_type = 8")
   -> 0.0004s
== 20130213021450 RemoveTopicResponseActions: migrated (0.0008s) ==============

== 20130213203300 AddNewTopicDurationMinutesToUsers: migrating ================
-- add_column(:users, :new_topic_duration_minutes, :integer)
   -> 0.0006s
== 20130213203300 AddNewTopicDurationMinutesToUsers: migrated (0.0011s) =======

== 20130221215017 AddDescriptionToCategories: migrating =======================
-- add_column(:categories, :description, :text, {:null=>true})
   -> 0.0006s
-- remove_column(:categories, :top1_topic_id)
   -> 0.0002s
-- remove_column(:categories, :top2_topic_id)
   -> 0.0001s
-- remove_column(:categories, :top1_user_id)
   -> 0.0002s
-- remove_column(:categories, :top2_user_id)
   -> 0.0002s
== 20130221215017 AddDescriptionToCategories: migrated (0.0024s) ==============

== 20130226015336 AddGithubUserInfo: migrating ================================
-- create_table(:github_user_infos, {:id=>:integer})
   -> 0.0045s
-- add_index(:github_user_infos, [:github_user_id], {:unique=>true})
   -> 0.0022s
-- add_index(:github_user_infos, [:user_id], {:unique=>true})
   -> 0.0012s
== 20130226015336 AddGithubUserInfo: migrated (0.0088s) =======================

== 20130306180148 AddClearedPinnedToTopicUsers: migrating =====================
-- add_column(:topic_users, :cleared_pinned_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0004s
-- add_column(:topics, :pinned_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0003s
-- execute("UPDATE topics SET pinned_at = created_at WHERE pinned")
   -> 0.0002s
-- remove_column(:topics, :pinned)
   -> 0.0005s
== 20130306180148 AddClearedPinnedToTopicUsers: migrated (0.0022s) ============

== 20130311181327 RemoveExtraSpamRecord: migrating ============================
-- execute("UPDATE post_actions SET post_action_type_id = 7 where post_action_type_id = 8")
   -> 0.0003s
-- execute("DELETE FROM post_action_types WHERE id = 8")
   -> 0.0003s
== 20130311181327 RemoveExtraSpamRecord: migrated (0.0011s) ===================

== 20130313004922 AddExternalLinksInNewTabAnDisableQuotingToUser: migrating ===
-- add_column(:users, :external_links_in_new_tab, :boolean, {:default=>false, :null=>false})
   -> 0.0006s
-- add_column(:users, :enable_quoting, :boolean, {:default=>true, :null=>false})
   -> 0.0011s
== 20130313004922 AddExternalLinksInNewTabAnDisableQuotingToUser: migrated (0.0022s)

== 20130314093434 AddForegroundColorToCategories: migrating ===================
-- add_column(:categories, :text_color, :string, {:limit=>6, :null=>false, :default=>"FFFFFF"})
   -> 0.0012s
== 20130314093434 AddForegroundColorToCategories: migrated (0.0017s) ==========

== 20130315180637 EnableTrigramSupport: migrating =============================
-- execute("CREATE EXTENSION IF NOT EXISTS pg_trgm")
   -> 0.0003s
== 20130315180637 EnableTrigramSupport: migrated (0.0010s) ====================

== 20130319122248 AddReplyToUserIdToPost: migrating ===========================
-- add_column(:posts, :reply_to_user_id, :integer)
   -> 0.0006s
-- execute("UPDATE posts p SET reply_to_user_id = (\n                SELECT u.id from users u\n                JOIN posts p2 ON  p2.user_id = u.id AND\n                                  p2.post_number = p.reply_to_post_number AND\n                                  p2.topic_id = p.topic_id\n            )")
   -> 0.0010s
== 20130319122248 AddReplyToUserIdToPost: migrated (0.0025s) ==================

== 20130320012100 AddUserIndexesToPostsAndTopics: migrating ===================
-- execute("CREATE INDEX idx_posts_user_id_deleted_at\n              ON posts(user_id) WHERE deleted_at IS NULL")
   -> 0.0018s
-- execute("CREATE INDEX idx_topics_user_id_deleted_at\n              ON topics(user_id) WHERE deleted_at IS NULL")
   -> 0.0017s
== 20130320012100 AddUserIndexesToPostsAndTopics: migrated (0.0044s) ==========

== 20130320024345 AddModeratorToUser: migrating ===============================
-- add_column(:users, :moderator, :boolean, {:default=>false})
   -> 0.0021s
-- execute("UPDATE users SET trust_level = 1, moderator = 't' where trust_level = 5")
   -> 0.0005s
== 20130320024345 AddModeratorToUser: migrated (0.0035s) ======================

== 20130321154905 RemoveOneboxesFromDb: migrating =============================
-- drop_table(:post_onebox_renders)
   -> 0.0007s
-- drop_table(:onebox_renders)
   -> 0.0010s
== 20130321154905 RemoveOneboxesFromDb: migrated (0.0027s) ====================

== 20130322183614 AddPercentRankToPosts: migrating ============================
-- add_column(:posts, :percent_rank, :float, {:default=>1.0})
   -> 0.0021s
-- execute("UPDATE posts SET percent_rank = x.percent_rank\n              FROM (SELECT id, percent_rank()\n                    OVER (PARTITION BY topic_id ORDER BY SCORE DESC)\n                    FROM posts) AS x\n              WHERE x.id = posts.id")
   -> 0.0007s
== 20130322183614 AddPercentRankToPosts: migrated (0.0034s) ===================

== 20130326210101 AddHotnessToCategory: migrating =============================
-- add_column(:categories, :hotness, :float, {:default=>5.0, :null=>false})
   -> 0.0010s
== 20130326210101 AddHotnessToCategory: migrated (0.0016s) ====================

== 20130327185852 UpdateSiteSettingsForHot: migrating =========================
-- execute("UPDATE site_settings SET value = REPLACE(value, 'popular|', 'latest|hot|') where name = 'top_menu'")
   -> 0.0005s
== 20130327185852 UpdateSiteSettingsForHot: migrated (0.0011s) ================

== 20130328162943 CreateHotTopics: migrating ==================================
-- create_table(:hot_topics, {:force=>true, :id=>:integer})
   -> 0.0039s
-- add_index(:hot_topics, :topic_id, {:unique=>true})
   -> 0.0021s
-- add_index(:hot_topics, :score, {:order=>"desc"})
   -> 0.0026s
== 20130328162943 CreateHotTopics: migrated (0.0097s) =========================

== 20130328182433 AddScoreToTopics: migrating =================================
-- add_column(:topics, :score, :float)
   -> 0.0007s
-- add_column(:topics, :percent_rank, :float, {:null=>false, :default=>1.0})
   -> 0.0010s
== 20130328182433 AddScoreToTopics: migrated (0.0024s) ========================

== 20130402210723 AddValuesToHotTopics: migrating =============================
-- add_column(:hot_topics, :random_bias, :float)
   -> 0.0004s
-- add_column(:hot_topics, :random_multiplier, :float)
   -> 0.0003s
-- add_column(:hot_topics, :days_ago_bias, :float)
   -> 0.0004s
-- add_column(:hot_topics, :days_ago_multiplier, :float)
   -> 0.0005s
-- add_column(:hot_topics, :hot_topic_type, :integer)
   -> 0.0003s
== 20130402210723 AddValuesToHotTopics: migrated (0.0033s) ====================

== 20130404143437 CreateSiteContents: migrating ===============================
-- create_table(:site_contents, {:force=>true, :id=>false})
   -> 0.0029s
-- add_index(:site_contents, :content_type, {:unique=>true})
   -> 0.0019s
== 20130404143437 CreateSiteContents: migrated (0.0057s) ======================

== 20130404232558 AddUserExtras: migrating ====================================
-- add_column(:users, :likes_given, :integer, {:null=>false, :default=>0})
   -> 0.0012s
-- add_column(:users, :likes_received, :integer, {:null=>false, :default=>0})
   -> 0.0007s
-- add_column(:users, :topic_reply_count, :integer, {:null=>false, :default=>0})
   -> 0.0005s
-- execute("UPDATE users u\nSET\n    likes_given = X.likes_given\nFROM (\n  SELECT\n    a.user_id,\n    COUNT(*) likes_given\n  FROM user_actions a\n  JOIN posts p ON p.id = a.target_post_id\n  WHERE p.deleted_at IS NULL AND a.action_type = 1\n  GROUP BY a.user_id\n) as X\nWHERE X.user_id = u.id\n")
   -> 0.0007s
-- execute("UPDATE users u\nSET\n    likes_received = Y.likes_received\nFROM (\n  SELECT\n    a.user_id,\n    COUNT(*) likes_received\n  FROM user_actions a\n  JOIN posts p ON p.id = a.target_post_id\n  WHERE p.deleted_at IS NULL AND a.action_type = 2\n  GROUP BY a.user_id\n) as Y\nWHERE Y.user_id = u.id\n")
   -> 0.0004s
-- execute("UPDATE users u\nSET\n    topic_reply_count = Z.topic_reply_count\nFROM (\n  SELECT\n    p.user_id,\n    COUNT(DISTINCT topic_id) topic_reply_count\n  FROM posts p\n  JOIN topics t on t.id = p.topic_id\n  WHERE t.user_id <> p.user_id AND\n        p.deleted_at IS NULL AND t.deleted_at IS NULL\n  GROUP BY p.user_id\n) Z\nWHERE\n  Z.user_id = u.id\n")
   -> 0.0007s
== 20130404232558 AddUserExtras: migrated (0.0049s) ===========================

== 20130411205132 CreateAdminLogs: migrating ==================================
-- create_table(:admin_logs, {:force=>true, :id=>:integer})
   -> 0.0052s
== 20130411205132 CreateAdminLogs: migrated (0.0058s) =========================

== 20130412015502 CorrectCountsOnPosts: migrating =============================
-- rename_column(:posts, :custom_flag_count, :notify_moderators_count)
   -> 0.0033s
-- add_column(:posts, :notify_user_count, :integer, {:default=>0, :null=>false})
   -> 0.0016s
== 20130412015502 CorrectCountsOnPosts: migrated (0.0060s) ====================

== 20130412020156 CorrectCountsOnTopics: migrating ============================
-- rename_column(:topics, :custom_flag_count, :notify_moderators_count)
   -> 0.0025s
-- add_column(:topics, :notify_user_count, :integer, {:default=>0, :null=>false})
   -> 0.0010s
== 20130412020156 CorrectCountsOnTopics: migrated (0.0044s) ===================

== 20130416004607 CreateGroups: migrating =====================================
-- create_table(:groups, {:force=>true, :id=>:integer})
   -> 0.0060s
== 20130416004607 CreateGroups: migrated (0.0069s) ============================

== 20130416004933 GroupUsers: migrating =======================================
-- create_table(:group_users, {:force=>true, :id=>:integer})
   -> 0.0030s
-- add_index(:group_users, [:group_id, :user_id], {:unique=>true})
   -> 0.0014s
== 20130416004933 GroupUsers: migrated (0.0051s) ==============================

== 20130416170855 AddSubtypeToTopics: migrating ===============================
-- add_column(:topics, :subtype, :string)
   -> 0.0005s
-- execute("update topics set subtype = 'user_to_user' where archetype = 'private_message'")
   -> 0.0003s
== 20130416170855 AddSubtypeToTopics: migrated (0.0016s) ======================

== 20130419195746 IncreaseDataLengthOnNotifications: migrating ================
-- execute("ALTER TABLE notifications ALTER COLUMN data TYPE VARCHAR(1000)")
   -> 0.0079s
== 20130419195746 IncreaseDataLengthOnNotifications: migrated (0.0088s) =======

== 20130422050626 AddRelatedPostIdToPostActions: migrating ====================
-- add_column(:post_actions, :related_post_id, :integer)
   -> 0.0005s
== 20130422050626 AddRelatedPostIdToPostActions: migrated (0.0011s) ===========

== 20130424015746 AddSlugToTopics: migrating ==================================
-- add_column(:topics, :slug, :string)
   -> 0.0005s
== 20130424015746 AddSlugToTopics: migrated (0.0009s) =========================

== 20130424055025 AddUserIdToIncomingLinks: migrating =========================
-- add_column(:incoming_links, :user_id, :integer)
   -> 0.0004s
== 20130424055025 AddUserIdToIncomingLinks: migrated (0.0010s) ================

== 20130426044914 AllowNullsInIncomingLinks: migrating ========================
-- change_column(:incoming_links, :referer, :string, {:limit=>1000})
   -> 0.0007s
-- change_column(:incoming_links, :domain, :string, {:limit=>100})
   -> 0.0005s
== 20130426044914 AllowNullsInIncomingLinks: migrated (0.0028s) ===============

== 20130426052257 AddIncomingIpCurrentUserIdToIncomingLinks: migrating ========
-- add_column(:incoming_links, :ip_address, :inet)
   -> 0.0005s
-- add_column(:incoming_links, :current_user_id, :int)
   -> 0.0004s
== 20130426052257 AddIncomingIpCurrentUserIdToIncomingLinks: migrated (0.0015s)

== 20130428194335 AddUnstarredAtToTopicUsers: migrating =======================
-- add_column(:topic_users, :unstarred_at, :timestamp, {:precision=>nil})
   -> 0.0008s
== 20130428194335 AddUnstarredAtToTopicUsers: migrated (0.0014s) ==============

== 20130429000101 AddSecurityToCategories: migrating ==========================
-- add_column(:categories, :secure, :boolean, {:default=>false, :null=>false})
   -> 0.0014s
-- create_table(:category_groups, {:force=>true, :id=>:integer})
   -> 0.0044s
== 20130429000101 AddSecurityToCategories: migrated (0.0066s) =================

== 20130430052751 AddTopicAllowedGroups: migrating ============================
-- create_table(:topic_allowed_groups, {:force=>true, :id=>:integer})
   -> 0.0035s
-- add_index(:topic_allowed_groups, [:group_id, :topic_id], {:unique=>true})
   -> 0.0014s
-- add_index(:topic_allowed_groups, [:topic_id, :group_id], {:unique=>true})
   -> 0.0015s
== 20130430052751 AddTopicAllowedGroups: migrated (0.0070s) ===================

== 20130501105651 FixTopicAllowedGroups: migrating ============================
-- column_exists?(:topic_allowed_groups, :integer)
   -> 0.0014s
== 20130501105651 FixTopicAllowedGroups: migrated (0.0024s) ===================

== 20130506020935 AddAutomaticToGroups: migrating =============================
-- add_column(:groups, :automatic, :boolean, {:default=>false, :null=>false})
   -> 0.0010s
-- execute("    ALTER SEQUENCE groups_id_seq START WITH 100\n")
   -> 0.0003s
== 20130506020935 AddAutomaticToGroups: migrated (0.0023s) ====================

== 20130506185042 AddAutoCloseAtToTopics: migrating ===========================
-- add_column(:topics, :auto_close_at, :timestamp, {:precision=>nil})
   -> 0.0006s
-- add_column(:topics, :auto_close_user_id, :integer)
   -> 0.0003s
== 20130506185042 AddAutoCloseAtToTopics: migrated (0.0016s) ==================

== 20130508040235 AddUserCountToGroups: migrating =============================
-- add_column(:groups, :user_count, :integer, {:null=>false, :default=>0})
   -> 0.0010s
== 20130508040235 AddUserCountToGroups: migrated (0.0016s) ====================

== 20130509040248 UpdateSequenceForGroups: migrating ==========================
-- execute("    SELECT setval('groups_id_seq', 40)\n")
   -> 0.0006s
== 20130509040248 UpdateSequenceForGroups: migrated (0.0012s) =================

== 20130509041351 AddUniqueNameToGroups: migrating ============================
-- add_index(:groups, [:name], {:unique=>true})
   -> 0.0019s
== 20130509041351 AddUniqueNameToGroups: migrated (0.0027s) ===================

== 20130515193551 AddAutoCloseDaysToCategories: migrating =====================
-- add_column(:categories, :auto_close_days, :float)
   -> 0.0006s
== 20130515193551 AddAutoCloseDaysToCategories: migrated (0.0013s) ============

== 20130521210140 CreateCasUserInfos: migrating ===============================
-- create_table(:cas_user_infos, {:id=>:integer})
   -> 0.0054s
-- add_index(:cas_user_infos, :user_id, {:unique=>true})
   -> 0.0019s
-- add_index(:cas_user_infos, :cas_user_id, {:unique=>true})
   -> 0.0021s
== 20130521210140 CreateCasUserInfos: migrated (0.0106s) ======================

== 20130522193615 RenameSearchTables: migrating ===============================
-- rename_table(:users_search, :user_search_data)
   -> 0.0063s
-- rename_column(:user_search_data, :id, :user_id)
   -> 0.0016s
-- rename_table(:categories_search, :category_search_data)
   -> 0.0035s
-- rename_column(:category_search_data, :id, :category_id)
   -> 0.0015s
-- rename_table(:posts_search, :post_search_data)
   -> 0.0038s
-- rename_column(:post_search_data, :id, :post_id)
   -> 0.0013s
== 20130522193615 RenameSearchTables: migrated (0.0190s) ======================

== 20130527152648 AddLikeScoreToPosts: migrating ==============================
-- add_column(:posts, :like_score, :integer, {:default=>0, :null=>false})
   -> 0.0009s
-- execute("UPDATE posts p\n              set like_score = x.like_score\n              FROM (SELECT pa.post_id,\n                            SUM(CASE\n                                 WHEN u.admin OR u.moderator THEN 3\n                                 ELSE 1\n                                END) AS like_score\n                    FROM post_actions AS pa\n                    INNER JOIN users AS u ON u.id = pa.user_id\n                    GROUP BY pa.post_id) AS x\n              WHERE x.post_id = p.id")
   -> 0.0011s
== 20130527152648 AddLikeScoreToPosts: migrated (0.0030s) =====================

== 20130528174147 AddRankToCategoryFeaturedTopics: migrating ==================
-- add_column(:category_featured_topics, :rank, :integer, {:default=>0, :null=>false})
   -> 0.0010s
-- add_index(:category_featured_topics, [:category_id, :rank])
   -> 0.0018s
== 20130528174147 AddRankToCategoryFeaturedTopics: migrated (0.0037s) =========

== 20130531210816 AddStaffTookActionToPostActions: migrating ==================
-- add_column(:post_actions, :staff_took_action, :boolean, {:default=>false, :null=>false})
   -> 0.0006s
== 20130531210816 AddStaffTookActionToPostActions: migrated (0.0010s) =========

== 20130603192412 AddBlockedToUsers: migrating ================================
-- add_column(:users, :blocked, :boolean, {:default=>false})
   -> 0.0006s
== 20130603192412 AddBlockedToUsers: migrated (0.0009s) =======================

== 20130606190601 AddAutoCloseStartedAtToTopics: migrating ====================
-- add_column(:topics, :auto_close_started_at, :timestamp, {:precision=>nil})
   -> 0.0006s
== 20130606190601 AddAutoCloseStartedAtToTopics: migrated (0.0011s) ===========

== 20130610201033 AddReplyKeyToEmailLogs: migrating ===========================
-- add_column(:email_logs, :reply_key, :string, {:limit=>32})
   -> 0.0004s
-- add_index(:email_logs, :reply_key)
   -> 0.0022s
== 20130610201033 AddReplyKeyToEmailLogs: migrated (0.0033s) ==================

== 20130612200846 CreatePostUploadJoinTable: migrating ========================
-- create_table(:posts_uploads, {:force=>true, :id=>false})
   -> 0.0011s
-- add_index(:posts_uploads, :post_id)
   -> 0.0027s
-- add_index(:posts_uploads, :upload_id)
   -> 0.0015s
-- add_index(:posts_uploads, [:post_id, :upload_id], {:unique=>true})
   -> 0.0013s
== 20130612200846 CreatePostUploadJoinTable: migrated (0.0072s) ===============

== 20130613211700 DropPostsUploads: migrating =================================
-- drop_table(:posts_uploads)
   -> 0.0007s
== 20130613211700 DropPostsUploads: migrated (0.0018s) ========================

== 20130613212230 CreatePostUploads: migrating ================================
-- create_table(:post_uploads, {:id=>:integer})
   -> 0.0029s
-- execute("create unique index idx_unique_post_uploads on post_uploads(post_id, upload_id)")
   -> 0.0034s
== 20130613212230 CreatePostUploads: migrated (0.0072s) =======================

== 20130615064344 AddDynamicFaviconPreferenceToUser: migrating ================
-- add_column(:users, :dynamic_favicon, :boolean, {:default=>false, :null=>false})
   -> 0.0012s
== 20130615064344 AddDynamicFaviconPreferenceToUser: migrated (0.0018s) =======

== 20130615073305 RemoveTopicIdFromUploads: migrating =========================
-- remove_column(:uploads, :topic_id)
   -> 0.0006s
== 20130615073305 RemoveTopicIdFromUploads: migrated (0.0012s) ================

== 20130615075557 AddShaToUploads: migrating ==================================
-- add_column(:uploads, :sha, :string, {:null=>true})
   -> 0.0005s
-- add_index(:uploads, :sha, {:unique=>true})
   -> 0.0018s
== 20130615075557 AddShaToUploads: migrated (0.0032s) =========================

== 20130616082327 CreateOptimizedImages: migrating ============================
-- create_table(:optimized_images, {:id=>:integer})
   -> 0.0061s
-- add_index(:optimized_images, :upload_id)
   -> 0.0020s
-- add_index(:optimized_images, [:upload_id, :width, :height], {:unique=>true})
   -> 0.0030s
== 20130616082327 CreateOptimizedImages: migrated (0.0119s) ===================

== 20130617014127 RenameShaAndExtColumns: migrating ===========================
-- rename_column(:optimized_images, :sha, :sha1)
   -> 0.0025s
-- change_column(:optimized_images, :sha1, :string, {:limit=>40})
   -> 0.0068s
-- rename_column(:optimized_images, :ext, :extension)
   -> 0.0019s
-- change_column(:optimized_images, :extension, :string, {:limit=>10})
   -> 0.0067s
== 20130617014127 RenameShaAndExtColumns: migrated (0.0188s) ==================

== 20130617180009 RenameShaColumn: migrating ==================================
-- remove_index(:uploads, :sha, {:name=>"index_uploads_on_sha"})
   -> 0.0015s
-- rename_column(:uploads, :sha, :sha1)
   -> 0.0011s
-- change_column(:uploads, :sha1, :string, {:limit=>40})
   -> 0.0051s
-- add_index(:uploads, :sha1, {:unique=>true})
   -> 0.0014s
== 20130617180009 RenameShaColumn: migrated (0.0111s) =========================

== 20130617181804 AddPostIdToEmailLogs: migrating =============================
-- add_column(:email_logs, :post_id, :integer, {:null=>true})
   -> 0.0004s
-- add_column(:email_logs, :topic_id, :integer, {:null=>true})
   -> 0.0003s
== 20130617181804 AddPostIdToEmailLogs: migrated (0.0017s) ====================

== 20130619063902 AddDeferToPostActions: migrating ============================
-- add_column(:post_actions, :defer, :boolean)
   -> 0.0005s
-- add_column(:post_actions, :defer_by, :int)
   -> 0.0003s
== 20130619063902 AddDeferToPostActions: migrated (0.0014s) ===================

== 20130621042855 ChangeSupressToSuppress: migrating ==========================
== 20130621042855 ChangeSupressToSuppress: migrated (0.0081s) =================

== 20130622110348 AddUrlIndexToUploads: migrating =============================
-- add_index(:uploads, :url)
   -> 0.0021s
== 20130622110348 AddUrlIndexToUploads: migrated (0.0028s) ====================

== 20130624203206 ChangeIpToInetInTopicLinkClicks: migrating ==================
-- add_column(:topic_link_clicks, :ip_address, :inet)
   -> 0.0031s
-- execute("UPDATE topic_link_clicks SET ip_address = inet(\n      (ip >> 24 & 255) || '.' ||\n      (ip >> 16 & 255) || '.' ||\n      (ip >>  8 & 255) || '.' ||\n      (ip >>  0 & 255)\n    );")
   -> 0.0008s
-- change_column(:topic_link_clicks, :ip_address, :inet)
   -> 0.0005s
-- remove_column(:topic_link_clicks, :ip)
   -> 0.0003s
== 20130624203206 ChangeIpToInetInTopicLinkClicks: migrated (0.0058s) =========

== 20130625022454 ChangeIpToInetInViews: migrating ============================
-- add_column(:views, :ip_address, :inet)
   -> 0.0026s
-- execute("UPDATE views SET ip_address = inet(\n      (ip >> 24 & 255) || '.' ||\n      (ip >> 16 & 255) || '.' ||\n      (ip >>  8 & 255) || '.' ||\n      (ip >>  0 & 255)\n    );")
   -> 0.0005s
-- change_column(:views, :ip_address, :inet)
   -> 0.0004s
-- remove_column(:views, :ip)
   -> 0.0003s
== 20130625022454 ChangeIpToInetInViews: migrated (0.0047s) ===================

== 20130625170842 RemoveAccessPassword: migrating =============================
-- execute("SELECT count(*) FROM site_settings where name='access_password' and char_length(value) > 0")
   -> 0.0003s
== 20130625170842 RemoveAccessPassword: migrated (0.0009s) ====================

== 20130625201113 AddTitleToUsers: migrating ==================================
-- add_column(:users, :title, :string)
   -> 0.0006s
== 20130625201113 AddTitleToUsers: migrated (0.0012s) =========================

== 20130709184941 AddDeletedByIdToPosts: migrating ============================
-- add_column(:posts, :deleted_by_id, :integer, {:null=>true})
   -> 0.0013s
-- add_column(:topics, :deleted_by_id, :integer, {:null=>true})
   -> 0.0008s
-- add_column(:invites, :deleted_by_id, :integer, {:null=>true})
   -> 0.0004s
-- rename_column(:post_actions, :deleted_by, :deleted_by_id)
   -> 0.0026s
== 20130709184941 AddDeletedByIdToPosts: migrated (0.0059s) ===================

== 20130710201248 AddNukedUserToPosts: migrating ==============================
-- add_column(:posts, :nuked_user, :boolean, {:default=>false})
   -> 0.0012s
== 20130710201248 AddNukedUserToPosts: migrated (0.0018s) =====================

== 20130712041133 AddPermissionTypeToCategoryGroups: migrating ================
-- add_column(:category_groups, :permission_type, :integer, {:default=>1})
   -> 0.0006s
-- rename_column(:categories, :secure, :read_restricted)
   -> 0.0039s
== 20130712041133 AddPermissionTypeToCategoryGroups: migrated (0.0052s) =======

== 20130712163509 AddMissingIdColumns: migrating ==============================
-- add_column(:category_featured_topics, :id, :integer, {:primary_key=>true})
   -> 0.0066s
-- add_column(:topic_users, :id, :integer, {:primary_key=>true})
   -> 0.0047s
== 20130712163509 AddMissingIdColumns: migrated (0.0121s) =====================

== 20130723212758 RenameAdminLog: migrating ===================================
-- rename_table(:admin_logs, :staff_action_logs)
   -> 0.0035s
-- rename_column(:staff_action_logs, :admin_id, :staff_user_id)
   -> 0.0009s
== 20130723212758 RenameAdminLog: migrated (0.0051s) ==========================

== 20130724201552 CreateBlockedEmails: migrating ==============================
-- create_table(:blocked_emails, {:id=>:integer})
   -> 0.0124s
-- add_index(:blocked_emails, :email, {:unique=>true})
   -> 0.0017s
== 20130724201552 CreateBlockedEmails: migrated (0.0151s) =====================

== 20130725213613 AddMoreToStaffActionLog: migrating ==========================
-- add_column(:staff_action_logs, :context, :string)
   -> 0.0006s
-- add_column(:staff_action_logs, :ip_address, :string)
   -> 0.0005s
-- add_column(:staff_action_logs, :email, :string)
   -> 0.0004s
== 20130725213613 AddMoreToStaffActionLog: migrated (0.0023s) =================

== 20130728172550 AddUrlToOptimizedImages: migrating ==========================
-- add_column(:optimized_images, :url, :string)
   -> 0.0045s
-- execute("UPDATE optimized_images\n             SET url = substring(u.url from '^/uploads/[^/]+/')\n                    || '_optimized/'\n                    || substring(oi.sha1 for 3) || '/'\n                    || substring(oi.sha1 from 4 for 3) || '/'\n                    || substring(oi.sha1 from 7 for 11) || oi.extension\n            FROM optimized_images oi\n            JOIN uploads u ON u.id = oi.upload_id\n            WHERE optimized_images.id = oi.id;")
   -> 0.0013s
-- change_column(:optimized_images, :url, :string)
   -> 0.0004s
== 20130728172550 AddUrlToOptimizedImages: migrated (0.0076s) =================

== 20130731163035 AddReportIndexToIncomingLinks: migrating ====================
-- add_index(:incoming_links, [:created_at, :user_id])
   -> 0.0022s
-- add_index(:incoming_links, [:created_at, :domain])
   -> 0.0021s
== 20130731163035 AddReportIndexToIncomingLinks: migrated (0.0050s) ===========

== 20130807202516 AddLastMatchIndexToBlockedEmails: migrating =================
-- add_index(:blocked_emails, :last_match_at)
   -> 0.0032s
== 20130807202516 AddLastMatchIndexToBlockedEmails: migrated (0.0041s) ========

== 20130809160751 FixSeenNotificationIds: migrating ===========================
-- execute("UPDATE users SET\n              seen_notification_id = COALESCE((SELECT MAX(notifications.id)\n                                               FROM notifications\n                                               WHERE user_id = users.id AND created_at <= users.last_seen_at), 0)")
   -> 0.0013s
== 20130809160751 FixSeenNotificationIds: migrated (0.0019s) ==================

== 20130809204732 AddFilterIndexesToStaffActionLogs: migrating ================
-- add_index(:staff_action_logs, [:action, :id])
   -> 0.0023s
-- add_index(:staff_action_logs, [:staff_user_id, :id])
   -> 0.0016s
-- add_index(:staff_action_logs, [:target_user_id, :id])
   -> 0.0014s
== 20130809204732 AddFilterIndexesToStaffActionLogs: migrated (0.0059s) =======

== 20130809211409 AddAvatarToUsers: migrating =================================
-- add_column(:users, :use_uploaded_avatar, :boolean, {:default=>false})
   -> 0.0010s
-- add_column(:users, :uploaded_avatar_template, :string)
   -> 0.0005s
-- add_column(:users, :uploaded_avatar_id, :integer)
   -> 0.0003s
== 20130809211409 AddAvatarToUsers: migrated (0.0025s) ========================

== 20130813204212 CreateScreenedUrls: migrating ===============================
-- create_table(:screened_urls, {:id=>:integer})
   -> 0.0065s
-- add_index(:screened_urls, :url, {:unique=>true})
   -> 0.0017s
-- add_index(:screened_urls, :last_match_at)
   -> 0.0031s
== 20130813204212 CreateScreenedUrls: migrated (0.0127s) ======================

== 20130813224817 RenameBlockedEmailsToScreenedEmails: migrating ==============
-- rename_table(:blocked_emails, :screened_emails)
   -> 0.0048s
== 20130813224817 RenameBlockedEmailsToScreenedEmails: migrated (0.0056s) =====

== 20130816024250 CreateOauth2UserInfos: migrating ============================
-- create_table(:oauth2_user_infos, {:id=>:integer})
   -> 0.0052s
-- add_index(:oauth2_user_infos, [:uid, :provider], {:unique=>true})
   -> 0.0017s
== 20130816024250 CreateOauth2UserInfos: migrated (0.0077s) ===================

== 20130819192358 AddValueColumnsToStaffActionLogs: migrating =================
-- add_column(:staff_action_logs, :subject, :text)
   -> 0.0004s
-- add_column(:staff_action_logs, :previous_value, :text)
   -> 0.0003s
-- add_column(:staff_action_logs, :new_value, :text)
   -> 0.0005s
== 20130819192358 AddValueColumnsToStaffActionLogs: migrated (0.0017s) ========

== 20130820174431 AddSubjectIndexToStaffActionLogs: migrating =================
-- add_index(:staff_action_logs, [:subject, :id])
   -> 0.0019s
== 20130820174431 AddSubjectIndexToStaffActionLogs: migrated (0.0029s) ========

== 20130822213513 AddIpAddressToScreeningTables: migrating ====================
-- add_column(:screened_emails, :ip_address, :inet)
   -> 0.0004s
-- add_column(:screened_urls, :ip_address, :inet)
   -> 0.0003s
== 20130822213513 AddIpAddressToScreeningTables: migrated (0.0012s) ===========

== 20130823201420 DropDefaultsOnEmailDigestColumnsOfUsers: migrating ==========
-- change_column_default(:users, :email_digests, nil)
   -> 0.0043s
-- change_column(:users, :digest_after_days, :integer)
   -> 0.0005s
== 20130823201420 DropDefaultsOnEmailDigestColumnsOfUsers: migrated (0.0111s) =

== 20130826011521 CreatePluginStoreRows: migrating ============================
-- create_table(:plugin_store_rows, {:id=>:integer})
   -> 0.0057s
-- add_index(:plugin_store_rows, [:plugin_name, :key], {:unique=>true})
   -> 0.0020s
== 20130826011521 CreatePluginStoreRows: migrated (0.0084s) ===================

== 20130828192526 FixOptimizedImagesUrls: migrating ===========================
-- execute("UPDATE optimized_images\n             SET url = substring(oi.url from '^\\/uploads\\/[^/]+\\/_optimized\\/[0-9a-f]{3}\\/[0-9a-f]{3}\\/[0-9a-f]{11}')\n                    || '_'\n                    || oi.width\n                    || 'x'\n                    || oi.height\n                    || substring(oi.url from '\\.\\w{3,4}$')\n             FROM optimized_images oi\n             WHERE optimized_images.id = oi.id\n               AND oi.url ~ '^\\/uploads\\/[^/]+\\/_optimized\\/[0-9a-f]{3}\\/[0-9a-f]{3}\\/[0-9a-f]{11}\\.';")
   -> 0.0010s
== 20130828192526 FixOptimizedImagesUrls: migrated (0.0016s) ==================

== 20130903154323 AllowNullUserIdOnPosts: migrating ===========================
-- change_column(:posts, :user_id, :integer)
   -> 0.0042s
-- execute("UPDATE posts SET user_id = NULL WHERE nuked_user = true")
   -> 0.0005s
-- remove_column(:posts, :nuked_user)
   -> 0.0004s
== 20130903154323 AllowNullUserIdOnPosts: migrated (0.0061s) ==================

== 20130904181208 AllowNullUserIdOnTopics: migrating ==========================
-- change_column(:topics, :user_id, :integer)
   -> 0.0022s
== 20130904181208 AllowNullUserIdOnTopics: migrated (0.0036s) =================

== 20130906081326 RenameSystemUsername: migrating =============================
-- execute("update site_settings set name = 'site_contact_username' where name = 'system_username'")
   -> 0.0003s
== 20130906081326 RenameSystemUsername: migrated (0.0010s) ====================

== 20130906171631 AddIndexToUploads: migrating ================================
-- add_index(:uploads, [:id, :url])
   -> 0.0017s
== 20130906171631 AddIndexToUploads: migrated (0.0024s) =======================

== 20130910040235 IndexTopicsForFrontPage: migrating ==========================
-- add_index(:topics, [:deleted_at, :visible, :archetype, :id])
   -> 0.0021s
-- add_index(:topics, [:id, :deleted_at])
   -> 0.0022s
== 20130910040235 IndexTopicsForFrontPage: migrated (0.0049s) =================

== 20130910220317 RenameStaffActionLogsToUserHistory: migrating ===============
-- remove_index(:staff_action_logs, [:staff_user_id, :id], {:name=>"index_staff_action_logs_on_staff_user_id_and_id"})
   -> 0.0031s
-- rename_table(:staff_action_logs, :user_histories)
   -> 0.0044s
-- rename_column(:user_histories, :staff_user_id, :acting_user_id)
   -> 0.0036s
-- add_index(:user_histories, [:acting_user_id, :action, :id])
   -> 0.0028s
== 20130910220317 RenameStaffActionLogsToUserHistory: migrated (0.0158s) ======

== 20130911182437 CreateUserStats: migrating ==================================
-- create_table(:user_stats, {:id=>false})
   -> 0.0017s
-- execute("ALTER TABLE user_stats ADD PRIMARY KEY (user_id)")
   -> 0.0019s
-- execute("INSERT INTO user_stats (user_id) SELECT id FROM users")
   -> 0.0010s
== 20130911182437 CreateUserStats: migrated (0.0058s) =========================

== 20130912185218 ActingUserNull: migrating ===================================
-- change_column(:user_histories, :acting_user_id, :integer)
   -> 0.0010s
== 20130912185218 ActingUserNull: migrated (0.0018s) ==========================

== 20130913210454 AddMobileToSiteCustomizations: migrating ====================
-- add_column(:site_customizations, :mobile_stylesheet, :text)
   -> 0.0005s
-- add_column(:site_customizations, :mobile_header, :text)
   -> 0.0002s
-- add_column(:site_customizations, :mobile_stylesheet_baked, :text)
   -> 0.0002s
== 20130913210454 AddMobileToSiteCustomizations: migrated (0.0019s) ===========

== 20130917174738 AddTopicIdToUserHistories: migrating ========================
-- add_column(:user_histories, :topic_id, :integer)
   -> 0.0005s
== 20130917174738 AddTopicIdToUserHistories: migrated (0.0011s) ===============

== 20131001060630 AddEmailAlwaysToUsers: migrating ============================
-- add_column(:users, :email_always, :bool, {:default=>false, :null=>false})
   -> 0.0013s
== 20131001060630 AddEmailAlwaysToUsers: migrated (0.0025s) ===================

== 20131002070347 AddUserIdParentTypeIndexOnViews: migrating ==================
-- add_index(:views, [:user_id, :parent_type, :parent_id])
   -> 0.0027s
== 20131002070347 AddUserIdParentTypeIndexOnViews: migrated (0.0039s) =========

== 20131003061137 MoveColumnsToUserStats: migrating ===========================
-- add_column(:user_stats, :topics_entered, :integer, {:default=>0, :null=>false})
   -> 0.0010s
-- add_column(:user_stats, :time_read, :integer, {:default=>0, :null=>false})
   -> 0.0007s
-- add_column(:user_stats, :days_visited, :integer, {:default=>0, :null=>false})
   -> 0.0005s
-- add_column(:user_stats, :posts_read_count, :integer, {:default=>0, :null=>false})
   -> 0.0004s
-- add_column(:user_stats, :likes_given, :integer, {:default=>0, :null=>false})
   -> 0.0003s
-- add_column(:user_stats, :likes_received, :integer, {:default=>0, :null=>false})
   -> 0.0007s
-- add_column(:user_stats, :topic_reply_count, :integer, {:default=>0, :null=>false})
   -> 0.0010s
-- execute("UPDATE user_stats s\n              SET topics_entered = u.topics_entered,\n                  time_read = u.time_read,\n                  days_visited = u.days_visited,\n                  posts_read_count = u.posts_read_count,\n                  likes_given = u.likes_given,\n                  likes_received = u.likes_received,\n                  topic_reply_count = u.topic_reply_count\n              FROM users u WHERE u.id = s.user_id\n    ")
   -> 0.0009s
-- remove_column(:users, :topics_entered)
   -> 0.0010s
-- remove_column(:users, :time_read)
   -> 0.0007s
-- remove_column(:users, :days_visited)
   -> 0.0005s
-- remove_column(:users, :posts_read_count)
   -> 0.0005s
-- remove_column(:users, :likes_given)
   -> 0.0007s
-- remove_column(:users, :likes_received)
   -> 0.0006s
-- remove_column(:users, :topic_reply_count)
   -> 0.0007s
== 20131003061137 MoveColumnsToUserStats: migrated (0.0119s) ==================

== 20131014203951 BackfillPostUploadReverseIndex: migrating ===================
-- execute("TRUNCATE TABLE post_uploads")
   -> 0.0025s
== 20131014203951 BackfillPostUploadReverseIndex: migrated (0.0118s) ==========

== 20131015131652 CreatePostDetails: migrating ================================
-- create_table(:post_details, {:id=>:integer})
   -> 0.0053s
-- add_index(:post_details, [:post_id, :key], {:unique=>true})
   -> 0.0022s
== 20131015131652 CreatePostDetails: migrated (0.0085s) =======================

== 20131017014509 AddPostCountToCategories: migrating =========================
-- add_column(:categories, :post_count, :integer, {:null=>false, :default=>0})
   -> 0.0013s
-- execute("    UPDATE categories\n    SET post_count = (SELECT COALESCE(SUM(posts_count),0) FROM topics\n                      WHERE category_id = categories.id AND deleted_at IS NULL)\n")
   -> 0.0009s
== 20131017014509 AddPostCountToCategories: migrated (0.0029s) ================

== 20131017030605 AddLatestToCategories: migrating ============================
-- add_column(:categories, :latest_post_id, :integer)
   -> 0.0007s
-- add_column(:categories, :latest_topic_id, :integer)
   -> 0.0005s
-- execute("    UPDATE categories c\n    SET latest_post_id = x.post_id\n    FROM (select category_id, max(p.id) post_id FROM posts p\n          JOIN topics t on t.id = p.topic_id\n          WHERE p.deleted_at IS NULL AND NOT p.hidden AND t.visible\n          GROUP BY category_id\n         ) x\n    WHERE x.category_id = c.id\n")
   -> 0.0007s
-- execute("    UPDATE categories c\n    SET latest_topic_id = x.topic_id\n    FROM (select category_id, max(t.id) topic_id\n          FROM topics t\n          WHERE t.deleted_at IS NULL AND t.visible\n          GROUP BY category_id\n         ) x\n    WHERE x.category_id = c.id\n")
   -> 0.0004s
== 20131017030605 AddLatestToCategories: migrated (0.0031s) ===================

== 20131017205954 CreateScreenedIpAddresses: migrating ========================
-- create_table(:screened_ip_addresses, {:id=>:integer})
   -> 0.0050s
-- add_index(:screened_ip_addresses, :ip_address, {:unique=>true})
   -> 0.0020s
-- add_index(:screened_ip_addresses, :last_match_at)
   -> 0.0019s
== 20131017205954 CreateScreenedIpAddresses: migrated (0.0103s) ===============

== 20131018050738 AddPositionToCategories: migrating ==========================
-- add_column(:categories, :position, :integer)
   -> 0.0006s
-- execute("UPDATE categories SET position = id")
   -> 0.0003s
-- change_column(:categories, :position, :integer)
   -> 0.0006s
== 20131018050738 AddPositionToCategories: migrated (0.0025s) =================

== 20131022045114 AddUncategorizedCategory: migrating =========================
-- execute("SELECT 1 FROM categories WHERE lower(name) = 'uncategorized'")
   -> 0.0004s
-- execute("INSERT INTO categories\n            (name,color,slug,description,text_color, user_id, created_at, updated_at, position)\n     VALUES ('Uncategorized', '0088CC', 'uncategorized', '', 'FFFFFF', -1, now(), now(), 0 )\n     RETURNING id\n    ")
   -> 0.0005s
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\n             VALUES ('uncategorized_category_id', 3, 1, now(), now())")
   -> 0.0003s
-- execute("DELETE from site_settings where name in ('uncategorized_name', 'uncategorized_text_color', 'uncategorized_color')")
   -> 0.0002s
-- execute("UPDATE topics SET category_id = 1 WHERE archetype = 'regular' AND category_id IS NULL")
   -> 0.0003s
-- execute("ALTER table topics ADD CONSTRAINT has_category_id CHECK (category_id IS NOT NULL OR archetype <> 'regular')")
   -> 0.0005s
== 20131022045114 AddUncategorizedCategory: migrated (0.0027s) ================

== 20131022151218 CreateApiKeys: migrating ====================================
-- create_table(:api_keys, {:id=>:integer})
   -> 0.0028s
-- add_index(:api_keys, :key)
   -> 0.0014s
-- add_index(:api_keys, :user_id, {:unique=>true})
   -> 0.0017s
-- execute("INSERT INTO api_keys (key, created_at, updated_at) SELECT value, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP FROM site_settings WHERE name = 'api_key'")
   -> 0.0003s
-- execute("DELETE FROM site_settings WHERE name = 'api_key'")
   -> 0.0002s
== 20131022151218 CreateApiKeys: migrated (0.0072s) ===========================

== 20131023163509 AddParentCategoryIdToCategories: migrating ==================
-- add_column(:categories, :parent_category_id, :integer)
   -> 0.0009s
== 20131023163509 AddParentCategoryIdToCategories: migrated (0.0016s) =========

== 20131105101051 AddOriginToUploads: migrating ===============================
-- add_column(:uploads, :origin, :string, {:limit=>1000})
   -> 0.0007s
== 20131105101051 AddOriginToUploads: migrated (0.0017s) ======================

== 20131107154900 RenameBannedToSuspended: migrating ==========================
-- rename_column(:users, :banned_at, :suspended_at)
   -> 0.0032s
-- rename_column(:users, :banned_till, :suspended_till)
   -> 0.0039s
== 20131107154900 RenameBannedToSuspended: migrated (0.0081s) =================

== 20131114185225 AddParticipantCountToTopics: migrating ======================
-- add_column(:topics, :participant_count, :integer, {:default=>1})
   -> 0.0010s
-- execute("UPDATE topics SET participant_count =\n              (SELECT COUNT(DISTINCT p.user_id) FROM posts AS p WHERE p.topic_id = topics.id)")
   -> 0.0004s
== 20131114185225 AddParticipantCountToTopics: migrated (0.0021s) =============

== 20131115165105 AddEditReasonToPosts: migrating =============================
-- add_column(:posts, :edit_reason, :string)
   -> 0.0008s
== 20131115165105 AddEditReasonToPosts: migrated (0.0014s) ====================

== 20131118173159 RenameBestOfToSummary: migrating ============================
-- rename_column(:topics, :has_best_of, :has_summary)
   -> 0.0023s
== 20131118173159 RenameBestOfToSummary: migrated (0.0027s) ===================

== 20131120055018 MoveEmojiToNewLocation: migrating ===========================
-- execute("update posts set cooked = regexp_replace(cooked, '(<img[^>]*)assets/emoji/', '\\1plugins/emoji/images/' , 'g') where cooked like '%emoji%'")
   -> 0.0008s
== 20131120055018 MoveEmojiToNewLocation: migrated (0.0016s) ==================

== 20131122064921 IncreaseTwitterUserIdLength: migrating ======================
-- change_column(:twitter_user_infos, :twitter_user_id, :bigint)
   -> 0.0079s
== 20131122064921 IncreaseTwitterUserIdLength: migrated (0.0086s) =============

== 20131206200009 RenameAutoCloseDaysToHours: migrating =======================
-- rename_column(:categories, :auto_close_days, :auto_close_hours)
   -> 0.0030s
-- execute("update categories set auto_close_hours = auto_close_hours * 24")
   -> 0.0006s
== 20131206200009 RenameAutoCloseDaysToHours: migrated (0.0045s) ==============

== 20131209091702 CreatePostRevisions: migrating ==============================
-- create_table(:post_revisions, {:id=>:integer})
   -> 0.0058s
-- execute("INSERT INTO post_revisions (user_id, post_id, modifications, number, created_at, updated_at)\n             SELECT user_id, versioned_id, modifications, number, created_at, updated_at\n             FROM   versions\n             WHERE  versioned_type = 'Post'")
   -> 0.0006s
-- change_table(:post_revisions)
   -> 0.0041s
== 20131209091702 CreatePostRevisions: migrated (0.0117s) =====================

== 20131209091742 CreateTopicRevisions: migrating =============================
-- create_table(:topic_revisions, {:id=>:integer})
   -> 0.0051s
-- execute("INSERT INTO topic_revisions (user_id, topic_id, modifications, number, created_at, updated_at)\n             SELECT user_id, versioned_id, modifications, number, created_at, updated_at\n             FROM   versions\n             WHERE  versioned_type = 'Topic'")
   -> 0.0005s
-- change_table(:topic_revisions)
   -> 0.0025s
== 20131209091742 CreateTopicRevisions: migrated (0.0088s) ====================

== 20131210163702 AddWordCountToPosts: migrating ==============================
-- add_column(:posts, :word_count, :integer)
   -> 0.0005s
-- add_column(:topics, :word_count, :integer)
   -> 0.0004s
== 20131210163702 AddWordCountToPosts: migrated (0.0013s) =====================

== 20131210181901 MigrateWordCounts: migrating ================================
-- execute("SELECT id FROM posts WHERE word_count IS NULL LIMIT 500")
   -> 0.0006s
-- execute("SELECT id FROM topics WHERE word_count IS NULL LIMIT 500")
   -> 0.0005s
== 20131210181901 MigrateWordCounts: migrated (0.0020s) =======================

== 20131210234530 RenameVersionColumn: migrating ==============================
-- add_column(:posts, :version, :integer, {:default=>1, :null=>false})
   -> 0.0010s
-- execute("UPDATE posts SET version = cached_version")
   -> 0.0004s
-- remove_column(:posts, :cached_version)
   -> 0.0004s
== 20131210234530 RenameVersionColumn: migrated (0.0026s) =====================

== 20131212225511 AddPostCountStatsColumnsToCategories: migrating =============
-- change_table(:categories)
   -> 0.0014s
== 20131212225511 AddPostCountStatsColumnsToCategories: migrated (0.0021s) ====

== 20131216164557 MakePositionNullableInCategories: migrating =================
-- change_column(:categories, :position, :integer)
   -> 0.0006s
== 20131216164557 MakePositionNullableInCategories: migrated (0.0023s) ========

== 20131217174004 CreateTopicEmbeds: migrating ================================
-- create_table(:topic_embeds, {:force=>true, :id=>:integer})
   -> 0.0060s
-- add_index(:topic_embeds, :embed_url, {:unique=>true})
   -> 0.0017s
== 20131217174004 CreateTopicEmbeds: migrated (0.0090s) =======================

== 20131219203905 AddCookMethodToPosts: migrating =============================
-- add_column(:posts, :cook_method, :integer, {:default=>1, :null=>false})
   -> 0.0012s
== 20131219203905 AddCookMethodToPosts: migrated (0.0017s) ====================

== 20131223171005 CreateTopTopics: migrating ==================================
-- create_table(:top_topics, {:force=>true, :id=>:integer})
   -> 0.0067s
-- add_index(:top_topics, :topic_id, {:unique=>true})
   -> 0.0013s
-- add_index(:top_topics, :yearly_posts_count, {:order=>"desc"})
   -> 0.0027s
-- add_index(:top_topics, :yearly_views_count, {:order=>"desc"})
   -> 0.0016s
-- add_index(:top_topics, :yearly_likes_count, {:order=>"desc"})
   -> 0.0012s
-- add_index(:top_topics, :monthly_posts_count, {:order=>"desc"})
   -> 0.0010s
-- add_index(:top_topics, :monthly_views_count, {:order=>"desc"})
   -> 0.0013s
-- add_index(:top_topics, :monthly_likes_count, {:order=>"desc"})
   -> 0.0013s
-- add_index(:top_topics, :weekly_posts_count, {:order=>"desc"})
   -> 0.0017s
-- add_index(:top_topics, :weekly_views_count, {:order=>"desc"})
   -> 0.0024s
-- add_index(:top_topics, :weekly_likes_count, {:order=>"desc"})
   -> 0.0017s
-- add_index(:top_topics, :daily_posts_count, {:order=>"desc"})
   -> 0.0024s
-- add_index(:top_topics, :daily_views_count, {:order=>"desc"})
   -> 0.0034s
-- add_index(:top_topics, :daily_likes_count, {:order=>"desc"})
   -> 0.0016s
== 20131223171005 CreateTopTopics: migrated (0.0321s) =========================

== 20131227164338 AddScoresToTopTopics: migrating =============================
-- add_column(:top_topics, :daily_score, :float)
   -> 0.0005s
-- add_column(:top_topics, :weekly_score, :float)
   -> 0.0004s
-- add_column(:top_topics, :monthly_score, :float)
   -> 0.0003s
-- add_column(:top_topics, :yearly_score, :float)
   -> 0.0003s
== 20131227164338 AddScoresToTopTopics: migrated (0.0023s) ====================

== 20131229221725 AddWatchNewTopicsToUsers: migrating =========================
-- add_column(:users, :watch_new_topics, :boolean, {:default=>false, :null=>false})
   -> 0.0011s
== 20131229221725 AddWatchNewTopicsToUsers: migrated (0.0017s) ================

== 20131230010239 AddLastEmailedPostNumberToTopicUser: migrating ==============
-- add_column(:topic_users, :last_emailed_post_number, :integer)
   -> 0.0006s
== 20131230010239 AddLastEmailedPostNumberToTopicUser: migrated (0.0013s) =====

== 20140101235747 AddCategoryUsers: migrating =================================
-- create_table(:category_users, {:id=>:integer})
   -> 0.0034s
== 20140101235747 AddCategoryUsers: migrated (0.0041s) ========================

== 20140102104229 AddAliasLevelToGroups: migrating ============================
-- add_column(:groups, :alias_level, :integer, {:default=>0})
   -> 0.0006s
== 20140102104229 AddAliasLevelToGroups: migrated (0.0010s) ===================

== 20140102194802 RemoveDefaultFromExternalLinksInNewTab: migrating ===========
-- change_column_default(:users, :external_links_in_new_tab, nil)
   -> 0.0043s
== 20140102194802 RemoveDefaultFromExternalLinksInNewTab: migrated (0.0051s) ==

== 20140107220141 RemoveEnableWideCategoryList: migrating =====================
-- execute("DELETE FROM site_settings WHERE name = 'enable_wide_category_list'")
   -> 0.0004s
== 20140107220141 RemoveEnableWideCategoryList: migrated (0.0009s) ============

== 20140109205940 RenameFavoritesToStarred: migrating =========================
-- execute("UPDATE site_settings SET name = 'max_stars_per_day' where name = 'max_favorites_per_day'")
   -> 0.0004s
-- execute("UPDATE site_settings SET value = REPLACE(value, '|favorited', '|starred') where name = 'top_menu'")
   -> 0.0002s
== 20140109205940 RenameFavoritesToStarred: migrated (0.0015s) ================

== 20140116170655 DropHotTopics: migrating ====================================
-- drop_table(:hot_topics)
   -> 0.0009s
== 20140116170655 DropHotTopics: migrated (0.0014s) ===========================

== 20140120155706 AddLoungeCategory: migrating ================================
== 20140120155706 AddLoungeCategory: migrated (0.0009s) =======================

== 20140121204628 AddInvalidatedAtToInvites: migrating ========================
-- add_column(:invites, :invalidated_at, :timestamp, {:precision=>nil})
   -> 0.0005s
== 20140121204628 AddInvalidatedAtToInvites: migrated (0.0009s) ===============

== 20140122043508 AddMetaCategory: migrating ==================================
== 20140122043508 AddMetaCategory: migrated (0.0003s) =========================

== 20140124202427 AddPostsReadToUserVisits: migrating =========================
-- add_column(:user_visits, :posts_read, :integer, {:default=>0})
   -> 0.0010s
-- execute("UPDATE user_visits SET posts_read = 1")
   -> 0.0006s
== 20140124202427 AddPostsReadToUserVisits: migrated (0.0025s) ================

== 20140129164541 RemoveCategoryHotness: migrating ============================
-- remove_column(:categories, :hotness)
   -> 0.0008s
== 20140129164541 RemoveCategoryHotness: migrated (0.0014s) ===================

== 20140206044818 AddLocaleToUser: migrating ==================================
-- add_column(:users, :locale, :string, {:limit=>10})
   -> 0.0010s
== 20140206044818 AddLocaleToUser: migrated (0.0020s) =========================

== 20140206195001 AddDefaultsToCategoryPostsAndTopicsFields: migrating ========
-- change_column_default(:categories, :posts_week, 0)
   -> 0.0027s
-- change_column_default(:categories, :posts_month, 0)
   -> 0.0034s
-- change_column_default(:categories, :posts_year, 0)
   -> 0.0030s
-- change_column_default(:categories, :topics_week, 0)
   -> 0.0029s
-- change_column_default(:categories, :topics_month, 0)
   -> 0.0031s
-- change_column_default(:categories, :topics_year, 0)
   -> 0.0017s
== 20140206195001 AddDefaultsToCategoryPostsAndTopicsFields: migrated (0.0176s)

== 20140206215029 AddMailingListModeToUsers: migrating ========================
-- rename_column(:users, :watch_new_topics, :mailing_list_mode)
   -> 0.0026s
== 20140206215029 AddMailingListModeToUsers: migrated (0.0033s) ===============

== 20140210194146 AddPrimaryGroupIdToUsers: migrating =========================
-- add_column(:users, :primary_group_id, :integer, {:null=>true})
   -> 0.0005s
== 20140210194146 AddPrimaryGroupIdToUsers: migrated (0.0011s) ================

== 20140211230222 MoveCasSettings: migrating ==================================
-- drop_table(:cas_user_infos)
   -> 0.0008s
== 20140211230222 MoveCasSettings: migrated (0.0035s) =========================

== 20140211234523 AddTargetsTopicToPostActions: migrating =====================
-- add_column(:post_actions, :targets_topic, :boolean, {:default=>false})
   -> 0.0016s
== 20140211234523 AddTargetsTopicToPostActions: migrated (0.0020s) ============

== 20140214151255 AddSkippedToEmailLogs: migrating ============================
-- add_column(:email_logs, :skipped, :boolean, {:default=>false})
   -> 0.0009s
-- add_column(:email_logs, :skipped_reason, :string)
   -> 0.0003s
-- add_index(:email_logs, [:skipped, :created_at])
   -> 0.0024s
== 20140214151255 AddSkippedToEmailLogs: migrated (0.0046s) ===================

== 20140220160510 RenameSiteSettings: migrating ===============================
-- execute("UPDATE site_settings SET name = 'allow_restore' WHERE name = 'allow_import'")
   -> 0.0002s
-- execute("UPDATE site_settings SET name = 'topics_per_period_in_top_summary' WHERE name = 'topics_per_period_in_summary'")
   -> 0.0001s
== 20140220160510 RenameSiteSettings: migrated (0.0008s) ======================

== 20140220163213 RenameDeleteUserMaxAge: migrating ===========================
-- execute("UPDATE site_settings SET name = 'delete_user_max_post_age' WHERE name = 'delete_user_max_age'")
   -> 0.0003s
== 20140220163213 RenameDeleteUserMaxAge: migrated (0.0009s) ==================

== 20140224232712 AddProfileBackgroundToUser: migrating =======================
-- add_column(:users, :profile_background, :string, {:limit=>255})
   -> 0.0015s
== 20140224232712 AddProfileBackgroundToUser: migrated (0.0025s) ==============

== 20140224232913 AddSingleSignOnRecords: migrating ===========================
-- create_table(:single_sign_on_records, {:id=>:integer})
   -> 0.0046s
-- add_index(:single_sign_on_records, :external_id, {:unique=>true})
   -> 0.0012s
== 20140224232913 AddSingleSignOnRecords: migrated (0.0070s) ==================

== 20140227104930 AddCustomEmailInToCategories: migrating =====================
-- add_column(:categories, :email_in, :string, {:null=>true})
   -> 0.0007s
-- add_column(:categories, :email_in_allow_strangers, :boolean, {:default=>false})
   -> 0.0007s
-- add_index(:categories, :email_in, {:unique=>true})
   -> 0.0018s
== 20140227104930 AddCustomEmailInToCategories: migrated (0.0040s) ============

== 20140227201005 AddStaffCategory: migrating =================================
== 20140227201005 AddStaffCategory: migrated (0.0005s) ========================

== 20140228005443 AddExternalUsernameToSingleSignOnRecord: migrating ==========
-- add_column(:single_sign_on_records, :external_username, :string)
   -> 0.0008s
== 20140228005443 AddExternalUsernameToSingleSignOnRecord: migrated (0.0018s) =

== 20140228173431 AddExternalEmailAndExternalNameToSingleSignOnRecord: migrating
-- add_column(:single_sign_on_records, :external_email, :string)
   -> 0.0004s
-- add_column(:single_sign_on_records, :external_name, :string)
   -> 0.0004s
== 20140228173431 AddExternalEmailAndExternalNameToSingleSignOnRecord: migrated (0.0015s)

== 20140228205743 AddAdminOnlyToUserHistories: migrating ======================
-- add_column(:user_histories, :admin_only, :boolean, {:default=>false})
   -> 0.0008s
-- execute("UPDATE user_histories SET admin_only = true WHERE action = 3")
   -> 0.0008s
== 20140228205743 AddAdminOnlyToUserHistories: migrated (0.0066s) =============

== 20140303185354 AddNewSinceToUserStats: migrating ===========================
-- add_column(:user_stats, :new_since, :timestamp, {:precision=>nil})
   -> 0.0006s
-- execute("UPDATE user_stats AS us\n               SET new_since = u.created_at\n             FROM users AS u\n              WHERE u.id = us.user_id")
   -> 0.0005s
-- change_column(:user_stats, :new_since, :timestamp, {:precision=>nil})
   -> 0.0003s
== 20140303185354 AddNewSinceToUserStats: migrated (0.0021s) ==================

== 20140304200606 CreateBadgeTypes: migrating =================================
-- create_table(:badge_types, {:id=>:integer})
   -> 0.0049s
-- add_index(:badge_types, [:name], {:unique=>true})
   -> 0.0016s
== 20140304200606 CreateBadgeTypes: migrated (0.0069s) ========================

== 20140304201403 CreateBadges: migrating =====================================
-- create_table(:badges, {:id=>:integer})
   -> 0.0061s
-- add_index(:badges, [:name], {:unique=>true})
   -> 0.0019s
== 20140304201403 CreateBadges: migrated (0.0090s) ============================

== 20140305100909 CreateUserBadges: migrating =================================
-- create_table(:user_badges, {:id=>:integer})
   -> 0.0045s
-- add_index(:user_badges, [:badge_id, :user_id], {:unique=>true})
   -> 0.0013s
== 20140305100909 CreateUserBadges: migrated (0.0068s) ========================

== 20140306223522 MoveTopicRevisionsToPostRevisions: migrating ================
-- execute("\n    INSERT INTO post_revisions(user_id, post_id, modifications, number, created_at, updated_at)\n    SELECT tr.user_id, p.id, tr.modifications, tr.number, tr.created_at, tr.updated_at\n    FROM topic_revisions tr\n    JOIN topics t ON t.id = tr.topic_id\n    JOIN posts p ON p.topic_id = t.id AND p.post_number = 1\n\n")
   -> 0.0015s
-- execute("\n   UPDATE post_revisions r SET number = 2 + (\n    SELECT COUNT(*) FROM post_revisions r2\n    WHERE r2.post_id = r.post_id AND r2.created_at < r.created_at\n   )\n\n")
   -> 0.0007s
-- execute("\n    UPDATE posts p SET version = 1 + (\n      SELECT COUNT(*) FROM post_revisions r\n      WHERE r.post_id = p.id\n    )\n\n")
   -> 0.0004s
-- execute("\n    DROP TABLE topic_revisions\n\n")
   -> 0.0009s
== 20140306223522 MoveTopicRevisionsToPostRevisions: migrated (0.0046s) =======

== 20140318150412 AddExcerptToTopics: migrating ===============================
-- add_column(:topics, :excerpt, :string, {:limit=>1000})
   -> 0.0006s
-- execute("SELECT id FROM topics WHERE pinned_at IS NOT NULL")
   -> 0.0003s
== 20140318150412 AddExcerptToTopics: migrated (0.0014s) ======================

== 20140318203559 AddCreatedAtIndexToPosts: migrating =========================
-- execute("CREATE INDEX idx_posts_created_at_topic_id ON posts(created_at, topic_id) WHERE deleted_at IS NULL")
   -> 0.0018s
-- add_column(:categories, :topics_day, :integer, {:default=>0})
   -> 0.0006s
-- add_column(:categories, :posts_day, :integer, {:default=>0})
   -> 0.0004s
-- execute("DROP INDEX index_topics_on_deleted_at_and_visible_and_archetype_and_id")
   -> 0.0002s
-- add_index(:topics, [:deleted_at, :visible, :archetype, :category_id, :id], {:name=>"idx_topics_front_page"})
   -> 0.0024s
== 20140318203559 AddCreatedAtIndexToPosts: migrated (0.0068s) ================

== 20140320042653 FacebookUserInfosUsernameCanBeNil: migrating ================
-- change_column("facebook_user_infos", :username, :string)
   -> 0.0006s
== 20140320042653 FacebookUserInfosUsernameCanBeNil: migrated (0.0018s) =======

== 20140402201432 MakeContentSha1Nullable: migrating ==========================
-- change_column(:topic_embeds, :content_sha1, :string, {:limit=>40})
   -> 0.0005s
== 20140402201432 MakeContentSha1Nullable: migrated (0.0019s) =================

== 20140404143501 AddTitleToTopicLinks: migrating =============================
-- add_column(:topic_links, :title, :string)
   -> 0.0008s
-- add_column(:topic_links, :crawled_at, :timestamp, {:precision=>nil})
   -> 0.0006s
== 20140404143501 AddTitleToTopicLinks: migrated (0.0020s) ====================

== 20140407055830 AddPinnedGloballyToTopics: migrating ========================
-- add_column(:topics, :pinned_globally, :boolean, {:null=>false, :default=>false})
   -> 0.0013s
-- execute("UPDATE topics set pinned_globally = 't' where category_id = (\n      SELECT value::int FROM site_settings WHERE name = 'uncategorized_category_id') AND pinned_at IS NOT NULL\n    ")
   -> 0.0009s
== 20140407055830 AddPinnedGloballyToTopics: migrated (0.0033s) ===============

== 20140407202158 SiteSettingCommaToPipe: migrating ===========================
-- execute("      UPDATE site_settings\n      SET value = replace(value, ',', '|')\n      WHERE name = 'white_listed_spam_host_domains'\n      ;\n")
   -> 0.0004s
-- execute("      UPDATE site_settings\n      SET value = replace(value, ',', '|')\n      WHERE name = 'exclude_rel_nofollow_domains'\n      ;\n")
   -> 0.0002s
== 20140407202158 SiteSettingCommaToPipe: migrated (0.0010s) ==================

== 20140408061512 AddWikiToPosts: migrating ===================================
-- add_column(:posts, :wiki, :boolean, {:default=>false, :null=>false})
   -> 0.0012s
== 20140408061512 AddWikiToPosts: migrated (0.0017s) ==========================

== 20140408152401 AddDefaultValueToTopTopicScores: migrating ==================
-- change_column_default(:top_topics, :daily_score, 0)
   -> 0.0023s
-- change_column_default(:top_topics, :weekly_score, 0)
   -> 0.0020s
-- change_column_default(:top_topics, :monthly_score, 0)
   -> 0.0019s
-- change_column_default(:top_topics, :yearly_score, 0)
   -> 0.0018s
== 20140408152401 AddDefaultValueToTopTopicScores: migrated (0.0088s) =========

== 20140415054717 AllowLongerUsernames: migrating =============================
-- change_column(:users, :username, :string, {:limit=>60})
   -> 0.0008s
-- change_column(:users, :username_lower, :string, {:limit=>60})
   -> 0.0006s
== 20140415054717 AllowLongerUsernames: migrated (0.0019s) ====================

== 20140416202746 CreateColorSchemes: migrating ===============================
-- create_table(:color_schemes, {:id=>:integer})
   -> 0.0056s
== 20140416202746 CreateColorSchemes: migrated (0.0065s) ======================

== 20140416202801 CreateColorSchemeColors: migrating ==========================
-- create_table(:color_scheme_colors, {:id=>:integer})
   -> 0.0072s
-- add_index(:color_scheme_colors, [:color_scheme_id])
   -> 0.0015s
== 20140416202801 CreateColorSchemeColors: migrated (0.0096s) =================

== 20140416235757 RemoveColorHexcodeFromBadgeTypes: migrating =================
-- remove_column(:badge_types, :color_hexcode, :string)
   -> 0.0005s
== 20140416235757 RemoveColorHexcodeFromBadgeTypes: migrated (0.0010s) ========

== 20140421235646 AddUserCustomFields: migrating ==============================
-- create_table(:user_custom_fields, {:id=>:integer})
   -> 0.0051s
-- add_index(:user_custom_fields, [:user_id, :name])
   -> 0.0028s
== 20140421235646 AddUserCustomFields: migrated (0.0087s) =====================

== 20140422195623 AddVisibileToGroups: migrating ==============================
-- add_column(:groups, :visible, :boolean, {:default=>true, :null=>false})
   -> 0.0008s
== 20140422195623 AddVisibileToGroups: migrated (0.0013s) =====================

== 20140425125742 AddCustomFields: migrating ==================================
-- create_table(:category_custom_fields, {:id=>:integer})
   -> 0.0063s
-- create_table(:group_custom_fields, {:id=>:integer})
   -> 0.0059s
-- create_table(:post_custom_fields, {:id=>:integer})
   -> 0.0047s
-- add_index(:category_custom_fields, [:category_id, :name])
   -> 0.0038s
-- add_index(:group_custom_fields, [:group_id, :name])
   -> 0.0017s
-- add_index(:post_custom_fields, [:post_id, :name])
   -> 0.0016s
== 20140425125742 AddCustomFields: migrated (0.0251s) =========================

== 20140425135354 AddTopicCustomFields: migrating =============================
-- create_table(:topic_custom_fields, {:id=>:integer})
   -> 0.0043s
-- add_index(:topic_custom_fields, [:topic_id, :name])
   -> 0.0022s
-- execute("      INSERT INTO topic_custom_fields(topic_id, name, value)\n        SELECT id, (each(meta_data)).key, (each(meta_data)).value\n            FROM topics WHERE meta_data <> ''\n")
   -> 0.0015s
-- remove_column(:topics, :meta_data)
   -> 0.0004s
== 20140425135354 AddTopicCustomFields: migrated (0.0096s) ====================

== 20140425172618 AddTitleableToBadges: migrating =============================
-- add_column(:badges, :allow_title, :boolean, {:null=>false, :default=>false})
   -> 0.0012s
== 20140425172618 AddTitleableToBadges: migrated (0.0019s) ====================

== 20140429175951 AddRegistrationIpAddressToUsers: migrating ==================
-- add_column(:users, :registration_ip_address, :inet)
   -> 0.0007s
== 20140429175951 AddRegistrationIpAddressToUsers: migrated (0.0013s) =========

== 20140504174212 IncrementReservedTrustLevelBadgeIds: migrating ==============
-- execute("ALTER SEQUENCE badges_id_seq START WITH 100")
   -> 0.0006s
== 20140504174212 IncrementReservedTrustLevelBadgeIds: migrated (0.0127s) =====

== 20140505145918 AddLastRedirectedToTopAtToUsers: migrating ==================
-- add_column(:users, :last_redirected_to_top_at, :timestamp, {:precision=>nil})
   -> 0.0007s
== 20140505145918 AddLastRedirectedToTopAtToUsers: migrated (0.0015s) =========

== 20140506200235 RemoveSeedColorScheme: migrating ============================
-- execute("DELETE FROM color_schemes WHERE id = 1")
   -> 0.0005s
-- execute("DELETE FROM color_scheme_colors WHERE color_scheme_id = 1")
   -> 0.0005s
== 20140506200235 RemoveSeedColorScheme: migrated (0.0017s) ===================

== 20140507173327 RemoveOpacityFromColorSchemeColors: migrating ===============
-- remove_column(:color_scheme_colors, :opacity)
   -> 0.0005s
== 20140507173327 RemoveOpacityFromColorSchemeColors: migrated (0.0010s) ======

== 20140508053815 AddInvitedGroups: migrating =================================
-- create_table(:invited_groups, {:id=>:integer})
   -> 0.0040s
== 20140508053815 AddInvitedGroups: migrated (0.0046s) ========================

== 20140515220111 InitFixedCategoryPositionsValue: migrating ==================
== 20140515220111 InitFixedCategoryPositionsValue: migrated (0.0013s) =========

== 20140520062826 AddMultipleAwardToBadges: migrating =========================
-- add_column(:badges, :multiple_grant, :boolean, {:default=>false, :null=>false})
   -> 0.0008s
-- remove_index(:user_badges, nil, {:column=>[:badge_id, :user_id], :name=>"index_user_badges_on_badge_id_and_user_id"})
   -> 0.0031s
-- add_index(:user_badges, [:badge_id, :user_id])
   -> 0.0024s
== 20140520062826 AddMultipleAwardToBadges: migrated (0.0087s) ================

== 20140520063859 RemoveHasCustomAvatarFromUserStats: migrating ===============
-- remove_column(:user_stats, :has_custom_avatar)
   -> 0.0005s
== 20140520063859 RemoveHasCustomAvatarFromUserStats: migrated (0.0010s) ======

== 20140521192142 CreateGoogleUserInfos: migrating ============================
-- create_table(:google_user_infos, {:id=>:integer})
   -> 0.0054s
-- add_index(:google_user_infos, :user_id, {:unique=>true})
   -> 0.0017s
-- add_index(:google_user_infos, :google_user_id, {:unique=>true})
   -> 0.0017s
== 20140521192142 CreateGoogleUserInfos: migrated (0.0094s) ===================

== 20140521220115 GoogleOpenidDefaultHasChanged: migrating ====================
== 20140521220115 GoogleOpenidDefaultHasChanged: migrated (0.0014s) ===========

== 20140522003151 AddUserAvatars: migrating ===================================
-- create_table(:user_avatars, {:id=>:integer})
   -> 0.0047s
-- add_index(:user_avatars, [:user_id])
   -> 0.0021s
-- execute("   INSERT INTO user_avatars(user_id, custom_upload_id)\n   SELECT id, uploaded_avatar_id\n   FROM users\n")
   -> 0.0008s
-- execute("    UPDATE users SET uploaded_avatar_id = NULL\n    WHERE NOT use_uploaded_avatar\n")
   -> 0.0004s
== 20140522003151 AddUserAvatars: migrated (0.0089s) ==========================

== 20140525233953 RemoveUploadedAvatarTemplateFromUsers: migrating ============
-- remove_column(:users, :uploaded_avatar_template)
   -> 0.0005s
== 20140525233953 RemoveUploadedAvatarTemplateFromUsers: migrated (0.0012s) ===

== 20140526185749 ChangeCategoryUniqunessContstraint: migrating ===============
-- remove_index(:categories, nil, {:name=>"index_categories_on_name"})
   -> 0.0006s
-- add_index(:categories, [:parent_category_id, :name], {:unique=>true})
   -> 0.0024s
== 20140526185749 ChangeCategoryUniqunessContstraint: migrated (0.0051s) ======

== 20140526201939 AddDisableJumpReplyToUsers: migrating =======================
-- add_column(:users, :disable_jump_reply, :boolean, {:default=>false, :null=>false})
   -> 0.0009s
== 20140526201939 AddDisableJumpReplyToUsers: migrated (0.0014s) ==============

== 20140527163207 CreateUserProfiles: migrating ===============================
-- create_table(:user_profiles, {:id=>false})
   -> 0.0038s
-- execute("ALTER TABLE user_profiles ADD PRIMARY KEY (user_id)")
   -> 0.0033s
-- execute("INSERT INTO user_profiles (user_id) SELECT id FROM users")
   -> 0.0007s
== 20140527163207 CreateUserProfiles: migrated (0.0084s) ======================

== 20140527233225 AddSystemSavatarVersionToUserAvatars: migrating =============
-- add_column(:user_avatars, :system_avatar_version, :integer, {:default=>0})
   -> 0.0011s
== 20140527233225 AddSystemSavatarVersionToUserAvatars: migrated (0.0019s) ====

== 20140528015354 AddBakedAtToPosts: migrating ================================
-- add_column(:posts, :baked_at, :timestamp, {:precision=>nil})
   -> 0.0009s
== 20140528015354 AddBakedAtToPosts: migrated (0.0018s) =======================

== 20140529045508 RemoveUseUploadedAvatarFromUser: migrating ==================
-- remove_column(:users, :use_uploaded_avatar)
   -> 0.0005s
== 20140529045508 RemoveUseUploadedAvatarFromUser: migrated (0.0010s) =========

== 20140530002535 RemoveSystemAvatarsFromUserAvatars: migrating ===============
-- execute("UPDATE users SET uploaded_avatar_id = NULL WHERE uploaded_avatar_id IN (\n      SELECT system_upload_id FROM user_avatars\n    )")
   -> 0.0011s
-- remove_column(:user_avatars, :system_upload_id)
   -> 0.0005s
-- remove_column(:user_avatars, :system_avatar_version)
   -> 0.0004s
== 20140530002535 RemoveSystemAvatarsFromUserAvatars: migrated (0.0070s) ======

== 20140530043913 AddBakedVersionToPost: migrating ============================
-- add_column(:posts, :baked_version, :integer)
   -> 0.0008s
== 20140530043913 AddBakedVersionToPost: migrated (0.0017s) ===================

== 20140604145431 DisableExternalAuthsByDefault: migrating ====================
== 20140604145431 DisableExternalAuthsByDefault: migrated (0.0010s) ===========

== 20140607035234 AddWebsiteToUserProfiles: migrating =========================
-- add_column(:user_profiles, :website, :string)
   -> 0.0010s
-- execute("UPDATE user_profiles SET website = (SELECT website FROM users where user_profiles.user_id = users.id)")
   -> 0.0006s
-- remove_column(:users, :website)
   -> 0.0008s
== 20140607035234 AddWebsiteToUserProfiles: migrated (0.0032s) ================

== 20140610012414 AddPostIdToUserBadges: migrating ============================
-- add_column(:user_badges, :post_id, :integer)
   -> 0.0008s
== 20140610012414 AddPostIdToUserBadges: migrated (0.0016s) ===================

== 20140610012833 AddIconToBadges: migrating ==================================
-- add_column(:badges, :icon, :string, {:default=>"fa-certificate"})
   -> 0.0012s
== 20140610012833 AddIconToBadges: migrated (0.0021s) =========================

== 20140610034314 MoveBioToUserProfiles: migrating ============================
-- add_column(:user_profiles, :bio_raw, :text)
   -> 0.0010s
-- add_column(:user_profiles, :bio_cooked, :text)
   -> 0.0005s
-- execute("UPDATE user_profiles SET bio_raw = subquery.bio_raw, bio_cooked = subquery.bio_cooked FROM (\n      SELECT bio_raw, bio_cooked, id FROM users\n    ) as subquery WHERE user_profiles.user_id = subquery.id")
   -> 0.0007s
-- remove_column(:users, :bio_raw)
   -> 0.0005s
-- remove_column(:users, :bio_cooked)
   -> 0.0003s
== 20140610034314 MoveBioToUserProfiles: migrated (0.0040s) ===================

== 20140612010718 MoveProfileBackgroundToUserProfiles: migrating ==============
-- add_column(:user_profiles, :profile_background, :string, {:limit=>255})
   -> 0.0006s
-- execute("UPDATE user_profiles SET profile_background = (SELECT profile_background FROM users WHERE user_profiles.user_id = users.id)")
   -> 0.0005s
-- remove_column(:users, :profile_background)
   -> 0.0007s
== 20140612010718 MoveProfileBackgroundToUserProfiles: migrated (0.0027s) =====

== 20140617053829 AddNotificationIdToUserBadge: migrating =====================
-- add_column(:user_badges, :notification_id, :integer)
   -> 0.0007s
== 20140617053829 AddNotificationIdToUserBadge: migrated (0.0016s) ============

== 20140617080955 RenameRegisteredUsers: migrating ============================
-- execute("update groups set name = 'trust_level_0' where name = 'registered_users' and id = 10")
   -> 0.0008s
== 20140617080955 RenameRegisteredUsers: migrated (0.0015s) ===================

== 20140617193351 AddPostIdIndexOnTopicLinks: migrating =======================
-- add_index(:topic_links, :post_id)
   -> 0.0025s
== 20140617193351 AddPostIdIndexOnTopicLinks: migrated (0.0031s) ==============

== 20140618001820 DontAutoMutoTopics: migrating ===============================
-- execute("DELETE FROM topic_users WHERE notification_level = 0 and notifications_reason_id =7 AND first_visited_at IS NULL")
   -> 0.0008s
-- execute("UPDATE topic_users SET notification_level = 1,\n                                    notifications_reason_id = NULL\n            WHERE notification_level = 0 AND notifications_reason_id =7")
   -> 0.0004s
== 20140618001820 DontAutoMutoTopics: migrated (0.0018s) ======================

== 20140618163511 AddDismissedBannerKeyToUserProfile: migrating ===============
-- add_column(:user_profiles, :dismissed_banner_key, :integer, {:nullable=>true})
   -> 0.0005s
== 20140618163511 AddDismissedBannerKeyToUserProfile: migrated (0.0013s) ======

== 20140620184031 AddHiddenAtToPosts: migrating ===============================
-- add_column(:posts, :hidden_at, :timestamp)
   -> 0.0007s
== 20140620184031 AddHiddenAtToPosts: migrated (0.0012s) ======================

== 20140623195618 FixCategoriesConstraint: migrating ==========================
-- remove_index(:categories, nil, {:name=>"index_categories_on_parent_category_id_and_name"})
   -> 0.0007s
-- execute("DELETE FROM categories WHERE id IN (SELECT id FROM (SELECT id, row_number() over (partition BY parent_category_id, name ORDER BY id) AS rnum FROM categories) t WHERE t.rnum > 1)")
   -> 0.0006s
-- execute("CREATE UNIQUE INDEX unique_index_categories_on_name ON categories (COALESCE(parent_category_id, -1), name)")
   -> 0.0024s
== 20140623195618 FixCategoriesConstraint: migrated (0.0064s) =================

== 20140624044600 AddRawDataToSearch: migrating ===============================
-- add_column(:post_search_data, :raw_data, :text)
   -> 0.0007s
-- add_column(:user_search_data, :raw_data, :text)
   -> 0.0004s
-- add_column(:category_search_data, :raw_data, :text)
   -> 0.0003s
-- add_column(:post_search_data, :locale, :string)
   -> 0.0003s
-- add_column(:user_search_data, :locale, :text)
   -> 0.0007s
-- add_column(:category_search_data, :locale, :text)
   -> 0.0007s
== 20140624044600 AddRawDataToSearch: migrated (0.0044s) ======================

== 20140627193814 AddImagesToCategories: migrating ============================
-- add_column(:categories, :logo_url, :string)
   -> 0.0010s
-- add_column(:categories, :background_url, :string)
   -> 0.0006s
== 20140627193814 AddImagesToCategories: migrated (0.0023s) ===================

== 20140703022838 AddFieldsToBadges: migrating ================================
-- add_column(:badges, :listable, :boolean, {:default=>true})
   -> 0.0008s
-- add_column(:badges, :target_posts, :boolean, {:default=>false})
   -> 0.0010s
-- add_column(:badges, :query, :text)
   -> 0.0006s
== 20140703022838 AddFieldsToBadges: migrated (0.0032s) =======================

== 20140705081453 IndexUserBadges: migrating ==================================
-- execute("DELETE FROM user_badges USING user_badges ub2\n             WHERE  user_badges.badge_id = ub2.badge_id AND\n                    user_badges.user_id = ub2.user_id AND\n                    user_badges.post_id IS NOT NULL AND\n                    user_badges.id < ub2.id\n    ")
   -> 0.0006s
-- add_index(:user_badges, [:badge_id, :user_id, :post_id], {:unique=>true, :where=>"post_id IS NOT NULL"})
   -> 0.0030s
== 20140705081453 IndexUserBadges: migrated (0.0046s) =========================

== 20140707071913 AddSelfEditsToPosts: migrating ==============================
-- add_column(:posts, :self_edits, :integer, {:null=>false, :default=>0})
   -> 0.0012s
-- execute("\n    UPDATE posts p SET self_edits = (SELECT COUNT(*) FROM post_revisions pr WHERE pr.post_id = p.id AND pr.user_id=p.user_id)\n    ")
   -> 0.0009s
== 20140707071913 AddSelfEditsToPosts: migrated (0.0028s) =====================

== 20140710005023 AddBadgePostsAndTopicsView: migrating =======================
-- add_column(:categories, :allow_badges, :boolean, {:default=>true, :null=>false})
   -> 0.0016s
-- execute("CREATE VIEW badge_posts AS\n    SELECT p.*\n    FROM posts p\n    JOIN topics t ON t.id = p.topic_id\n    JOIN categories c ON c.id = t.category_id\n    WHERE c.allow_badges AND\n          p.deleted_at IS NULL AND\n          t.deleted_at IS NULL AND\n          t.visible")
   -> 0.0087s
== 20140710005023 AddBadgePostsAndTopicsView: migrated (0.0114s) ==============

== 20140710224658 AddIsQuoteToTopicLinks: migrating ===========================
-- add_column(:topic_links, :quote, :boolean, {:default=>false, :null=>false})
   -> 0.0013s
-- execute("\n    UPDATE topic_links\n    SET quote = true\n    WHERE id IN (\n    SELECT l.id\n      FROM topic_links l\n      JOIN posts p ON p.id = l.post_id\n      JOIN posts lp ON l.link_post_id = lp.id\n      WHERE p.raw LIKE '%[quote=%post:' ||\n            lp.post_number::varchar || ',%topic:' ||\n            lp.topic_id::varchar || '%]%[/quote]%'\n    )")
   -> 0.0009s
== 20140710224658 AddIsQuoteToTopicLinks: migrated (0.0030s) ==================

== 20140711063215 AddReadFaqToUserStats: migrating ============================
-- add_column(:user_stats, :read_faq, :timestamp, {:precision=>nil})
   -> 0.0005s
== 20140711063215 AddReadFaqToUserStats: migrated (0.0010s) ===================

== 20140711143146 RemoveNotNullFromEmail: migrating ===========================
-- execute("ALTER TABLE invites ALTER COLUMN email DROP NOT NULL")
   -> 0.0002s
== 20140711143146 RemoveNotNullFromEmail: migrated (0.0007s) ==================

== 20140711193923 RemoveEmailInAddressSetting: migrating ======================
== 20140711193923 RemoveEmailInAddressSetting: migrated (0.0019s) =============

== 20140711233329 BadgesOnlyOnPublicCategories: migrating =====================
-- execute("DROP VIEW badge_posts")
   -> 0.0012s
-- execute("CREATE VIEW badge_posts AS\n    SELECT p.*\n    FROM posts p\n    JOIN topics t ON t.id = p.topic_id\n    JOIN categories c ON c.id = t.category_id\n    WHERE c.allow_badges AND\n          p.deleted_at IS NULL AND\n          t.deleted_at IS NULL AND\n          NOT c.read_restricted AND\n          t.visible")
   -> 0.0034s
== 20140711233329 BadgesOnlyOnPublicCategories: migrated (0.0052s) ============

== 20140714060646 AddEnabledToBadges: migrating ===============================
-- add_column(:badges, :enabled, :boolean, {:default=>true, :null=>false})
   -> 0.0006s
== 20140714060646 AddEnabledToBadges: migrated (0.0010s) ======================

== 20140715013018 CorrectPostNumberIndex: migrating ===========================
-- execute("      UPDATE posts SET post_number = post_number + 1\n      WHERE id IN (\n        SELECT p1.id\n        FROM posts p1\n        JOIN\n        (\n          SELECT post_number, topic_id, min(id) min_id\n          FROM posts\n          GROUP BY post_number, topic_id\n          HAVING COUNT(*) > 1\n        ) pp ON p1.topic_id = pp.topic_id AND\n                p1.post_number >= pp.post_number AND\n                p1.id <> pp.min_id\n      )\n")
   -> 0.0010s
-- remove_index(:posts, [:topic_id, :post_number], {:name=>"index_posts_on_topic_id_and_post_number"})
   -> 0.0023s
-- add_index(:posts, [:topic_id, :post_number], {:unique=>true})
   -> 0.0019s
== 20140715013018 CorrectPostNumberIndex: migrated (0.0067s) ==================

== 20140715051412 AddAutoRevokeToBadges: migrating ============================
-- add_column(:badges, :auto_revoke, :boolean, {:default=>true, :null=>false})
   -> 0.0014s
== 20140715051412 AddAutoRevokeToBadges: migrated (0.0020s) ===================

== 20140715055242 AddQuotedPosts: migrating ===================================
-- create_table(:quoted_posts, {:id=>:integer})
   -> 0.0034s
-- add_index(:quoted_posts, [:post_id, :quoted_post_id], {:unique=>true})
   -> 0.0017s
-- add_index(:quoted_posts, [:quoted_post_id, :post_id], {:unique=>true})
   -> 0.0013s
-- execute("    SELECT id, cooked\n    FROM posts\n    WHERE raw like '%quote=%' AND id > 0\n    ORDER BY id\n    LIMIT 1000\n")
   -> 0.0006s
== 20140715055242 AddQuotedPosts: migrated (0.0077s) ==========================

== 20140715160720 UpdateUsersCaseInsensitiveEmails: migrating =================
-- execute("DROP INDEX index_users_on_email")
   -> 0.0004s
-- execute("      SELECT id, email, count\n        FROM (SELECT id, email,\n                     row_number() OVER(PARTITION BY lower(email) ORDER BY id asc) AS count\n                FROM users) dups\n      WHERE dups.count > 1\n")
   -> 0.0007s
-- execute("UPDATE users SET email = lower(email)")
   -> 0.0004s
-- execute("CREATE UNIQUE INDEX index_users_on_email ON users ((lower(email)));")
   -> 0.0023s
== 20140715160720 UpdateUsersCaseInsensitiveEmails: migrated (0.0049s) ========

== 20140715190552 RemoveUncategorizedParents: migrating =======================
-- execute("SELECT value FROM site_settings WHERE name = 'uncategorized_category_id'")
   -> 0.0002s
-- execute("UPDATE categories SET parent_category_id = NULL where id = 1")
   -> 0.0004s
== 20140715190552 RemoveUncategorizedParents: migrated (0.0012s) ==============

== 20140716063802 AddBadgeGroupings: migrating ================================
-- create_table(:badge_groupings, {:id=>:integer})
   -> 0.0055s
-- add_column(:badges, :badge_grouping_id, :integer)
   -> 0.0006s
== 20140716063802 AddBadgeGroupings: migrated (0.0068s) =======================

== 20140717024528 DescriptionOptionalInBadgeGrouping: migrating ===============
-- change_column(:badge_groupings, :description, :text)
   -> 0.0006s
== 20140717024528 DescriptionOptionalInBadgeGrouping: migrated (0.0014s) ======

== 20140718041445 SetDefaultBadgeGrouping: migrating ==========================
-- execute("UPDATE badges SET badge_grouping_id = 5 WHERE badge_grouping_id IS NULL")
   -> 0.0004s
-- change_column(:badges, :badge_grouping_id, :integer)
   -> 0.0003s
== 20140718041445 SetDefaultBadgeGrouping: migrated (0.0063s) =================

== 20140721063820 AddTriggerToBadges: migrating ===============================
-- add_column(:badges, :trigger, :integer)
   -> 0.0006s
== 20140721063820 AddTriggerToBadges: migrated (0.0011s) ======================

== 20140721161249 AddAgreedAtAndAgreedByIdToPostAction: migrating =============
-- add_column(:post_actions, :agreed_at, :timestamp, {:precision=>nil})
   -> 0.0004s
-- add_column(:post_actions, :agreed_by_id, :integer)
   -> 0.0002s
== 20140721161249 AddAgreedAtAndAgreedByIdToPostAction: migrated (0.0011s) ====

== 20140721162307 RenameDeferColumnsOnPostAction: migrating ===================
-- rename_column(:post_actions, :defer_by, :defered_by_id)
   -> 0.0027s
-- add_column(:post_actions, :defered_at, :timestamp, {:precision=>nil})
   -> 0.0009s
-- execute("UPDATE post_actions SET defered_at = updated_at WHERE defer = 't'")
   -> 0.0006s
-- remove_column(:post_actions, :defer)
   -> 0.0005s
== 20140721162307 RenameDeferColumnsOnPostAction: migrated (0.0060s) ==========

== 20140723011456 AddShowPostsToBadges: migrating =============================
-- add_column(:badges, :show_posts, :boolean, {:null=>false, :default=>false})
   -> 0.0010s
== 20140723011456 AddShowPostsToBadges: migrated (0.0013s) ====================

== 20140725050636 RemoveInvalidIncomingLinks: migrating =======================
-- execute("DELETE FROM incoming_links WHERE url ILIKE '%avatar%.png'")
   -> 0.0005s
== 20140725050636 RemoveInvalidIncomingLinks: migrated (0.0011s) ==============

== 20140725172830 RemoveMessageFromPostAction: migrating ======================
-- remove_column(:post_actions, :message)
   -> 0.0003s
== 20140725172830 RemoveMessageFromPostAction: migrated (0.0007s) =============

== 20140727030954 AddEditHistoryPublicToUsers: migrating ======================
-- add_column(:users, :edit_history_public, :boolean, {:default=>false, :null=>false})
   -> 0.0008s
== 20140727030954 AddEditHistoryPublicToUsers: migrated (0.0013s) =============

== 20140728120708 FixIndexOnPostAction: migrating =============================
-- remove_index("post_actions", nil, {:name=>"idx_unique_actions"})
   -> 0.0003s
-- add_index("post_actions", ["user_id", "post_action_type_id", "post_id", "deleted_at", "targets_topic"], {:name=>"idx_unique_actions", :unique=>true})
   -> 0.0016s
== 20140728120708 FixIndexOnPostAction: migrated (0.0032s) ====================

== 20140728144308 AddFirstPostCreatedAtToUserStat: migrating ==================
-- add_column(:user_stats, :first_post_created_at, :timestamp, {:precision=>nil})
   -> 0.0004s
-- execute("      WITH first_posts AS (\n        SELECT p.id,\n               p.user_id,\n               p.created_at,\n               ROW_NUMBER() OVER (PARTITION BY p.user_id ORDER BY p.created_at ASC) AS row\n          FROM posts p\n      )\n      UPDATE user_stats us\n         SET first_post_created_at = fp.created_at\n        FROM first_posts fp\n       WHERE fp.row = 1\n         AND fp.user_id = us.user_id\n")
   -> 0.0009s
== 20140728144308 AddFirstPostCreatedAtToUserStat: migrated (0.0021s) =========

== 20140728152804 AddPostAndTopicCountsToUserStat: migrating ==================
-- add_column(:user_stats, :post_count, :integer, {:default=>0, :null=>false})
   -> 0.0011s
-- add_column(:user_stats, :topic_count, :integer, {:default=>0, :null=>false})
   -> 0.0007s
-- execute("      UPDATE user_stats\n      SET post_count = pc.count\n      FROM (SELECT user_id, COUNT(*) AS count FROM posts GROUP BY user_id) AS pc\n      WHERE pc.user_id = user_stats.user_id\n")
   -> 0.0005s
-- execute("      UPDATE user_stats\n      SET topic_count = tc.count\n      FROM (SELECT user_id, COUNT(*) AS count FROM topics GROUP BY user_id) AS tc\n      WHERE tc.user_id = user_stats.user_id\n")
   -> 0.0003s
== 20140728152804 AddPostAndTopicCountsToUserStat: migrated (0.0033s) =========

== 20140729092525 RemoveUniqueConstraintFromInvitesIndex: migrating ===========
-- remove_index(:invites, [:email, :invited_by_id], {:name=>"index_invites_on_email_and_invited_by_id"})
   -> 0.0021s
-- add_index(:invites, [:email, :invited_by_id], {:unique=>false})
   -> 0.0017s
== 20140729092525 RemoveUniqueConstraintFromInvitesIndex: migrated (0.0053s) ==

== 20140730203029 AddDisagreedAtAndDisagreedByIdToPostAction: migrating =======
-- add_column(:post_actions, :disagreed_at, :timestamp, {:precision=>nil})
   -> 0.0005s
-- add_column(:post_actions, :disagreed_by_id, :integer)
   -> 0.0003s
-- execute("      UPDATE post_actions\n         SET disagreed_at = deleted_at,\n             disagreed_by_id = deleted_by_id,\n             deleted_at = NULL,\n             deleted_by_id = NULL\n       WHERE deleted_by_id != user_id\n")
   -> 0.0004s
== 20140730203029 AddDisagreedAtAndDisagreedByIdToPostAction: migrated (0.0020s)

== 20140731011328 AddReplyQuotedToPosts: migrating ============================
-- add_column(:posts, :reply_quoted, :boolean, {:null=>false, :default=>false})
   -> 0.0008s
-- execute("UPDATE posts p\n             SET reply_quoted = true\n             WHERE EXISTS(\n               SELECT 1 FROM quoted_posts q\n               JOIN posts p1 ON p1.post_number = p.reply_to_post_number AND p1.topic_id = p.topic_id\n               WHERE q.post_id = p.id AND q.quoted_post_id = p1.id\n             ) AND p.reply_to_post_number IS NOT NULL")
   -> 0.0007s
== 20140731011328 AddReplyQuotedToPosts: migrated (0.0019s) ===================

== 20140801052028 FixIncomingLinks: migrating =================================
-- execute("DROP INDEX incoming_index")
   -> 0.0003s
-- add_column(:incoming_links, :post_id, :integer)
   -> 0.0005s
-- remove_column(:incoming_links, :updated_at)
   -> 0.0003s
-- remove_column(:incoming_links, :url)
   -> 0.0002s
-- execute("UPDATE incoming_links l SET post_id = (\n      SELECT p.id FROM posts p WHERE p.topic_id = l.topic_id AND p.post_number = l.post_number\n    )")
   -> 0.0005s
-- execute("DELETE FROM incoming_links WHERE post_id IS NULL")
   -> 0.0001s
-- change_column(:incoming_links, :post_id, :integer)
   -> 0.0004s
-- add_index(:incoming_links, :post_id)
   -> 0.0085s
== 20140801052028 FixIncomingLinks: migrated (0.0120s) ========================

== 20140801170444 CreatePostTimingsUserIndex: migrating =======================
-- add_index(:post_timings, :user_id)
   -> 0.0021s
== 20140801170444 CreatePostTimingsUserIndex: migrated (0.0026s) ==============

== 20140804010803 IncomingLinkNormalization: migrating ========================
-- remove_column(:incoming_links, :post_number)
   -> 0.0004s
-- remove_column(:incoming_links, :domain)
   -> 0.0003s
-- add_column(:incoming_links, :incoming_referer_id, :integer)
   -> 0.0006s
-- create_table(:incoming_referers, {:id=>:integer})
   -> 0.0064s
-- execute("INSERT INTO incoming_referers(url, https, domain, port, path)\n             SELECT referer,\n                    CASE WHEN a[1] = 's' THEN true ELSE false END,\n                    a[2] as domain,\n                    CASE WHEN a[1] = 's' THEN\n                      COALESCE(a[4]::integer, 443)::integer\n                    ELSE\n                      COALESCE(a[4]::integer, 80)::integer\n                    END,\n                    COALESCE(a[5], '') path\n             FROM\n            (\n              SELECT referer, regexp_matches(referer, 'http(s)?://([^/:]+)(:(d+))?(.*)') a\n              FROM\n              (\n               SELECT DISTINCT referer\n               FROM incoming_links WHERE referer ~ '^https?://.+'\n              ) Z\n            ) X\n          WHERE a[2] IS NOT NULL")
   -> 0.0008s
-- execute("UPDATE incoming_links l\n    SET incoming_referer_id = r.id\n    FROM incoming_referers r\n    WHERE r.url = l.referer")
   -> 0.0008s
-- create_table(:incoming_domains, {:id=>:integer})
   -> 0.0042s
-- execute("INSERT INTO incoming_domains(name, port, https)\n    SELECT DISTINCT domain, port, https\n    FROM incoming_referers")
   -> 0.0005s
-- execute("UPDATE incoming_referers l\n    SET incoming_domain_id = d.id\n    FROM incoming_domains d\n    WHERE d.name = l.domain AND d.https = l.https AND d.port = l.port")
   -> 0.0004s
-- remove_column(:incoming_referers, :domain)
   -> 0.0003s
-- remove_column(:incoming_referers, :port)
   -> 0.0002s
-- remove_column(:incoming_referers, :https)
   -> 0.0004s
-- change_column(:incoming_referers, :incoming_domain_id, :integer)
   -> 0.0003s
-- add_index(:incoming_referers, [:path, :incoming_domain_id], {:unique=>true})
   -> 0.0020s
-- add_index(:incoming_domains, [:name, :https, :port], {:unique=>true})
   -> 0.0022s
-- remove_column(:incoming_links, :referer)
   -> 0.0004s
== 20140804010803 IncomingLinkNormalization: migrated (0.0223s) ===============

== 20140804030041 RemoveUrlFromIncomingReferer: migrating =====================
-- remove_column(:incoming_referers, :url)
   -> 0.0006s
== 20140804030041 RemoveUrlFromIncomingReferer: migrated (0.0012s) ============

== 20140804060439 DropTopicIdFromIncomingLinks: migrating =====================
-- remove_column(:incoming_links, :topic_id)
   -> 0.0007s
== 20140804060439 DropTopicIdFromIncomingLinks: migrated (0.0012s) ============

== 20140804072504 ViewsToTopicViews: migrating ================================
-- remove_column(:views, :parent_type)
   -> 0.0009s
-- rename_column(:views, :parent_id, :topic_id)
   -> 0.0013s
-- rename_table(:views, :topic_views)
   -> 0.0026s
-- add_index(:topic_views, [:topic_id])
   -> 0.0018s
-- add_index(:topic_views, [:user_id, :topic_id])
   -> 0.0018s
== 20140804072504 ViewsToTopicViews: migrated (0.0093s) =======================

== 20140804075613 NormalizeTopicViewDataAndIndex: migrating ===================
-- remove_index(:topic_views, [:topic_id], {:name=>"index_topic_views_on_topic_id"})
   -> 0.0025s
-- remove_index(:topic_views, [:user_id, :topic_id], {:name=>"index_topic_views_on_user_id_and_topic_id"})
   -> 0.0017s
-- execute("CREATE TEMPORARY TABLE tmp_views_user(user_id int, topic_id int, viewed_at date, ip_address inet)")
   -> 0.0023s
-- execute("INSERT INTO tmp_views_user(user_id, topic_id, ip_address, viewed_at)\n      SELECT user_id, topic_id, min(ip_address::varchar)::inet, min(viewed_at)\n      FROM topic_views\n      WHERE user_id IS NOT NULL\n      GROUP BY user_id, topic_id\n    ")
   -> 0.0007s
-- execute("CREATE TEMPORARY TABLE tmp_views_ip(topic_id int, viewed_at date, ip_address inet)")
   -> 0.0013s
-- execute("INSERT INTO tmp_views_ip(topic_id, ip_address, viewed_at)\n      SELECT topic_id, ip_address, min(viewed_at)\n      FROM topic_views\n      WHERE user_id IS NULL\n      GROUP BY user_id, topic_id, ip_address\n    ")
   -> 0.0007s
-- execute("truncate table topic_views")
   -> 0.0019s
-- execute("INSERT INTO topic_views(user_id, topic_id, ip_address, viewed_at)\n    SELECT user_id, topic_id, ip_address, viewed_at FROM tmp_views_user\n    UNION ALL\n    SELECT NULL, topic_id, ip_address, viewed_at FROM tmp_views_ip\n    ")
   -> 0.0003s
-- execute("CREATE UNIQUE INDEX user_id_topic_id_topic_views ON topic_views(user_id, topic_id) WHERE user_id IS NOT NULL")
   -> 0.0016s
-- execute("CREATE UNIQUE INDEX ip_address_topic_id_topic_views ON topic_views(ip_address, topic_id) WHERE user_id IS NULL")
   -> 0.0012s
-- add_index(:topic_views, [:topic_id, :viewed_at])
   -> 0.0026s
-- add_index(:topic_views, [:viewed_at, :topic_id])
   -> 0.0019s
== 20140804075613 NormalizeTopicViewDataAndIndex: migrated (0.0222s) ==========

== 20140805061612 AddBioCookedVersionToUserProfile: migrating =================
-- add_column(:user_profiles, :bio_cooked_version, :integer)
   -> 0.0005s
-- add_index(:user_profiles, [:bio_cooked_version])
   -> 0.0014s
== 20140805061612 AddBioCookedVersionToUserProfile: migrated (0.0025s) ========

== 20140806003116 FixupBadgeIds: migrating ====================================
-- add_column(:badges, :system, :boolean, {:default=>false, :null=>false})
   -> 0.0012s
== 20140806003116 FixupBadgeIds: migrated (0.0019s) ===========================

== 20140807033123 AddIndexOnLastSeenToUsers: migrating ========================
-- add_index(:users, [:last_seen_at])
   -> 0.0031s
== 20140807033123 AddIndexOnLastSeenToUsers: migrated (0.0042s) ===============

== 20140808051823 CreateTopicSearchIndex: migrating ===========================
-- create_table(:topic_search_data, {:id=>false})
   -> 0.0042s
-- execute("CREATE INDEX idx_search_topic ON topic_search_data USING gin (search_data)")
   -> 0.0004s
== 20140808051823 CreateTopicSearchIndex: migrated (0.0053s) ==================

== 20140809224243 AddUserBadgeUniqueIndex: migrating ==========================
-- add_column(:user_badges, :seq, :integer, {:default=>0, :null=>false})
   -> 0.0010s
-- execute("\n      UPDATE user_badges ub1 SET seq = X.seq\n      FROM (\n        SELECT ub.id, rank() OVER (PARTITION BY user_id ORDER BY granted_at) seq\n        FROM user_badges ub\n        JOIN badges b ON b.id = ub.badge_id\n        WHERE b.multiple_grant\n      ) X\n      WHERE ub1.id = X.id\n    ")
   -> 0.0008s
-- execute("\n      DELETE FROM user_badges ub1\n      WHERE ub1.id NOT IN (\n        SELECT MIN(ub.id)\n        FROM user_badges ub\n        GROUP BY ub.user_id, ub.badge_id, ub.seq\n      )\n    ")
   -> 0.0003s
-- add_index(:user_badges, [:badge_id, :user_id, :seq], {:unique=>true, :where=>"post_id IS NULL"})
   -> 0.0019s
== 20140809224243 AddUserBadgeUniqueIndex: migrated (0.0049s) =================

== 20140811094300 RenameDeferedColumnsOnPostAction: migrating =================
-- rename_column(:post_actions, :defered_by_id, :deferred_by_id)
   -> 0.0021s
-- rename_column(:post_actions, :defered_at, :deferred_at)
   -> 0.0020s
== 20140811094300 RenameDeferedColumnsOnPostAction: migrated (0.0047s) ========

== 20140813175357 AddDefaultToActive: migrating ===============================
-- change_column(:users, :active, :boolean)
   -> 0.0005s
== 20140813175357 AddDefaultToActive: migrated (0.0060s) ======================

== 20140815183851 FixIndexOnPostActions: migrating ============================
-- execute("UPDATE post_actions SET targets_topic = false WHERE targets_topic IS NULL")
   -> 0.0006s
-- change_column(:post_actions, :targets_topic, :boolean)
   -> 0.0013s
-- execute("\n    DELETE FROM post_actions pa\n                    USING post_actions x\n    WHERE pa.user_id = x.user_id AND\n          pa.post_action_type_id = x.post_action_type_id AND\n          pa.post_id = x.post_id AND\n          pa.targets_topic = x.targets_topic AND\n          pa.id < x.id AND\n          pa.deleted_at IS NULL AND\n          x.deleted_at IS NULL\n    ")
   -> 0.0003s
-- remove_index("post_actions", nil, {:name=>"idx_unique_actions"})
   -> 0.0003s
-- add_index("post_actions", ["user_id", "post_action_type_id", "post_id", "targets_topic"], {:name=>"idx_unique_actions", :unique=>true, :where=>"deleted_at IS NULL"})
   -> 0.0016s
== 20140815183851 FixIndexOnPostActions: migrated (0.0091s) ===================

== 20140815191556 FixPostActionsIndexAgain: migrating =========================
-- remove_index("post_actions", nil, {:name=>"idx_unique_actions"})
   -> 0.0007s
-- add_index("post_actions", ["user_id", "post_action_type_id", "post_id", "targets_topic"], {:name=>"idx_unique_actions", :unique=>true, :where=>"deleted_at IS NULL AND disagreed_at IS NULL AND deferred_at IS NULL"})
   -> 0.0020s
== 20140815191556 FixPostActionsIndexAgain: migrated (0.0046s) ================

== 20140815215618 AddNameLowerToCategories: migrating =========================
-- add_column(:categories, :name_lower, :string, {:limit=>50})
   -> 0.0004s
-- execute("update categories set name_lower = lower(name)")
   -> 0.0007s
-- change_column(:categories, :name_lower, :string, {:limit=>50})
   -> 0.0003s
== 20140815215618 AddNameLowerToCategories: migrated (0.0020s) ================

== 20140817011612 AddExternalAvatarUrlToSingleSignOnRecord: migrating =========
-- add_column(:single_sign_on_records, :external_avatar_url, :string)
   -> 0.0004s
== 20140817011612 AddExternalAvatarUrlToSingleSignOnRecord: migrated (0.0009s)

== 20140818023700 IndexEmailTokens: migrating =================================
-- add_index(:email_tokens, [:user_id])
   -> 0.0017s
== 20140818023700 IndexEmailTokens: migrated (0.0026s) ========================

== 20140826234625 RenameSettingsPop3sToPop3: migrating ========================
-- execute("UPDATE site_settings SET name = replace(name, 'pop3s', 'pop3') WHERE name ILIKE 'pop3%'")
   -> 0.0005s
== 20140826234625 RenameSettingsPop3sToPop3: migrated (0.0015s) ===============

== 20140827044811 RemoveNullableDates: migrating ==============================
-- execute("DROP VIEW badge_posts")
   -> 0.0013s
-- execute("select table_name, column_name from information_schema.columns\n           WHERE  column_name IN ('created_at','updated_at') AND\n                  table_schema = 'public' AND\n                  is_nullable = 'YES' AND\n                  is_updatable = 'YES' AND\n                  data_type = 'timestamp without time zone'")
   -> 0.0058s
-- execute("UPDATE \"message_bus\" SET created_at = CURRENT_TIMESTAMP WHERE created_at IS NULL")
   -> 0.0004s
-- change_column(:message_bus, :created_at, :timestamp, {:precision=>nil})
   -> 0.0007s
-- execute("CREATE VIEW badge_posts AS\n    SELECT p.*\n    FROM posts p\n    JOIN topics t ON t.id = p.topic_id\n    JOIN categories c ON c.id = t.category_id\n    WHERE c.allow_badges AND\n          p.deleted_at IS NULL AND\n          t.deleted_at IS NULL AND\n          NOT c.read_restricted AND\n          t.visible")
   -> 0.0025s
== 20140827044811 RemoveNullableDates: migrated (0.0123s) =====================

== 20140828172407 CreatePermalinks: migrating =================================
-- create_table(:permalinks, {:id=>:integer})
   -> 0.0071s
-- add_index(:permalinks, :url)
   -> 0.0023s
== 20140828172407 CreatePermalinks: migrated (0.0104s) ========================

== 20140828200231 MakeUrlColBiggerInPermalinks: migrating =====================
-- remove_index(:permalinks, :url, {:name=>"index_permalinks_on_url"})
   -> 0.0018s
-- change_column(:permalinks, :url, :string, {:limit=>1000})
   -> 0.0070s
-- add_index(:permalinks, :url, {:unique=>true})
   -> 0.0013s
== 20140828200231 MakeUrlColBiggerInPermalinks: migrated (0.0125s) ============

== 20140831191346 RemoveCategoryGroupsOrphanedByRemovingCategoryOrGroup: migrating
-- execute("DELETE FROM category_groups\n             WHERE group_id NOT IN (\n                 SELECT groups.id FROM groups)\n              OR category_id NOT IN (\n                 SELECT categories.id FROM categories)")
   -> 0.0005s
== 20140831191346 RemoveCategoryGroupsOrphanedByRemovingCategoryOrGroup: migrated (0.0011s)

== 20140904055702 CorrectPostActionIndex: migrating ===========================
-- execute("DELETE FROM post_actions pa\n                    USING post_actions pa2\n             WHERE pa.post_action_type_id IN (3,4,7,8) AND\n                   pa2.post_action_type_id IN (3,4,7,8) AND\n                   pa.deleted_at IS NULL AND\n                   pa2.deleted_at IS NULL AND\n                   pa.disagreed_at IS NULL AND\n                   pa2.disagreed_at IS NULL AND\n                   pa.deferred_at IS NULL AND\n                   pa2.deferred_at IS NULL AND\n                   pa.id < pa2.id AND\n                   pa.user_id = pa2.user_id AND\n                   pa.post_id = pa2.post_id AND\n                   pa.targets_topic = pa2.targets_topic")
   -> 0.0006s

>> DELETED 0 invalid rows from post_actions

-- add_index(:post_actions, ["user_id", "post_id", "targets_topic"], {:name=>"idx_unique_flags", :unique=>true, :where=>"deleted_at IS NULL AND\n                        disagreed_at IS NULL AND\n                        deferred_at IS NULL AND\n                        post_action_type_id IN (3,4,7,8)"})
   -> 0.0022s
== 20140904055702 CorrectPostActionIndex: migrated (0.0033s) ==================

== 20140904160015 AddViaEmailToPosts: migrating ===============================
-- add_column(:posts, :via_email, :boolean, {:default=>false, :null=>false})
   -> 0.0007s
== 20140904160015 AddViaEmailToPosts: migrated (0.0011s) ======================

== 20140904215629 RenameTrustLevelSettings: migrating =========================
-- execute("UPDATE site_settings\n             SET name = regexp_replace(name, '^basic_', 'tl1_')")
   -> 0.0002s
-- execute("UPDATE site_settings\n             SET name = regexp_replace(name, '^regular_', 'tl2_')")
   -> 0.0004s
-- execute("UPDATE site_settings\n             SET name = regexp_replace(name, '^leader_', 'tl3_')")
   -> 0.0005s
== 20140904215629 RenameTrustLevelSettings: migrated (0.0020s) ================

== 20140905055251 RenameTrustLevelBadges: migrating ===========================
-- execute("UPDATE badges SET name = 'Member' WHERE name = 'Regular User' AND id = 2")
   -> 0.0003s
-- execute("UPDATE badges SET name = 'Regular' WHERE name = 'Leader' AND id = 3")
   -> 0.0003s
-- execute("UPDATE badges SET name = 'Leader' WHERE name = 'Elder' AND id = 4")
   -> 0.0005s
== 20140905055251 RenameTrustLevelBadges: migrated (0.0022s) ==================

== 20140905171733 CreateWarnings: migrating ===================================
-- create_table(:warnings, {:id=>:integer})
   -> 0.0038s
-- add_index(:warnings, :user_id)
   -> 0.0015s
-- add_index(:warnings, :topic_id, {:unique=>true})
   -> 0.0014s
== 20140905171733 CreateWarnings: migrated (0.0075s) ==========================

== 20140908165716 MigrateWarningTopicSubtypes: migrating ======================
-- execute("UPDATE topics AS t\n              SET subtype = 'moderator_warning'\n              FROM warnings AS w\n              WHERE w.topic_id = t.id")
   -> 0.0008s
== 20140908165716 MigrateWarningTopicSubtypes: migrated (0.0019s) =============

== 20140908191429 TrimProfileLength: migrating ================================
-- execute("UPDATE user_profiles SET bio_raw=LEFT(bio_raw, 3000)")
   -> 0.0005s
== 20140908191429 TrimProfileLength: migrated (0.0011s) =======================

== 20140910130155 CreateTopicUserIndex: migrating =============================
-- add_index(:topic_users, [:user_id, :topic_id], {:unique=>true})
   -> 0.0028s
== 20140910130155 CreateTopicUserIndex: migrated (0.0035s) ====================

== 20140911065449 PrivateMessagesHaveNoCategoryId: migrating ==================
-- execute("UPDATE topics SET category_id = NULL WHERE category_id IS NOT NULL AND archetype = 'private_message'")
   -> 0.0004s
-- execute("ALTER TABLE topics ADD CONSTRAINT pm_has_no_category CHECK (category_id IS NULL OR archetype <> 'private_message')")
   -> 0.0006s
== 20140911065449 PrivateMessagesHaveNoCategoryId: migrated (0.0019s) =========

== 20140913192733 AddTrustLevelLockedColumn: migrating ========================
-- add_column(:users, :trust_level_locked, :boolean, {:default=>false, :null=>false})
   -> 0.0008s
-- execute("          UPDATE users\n          SET trust_level_locked = 't'\n          WHERE trust_level = 4\n")
   -> 0.0003s
== 20140913192733 AddTrustLevelLockedColumn: migrated (0.0018s) ===============

== 20140923042349 AddRetainHoursToUploads: migrating ==========================
-- add_column(:uploads, :retain_hours, :integer)
   -> 0.0005s
== 20140923042349 AddRetainHoursToUploads: migrated (0.0011s) =================

== 20140924192418 RenameContentType: migrating ================================
-- rename_column(:site_contents, :content_type, :text_type)
   -> 0.0021s
-- rename_column(:site_contents, :content, :value)
   -> 0.0014s
-- rename_table(:site_contents, :site_texts)
   -> 0.0041s
== 20140924192418 RenameContentType: migrated (0.0083s) =======================

== 20140925173220 CreateUserFields: migrating =================================
-- create_table(:user_fields, {:id=>:integer})
   -> 0.0046s
== 20140925173220 CreateUserFields: migrated (0.0056s) ========================

== 20140929181930 AddEditableToUserFields: migrating ==========================
-- add_column(:user_fields, :editable, :boolean, {:default=>false, :null=>false})
   -> 0.0007s
== 20140929181930 AddEditableToUserFields: migrated (0.0012s) =================

== 20140929204155 MigrateTosSetting: migrating ================================
-- execute("SELECT * FROM site_settings WHERE name = 'tos_accept_required' AND value = 't'")
   -> 0.0003s
== 20140929204155 MigrateTosSetting: migrated (0.0009s) =======================

== 20141001101041 AddPostIdToUserHistories: migrating =========================
-- add_column(:user_histories, :post_id, :integer)
   -> 0.0005s
== 20141001101041 AddPostIdToUserHistories: migrated (0.0009s) ================

== 20141002181613 AddDescriptionToUserFields: migrating =======================
-- add_column(:user_fields, :description, :string, {:null=>true})
   -> 0.0005s
-- execute("UPDATE user_fields SET description=name")
   -> 0.0005s
-- change_column(:user_fields, :description, :string)
   -> 0.0004s
== 20141002181613 AddDescriptionToUserFields: migrated (0.0022s) ==============

== 20141007224814 AddBadgeGrantedTitleToUserProfile: migrating ================
-- add_column(:user_profiles, :badge_granted_title, :boolean, {:default=>false})
   -> 0.0009s
-- execute("UPDATE user_profiles SET badge_granted_title = true\n    WHERE EXISTS (\n      SELECT 1 FROM users WHERE users.id = user_id AND title IN ('Leader', 'Regular')\n    )")
   -> 0.0014s
-- execute("UPDATE user_profiles SET badge_granted_title = true\n    WHERE EXISTS (\n      SELECT 1 FROM users WHERE users.id = user_id AND title IN (SELECT name FROM badges WHERE allow_title)\n    )")
   -> 0.0005s
== 20141007224814 AddBadgeGrantedTitleToUserProfile: migrated (0.0033s) =======

== 20141008152953 AddExernalUrlToPermalinks: migrating ========================
-- add_column(:permalinks, :external_url, :string, {:limit=>1000})
   -> 0.0009s
== 20141008152953 AddExernalUrlToPermalinks: migrated (0.0014s) ===============

== 20141008181228 AddRequiredSignupToUserFields: migrating ====================
-- add_column(:user_fields, :required, :boolean, {:default=>true, :null=>false})
   -> 0.0012s
== 20141008181228 AddRequiredSignupToUserFields: migrated (0.0018s) ===========

== 20141008192525 AddAutoCloseBasedOnLastPostAndAutoCloseHoursToTopics: migrating
-- add_column(:topics, :auto_close_based_on_last_post, :boolean, {:default=>false})
   -> 0.0015s
-- add_column(:topics, :auto_close_hours, :float)
   -> 0.0005s
== 20141008192525 AddAutoCloseBasedOnLastPostAndAutoCloseHoursToTopics: migrated (0.0028s)

== 20141008192526 AddAutoCloseBasedOnLastPostToCategories: migrating ==========
-- add_column(:categories, :auto_close_based_on_last_post, :boolean, {:default=>false})
   -> 0.0011s
== 20141008192526 AddAutoCloseBasedOnLastPostToCategories: migrated (0.0018s) =

== 20141014032859 AddHiddenToPostRevision: migrating ==========================
-- add_column(:post_revisions, :hidden, :boolean, {:null=>false, :default=>false})
   -> 0.0011s
== 20141014032859 AddHiddenToPostRevision: migrated (0.0018s) =================

== 20141014191645 FixTosName: migrating =======================================
-- execute("UPDATE user_fields\nSET name = 'Terms of Service'\nWHERE name = 'I have read and accept the <a href=\"/tos\" target=\"_blank\">Terms of Service</a>.'\n")
   -> 0.0004s
== 20141014191645 FixTosName: migrated (0.0012s) ==============================

== 20141015060145 AddRawEmailToPosts: migrating ===============================
-- add_column(:posts, :raw_email, :text)
   -> 0.0006s
== 20141015060145 AddRawEmailToPosts: migrated (0.0012s) ======================

== 20141016183307 AddExpansionBackgroundToUserProfiles: migrating =============
-- add_column(:user_profiles, :expansion_background, :string, {:limit=>255})
   -> 0.0005s
== 20141016183307 AddExpansionBackgroundToUserProfiles: migrated (0.0013s) ====

== 20141020153415 AddPublicVersionToPosts: migrating ==========================
-- add_column(:posts, :public_version, :integer, {:null=>false, :default=>1})
   -> 0.0014s
-- execute("      UPDATE posts\n         SET public_version = 1 + (SELECT COUNT(*) FROM post_revisions pr WHERE post_id = posts.id AND pr.hidden = 'f')\n       WHERE public_version <> 1 + (SELECT COUNT(*) FROM post_revisions pr WHERE post_id = posts.id AND pr.hidden = 'f')\n")
   -> 0.0007s
== 20141020153415 AddPublicVersionToPosts: migrated (0.0029s) =================

== 20141020154935 RenameExpansionToCard: migrating ============================
-- rename_column(:user_profiles, :expansion_background, :card_background)
   -> 0.0018s
== 20141020154935 RenameExpansionToCard: migrated (0.0029s) ===================

== 20141020164816 AddImageToBadges: migrating =================================
-- add_column(:badges, :image, :string, {:limit=>255})
   -> 0.0008s
== 20141020164816 AddImageToBadges: migrated (0.0017s) ========================

== 20141020174120 AddCardImageToUserProfiles: migrating =======================
-- add_column(:user_profiles, :card_image_badge_id, :integer)
   -> 0.0005s
== 20141020174120 AddCardImageToUserProfiles: migrated (0.0011s) ==============

== 20141030222425 RenameSeenPostCount: migrating ==============================
-- rename_column(:topic_users, :seen_post_count, :highest_seen_post_number)
   -> 0.0020s
== 20141030222425 RenameSeenPostCount: migrated (0.0026s) =====================

== 20141110150304 AddFooterToSiteCustomization: migrating =====================
-- add_column(:site_customizations, :footer, :text)
   -> 0.0005s
-- add_column(:site_customizations, :mobile_footer, :text)
   -> 0.0003s
== 20141110150304 AddFooterToSiteCustomization: migrated (0.0016s) ============

== 20141118011735 CorrectUsernameSearch: migrating ============================
-- execute("update user_search_data\n              set search_data = TO_TSVECTOR('simple', username_lower || ' ' || lower(name))\n            from users\n            where users.id = user_search_data.user_id")
   -> 0.0008s
== 20141118011735 CorrectUsernameSearch: migrated (0.0019s) ===================

== 20141120035016 AddAllowedIpsToApiKeys: migrating ===========================
-- change_table(:api_keys)
   -> 0.0034s
== 20141120035016 AddAllowedIpsToApiKeys: migrated (0.0043s) ==================

== 20141120043401 AddHiddenToApiKeys: migrating ===============================
-- change_table(:api_keys)
   -> 0.0010s
== 20141120043401 AddHiddenToApiKeys: migrated (0.0016s) ======================

== 20141211114517 FixEmojiPath: migrating =====================================
-- execute("      UPDATE posts\n         SET cooked = REPLACE(cooked, '/plugins/emoji/images/', '/plugins/emoji/images/emoji_one/')\n       WHERE cooked LIKE '%/plugins/emoji/images/%'\n")
   -> 0.0005s
== 20141211114517 FixEmojiPath: migrated (0.0011s) ============================

== 20141222051622 RemoveOverrideDefaultStylesFromSiteCustomizations: migrating
-- remove_column(:site_customizations, :override_default_style)
   -> 0.0006s
== 20141222051622 RemoveOverrideDefaultStylesFromSiteCustomizations: migrated (0.0014s)

== 20141222224220 FixEmojiPathTake2: migrating ================================
-- execute("      UPDATE posts\n         SET cooked = REPLACE(cooked, '/plugins/emoji/images/', '/images/emoji/')\n       WHERE cooked LIKE '%/plugins/emoji/images/%'\n")
   -> 0.0007s
== 20141222224220 FixEmojiPathTake2: migrated (0.0014s) =======================

== 20141222230707 AmendSiteCustomization: migrating ===========================
-- remove_column(:site_customizations, :position)
   -> 0.0007s
== 20141222230707 AmendSiteCustomization: migrated (0.0013s) ==================

== 20141223145058 CreateCsvExportLogs: migrating ==============================
-- create_table(:csv_export_logs, {:id=>:integer})
   -> 0.0082s
== 20141223145058 CreateCsvExportLogs: migrated (0.0090s) =====================

== 20141228151019 RenameCsvExportLogsToUserExports: migrating =================
-- rename_table(:csv_export_logs, :user_exports)
   -> 0.0055s
== 20141228151019 RenameCsvExportLogsToUserExports: migrated (0.0062s) ========

== 20150102113309 CleanUpUserHistory: migrating ===============================
== 20150102113309 CleanUpUserHistory: migrated (0.0073s) ======================

== 20150106215342 RemoveStars: migrating ======================================
-- execute("    INSERT INTO post_actions(user_id, post_id, post_action_type_id, created_at, updated_at)\n    SELECT tu.user_id, p.id, 1, coalesce(tu.starred_at, now()), coalesce(tu.starred_at, now())\n    FROM topic_users tu\n    JOIN posts p ON p.topic_id = tu.topic_id AND p.post_number = 1\n    LEFT JOIN post_actions pa ON\n        pa.post_id = p.id AND\n        pa.user_id = tu.user_id AND\n        pa.post_action_type_id = 1\n    WHERE pa.post_id IS NULL AND tu.starred\n")
   -> 0.0008s
0 stars were converted to bookmarks!
-- execute("   DELETE FROM user_actions WHERE action_type = 10\n")
   -> 0.0002s
-- remove_column(:topic_users, :starred)
   -> 0.0005s
-- remove_column(:topic_users, :starred_at)
   -> 0.0002s
-- remove_column(:topic_users, :unstarred_at)
   -> 0.0003s
-- remove_column(:topics, :star_count)
   -> 0.0005s
== 20150106215342 RemoveStars: migrated (0.0033s) =============================

== 20150108002354 AddLikedAndBookmarkedToTopicUser: migrating =================
-- add_column(:topic_users, :liked, :boolean, {:default=>false})
   -> 0.0011s
-- add_column(:topic_users, :bookmarked, :boolean, {:default=>false})
   -> 0.0007s
-- execute("UPDATE topic_users\n               SET liked = true\n               WHERE EXISTS (SELECT 1 FROM post_actions pa\n                             JOIN posts p ON p.id = pa.post_id\n                             JOIN topics t ON t.id = p.topic_id\n                             WHERE pa.deleted_at IS NULL AND\n                                   p.deleted_at IS NULL AND\n                                   t.deleted_at IS NULL AND\n                                   pa.user_id = topic_users.user_id AND\n                                   p.topic_id = topic_users.topic_id AND\n                                   post_action_type_id = 2)\n    ")
   -> 0.0008s
-- execute("UPDATE topic_users\n               SET bookmarked = true\n               WHERE EXISTS (SELECT 1 FROM post_actions pa\n                             JOIN posts p ON p.id = pa.post_id\n                             JOIN topics t ON t.id = p.topic_id\n                             WHERE pa.deleted_at IS NULL AND\n                                   p.deleted_at IS NULL AND\n                                   t.deleted_at IS NULL AND\n                                   pa.user_id = topic_users.user_id AND\n                                   p.topic_id = topic_users.topic_id AND\n                                   post_action_type_id = 1)\n    ")
   -> 0.0007s
== 20150108002354 AddLikedAndBookmarkedToTopicUser: migrated (0.0040s) ========

== 20150108202057 CreateBookmarkActions: migrating ============================
-- execute("INSERT INTO user_actions (action_type,\n                                       user_id,\n                                       target_topic_id,\n                                       target_post_id,\n                                       acting_user_id,\n                                       created_at,\n                                       updated_at)\n             SELECT DISTINCT 3,\n                    pa.user_id,\n                    p.topic_id,\n                    pa.post_id,\n                    pa.user_id,\n                    pa.created_at,\n                    pa.updated_at\n             FROM post_actions AS pa\n             INNER JOIN posts AS p ON p.id = pa.post_id AND p.post_number = 1\n             WHERE NOT EXISTS (SELECT 1 FROM user_actions AS ua WHERE ua.target_post_id = pa.post_id AND ua.action_type = 3 AND ua.user_id = pa.user_id)\n             AND pa.post_action_type_id = 1\n             AND pa.deleted_at IS NULL")
   -> 0.0009s
== 20150108202057 CreateBookmarkActions: migrated (0.0015s) ===================

== 20150108211557 IndexTopicCustomFieldValues: migrating ======================
-- add_index(:topic_custom_fields, :value)
   -> 0.0022s
== 20150108211557 IndexTopicCustomFieldValues: migrated (0.0030s) =============

== 20150108221703 GroupManagers: migrating ====================================
-- create_table(:group_managers, {:id=>:integer})
   -> 0.0045s
-- add_index(:group_managers, [:group_id, :user_id], {:unique=>true})
   -> 0.0020s
== 20150108221703 GroupManagers: migrated (0.0077s) ===========================

== 20150112172258 AddNewSiteCustomizationTypes: migrating =====================
-- add_column(:site_customizations, :head_tag, :text)
   -> 0.0007s
-- add_column(:site_customizations, :body_tag, :text)
   -> 0.0004s
== 20150112172258 AddNewSiteCustomizationTypes: migrated (0.0021s) ============

== 20150112172259 MigrateSiteTextToSiteCustomization: migrating ===============
-- execute("      DO\n      $do$\n      BEGIN\n        IF EXISTS(SELECT 1 FROM site_texts WHERE (text_type = 'head' OR text_type = 'bottom')) THEN\n          INSERT INTO site_customizations (name, user_id, enabled, key, created_at, updated_at, head_tag, body_tag)\n          VALUES\n          (\n            'Migrated from Site Text',\n            -1,\n            't',\n            'b826674d-48f8-4cf8-b3d0-1edeefb071a7',\n            now(),\n            now(),\n            (SELECT value FROM site_texts WHERE text_type = 'head' LIMIT 1),\n            (SELECT value FROM site_texts WHERE text_type = 'bottom' LIMIT 1)\n          );\n        END IF;\n      END\n      $do$\n")
   -> 0.0028s
== 20150112172259 MigrateSiteTextToSiteCustomization: migrated (0.0037s) ======

== 20150114093325 AddTopToSiteCustomization: migrating ========================
-- add_column(:site_customizations, :top, :text)
   -> 0.0005s
-- add_column(:site_customizations, :mobile_top, :text)
   -> 0.0008s
-- execute("      UPDATE site_customizations\n         SET top = (SELECT value FROM site_texts WHERE text_type = 'top' LIMIT 1),\n             mobile_top = (SELECT value FROM site_texts WHERE text_type = 'top' LIMIT 1),\n             head_tag = (SELECT value FROM site_texts WHERE text_type = 'head' LIMIT 1),\n             body_tag = (SELECT value FROM site_texts WHERE text_type = 'bottom' LIMIT 1)\n       WHERE name = 'Migrated from Site Text'\n")
   -> 0.0008s
== 20150114093325 AddTopToSiteCustomization: migrated (0.0034s) ===============

== 20150115172310 RenameUserExportColumn: migrating ===========================
-- rename_column(:user_exports, :export_type, :file_name)
   -> 0.0016s
== 20150115172310 RenameUserExportColumn: migrated (0.0021s) ==================

== 20150119192813 AddPostsIndexIncludingDeleted: migrating ====================
-- add_index(:posts, [:user_id, :created_at])
   -> 0.0034s
== 20150119192813 AddPostsIndexIncludingDeleted: migrated (0.0044s) ===========

== 20150123145128 AddAutomaticMembershipToGroup: migrating ====================
-- add_column(:groups, :automatic_membership_email_domains, :text)
   -> 0.0006s
-- add_column(:groups, :automatic_membership_retroactive, :boolean, {:default=>false})
   -> 0.0007s
== 20150123145128 AddAutomaticMembershipToGroup: migrated (0.0020s) ===========

== 20150129204520 AddShowOnProfileToUserFields: migrating =====================
-- add_column(:user_fields, :show_on_profile, :boolean, {:default=>false, :null=>false})
   -> 0.0009s
== 20150129204520 AddShowOnProfileToUserFields: migrated (0.0014s) ============

== 20150203041207 AddApplicationRequests: migrating ===========================
-- create_table(:application_requests, {:id=>:integer})
   -> 0.0040s
-- add_index(:application_requests, [:date, :req_type], {:unique=>true})
   -> 0.0015s
== 20150203041207 AddApplicationRequests: migrated (0.0063s) ==================

== 20150205032808 ResetApplicationRequests: migrating =========================
-- execute("TRUNCATE TABLE application_requests")
   -> 0.0025s
== 20150205032808 ResetApplicationRequests: migrated (0.0030s) ================

== 20150205172051 AddCustomTypeToUserHistories: migrating =====================
-- add_column(:user_histories, :custom_type, :string)
   -> 0.0005s
== 20150205172051 AddCustomTypeToUserHistories: migrated (0.0009s) ============

== 20150206004143 FlushApplicationRequests: migrating =========================
-- execute("TRUNCATE TABLE application_requests")
   -> 0.0043s
== 20150206004143 FlushApplicationRequests: migrated (0.0051s) ================

== 20150213174159 CreateDigestUnsubscribeKeys: migrating ======================
-- create_table(:digest_unsubscribe_keys, {:id=>false})
   -> 0.0010s
-- execute("ALTER TABLE digest_unsubscribe_keys ADD PRIMARY KEY (key)")
   -> 0.0020s
-- add_index(:digest_unsubscribe_keys, :created_at)
   -> 0.0014s
== 20150213174159 CreateDigestUnsubscribeKeys: migrated (0.0055s) =============

== 20150224004420 AddPinnedIndexes: migrating =================================
-- add_index(:topics, :pinned_globally, {:where=>"pinned_globally"})
   -> 0.0034s
-- add_index(:topics, :pinned_at, {:where=>"pinned_at IS NOT NULL"})
   -> 0.0020s
== 20150224004420 AddPinnedIndexes: migrated (0.0066s) ========================

== 20150227043622 AddLongDescriptionToBadges: migrating =======================
-- add_column(:badges, :long_description, :text)
   -> 0.0005s
== 20150227043622 AddLongDescriptionToBadges: migrated (0.0011s) ==============

== 20150301224250 CreateSuggestedForIndex: migrating ==========================
-- add_index(:topics, [:created_at, :visible], {:where=>"deleted_at IS NULL AND archetype <> 'private_message'"})
   -> 0.0024s
== 20150301224250 CreateSuggestedForIndex: migrated (0.0030s) =================

== 20150306050437 AddAllTimeAndOpLikesToTopTopics: migrating ==================
-- add_column(:top_topics, :all_score, :float, {:default=>0})
   -> 0.0013s
-- add_column(:top_topics, "daily_op_likes_count", :integer, {:default=>0, :null=>false})
   -> 0.0007s
-- add_index(:top_topics, ["daily_op_likes_count"])
   -> 0.0018s
-- add_column(:top_topics, "weekly_op_likes_count", :integer, {:default=>0, :null=>false})
   -> 0.0009s
-- add_index(:top_topics, ["weekly_op_likes_count"])
   -> 0.0020s
-- add_column(:top_topics, "monthly_op_likes_count", :integer, {:default=>0, :null=>false})
   -> 0.0009s
-- add_index(:top_topics, ["monthly_op_likes_count"])
   -> 0.0016s
-- add_column(:top_topics, "yearly_op_likes_count", :integer, {:default=>0, :null=>false})
   -> 0.0006s
-- add_index(:top_topics, ["yearly_op_likes_count"])
   -> 0.0012s
== 20150306050437 AddAllTimeAndOpLikesToTopTopics: migrated (0.0122s) =========

== 20150318143915 CreateDirectoryItems: migrating =============================
-- create_table(:directory_items, {:force=>true, :id=>:integer})
   -> 0.0055s
-- add_index(:directory_items, :period_type)
   -> 0.0018s
== 20150318143915 CreateDirectoryItems: migrated (0.0082s) ====================

== 20150323034933 AddAllowPrivateMessagesToUserProfile: migrating =============
-- add_column(:user_profiles, :allow_private_messages, :boolean, {:default=>true, :null=>false})
   -> 0.0011s
== 20150323034933 AddAllowPrivateMessagesToUserProfile: migrated (0.0019s) ====

== 20150323062322 RemoveAllowPrivateMessagesFromUserProfile: migrating ========
-- remove_column(:user_profiles, :allow_private_messages)
   -> 0.0006s
== 20150323062322 RemoveAllowPrivateMessagesFromUserProfile: migrated (0.0013s)

== 20150323234856 AddMutedUsers: migrating ====================================
-- create_table(:muted_users, {:force=>true, :id=>:integer})
   -> 0.0030s
-- add_index(:muted_users, [:user_id, :muted_user_id], {:unique=>true})
   -> 0.0013s
-- add_index(:muted_users, [:muted_user_id, :user_id], {:unique=>true})
   -> 0.0016s
== 20150323234856 AddMutedUsers: migrated (0.0070s) ===========================

== 20150324184222 AddMoreToDirectoryItems: migrating ==========================
-- add_column(:directory_items, :days_visited, :integer, {:null=>false, :default=>0})
   -> 0.0012s
-- add_column(:directory_items, :posts_read, :integer, {:null=>false, :default=>0})
   -> 0.0008s
== 20150324184222 AddMoreToDirectoryItems: migrated (0.0031s) =================

== 20150325183400 FixGroupUserCount: migrating ================================
-- execute("UPDATE groups g SET user_count = (SELECT COUNT(user_id) FROM group_users gu WHERE gu.group_id = g.id)")
   -> 0.0007s
== 20150325183400 FixGroupUserCount: migrated (0.0012s) =======================

== 20150325190959 CreateQueuedPosts: migrating ================================
-- create_table(:queued_posts, {:force=>true, :id=>:integer})
   -> 0.0059s
-- add_index(:queued_posts, [:queue, :state, :created_at], {:name=>"by_queue_status"})
   -> 0.0028s
-- add_index(:queued_posts, [:topic_id, :queue, :state, :created_at], {:name=>"by_queue_status_topic"})
   -> 0.0018s
== 20150325190959 CreateQueuedPosts: migrated (0.0113s) =======================

== 20150410002033 AddPrimaryGroupToGroups: migrating ==========================
-- add_column(:groups, :primary_group, :boolean, {:default=>false, :null=>false})
   -> 0.0013s
== 20150410002033 AddPrimaryGroupToGroups: migrated (0.0021s) =================

== 20150410002551 AddTitleToGroups: migrating =================================
-- add_column(:groups, :title, :string)
   -> 0.0007s
== 20150410002551 AddTitleToGroups: migrated (0.0016s) ========================

== 20150421085850 IncreaseUrlLengthOnTopicEmbed: migrating ====================
-- remove_index(:topic_embeds, :embed_url, {:name=>"index_topic_embeds_on_embed_url"})
   -> 0.0015s
-- change_column(:topic_embeds, :embed_url, :string, {:limit=>1000})
   -> 0.0036s
-- add_index(:topic_embeds, :embed_url, {:unique=>true})
   -> 0.0016s
== 20150421085850 IncreaseUrlLengthOnTopicEmbed: migrated (0.0089s) ===========

== 20150421190714 AddQueuedPostIdToUserActions: migrating =====================
-- add_column(:user_actions, :queued_post_id, :integer, {:null=>true})
   -> 0.0007s
== 20150421190714 AddQueuedPostIdToUserActions: migrated (0.0015s) ============

== 20150422160235 AddLinkPostIdIndexOnTopicLinks: migrating ===================
-- add_index(:topic_links, [:link_post_id, :reflection])
   -> 0.0022s
== 20150422160235 AddLinkPostIdIndexOnTopicLinks: migrated (0.0027s) ==========

== 20150501152228 RenameTotalVotesToVoters: migrating =========================
== 20150501152228 RenameTotalVotesToVoters: migrated (0.0095s) ================

== 20150505044154 AddStylesheetCache: migrating ===============================
-- create_table(:stylesheet_cache, {:id=>:integer})
   -> 0.0041s
-- add_index(:stylesheet_cache, [:target, :digest], {:unique=>true})
   -> 0.0021s
== 20150505044154 AddStylesheetCache: migrated (0.0071s) ======================

== 20150513094042 AddIndexOnPostActions: migrating ============================
-- add_index(:post_actions, [:user_id, :post_action_type_id], {:where=>"deleted_at IS NULL"})
   -> 0.0023s
== 20150513094042 AddIndexOnPostActions: migrated (0.0028s) ===================

== 20150514023016 AddUnreadNotificationsIndex: migrating ======================
-- add_index(:notifications, [:user_id, :notification_type], {:where=>"not read", :name=>"idx_notifications_speedup_unread_count"})
   -> 0.0017s
== 20150514023016 AddUnreadNotificationsIndex: migrated (0.0021s) =============

== 20150514043155 AddUserActionsAllIndex: migrating ===========================
-- add_index(:user_actions, [:user_id, :created_at, :action_type], {:name=>"idx_user_actions_speed_up_user_all"})
   -> 0.0019s
== 20150514043155 AddUserActionsAllIndex: migrated (0.0027s) ==================

== 20150525151759 SetDefaultS3Region: migrating ===============================
-- execute("      UPDATE site_settings\n         SET value = 'us-east-1'\n       WHERE name = 's3_region'\n         AND LENGTH(COALESCE(value, '')) = 0\n")
   -> 0.0003s
== 20150525151759 SetDefaultS3Region: migrated (0.0008s) ======================

== 20150609163211 MigrateEmbeddableHost: migrating ============================
-- execute("UPDATE site_settings SET name = 'embeddable_hosts', data_type = 9 WHERE name = 'embeddable_host'")
   -> 0.0005s
== 20150609163211 MigrateEmbeddableHost: migrated (0.0013s) ===================

== 20150617080349 AddIndexOnPostNotifications: migrating ======================
-- add_index(:notifications, [:user_id, :topic_id, :post_number])
   -> 0.0020s
== 20150617080349 AddIndexOnPostNotifications: migrated (0.0027s) =============

== 20150617233018 AddIndexTargetPostIdOnUserActions: migrating ================
-- add_index(:user_actions, [:target_post_id])
   -> 0.0021s
== 20150617233018 AddIndexTargetPostIdOnUserActions: migrated (0.0027s) =======

== 20150617234511 AddStaffIndexToUsers: migrating =============================
-- add_index(:users, [:id], {:name=>"idx_users_admin", :where=>"admin"})
   -> 0.0026s
-- add_index(:users, [:id], {:name=>"idx_users_moderator", :where=>"moderator"})
   -> 0.0018s
== 20150617234511 AddStaffIndexToUsers: migrated (0.0051s) ====================

== 20150702201926 AddTopicTemplateToCategories: migrating =====================
-- add_column(:categories, :topic_template, :text, {:null=>true})
   -> 0.0007s
== 20150702201926 AddTopicTemplateToCategories: migrated (0.0017s) ============

== 20150706215111 AddMobileToUserVisits: migrating ============================
-- add_column(:user_visits, :mobile, :boolean, {:default=>false})
   -> 0.0011s
== 20150706215111 AddMobileToUserVisits: migrated (0.0016s) ===================

== 20150707163251 AddReportsIndexToUserVisits: migrating ======================
-- add_index(:user_visits, [:visited_at, :mobile])
   -> 0.0022s
== 20150707163251 AddReportsIndexToUserVisits: migrated (0.0034s) =============

== 20150709021818 AddLikeCountToPostMenu: migrating ===========================
-- execute("UPDATE site_settings\nSET value = replace(value, 'like', 'like-count|like')\nWHERE name = 'post_menu'\nAND value NOT LIKE '%like-count%'\n")
   -> 0.0005s
== 20150709021818 AddLikeCountToPostMenu: migrated (0.0015s) ==================

== 20150713203955 EnlargeUsersEmailField: migrating ===========================
-- change_column(:users, :email, :string, {:limit=>513})
   -> 0.0039s
== 20150713203955 EnlargeUsersEmailField: migrated (0.0048s) ==================

== 20150724165259 AddIndexToPostCustomFields: migrating =======================
-- execute("      CREATE INDEX index_post_custom_fields_on_name_and_value ON post_custom_fields USING btree (name, left(value, 200))\n")
   -> 0.0036s
== 20150724165259 AddIndexToPostCustomFields: migrated (0.0046s) ==============

== 20150724182342 AddActionCodeToPost: migrating ==============================
-- add_column(:posts, :action_code, :string, {:null=>true})
   -> 0.0005s
== 20150724182342 AddActionCodeToPost: migrated (0.0011s) =====================

== 20150727193414 CreateUserFieldOptions: migrating ===========================
-- create_table(:user_field_options, {:force=>true, :id=>:integer})
   -> 0.0071s
== 20150727193414 CreateUserFieldOptions: migrated (0.0087s) ==================

== 20150727210019 AddPinnedUntilToTopics: migrating ===========================
-- add_column(:topics, :pinned_until, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0009s
== 20150727210019 AddPinnedUntilToTopics: migrated (0.0015s) ==================

== 20150727210748 AddQuarterlyToTopTopics: migrating ==========================
-- add_column(:top_topics, :quarterly_posts_count, :integer, {:default=>0, :null=>false})
   -> 0.0012s
-- add_column(:top_topics, :quarterly_views_count, :integer, {:default=>0, :null=>false})
   -> 0.0009s
-- add_column(:top_topics, :quarterly_likes_count, :integer, {:default=>0, :null=>false})
   -> 0.0014s
-- add_column(:top_topics, :quarterly_score, :float, {:default=>0.0})
   -> 0.0016s
-- add_column(:top_topics, :quarterly_op_likes_count, :integer, {:default=>0, :null=>false})
   -> 0.0008s
-- add_index(:top_topics, [:quarterly_posts_count])
   -> 0.0023s
-- add_index(:top_topics, [:quarterly_views_count])
   -> 0.0029s
-- add_index(:top_topics, [:quarterly_likes_count])
   -> 0.0056s
-- add_index(:top_topics, [:quarterly_op_likes_count])
   -> 0.0028s
== 20150727210748 AddQuarterlyToTopTopics: migrated (0.0214s) =================

== 20150727230537 AddExampleColumnComments: migrating =========================
  COMMENT ON TABLE posts
  COMMENT ON COLUMN posts.post_number
  COMMENT ON COLUMN posts.raw
  COMMENT ON COLUMN posts.cooked
  COMMENT ON COLUMN posts.reply_to_post_number
  COMMENT ON COLUMN posts.reply_quoted
  COMMENT ON TABLE topics
== 20150727230537 AddExampleColumnComments: migrated (0.0032s) ================

== 20150728004647 CorrectCustomFieldsMigration: migrating =====================
-- execute("      DROP INDEX index_post_custom_fields_on_name_and_value\n")
   -> 0.0008s
-- execute("      CREATE INDEX index_post_custom_fields_on_name_and_value ON post_custom_fields USING btree (name, left(value, 200))\n")
   -> 0.0017s
== 20150728004647 CorrectCustomFieldsMigration: migrated (0.0032s) ============

== 20150728210202 MigrateOldModeratorPosts: migrating =========================
-- execute("UPDATE posts SET action_code = 'closed.enabled', raw = '', cooked = '', post_type = 3 where post_type = 2 AND raw = 'Translation missing: en.topic_statuses.closed_enabled'")
   -> 0.0005s
-- execute("UPDATE posts SET action_code = 'closed.disabled', raw = '', cooked = '', post_type = 3 where post_type = 2 AND raw = 'Translation missing: en.topic_statuses.closed_disabled'")
   -> 0.0002s
-- execute("UPDATE posts SET action_code = 'archived.enabled', raw = '', cooked = '', post_type = 3 where post_type = 2 AND raw = 'Translation missing: en.topic_statuses.archived_enabled'")
   -> 0.0002s
-- execute("UPDATE posts SET action_code = 'archived.disabled', raw = '', cooked = '', post_type = 3 where post_type = 2 AND raw = 'Translation missing: en.topic_statuses.archived_disabled'")
   -> 0.0002s
-- execute("UPDATE posts SET action_code = 'pinned.enabled', raw = '', cooked = '', post_type = 3 where post_type = 2 AND raw = 'Translation missing: en.topic_statuses.pinned_enabled'")
   -> 0.0002s
-- execute("UPDATE posts SET action_code = 'pinned.disabled', raw = '', cooked = '', post_type = 3 where post_type = 2 AND raw = 'Translation missing: en.topic_statuses.pinned_disabled'")
   -> 0.0002s
-- execute("UPDATE posts SET action_code = 'pinned_globally.enabled', raw = '', cooked = '', post_type = 3 where post_type = 2 AND raw = 'Translation missing: en.topic_statuses.pinned_globally_enabled'")
   -> 0.0005s
-- execute("UPDATE posts SET action_code = 'pinned_globally.disabled', raw = '', cooked = '', post_type = 3 where post_type = 2 AND raw = 'Translation missing: en.topic_statuses.pinned_globally_disabled'")
   -> 0.0001s
== 20150728210202 MigrateOldModeratorPosts: migrated (0.0036s) ================

== 20150729150523 MigrateAutoClosePosts: migrating ============================
-- execute("UPDATE posts\n   SET action_code = 'autoclosed.enabled'\n     , post_type = 3\n WHERE post_type = 2\n   AND (raw ~* 'This topic was automatically closed after \\d+ day. New replies are no longer allowed.' OR raw ~* 'This topic was automatically closed after \\d+ days. New replies are no longer allowed.' OR raw ~* 'This topic was automatically closed after \\d+ hour. New replies are no longer allowed.' OR raw ~* 'This topic was automatically closed after \\d+ hours. New replies are no longer allowed.' OR raw ~* 'This topic was automatically closed \\d+ day after the last reply. New replies are no longer allowed.' OR raw ~* 'This topic was automatically closed \\d+ days after the last reply. New replies are no longer allowed.' OR raw ~* 'This topic was automatically closed \\d+ hour after the last reply. New replies are no longer allowed.' OR raw ~* 'This topic was automatically closed \\d+ hours after the last reply. New replies are no longer allowed.' OR raw ~* 'This topic was automatically closed \\d+ minute after the last reply. New replies are no longer allowed.' OR raw ~* 'This topic was automatically closed \\d+ minutes after the last reply. New replies are no longer allowed.')\n")
   -> 0.0015s
== 20150729150523 MigrateAutoClosePosts: migrated (0.0024s) ===================

== 20150730154830 AddPositionToUserFields: migrating ==========================
-- add_column(:user_fields, :position, :integer, {:default=>0})
   -> 0.0010s
-- execute("UPDATE user_fields SET position = (SELECT COUNT(*) from user_fields as uf2 where uf2.id < user_fields.id)")
   -> 0.0003s
== 20150730154830 AddPositionToUserFields: migrated (0.0020s) =================

== 20150731225331 MigrateOldMovedPosts: migrating =============================
-- execute("UPDATE posts SET post_type = 3, action_code = 'split_topic' WHERE post_type = 2 AND raw ~* '^I moved [a\\d]+ posts? to a new topic:'")
   -> 0.0003s
-- execute("UPDATE posts SET post_type = 3, action_code = 'split_topic' WHERE post_type = 2 AND raw ~* '^I moved [a\\d]+ posts? to an existing topic:'")
   -> 0.0003s
== 20150731225331 MigrateOldMovedPosts: migrated (0.0010s) ====================

== 20150802233112 AddPostStats: migrating =====================================
-- add_column(:drafts, :revisions, :int, {:null=>false, :default=>1})
   -> 0.0007s
-- create_table(:post_stats, {:id=>:integer})
   -> 0.0040s
-- add_index(:post_stats, [:post_id])
   -> 0.0013s
== 20150802233112 AddPostStats: migrated (0.0067s) ============================

== 20150806210727 AddEmbeddedCssToSiteCustomizations: migrating ===============
-- add_column(:site_customizations, :embedded_css, :text)
   -> 0.0008s
-- add_column(:site_customizations, :embedded_css_baked, :text)
   -> 0.0007s
== 20150806210727 AddEmbeddedCssToSiteCustomizations: migrated (0.0022s) ======

== 20150818190757 CreateEmbeddableHosts: migrating ============================
-- create_table(:embeddable_hosts, {:force=>true, :id=>:integer})
   -> 0.0057s
-- execute("SELECT c.id FROM categories AS c\n                        INNER JOIN site_settings AS s ON s.value = c.name\n                        WHERE s.name = 'embed_category'")
   -> 0.0011s
-- execute("SELECT value FROM site_settings WHERE name = 'uncategorized_category_id'")
   -> 0.0004s
-- execute("SELECT value FROM site_settings WHERE name = 'embeddable_hosts'")
   -> 0.0002s
-- execute("DELETE FROM site_settings WHERE name IN ('embeddable_hosts', 'embed_category')")
   -> 0.0006s
== 20150818190757 CreateEmbeddableHosts: migrated (0.0090s) ===================

== 20150822141540 FixMigratedHosts: migrating =================================
-- execute("UPDATE embeddable_hosts SET host = regexp_replace(host, '^https?://', '', 'i')")
   -> 0.0005s
== 20150822141540 FixMigratedHosts: migrated (0.0009s) ========================

== 20150828155137 AddSuppressFromHomepageToCategory: migrating ================
-- add_column(:categories, :suppress_from_homepage, :boolean, {:default=>false})
   -> 0.0015s
== 20150828155137 AddSuppressFromHomepageToCategory: migrated (0.0022s) =======

== 20150901192313 AddGrantTrustLevelToGroups: migrating =======================
-- add_column(:groups, :grant_trust_level, :integer)
   -> 0.0006s
== 20150901192313 AddGrantTrustLevelToGroups: migrated (0.0013s) ==============

== 20150914021445 CreateUserProfileViews: migrating ===========================
-- create_table(:user_profile_views, {:id=>:integer})
   -> 0.0064s
-- add_index(:user_profile_views, :user_profile_id)
   -> 0.0016s
-- add_index(:user_profile_views, :user_id)
   -> 0.0030s
-- add_index(:user_profile_views, [:viewed_at, :ip_address, :user_profile_id], {:where=>"user_id IS NULL", :unique=>true, :name=>"unique_profile_view_ip"})
   -> 0.0016s
-- add_index(:user_profile_views, [:viewed_at, :user_id, :user_profile_id], {:where=>"user_id IS NOT NULL", :unique=>true, :name=>"unique_profile_view_user"})
   -> 0.0019s
== 20150914021445 CreateUserProfileViews: migrated (0.0157s) ==================

== 20150914034541 AddViewsToUserProfile: migrating ============================
-- add_column(:user_profiles, :views, :integer, {:default=>0, :null=>false})
   -> 0.0018s
== 20150914034541 AddViewsToUserProfile: migrated (0.0029s) ===================

== 20150917071017 AddCategoryIdToUserHistories: migrating =====================
-- add_column(:user_histories, :category_id, :integer)
   -> 0.0006s
-- add_index(:user_histories, :category_id)
   -> 0.0018s
== 20150917071017 AddCategoryIdToUserHistories: migrated (0.0036s) ============

== 20150918004206 AddUserIdGroupIdIndexToGroupUsers: migrating ================
-- add_index(:group_users, [:user_id, :group_id], {:unique=>true})
   -> 0.0030s
== 20150918004206 AddUserIdGroupIdIndexToGroupUsers: migrated (0.0039s) =======

== 20150924022040 AddFancyTitleToTopic: migrating =============================
-- add_column(:topics, :fancy_title, :string, {:limit=>400, :null=>true})
   -> 0.0010s
== 20150924022040 AddFancyTitleToTopic: migrated (0.0016s) ====================

== 20150925000915 ExcludeWhispersFromBadges: migrating ========================
-- execute("DROP VIEW badge_posts")
   -> 0.0012s
-- execute("CREATE VIEW badge_posts AS\n    SELECT p.*\n    FROM posts p\n    JOIN topics t ON t.id = p.topic_id\n    JOIN categories c ON c.id = t.category_id\n    WHERE c.allow_badges AND\n          p.deleted_at IS NULL AND\n          t.deleted_at IS NULL AND\n          NOT c.read_restricted AND\n          t.visible AND\n          p.post_type IN (1,2,3)\n    ")
   -> 0.0028s
== 20150925000915 ExcludeWhispersFromBadges: migrated (0.0047s) ===============

== 20151016163051 MergePollsVotes: migrating ==================================
== 20151016163051 MergePollsVotes: migrated (0.0032s) =========================

== 20151103233815 AddLowerTitleIndexOnTopics: migrating =======================
-- execute("CREATE INDEX index_topics_on_lower_title ON topics (LOWER(title))")
   -> 0.0035s
== 20151103233815 AddLowerTitleIndexOnTopics: migrated (0.0043s) ==============

== 20151105181635 AddStagedToUser: migrating ==================================
-- add_column(:users, :staged, :boolean, {:null=>false, :default=>false})
   -> 0.0011s
== 20151105181635 AddStagedToUser: migrated (0.0019s) =========================

== 20151107041044 FixIncorrectTopicCreatorAfterMove: migrating ================
-- execute("UPDATE topics SET user_id = p.user_id\n             FROM posts p\n             WHERE p.topic_id = topics.id AND\n              p.post_number = 1 AND\n              p.user_id <> topics.user_id")
   -> 0.0009s
== 20151107041044 FixIncorrectTopicCreatorAfterMove: migrated (0.0012s) =======

== 20151107042241 AddOwnerToGroupUsers: migrating =============================
-- add_column(:group_users, :owner, :boolean, {:null=>false, :default=>false})
   -> 0.0010s
== 20151107042241 AddOwnerToGroupUsers: migrated (0.0018s) ====================

== 20151109124147 DropGroupManagers: migrating ================================
-- execute("UPDATE group_users SET owner = true\n      WHERE exists (SELECT 1 FROM group_managers m\n                    WHERE m.group_id = group_users.group_id AND\n                          m.user_id = group_users.user_id)")
   -> 0.0010s
-- drop_table("group_managers")
   -> 0.0009s
== 20151109124147 DropGroupManagers: migrated (0.0028s) =======================

== 20151113205046 CreateTranslationOverrides: migrating =======================
-- create_table(:translation_overrides, {:force=>true, :id=>:integer})
   -> 0.0055s
-- add_index(:translation_overrides, [:locale, :translation_key], {:unique=>true})
   -> 0.0023s
== 20151113205046 CreateTranslationOverrides: migrated (0.0086s) ==============

== 20151117165756 AddAutomaticallyUnpinTopicsToUsers: migrating ===============
-- add_column(:users, :automatically_unpin_topics, :boolean, {:null=>false, :default=>true})
   -> 0.0010s
== 20151117165756 AddAutomaticallyUnpinTopicsToUsers: migrated (0.0018s) ======

== 20151124172631 AddIsSupportToCategories: migrating =========================
-- add_column(:categories, :is_support, :boolean, {:default=>false, :null=>false})
   -> 0.0009s
== 20151124172631 AddIsSupportToCategories: migrated (0.0015s) ================

== 20151124192339 RenameNinjaEdit: migrating ==================================
-- execute("UPDATE site_settings SET name = 'editing_grace_period' WHERE name = 'ninja_edit_window'")
   -> 0.0003s
== 20151124192339 RenameNinjaEdit: migrated (0.0008s) =========================

== 20151125194322 RemoveSiteText: migrating ===================================
-- execute("INSERT INTO translation_overrides (locale, translation_key, value, created_at, updated_at)\n                    SELECT 'en',\n                           CASE\n                            WHEN text_type = 'usage_tips' THEN 'system_messages.usage_tips.text_body_template'\n                            WHEN text_type = 'education_new_topic' THEN 'education.new-topic'\n                            WHEN text_type = 'education_new_reply' THEN 'education.new-reply'\n                            WHEN text_type = 'login_required_welcome_message' THEN 'login_required.welcome_message'\n                           END,\n                           value,\n                           created_at,\n                           updated_at\n                   FROM site_texts\n                   WHERE text_type in ('usage_tips',\n                                       'education_new_topic',\n                                       'education_new_reply',\n                                       'login_required_welcome_message')")
   -> 0.0006s
-- drop_table(:site_texts)
   -> 0.0007s
== 20151125194322 RemoveSiteText: migrated (0.0020s) ==========================

== 20151126173356 RenameIsSupportToContainsMessages: migrating ================
-- rename_column(:categories, :is_support, :contains_messages)
   -> 0.0024s
== 20151126173356 RenameIsSupportToContainsMessages: migrated (0.0028s) =======

== 20151126233623 AddBakedHeadAndBodyToSiteCustomizations: migrating ==========
-- add_column(:site_customizations, :head_tag_baked, :text)
   -> 0.0006s
-- add_column(:site_customizations, :body_tag_baked, :text)
   -> 0.0003s
== 20151126233623 AddBakedHeadAndBodyToSiteCustomizations: migrated (0.0016s) =

== 20151127011837 AddHeaderAndFooterBakedToSiteCustomizations: migrating ======
-- add_column(:site_customizations, :header_baked, :text)
   -> 0.0006s
-- add_column(:site_customizations, :mobile_header_baked, :text)
   -> 0.0004s
-- add_column(:site_customizations, :footer_baked, :text)
   -> 0.0004s
-- add_column(:site_customizations, :mobile_footer_baked, :text)
   -> 0.0003s
== 20151127011837 AddHeaderAndFooterBakedToSiteCustomizations: migrated (0.0032s)

== 20151201035631 AddGroupMentions: migrating =================================
-- create_table(:group_mentions, {:id=>:integer})
   -> 0.0044s
-- add_index(:group_mentions, [:post_id, :group_id], {:unique=>true})
   -> 0.0017s
-- add_index(:group_mentions, [:group_id, :post_id], {:unique=>true})
   -> 0.0020s
== 20151201035631 AddGroupMentions: migrated (0.0094s) ========================

== 20151201161726 AddIncomingEmailToGroups: migrating =========================
-- add_column(:groups, :incoming_email, :string, {:null=>true})
   -> 0.0007s
-- add_index(:groups, :incoming_email, {:unique=>true})
   -> 0.0032s
== 20151201161726 AddIncomingEmailToGroups: migrated (0.0054s) ================

== 20151214165852 AddNotificationLevelToGroupUsers: migrating =================
-- add_column(:group_users, :notification_level, :integer, {:default=>3, :null=>false})
   -> 0.0013s
== 20151214165852 AddNotificationLevelToGroupUsers: migrated (0.0021s) ========

== 20151218232200 AddUniqueIndexToCategoryUsers: migrating ====================
-- execute("DELETE FROM category_users cu USING category_users cu1\n  WHERE cu.user_id = cu1.user_id AND\n        cu.category_id = cu1.category_id AND\n        cu.notification_level = cu1.notification_level AND\n        cu.id < cu1.id\n")
   -> 0.0006s
-- add_index(:category_users, [:user_id, :category_id, :notification_level], {:name=>"idx_category_users_u1", :unique=>true})
   -> 0.0020s
-- add_index(:category_users, [:category_id, :user_id, :notification_level], {:name=>"idx_category_users_u2", :unique=>true})
   -> 0.0029s
== 20151218232200 AddUniqueIndexToCategoryUsers: migrated (0.0066s) ===========

== 20151219045559 AddHasMessagesToGroups: migrating ===========================
-- add_column(:groups, :has_messages, :boolean, {:default=>false, :null=>false})
   -> 0.0009s
-- execute("    UPDATE groups g SET has_messages = true\n    WHERE exists(SELECT group_id FROM topic_allowed_groups WHERE group_id = g.id)\n")
   -> 0.0006s
== 20151219045559 AddHasMessagesToGroups: migrated (0.0022s) ==================

== 20151220232725 AddUserArchivedMessagesGroupArchivedMessages: migrating =====
-- create_table(:user_archived_messages, {:id=>:integer})
   -> 0.0025s
-- add_index(:user_archived_messages, [:user_id, :topic_id], {:unique=>true})
   -> 0.0017s
-- create_table(:group_archived_messages, {:id=>:integer})
   -> 0.0041s
-- add_index(:group_archived_messages, [:group_id, :topic_id], {:unique=>true})
   -> 0.0024s
== 20151220232725 AddUserArchivedMessagesGroupArchivedMessages: migrated (0.0116s)

== 20160108051129 FixIncorrectUserHistory: migrating ==========================
-- execute("SELECT min(id) FROM user_histories WHERE (action = 16 AND previous_value in ('0','1','2','3','4')) OR\n(action = 19 AND target_user_id IS NULL AND details IS NOT NULL)\n")
   -> 0.0010s
-- execute("SELECT max(id) FROM user_histories WHERE (action = 16 AND previous_value in ('0','1','2','3','4')) OR\n(action = 19 AND target_user_id IS NULL AND details IS NOT NULL)\n")
   -> 0.0005s
== 20160108051129 FixIncorrectUserHistory: migrated (0.0026s) =================

== 20160110053003 ArchiveSystemMessagesWithNoReplies: migrating ===============
-- execute("\n    INSERT INTO user_archived_messages (user_id, topic_id, created_at, updated_at)\n    SELECT p.user_id, p.topic_id, p.created_at, p.updated_at\n    FROM posts p\n    JOIN topics t ON t.id = p.topic_id\n    LEFT JOIN user_archived_messages um ON um.user_id = p.user_id AND um.topic_id = p.topic_id\n    WHERE t.subtype = 'system_message' AND\n          t.posts_count = 1 AND\n          t.archetype = 'private_message' AND\n          um.id IS NULL AND\n          p.user_id IS NOT NULL AND\n          p.topic_id IS NOT NULL AND\n          p.post_number = 1\n")
   -> 0.0009s
== 20160110053003 ArchiveSystemMessagesWithNoReplies: migrated (0.0014s) ======

== 20160112025852 RemoveUsersFromTopicAllowedUsers: migrating =================
-- execute("    DELETE FROM topic_allowed_users tu\n    USING topic_allowed_groups tg\n    JOIN group_users gu ON gu.group_id = tg.group_id\n    WHERE tu.user_id = gu.user_id AND tg.topic_id = tu.topic_id\n")
   -> 0.0007s
== 20160112025852 RemoveUsersFromTopicAllowedUsers: migrated (0.0012s) ========

== 20160112101818 RemoveContainsMessageOnCategory: migrating ==================
-- remove_column(:categories, :contains_messages)
   -> 0.0005s
== 20160112101818 RemoveContainsMessageOnCategory: migrated (0.0008s) =========

== 20160112104733 AddContainsMessagesBackToCategories: migrating ==============
-- add_column(:categories, :contains_messages, :boolean)
   -> 0.0004s
== 20160112104733 AddContainsMessagesBackToCategories: migrated (0.0009s) =====

== 20160113160742 CreateIncomingEmails: migrating =============================
-- create_table(:incoming_emails, {:id=>:integer})
   -> 0.0066s
-- add_index(:incoming_emails, :created_at)
   -> 0.0020s
-- add_index(:incoming_emails, :message_id)
   -> 0.0020s
-- add_index(:incoming_emails, :error)
   -> 0.0014s
== 20160113160742 CreateIncomingEmails: migrated (0.0127s) ====================

== 20160118174335 RebakeHtmlCustomizations: migrating =========================
-- execute("UPDATE site_customizations SET body_tag_baked = NULL,\n                                            head_tag_baked = NULL,\n                                            header_baked = NULL,\n                                            mobile_header_baked = NULL,\n                                            footer_baked = NULL,\n                                            mobile_footer_baked = NULL")
   -> 0.0004s
== 20160118174335 RebakeHtmlCustomizations: migrated (0.0014s) ================

== 20160118233631 BackfillIncomingEmails: migrating ===========================
-- execute("      INSERT INTO incoming_emails (post_id, created_at, updated_at, user_id, topic_id, message_id, from_address, to_addresses, subject)\n      SELECT posts.id\n           , posts.created_at\n           , posts.created_at\n           , posts.user_id\n           , posts.topic_id\n           , array_to_string(regexp_matches(posts.raw_email, '^ *Message-Id: .*<([^>]+)>', 'im'), '')\n           , users.email\n           , array_to_string(regexp_matches(array_to_string(regexp_matches(posts.raw_email, '^to:.+$', 'im'), ''), '[^< \"''(]+@[^> \"'')]+'), '')\n           , topics.title\n      FROM posts\n      JOIN topics ON posts.topic_id = topics.id\n      JOIN users ON posts.user_id = users.id\n      WHERE posts.user_id IS NOT NULL\n        AND posts.topic_id IS NOT NULL\n        AND posts.via_email = 't'\n        AND posts.raw_email ~* 'Message-Id'\n      ORDER BY posts.id;\n")
   -> 0.0014s
== 20160118233631 BackfillIncomingEmails: migrated (0.0021s) ==================

== 20160127105314 ChangeDefaultNotificationLevelOnGroups: migrating ===========
-- execute("UPDATE group_users SET notification_level = 2")
   -> 0.0004s
-- change_column(:group_users, :notification_level, :integer)
   -> 0.0007s
== 20160127105314 ChangeDefaultNotificationLevelOnGroups: migrated (0.0057s) ==

== 20160127222802 MigrateUncategorizedDescriptionSetting: migrating ===========
-- execute("INSERT INTO translation_overrides (locale, translation_key, value, created_at, updated_at)\n             SELECT 'en', 'category.uncategorized_description', value, created_at, updated_at\n             FROM site_settings\n             WHERE name = 'uncategorized_description'\n               AND value <> 'Topics that don''t need a category, or don''t fit into any other existing category.'")
   -> 0.0006s
-- execute("DELETE FROM site_settings WHERE name = 'uncategorized_description'")
   -> 0.0003s
== 20160127222802 MigrateUncategorizedDescriptionSetting: migrated (0.0020s) ==

== 20160201181320 FixEmailLogs: migrating =====================================
-- execute("      UPDATE email_logs\n         SET user_id = u.id\n        FROM email_logs el\n   LEFT JOIN users u ON u.email = el.to_address\n       WHERE email_logs.id = el.id\n         AND email_logs.user_id IS NULL\n         AND NOT email_logs.skipped\n")
   -> 0.0012s
== 20160201181320 FixEmailLogs: migrated (0.0019s) ============================

== 20160206210202 RemoveInvalidWebsites: migrating ============================
-- execute("UPDATE user_profiles SET website = NULL WHERE website = 'http://'")
   -> 0.0007s
== 20160206210202 RemoveInvalidWebsites: migrated (0.0014s) ===================

== 20160215075528 AddUnreadPmIndexToNotifications: migrating ==================
-- add_index(:notifications, [:user_id, :id], {:unique=>true, :where=>"notification_type = 6 AND NOT read"})
   -> 0.0021s
== 20160215075528 AddUnreadPmIndexToNotifications: migrated (0.0027s) =========

== 20160224033122 CreateInstagramUserInfos: migrating =========================
-- create_table(:instagram_user_infos, {:id=>:integer})
   -> 0.0077s
== 20160224033122 CreateInstagramUserInfos: migrated (0.0088s) ================

== 20160225050317 AddUserOptions: migrating ===================================
-- create_table(:user_options, {:id=>false})
   -> 0.0028s
-- add_index(:user_options, [:user_id], {:unique=>true})
   -> 0.0023s
-- execute("    INSERT INTO user_options (\n            user_id,\n            email_always,\n            mailing_list_mode,\n            email_digests,\n            email_direct,\n            email_private_messages,\n            external_links_in_new_tab,\n            enable_quoting,\n            dynamic_favicon,\n            disable_jump_reply,\n            edit_history_public,\n            automatically_unpin_topics,\n            digest_after_days\n    )\n    SELECT  id,\n            email_always,\n            mailing_list_mode,\n            email_digests,\n            email_direct,\n            COALESCE(email_private_messages,true),\n            external_links_in_new_tab,\n            enable_quoting,\n            dynamic_favicon,\n            disable_jump_reply,\n            edit_history_public,\n            automatically_unpin_topics,\n            digest_after_days\n    FROM users\n")
   -> 0.0004s
== 20160225050317 AddUserOptions: migrated (0.0061s) ==========================

== 20160225050318 AllowDefaultsOnUsersTable: migrating ========================
-- change_column(:users, :email_digests, :boolean)
   -> 0.0007s
-- change_column(:users, :external_links_in_new_tab, :boolean)
   -> 0.0006s
== 20160225050318 AllowDefaultsOnUsersTable: migrated (0.0181s) ===============

== 20160225050319 MoveTrackingOptionsToUserOptions: migrating =================
-- add_column(:user_options, :auto_track_topics_after_msecs, :integer)
   -> 0.0004s
-- add_column(:user_options, :new_topic_duration_minutes, :integer)
   -> 0.0006s
-- add_column(:user_options, :last_redirected_to_top_at, :timestamp, {:precision=>nil})
   -> 0.0003s
-- execute("    UPDATE user_options\n    SET auto_track_topics_after_msecs = users.auto_track_topics_after_msecs,\n        new_topic_duration_minutes = users.new_topic_duration_minutes,\n        last_redirected_to_top_at = users.last_redirected_to_top_at\n    FROM users\n    WHERE users.id = user_options.user_id\n")
   -> 0.0008s
== 20160225050319 MoveTrackingOptionsToUserOptions: migrated (0.0028s) ========

== 20160225050320 AddEmailPreviousRepliesToUserOptions: migrating =============
-- add_column(:user_options, :email_previous_replies, :integer, {:null=>false, :default=>1})
   -> 0.0011s
== 20160225050320 AddEmailPreviousRepliesToUserOptions: migrated (0.0021s) ====

== 20160225095306 AddEmailInReplyToToUserOptions: migrating ===================
-- add_column(:user_options, :email_in_reply_to, :boolean, {:null=>false, :default=>true})
   -> 0.0008s
-- change_column(:user_options, :email_previous_replies, :integer)
   -> 0.0005s
-- execute("UPDATE user_options SET email_previous_replies = 2")
   -> 0.0002s
== 20160225095306 AddEmailInReplyToToUserOptions: migrated (0.0065s) ==========

== 20160302063432 RebuildDirectoryItemWithIndex: migrating ====================
-- remove_index(:directory_items, [:period_type], {:name=>"index_directory_items_on_period_type"})
   -> 0.0020s
-- execute("TRUNCATE TABLE directory_items RESTART IDENTITY")
   -> 0.0019s
-- add_index(:directory_items, [:period_type, :user_id], {:unique=>true})
   -> 0.0023s
== 20160302063432 RebuildDirectoryItemWithIndex: migrated (0.0084s) ===========

== 20160302104253 AddLikeNotificationFrequencyToUserOptions: migrating ========
-- add_column(:user_options, :like_notification_frequency, :integer, {:null=>false, :default=>1})
   -> 0.0008s
== 20160302104253 AddLikeNotificationFrequencyToUserOptions: migrated (0.0013s)

== 20160302170230 RenameDigestAfterDaysToDigestAfterMinutes: migrating ========
-- rename_column(:user_options, :digest_after_days, :digest_after_minutes)
   -> 0.0022s
-- execute("UPDATE user_options SET digest_after_minutes = digest_after_minutes * 1440 WHERE digest_after_minutes IS NOT NULL")
   -> 0.0003s
-- execute("UPDATE site_settings SET value = value::integer * 1440 WHERE name = 'default_email_digest_frequency' AND value IS NOT NULL AND value <> ''")
   -> 0.0003s
== 20160302170230 RenameDigestAfterDaysToDigestAfterMinutes: migrated (0.0035s)

== 20160303183607 ClearCommonPasswordsCache: migrating ========================
== 20160303183607 ClearCommonPasswordsCache: migrated (0.0008s) ===============

== 20160303234317 AddRejectionMessageToIncomingEmail: migrating ===============
-- add_column(:incoming_emails, :rejection_message, :text)
   -> 0.0004s
== 20160303234317 AddRejectionMessageToIncomingEmail: migrated (0.0011s) ======

== 20160307190919 CreateEmailChangeRequests: migrating ========================
-- create_table(:email_change_requests, {:id=>:integer})
   -> 0.0066s
-- add_index(:email_change_requests, :user_id)
   -> 0.0019s
== 20160307190919 CreateEmailChangeRequests: migrated (0.0092s) ===============

== 20160308193142 RenameConfirmTranslationKey: migrating ======================
-- execute("UPDATE translation_overrides SET translation_key = 'user_notifications.confirm_new_email.subject_template'\n               WHERE translation_key = 'user_notifications.authorize_email.subject_template'")
   -> 0.0004s
-- execute("UPDATE translation_overrides SET translation_key = 'user_notifications.confirm_new_email.text_body_template'\n               WHERE translation_key = 'user_notifications.authorize_email.text_body_template'")
   -> 0.0002s
== 20160308193142 RenameConfirmTranslationKey: migrated (0.0011s) =============

== 20160309073132 AddMailingListModeFrequency: migrating ======================
-- add_column(:user_options, :mailing_list_mode_frequency, :integer, {:default=>0, :null=>false})
   -> 0.0012s
== 20160309073132 AddMailingListModeFrequency: migrated (0.0020s) =============

== 20160317174357 CreateGivenDailyLikes: migrating ============================
-- create_table(:given_daily_likes, {:id=>false, :force=>true})
   -> 0.0014s
-- add_index(:given_daily_likes, [:user_id, :given_date], {:unique=>true})
   -> 0.0019s
-- add_index(:given_daily_likes, [:limit_reached, :user_id])
   -> 0.0016s
-- execute("SELECT value FROM site_settings WHERE name = 'max_likes_per_day'")
   -> 0.0002s
-- execute("INSERT INTO given_daily_likes (user_id, likes_given, limit_reached, given_date)\n             SELECT pa.user_id,\n                    COUNT(*),\n                    CASE WHEN COUNT(*) >= 50 THEN true\n                    ELSE false\n                    END,\n                    pa.created_at::date\n             FROM post_actions AS pa\n             WHERE pa.post_action_type_id = 2\n               AND pa.deleted_at IS NULL\n             GROUP BY pa.user_id, pa.created_at::date")
   -> 0.0007s
== 20160317174357 CreateGivenDailyLikes: migrated (0.0064s) ===================

== 20160317201955 AddIncludeTl0InDigestsToUserOptions: migrating ==============
-- add_column(:user_options, :include_tl0_in_digests, :boolean, {:default=>false})
   -> 0.0007s
== 20160317201955 AddIncludeTl0InDigestsToUserOptions: migrated (0.0011s) =====

== 20160321164925 ClosePollsInClosedTopics: migrating =========================
== 20160321164925 ClosePollsInClosedTopics: migrated (0.0156s) ================

== 20160326001747 AddUserFirstVisit: migrating ================================
-- add_column(:users, :first_seen_at, :timestamp, {:precision=>nil})
   -> 0.0007s
== 20160326001747 AddUserFirstVisit: migrated (0.0014s) =======================

== 20160329101122 RemoveWikiColor: migrating ==================================
-- execute("DELETE FROM color_scheme_colors WHERE name = 'wiki'")
   -> 0.0005s
== 20160329101122 RemoveWikiColor: migrated (0.0015s) =========================

== 20160405172827 CreateUserFirsts: migrating =================================
-- create_table(:user_firsts, {:force=>true, :id=>:integer})
   -> 0.0040s
-- add_index(:user_firsts, [:user_id, :first_type], {:unique=>true})
   -> 0.0015s
== 20160405172827 CreateUserFirsts: migrated (0.0066s) ========================

== 20160407160756 RemoveUserFirsts: migrating =================================
-- table_exists?(:user_firsts)
   -> 0.0005s
-- drop_table(:user_firsts)
   -> 0.0008s
== 20160407160756 RemoveUserFirsts: migrated (0.0018s) ========================

== 20160407180149 CreateOnceoffLogs: migrating ================================
-- create_table(:onceoff_logs, {:id=>:integer})
   -> 0.0046s
-- add_index(:onceoff_logs, :job_name)
   -> 0.0027s
== 20160407180149 CreateOnceoffLogs: migrated (0.0083s) =======================

== 20160408131959 AddShowOnUserCardToUserFields: migrating ====================
-- add_column(:user_fields, :show_on_user_card, :boolean, {:default=>false, :null=>false})
   -> 0.0008s
== 20160408131959 AddShowOnUserCardToUserFields: migrated (0.0013s) ===========

== 20160408175727 AddCompiledJsToTranslationOverrides: migrating ==============
-- add_column(:translation_overrides, :compiled_js, :text, {:null=>true})
   -> 0.0006s
== 20160408175727 AddCompiledJsToTranslationOverrides: migrated (0.0017s) =====

== 20160418065403 AddBounceKeyToEmailLog: migrating ===========================
-- add_column(:email_logs, :bounce_key, :string)
   -> 0.0005s
== 20160418065403 AddBounceKeyToEmailLog: migrated (0.0011s) ==================

== 20160420172330 AddIsAutoGeneratedToIncomingEmails: migrating ===============
-- add_column(:incoming_emails, :is_auto_generated, :boolean, {:default=>false})
   -> 0.0008s
== 20160420172330 AddIsAutoGeneratedToIncomingEmails: migrated (0.0019s) ======

== 20160425141954 FixIncomingEmailsIndices: migrating =========================
-- add_index(:incoming_emails, :post_id)
   -> 0.0022s
== 20160425141954 FixIncomingEmailsIndices: migrated (0.0031s) ================

== 20160427202222 AddSupportForBouncedEmails: migrating =======================
-- add_column(:email_logs, :bounced, :boolean, {:null=>false, :default=>false})
   -> 0.0018s
-- add_column(:incoming_emails, :is_bounce, :boolean, {:null=>false, :default=>false})
   -> 0.0009s
-- add_column(:user_stats, :bounce_score, :integer, {:null=>false, :default=>0})
   -> 0.0011s
-- add_column(:user_stats, :reset_bounce_score_after, :timestamp, {:precision=>nil})
   -> 0.0004s
== 20160427202222 AddSupportForBouncedEmails: migrated (0.0051s) ==============

== 20160503205953 CreateTags: migrating =======================================
-- create_table(:tags, {:id=>:integer})
   -> 0.0043s
-- create_table(:topic_tags, {:id=>:integer})
   -> 0.0033s
-- create_table(:tag_users, {:id=>:integer})
   -> 0.0043s
-- add_index(:tags, :name, {:unique=>true})
   -> 0.0014s
-- add_index(:topic_tags, [:topic_id, :tag_id], {:unique=>true})
   -> 0.0018s
-- add_index(:tag_users, [:user_id, :tag_id, :notification_level], {:name=>"idx_tag_users_ix1", :unique=>true})
   -> 0.0024s
-- add_index(:tag_users, [:tag_id, :user_id, :notification_level], {:name=>"idx_tag_users_ix2", :unique=>true})
   -> 0.0017s
== 20160503205953 CreateTags: migrated (0.0207s) ==============================

== 20160514100852 RemoveInvalidTopicUser: migrating ===========================
-- execute("      DELETE FROM topic_users\n       USING topic_users tu\n   LEFT JOIN users u ON u.id = tu.user_id\n       WHERE u.id IS NULL\n         AND topic_users.id = tu.id\n")
   -> 0.0008s
== 20160514100852 RemoveInvalidTopicUser: migrated (0.0015s) ==================

== 20160520022627 ShortenTopicCustomFieldsIndex: migrating ====================
-- remove_index(:topic_custom_fields, :value, {:name=>"index_topic_custom_fields_on_value"})
   -> 0.0031s
-- add_index(:topic_custom_fields, [:value, :name], {:name=>"topic_custom_fields_value_key_idx", :where=>"value IS NOT NULL AND char_length(value) < 400"})
   -> 0.0034s
== 20160520022627 ShortenTopicCustomFieldsIndex: migrated (0.0086s) ===========

== 20160527015355 CorrectMailingListModeFrequency: migrating ==================
-- execute("UPDATE user_options SET mailing_list_mode_frequency = 1 where mailing_list_mode")
   -> 0.0005s
== 20160527015355 CorrectMailingListModeFrequency: migrated (0.0014s) =========

== 20160527191614 CreateCategoryTags: migrating ===============================
-- create_table(:category_tags, {:id=>:integer})
   -> 0.0033s
-- add_index(:category_tags, [:category_id, :tag_id], {:name=>"idx_category_tags_ix1", :unique=>true})
   -> 0.0024s
-- add_index(:category_tags, [:tag_id, :category_id], {:name=>"idx_category_tags_ix2", :unique=>true})
   -> 0.0020s
== 20160527191614 CreateCategoryTags: migrated (0.0091s) ======================

== 20160530003739 CreateSchedulerStats: migrating =============================
-- create_table(:scheduler_stats, {:id=>:integer})
   -> 0.0050s
== 20160530003739 CreateSchedulerStats: migrated (0.0056s) ====================

== 20160530203810 AddMessageIdToEmailLogs: migrating ==========================
-- add_column(:email_logs, :message_id, :string)
   -> 0.0006s
-- add_index(:email_logs, :message_id)
   -> 0.0039s
== 20160530203810 AddMessageIdToEmailLogs: migrated (0.0053s) =================

== 20160602164008 CreateTagGroups: migrating ==================================
-- create_table(:tag_groups, {:id=>:integer})
   -> 0.0059s
-- create_table(:tag_group_memberships, {:id=>:integer})
   -> 0.0034s
-- add_index(:tag_group_memberships, [:tag_group_id, :tag_id], {:unique=>true})
   -> 0.0026s
== 20160602164008 CreateTagGroups: migrated (0.0133s) =========================

== 20160606204319 CreateCategoryTagGroups: migrating ==========================
-- create_table(:category_tag_groups, {:id=>:integer})
   -> 0.0031s
-- add_index(:category_tag_groups, [:category_id, :tag_group_id], {:name=>"idx_category_tag_groups_ix1", :unique=>true})
   -> 0.0014s
== 20160606204319 CreateCategoryTagGroups: migrated (0.0052s) =================

== 20160607213656 AddTagGroupOptions: migrating ===============================
-- add_column(:tag_groups, :parent_tag_id, :integer)
   -> 0.0004s
-- add_column(:tag_groups, :one_per_topic, :boolean, {:default=>false})
   -> 0.0006s
== 20160607213656 AddTagGroupOptions: migrated (0.0015s) ======================

== 20160609203508 RemoveTagCountFromTagGroups: migrating ======================
-- remove_column(:tag_groups, :tag_count)
   -> 0.0007s
== 20160609203508 RemoveTagCountFromTagGroups: migrated (0.0016s) =============

== 20160615024524 RenameDigestUnsbscribeKeys: migrating =======================
-- rename_table(:digest_unsubscribe_keys, :unsubscribe_keys)
   -> 0.0048s
-- add_column(:unsubscribe_keys, :unsubscribe_key_type, :string)
   -> 0.0025s
-- add_column(:unsubscribe_keys, :topic_id, :int)
   -> 0.0007s
-- add_column(:unsubscribe_keys, :post_id, :int)
   -> 0.0004s
-- execute("UPDATE unsubscribe_keys SET unsubscribe_key_type = 'digest' WHERE unsubscribe_key_type IS NULL")
   -> 0.0005s
== 20160615024524 RenameDigestUnsbscribeKeys: migrated (0.0098s) ==============

== 20160615165447 RenameNumFlagsToBlockNewUser: migrating =====================
-- execute("update site_settings set name = 'num_spam_flags_to_block_new_user' where name = 'num_flags_to_block_new_user'")
   -> 0.0003s
== 20160615165447 RenameNumFlagsToBlockNewUser: migrated (0.0010s) ============

== 20160627104436 UseHttpsNameChangeInSiteSettings: migrating =================
-- execute("UPDATE site_settings SET name = 'force_https' WHERE name = 'use_https'")
   -> 0.0003s
== 20160627104436 UseHttpsNameChangeInSiteSettings: migrated (0.0010s) ========

== 20160707195549 AddCompilerVersionToSiteCustomizations: migrating ===========
-- add_column(:site_customizations, :compiler_version, :integer, {:default=>0, :null=>false})
   -> 0.0010s
== 20160707195549 AddCompilerVersionToSiteCustomizations: migrated (0.0017s) ==

== 20160716112354 RemoveEditHistoryPublic: migrating ==========================
-- remove_column(:user_options, :edit_history_public)
   -> 0.0005s
== 20160716112354 RemoveEditHistoryPublic: migrated (0.0008s) =================

== 20160719002225 AddDeletedPostIndexToPosts: migrating =======================
-- add_index(:posts, [:topic_id, :post_number], {:where=>"deleted_at IS NOT NULL", :name=>"idx_posts_deleted_posts"})
   -> 0.0029s
== 20160719002225 AddDeletedPostIndexToPosts: migrated (0.0038s) ==============

== 20160722071221 AddAuthTokenCreatedAtToUsers: migrating =====================
-- add_column(:users, :auth_token_created_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0007s
== 20160722071221 AddAuthTokenCreatedAtToUsers: migrated (0.0012s) ============

== 20160725015749 RenameAuthTokenCreatedAt: migrating =========================
-- rename_column(:users, :auth_token_created_at, :auth_token_updated_at)
   -> 0.0054s
== 20160725015749 RenameAuthTokenCreatedAt: migrated (0.0062s) ================

== 20160727233044 CreateDevelopersTable: migrating ============================
-- create_table(:developers, {:id=>:integer})
   -> 0.0039s
== 20160727233044 CreateDevelopersTable: migrated (0.0047s) ===================

== 20160815002002 AddUserApiKeys: migrating ===================================
-- create_table(:user_api_keys, {:id=>:integer})
   -> 0.0067s
-- add_index(:user_api_keys, [:key], {:unique=>true})
   -> 0.0018s
-- add_index(:user_api_keys, [:user_id])
   -> 0.0014s
-- add_index(:user_api_keys, [:client_id])
   -> 0.0029s
== 20160815002002 AddUserApiKeys: migrated (0.0139s) ==========================

== 20160815210156 AddFlairUrlToGroups: migrating ==============================
-- add_column(:groups, :flair_url, :string)
   -> 0.0011s
-- add_column(:groups, :flair_bg_color, :string)
   -> 0.0004s
== 20160815210156 AddFlairUrlToGroups: migrated (0.0027s) =====================

== 20160816052836 UserApiClientIdIsUnique: migrating ==========================
-- remove_index(:user_api_keys, [:client_id], {:name=>"index_user_api_keys_on_client_id"})
   -> 0.0028s
-- add_index(:user_api_keys, [:client_id], {:unique=>true})
   -> 0.0020s
== 20160816052836 UserApiClientIdIsUnique: migrated (0.0064s) =================

== 20160816063534 AddRevokedAtToUserApiKeys: migrating ========================
-- add_column(:user_api_keys, :revoked_at, :timestamp, {:precision=>nil})
   -> 0.0009s
== 20160816063534 AddRevokedAtToUserApiKeys: migrated (0.0017s) ===============

== 20160823171911 AddPathWhitelistToEmbeddableHosts: migrating ================
-- add_column(:embeddable_hosts, :path_whitelist, :string)
   -> 0.0008s
== 20160823171911 AddPathWhitelistToEmbeddableHosts: migrated (0.0016s) =======

== 20160826195018 AddFlairColorToGroups: migrating ============================
-- add_column(:groups, :flair_color, :string)
   -> 0.0005s
== 20160826195018 AddFlairColorToGroups: migrated (0.0009s) ===================

== 20160905082217 CreateWebHookEventTypes: migrating ==========================
-- create_table(:web_hook_event_types, {:id=>:integer})
   -> 0.0076s
== 20160905082217 CreateWebHookEventTypes: migrated (0.0087s) =================

== 20160905082248 CreateWebHooks: migrating ===================================
-- create_table(:web_hooks, {:id=>:integer})
   -> 0.0081s
== 20160905082248 CreateWebHooks: migrated (0.0089s) ==========================

== 20160905084502 CreateWebHookEvents: migrating ==============================
-- create_table(:web_hook_events, {:id=>:integer})
   -> 0.0083s
== 20160905084502 CreateWebHookEvents: migrated (0.0094s) =====================

== 20160905085445 CreateJoinTableWebHooksWebHookEventTypes: migrating =========
-- create_join_table(:web_hooks, :web_hook_event_types, {:column_options=>{:type=>:integer}})
   -> 0.0016s
-- add_index(:web_hook_event_types_hooks, [:web_hook_event_type_id, :web_hook_id], {:name=>"idx_web_hook_event_types_hooks_on_ids", :unique=>true})
   -> 0.0020s
== 20160905085445 CreateJoinTableWebHooksWebHookEventTypes: migrated (0.0046s)

== 20160905091958 CreateJoinTableWebHooksGroups: migrating ====================
-- create_join_table(:web_hooks, :groups, {:column_options=>{:type=>:integer}})
   -> 0.0010s
-- add_index(:groups_web_hooks, [:web_hook_id, :group_id], {:unique=>true})
   -> 0.0015s
== 20160905091958 CreateJoinTableWebHooksGroups: migrated (0.0032s) ===========

== 20160905092148 CreateJoinTableWebHooksCategories: migrating ================
-- create_join_table(:web_hooks, :categories, {:column_options=>{:type=>:integer}})
   -> 0.0011s
-- add_index(:categories_web_hooks, [:web_hook_id, :category_id], {:unique=>true})
   -> 0.0020s
== 20160905092148 CreateJoinTableWebHooksCategories: migrated (0.0040s) =======

== 20160906200439 AddViaWizardToColorSchemes: migrating =======================
-- add_column(:color_schemes, :via_wizard, :boolean, {:default=>false, :null=>false})
   -> 0.0014s
-- add_column(:color_schemes, :theme_id, :string, {:null=>true})
   -> 0.0007s
== 20160906200439 AddViaWizardToColorSchemes: migrated (0.0032s) ==============

== 20160919003141 AddAvatarUrlToFacebookInfo: migrating =======================
-- add_column(:facebook_user_infos, :avatar_url, :string)
   -> 0.0004s
== 20160919003141 AddAvatarUrlToFacebookInfo: migrated (0.0009s) ==============

== 20160919054014 AddFieldsToFacebookUserInfo: migrating ======================
-- add_column(:facebook_user_infos, :about_me, :text)
   -> 0.0003s
-- add_column(:facebook_user_infos, :location, :string)
   -> 0.0002s
-- add_column(:facebook_user_infos, :website, :text)
   -> 0.0009s
== 20160919054014 AddFieldsToFacebookUserInfo: migrated (0.0024s) =============

== 20160920165833 AddModeratorToInvites: migrating ============================
-- add_column(:invites, :moderator, :boolean, {:default=>false, :null=>false})
   -> 0.0012s
== 20160920165833 AddModeratorToInvites: migrated (0.0019s) ===================

== 20160930123330 AddNotificationLevelWhenReplying: migrating =================
-- add_column(:user_options, :notification_level_when_replying, :integer)
   -> 0.0004s
== 20160930123330 AddNotificationLevelWhenReplying: migrated (0.0011s) ========

== 20161010230853 SingleSignOnIncreaseExternalAvatarUrl: migrating ============
-- change_column(:single_sign_on_records, :external_avatar_url, :string, {:limit=>1000})
   -> 0.0086s
== 20161010230853 SingleSignOnIncreaseExternalAvatarUrl: migrated (0.0096s) ===

== 20161013012136 AddScopesToUserApiKeys: migrating ===========================
-- add_column(:user_api_keys, :scopes, :text, {:array=>true, :null=>false, :default=>[]})
   -> 0.0010s
-- execute("UPDATE user_api_keys SET scopes = scopes || ARRAY['write'] WHERE write")
   -> 0.0008s
-- execute("UPDATE user_api_keys SET scopes = scopes || ARRAY['read'] WHERE read")
   -> 0.0003s
-- execute("UPDATE user_api_keys SET scopes = scopes || ARRAY['push'] WHERE push")
   -> 0.0002s
-- remove_column(:user_api_keys, :read)
   -> 0.0004s
-- remove_column(:user_api_keys, :write)
   -> 0.0005s
-- remove_column(:user_api_keys, :push)
   -> 0.0003s
== 20161013012136 AddScopesToUserApiKeys: migrated (0.0043s) ==================

== 20161014171034 AddDirectoryItemsIndexes: migrating =========================
-- add_index(:directory_items, :likes_received, {:algorithm=>:concurrently})
   -> 0.0027s
-- add_index(:directory_items, :likes_given, {:algorithm=>:concurrently})
   -> 0.0024s
-- add_index(:directory_items, :topics_entered, {:algorithm=>:concurrently})
   -> 0.0021s
-- add_index(:directory_items, :topic_count, {:algorithm=>:concurrently})
   -> 0.0020s
-- add_index(:directory_items, :post_count, {:algorithm=>:concurrently})
   -> 0.0018s
-- add_index(:directory_items, :posts_read, {:algorithm=>:concurrently})
   -> 0.0020s
-- add_index(:directory_items, :days_visited, {:algorithm=>:concurrently})
   -> 0.0019s
== 20161014171034 AddDirectoryItemsIndexes: migrated (0.0163s) ================

== 20161025083648 FixCategoryLogoAndBackgroundUrls: migrating =================
== 20161025083648 FixCategoryLogoAndBackgroundUrls: migrated (0.0005s) ========

== 20161029181306 AddImageUrlToPosts: migrating ===============================
-- add_column(:posts, :image_url, :string)
   -> 0.0005s
== 20161029181306 AddImageUrlToPosts: migrated (0.0009s) ======================

== 20161031183811 AddSortFieldsToCategories: migrating ========================
-- add_column(:categories, :sort_order, :string)
   -> 0.0004s
-- add_column(:categories, :sort_ascending, :boolean)
   -> 0.0003s
== 20161031183811 AddSortFieldsToCategories: migrated (0.0011s) ===============

== 20161102024700 AddPostUploadsIndexes: migrating ============================
-- add_index(:post_uploads, :post_id)
   -> 0.0022s
-- add_index(:post_uploads, :upload_id)
   -> 0.0023s
== 20161102024700 AddPostUploadsIndexes: migrated (0.0051s) ===================

== 20161102024818 AddUploadedAvatarIdIndexToUsers: migrating ==================
-- add_index(:users, :uploaded_avatar_id)
   -> 0.0025s
== 20161102024818 AddUploadedAvatarIdIndexToUsers: migrated (0.0032s) =========

== 20161102024838 AddUserAvatarsIndexes: migrating ============================
-- add_index(:user_avatars, :custom_upload_id)
   -> 0.0017s
-- add_index(:user_avatars, :gravatar_upload_id)
   -> 0.0015s
== 20161102024838 AddUserAvatarsIndexes: migrated (0.0044s) ===================

== 20161102024900 AddUserProfilesIndexes: migrating ===========================
-- add_index(:user_profiles, :profile_background)
   -> 0.0017s
-- add_index(:user_profiles, :card_background)
   -> 0.0016s
== 20161102024900 AddUserProfilesIndexes: migrated (0.0042s) ==================

== 20161102024920 AddCategoriesIndexes: migrating =============================
-- add_index(:categories, :logo_url)
   -> 0.0017s
-- add_index(:categories, :background_url)
   -> 0.0021s
== 20161102024920 AddCategoriesIndexes: migrated (0.0044s) ====================

== 20161124020918 AddScoresIndexesToTopTopics: migrating ======================
-- add_index(:top_topics, :daily_score)
   -> 0.0015s
-- add_index(:top_topics, :weekly_score)
   -> 0.0028s
-- add_index(:top_topics, :monthly_score)
   -> 0.0014s
-- add_index(:top_topics, :yearly_score)
   -> 0.0016s
-- add_index(:top_topics, :all_score)
   -> 0.0024s
== 20161124020918 AddScoresIndexesToTopTopics: migrated (0.0108s) =============

== 20161202011139 AddWhisperSupportToTopics: migrating ========================
-- remove_column(:topics, :bookmark_count)
   -> 0.0008s
-- remove_column(:topics, :off_topic_count)
   -> 0.0008s
-- remove_column(:topics, :illegal_count)
   -> 0.0007s
-- remove_column(:topics, :inappropriate_count)
   -> 0.0003s
-- remove_column(:topics, :notify_user_count)
   -> 0.0003s
-- add_column(:topics, :highest_staff_post_number, :int, {:default=>0, :null=>false})
   -> 0.0008s
-- execute("UPDATE topics SET highest_staff_post_number = highest_post_number")
   -> 0.0003s
== 20161202011139 AddWhisperSupportToTopics: migrated (0.0048s) ===============

== 20161202034856 AddUploadsToCategories: migrating ===========================
-- add_column(:categories, :uploaded_logo_id, :integer, {:index=>true})
   -> 0.0005s
-- add_column(:categories, :uploaded_background_id, :integer, {:index=>true})
   -> 0.0003s
-- execute("UPDATE categories c1\nSET uploaded_logo_id = u.id\nFROM categories c2\nINNER JOIN uploads u ON u.url = c2.logo_url\nWHERE c1.id = c2.id\n")
   -> 0.0006s
-- execute("UPDATE categories c1\nSET uploaded_background_id = u.id\nFROM categories c2\nINNER JOIN uploads u ON u.url = c2.background_url\nWHERE c1.id = c2.id\n")
   -> 0.0007s
== 20161202034856 AddUploadsToCategories: migrated (0.0027s) ==================

== 20161205001727 AddTopicColumnsBack: migrating ==============================
-- add_column(:topics, :bookmark_count, :int)
   -> 0.0006s
-- add_column(:topics, :off_topic_count, :int)
   -> 0.0003s
-- add_column(:topics, :illegal_count, :int)
   -> 0.0003s
-- add_column(:topics, :inappropriate_count, :int)
   -> 0.0003s
-- add_column(:topics, :notify_user_count, :int)
   -> 0.0004s
== 20161205001727 AddTopicColumnsBack: migrated (0.0029s) =====================

== 20161205065743 AddBioToGroups: migrating ===================================
-- add_column(:groups, :bio_raw, :text)
   -> 0.0010s
-- add_column(:groups, :bio_cooked, :text)
   -> 0.0008s
== 20161205065743 AddBioToGroups: migrated (0.0025s) ==========================

== 20161207030057 AddPublicToGroups: migrating ================================
-- add_column(:groups, :public, :boolean, {:default=>false, :null=>false})
   -> 0.0014s
== 20161207030057 AddPublicToGroups: migrated (0.0020s) =======================

== 20161208064834 CreateGroupHistories: migrating =============================
-- create_table(:group_histories, {:id=>:integer})
   -> 0.0096s
-- add_index(:group_histories, :group_id)
   -> 0.0017s
-- add_index(:group_histories, :acting_user_id)
   -> 0.0012s
-- add_index(:group_histories, :target_user_id)
   -> 0.0019s
== 20161208064834 CreateGroupHistories: migrated (0.0156s) ====================

== 20161212123649 AddAllowMembershipRequestsToGroups: migrating ===============
-- add_column(:groups, :allow_membership_requests, :boolean, {:default=>false, :null=>false})
   -> 0.0010s
== 20161212123649 AddAllowMembershipRequestsToGroups: migrated (0.0015s) ======

== 20161213073938 AddFullNameToGroups: migrating ==============================
-- add_column(:groups, :full_name, :string)
   -> 0.0003s
== 20161213073938 AddFullNameToGroups: migrated (0.0007s) =====================

== 20161215201907 MigrateFeaturedLinkFields: migrating ========================
-- add_column(:topics, :featured_link, :string)
   -> 0.0005s
-- add_column(:categories, :topic_featured_link_allowed, :boolean, {:default=>true})
   -> 0.0006s
== 20161215201907 MigrateFeaturedLinkFields: migrated (0.0016s) ===============

== 20161216101352 AddAllTopicsWikiToCategories: migrating =====================
-- add_column(:categories, :all_topics_wiki, :boolean, {:default=>false, :null=>false})
   -> 0.0010s
== 20161216101352 AddAllTopicsWikiToCategories: migrated (0.0017s) ============

== 20170124181409 AddUserAuthTokens: migrating ================================
-- create_table(:user_auth_tokens, {:id=>:integer})
   -> 0.0064s
-- add_index(:user_auth_tokens, [:auth_token])
   -> 0.0025s
-- add_index(:user_auth_tokens, [:prev_auth_token])
   -> 0.0013s
-- execute("INSERT INTO user_auth_tokens(user_id, auth_token, prev_auth_token, legacy, updated_at, created_at, rotated_at)\nSELECT id, auth_token, auth_token, true, auth_token_updated_at, auth_token_updated_at, auth_token_updated_at\nFROM users\nWHERE auth_token_updated_at IS NOT NULL AND auth_token IS NOT NULL\n")
   -> 0.0006s
== 20170124181409 AddUserAuthTokens: migrated (0.0116s) =======================

== 20170201085745 CreateCustomEmojis: migrating ===============================
-- create_table(:custom_emojis, {:id=>:integer})
   -> 0.0057s
-- add_index(:custom_emojis, :name, {:unique=>true})
   -> 0.0019s
== 20170201085745 CreateCustomEmojis: migrated (0.0085s) ======================

== 20170213180857 AddUserAuthTokenLog: migrating ==============================
-- create_table(:user_auth_token_logs, {:id=>:integer})
   -> 0.0064s
== 20170213180857 AddUserAuthTokenLog: migrated (0.0072s) =====================

== 20170215151505 AddSeenAtToUserAuthToken: migrating =========================
-- add_column(:user_auth_tokens, :seen_at, :timestamp, {:precision=>nil})
   -> 0.0004s
== 20170215151505 AddSeenAtToUserAuthToken: migrated (0.0014s) ================

== 20170221204204 AddShowSubcategoryListToCategories: migrating ===============
-- add_column(:categories, :show_subcategory_list, :boolean, {:default=>false})
   -> 0.0013s
-- execute("select count(1) from site_settings where name = 'show_subcategory_list' and value = 't'")
   -> 0.0004s
== 20170221204204 AddShowSubcategoryListToCategories: migrated (0.0026s) ======

== 20170222173036 MakeUserAuthTokenIndexUnique: migrating =====================
-- remove_index(:user_auth_tokens, [:auth_token], {:name=>"index_user_auth_tokens_on_auth_token"})
   -> 0.0027s
-- remove_index(:user_auth_tokens, [:prev_auth_token], {:name=>"index_user_auth_tokens_on_prev_auth_token"})
   -> 0.0021s
-- add_index(:user_auth_tokens, [:auth_token], {:unique=>true})
   -> 0.0028s
-- add_index(:user_auth_tokens, [:prev_auth_token], {:unique=>true})
   -> 0.0015s
== 20170222173036 MakeUserAuthTokenIndexUnique: migrated (0.0124s) ============

== 20170227211458 AddFeaturedTopicsToCategories: migrating ====================
-- add_column(:categories, :num_featured_topics, :integer, {:default=>3})
   -> 0.0014s
-- execute("select value from site_settings where name = 'category_featured_topics' and value != '3'")
   -> 0.0005s
== 20170227211458 AddFeaturedTopicsToCategories: migrated (0.0028s) ===========

== 20170301215150 AddDefaultViewToCategories: migrating =======================
-- add_column(:categories, :default_view, :string, {:null=>true, :limit=>50})
   -> 0.0007s
== 20170301215150 AddDefaultViewToCategories: migrated (0.0011s) ==============

== 20170303070706 AddIndexToTopicViewItems: migrating =========================
-- add_index(:topic_views, [:user_id, :viewed_at])
   -> 0.0026s
== 20170303070706 AddIndexToTopicViewItems: migrated (0.0036s) ================

== 20170307181800 AddPathToUserAuthTokenLog: migrating ========================
-- add_column(:user_auth_token_logs, :path, :string)
   -> 0.0006s
== 20170307181800 AddPathToUserAuthTokenLog: migrated (0.0012s) ===============

== 20170308201552 AddSubcategoryListStyleToCategories: migrating ==============
-- add_column(:categories, :subcategory_list_style, :string, {:limit=>50, :default=>"rows_with_featured_topics"})
   -> 0.0011s
-- execute("select value from site_settings where name = 'desktop_category_page_style' and value != 'categories_with_featured_topics'")
   -> 0.0003s
== 20170308201552 AddSubcategoryListStyleToCategories: migrated (0.0020s) =====

== 20170313192741 AddThemes: migrating ========================================
-- rename_table(:site_customizations, :themes)
   -> 0.0039s
-- add_column(:themes, :user_selectable, :bool, {:null=>false, :default=>false})
   -> 0.0007s
-- add_column(:themes, :hidden, :bool, {:null=>false, :default=>false})
   -> 0.0010s
-- add_column(:themes, :color_scheme_id, :integer)
   -> 0.0006s
-- create_table(:child_themes, {:id=>:integer})
   -> 0.0034s
-- add_index(:child_themes, [:parent_theme_id, :child_theme_id], {:unique=>true})
   -> 0.0018s
-- add_index(:child_themes, [:child_theme_id, :parent_theme_id], {:unique=>true})
   -> 0.0014s
-- execute("DELETE FROM color_schemes WHERE versioned_id IS NOT NULL")
   -> 0.0003s
-- remove_column(:color_schemes, :versioned_id)
   -> 0.0003s
-- execute("SELECT count(*) FROM themes WHERE enabled")
   -> 0.0004s
-- execute("SELECT id FROM color_schemes WHERE enabled")
   -> 0.0005s
-- execute("SELECT key, id FROM themes WHERE enabled")
   -> 0.0002s
-- remove_column(:themes, :enabled)
   -> 0.0003s
-- remove_column(:color_schemes, :enabled)
   -> 0.0004s
== 20170313192741 AddThemes: migrated (0.0168s) ===============================

== 20170322065911 CreateTopicStatusUpdates: migrating =========================
-- create_table(:topic_status_updates, {:id=>:integer})
   -> 0.0047s
-- add_index(:topic_status_updates, :user_id)
   -> 0.0034s
== 20170322065911 CreateTopicStatusUpdates: migrated (0.0094s) ================

== 20170322155537 AddThemeToStylesheetCache: migrating ========================
-- add_column(:stylesheet_cache, :theme_id, :integer, {:default=>-1, :null=>false})
   -> 0.0011s
-- add_column(:stylesheet_cache, :source_map, :text)
   -> 0.0003s
== 20170322155537 AddThemeToStylesheetCache: migrated (0.0021s) ===============

== 20170322191305 AddDefaultTopPeriodToCategories: migrating ==================
-- add_column(:categories, :default_top_period, :string, {:limit=>20, :default=>"all"})
   -> 0.0014s
== 20170322191305 AddDefaultTopPeriodToCategories: migrated (0.0021s) =========

== 20170324032913 MoveAutoCloseColumnsToTopicStatusUpdate: migrating ==========
-- execute("INSERT INTO topic_status_updates(topic_id, user_id, execute_at, status_type, based_on_last_post, created_at, updated_at)\nSELECT\n  t.id,\n  t.auto_close_user_id,\n  t.auto_close_at,\n  1,\n  t.auto_close_based_on_last_post,\n  t.auto_close_started_at,\n  t.auto_close_started_at\nFROM topics t\nWHERE t.auto_close_at IS NOT NULL\nAND t.auto_close_user_id IS NOT NULL\nAND t.auto_close_started_at IS NOT NULL\nAND t.deleted_at IS NULL\n")
   -> 0.0014s
-- execute("WITH selected AS (\n  SELECT tsp.id\n  FROM topic_status_updates tsp\n  JOIN topics t\n  ON t.id = tsp.topic_id\n  WHERE tsp.execute_at < now()\n  OR (t.closed AND tsp.execute_at >= now())\n)\n\nUPDATE topic_status_updates\nSET deleted_at = now(), deleted_by_id = -1\nWHERE id in (SELECT * FROM selected)\n")
   -> 0.0010s
== 20170324032913 MoveAutoCloseColumnsToTopicStatusUpdate: migrated (0.0034s) =

== 20170324144456 AmendCssColumnsInTheme: migrating ===========================
-- rename_column(:themes, :stylesheet, :desktop_scss)
   -> 0.0028s
-- rename_column(:themes, :mobile_stylesheet, :mobile_scss)
   -> 0.0037s
-- rename_column(:themes, :embedded_css, :embedded_scss)
   -> 0.0021s
-- add_column(:themes, :common_scss, :text)
   -> 0.0005s
-- remove_column(:themes, :stylesheet_baked)
   -> 0.0007s
-- remove_column(:themes, :mobile_stylesheet_baked)
   -> 0.0005s
-- remove_column(:themes, :embedded_css_baked)
   -> 0.0003s
== 20170324144456 AmendCssColumnsInTheme: migrated (0.0119s) ==================

== 20170328163918 BreakUpThemesTable: migrating ===============================
-- create_table(:theme_fields, {:id=>:integer})
   -> 0.0045s
-- add_index(:theme_fields, [:theme_id, :target, :name], {:unique=>true})
   -> 0.0027s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 0, 'embedded_scss', embedded_scss, created_at, updated_at\n      FROM themes WHERE embedded_scss IS NOT NULL AND LENGTH(BTRIM(embedded_scss)) > 0\n")
   -> 0.0009s
-- remove_column(:themes, "embedded_scss")
   -> 0.0006s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 0, 'scss', common_scss, created_at, updated_at\n      FROM themes WHERE common_scss IS NOT NULL AND LENGTH(BTRIM(common_scss)) > 0\n")
   -> 0.0004s
-- remove_column(:themes, "common_scss")
   -> 0.0004s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 1, 'scss', desktop_scss, created_at, updated_at\n      FROM themes WHERE desktop_scss IS NOT NULL AND LENGTH(BTRIM(desktop_scss)) > 0\n")
   -> 0.0003s
-- remove_column(:themes, "desktop_scss")
   -> 0.0005s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 2, 'scss', mobile_scss, created_at, updated_at\n      FROM themes WHERE mobile_scss IS NOT NULL AND LENGTH(BTRIM(mobile_scss)) > 0\n")
   -> 0.0004s
-- remove_column(:themes, "mobile_scss")
   -> 0.0005s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 0, 'head_tag', head_tag, created_at, updated_at\n      FROM themes WHERE head_tag IS NOT NULL AND LENGTH(BTRIM(head_tag)) > 0\n")
   -> 0.0008s
-- remove_column(:themes, "head_tag")
   -> 0.0005s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 0, 'body_tag', body_tag, created_at, updated_at\n      FROM themes WHERE body_tag IS NOT NULL AND LENGTH(BTRIM(body_tag)) > 0\n")
   -> 0.0004s
-- remove_column(:themes, "body_tag")
   -> 0.0003s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 1, 'header', header, created_at, updated_at\n      FROM themes WHERE header IS NOT NULL AND LENGTH(BTRIM(header)) > 0\n")
   -> 0.0002s
-- remove_column(:themes, "header")
   -> 0.0003s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 2, 'header', mobile_header, created_at, updated_at\n      FROM themes WHERE mobile_header IS NOT NULL AND LENGTH(BTRIM(mobile_header)) > 0\n")
   -> 0.0003s
-- remove_column(:themes, "mobile_header")
   -> 0.0003s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 1, 'after_header', top, created_at, updated_at\n      FROM themes WHERE top IS NOT NULL AND LENGTH(BTRIM(top)) > 0\n")
   -> 0.0003s
-- remove_column(:themes, "top")
   -> 0.0002s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 2, 'after_header', mobile_top, created_at, updated_at\n      FROM themes WHERE mobile_top IS NOT NULL AND LENGTH(BTRIM(mobile_top)) > 0\n")
   -> 0.0002s
-- remove_column(:themes, "mobile_top")
   -> 0.0003s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 1, 'footer', footer, created_at, updated_at\n      FROM themes WHERE footer IS NOT NULL AND LENGTH(BTRIM(footer)) > 0\n")
   -> 0.0003s
-- remove_column(:themes, "footer")
   -> 0.0005s
-- execute("      INSERT INTO theme_fields (\n        theme_id,\n        target,\n        name,\n        value,\n        created_at,\n        updated_at\n      )\n      SELECT id, 2, 'footer', mobile_footer, created_at, updated_at\n      FROM themes WHERE mobile_footer IS NOT NULL AND LENGTH(BTRIM(mobile_footer)) > 0\n")
   -> 0.0002s
-- remove_column(:themes, "mobile_footer")
   -> 0.0002s
-- remove_column(:themes, "head_tag_baked")
   -> 0.0003s
-- remove_column(:themes, "body_tag_baked")
   -> 0.0003s
-- remove_column(:themes, "header_baked")
   -> 0.0002s
-- remove_column(:themes, "footer_baked")
   -> 0.0002s
-- remove_column(:themes, "mobile_footer_baked")
   -> 0.0006s
-- remove_column(:themes, "mobile_header_baked")
   -> 0.0005s
== 20170328163918 BreakUpThemesTable: migrated (0.0212s) ======================

== 20170328203122 AddCompilerVersionToThemeFields: migrating ==================
-- add_column(:theme_fields, :compiler_version, :integer, {:null=>false, :default=>0})
   -> 0.0018s
== 20170328203122 AddCompilerVersionToThemeFields: migrated (0.0026s) =========

== 20170330041605 AddIndexToTopicStatusUpdates: migrating =====================
-- execute("CREATE UNIQUE INDEX idx_topic_id_status_type_deleted_at\nON topic_status_updates(topic_id, status_type)\nWHERE deleted_at IS NULL\n")
   -> 0.0026s
== 20170330041605 AddIndexToTopicStatusUpdates: migrated (0.0032s) ============

== 20170403062717 AddCategoryIdToTopicStatusUpdates: migrating ================
-- add_column(:topic_status_updates, :category_id, :integer)
   -> 0.0006s
== 20170403062717 AddCategoryIdToTopicStatusUpdates: migrated (0.0017s) =======

== 20170407154510 RenameThemeId: migrating ====================================
-- rename_column(:color_schemes, :theme_id, :base_scheme_id)
   -> 0.0018s
== 20170407154510 RenameThemeId: migrated (0.0027s) ===========================

== 20170410170923 AddThemeRemoteFields: migrating =============================
-- create_table(:remote_themes, {:id=>:integer})
   -> 0.0050s
-- add_column(:themes, :remote_theme_id, :integer)
   -> 0.0007s
-- add_index(:themes, :remote_theme_id, {:unique=>true})
   -> 0.0019s
== 20170410170923 AddThemeRemoteFields: migrated (0.0088s) ====================

== 20170413043152 RenameWarnings: migrating ===================================
-- rename_table(:warnings, :user_warnings)
   -> 0.0057s
== 20170413043152 RenameWarnings: migrated (0.0064s) ==========================

== 20170417164715 AddThemeIdToColorScheme: migrating ==========================
-- add_column(:color_schemes, :theme_id, :int)
   -> 0.0008s
== 20170417164715 AddThemeIdToColorScheme: migrated (0.0016s) =================

== 20170419193714 AddErrorToThemeFields: migrating ============================
-- add_column(:theme_fields, :error, :string)
   -> 0.0005s
== 20170419193714 AddErrorToThemeFields: migrated (0.0012s) ===================

== 20170420163628 AddDefaultNotificationLevelToGroup: migrating ===============
-- add_column(:groups, :default_notification_level, :integer, {:default=>3, :null=>false})
   -> 0.0009s
-- execute("UPDATE groups SET default_notification_level = 2 WHERE id = 2")
   -> 0.0004s
== 20170420163628 AddDefaultNotificationLevelToGroup: migrated (0.0021s) ======

== 20170425083011 AddDeletedAtToTopicEmbeds: migrating ========================
-- add_column(:topic_embeds, :deleted_at, :timestamp, {:precision=>nil})
   -> 0.0008s
-- add_column(:topic_embeds, :deleted_by_id, :integer, {:null=>true})
   -> 0.0004s
== 20170425083011 AddDeletedAtToTopicEmbeds: migrated (0.0020s) ===============

== 20170425172415 AddErrorToSchedulerStats: migrating =========================
-- add_column(:scheduler_stats, :error, :text)
   -> 0.0005s
== 20170425172415 AddErrorToSchedulerStats: migrated (0.0011s) ================

== 20170501191912 AddUploadIdToThemeFields: migrating =========================
-- remove_index(:theme_fields, [:theme_id, :target, :name], {:name=>"index_theme_fields_on_theme_id_and_target_and_name"})
   -> 0.0031s
-- rename_column(:theme_fields, :target, :target_id)
   -> 0.0016s
-- add_column(:theme_fields, :target, :integer)
   -> 0.0004s
-- execute("UPDATE theme_fields SET target = target_id")
   -> 0.0004s
-- change_column(:theme_fields, :name, :string, {:limit=>30})
   -> 0.0083s
-- add_column(:theme_fields, :upload_id, :integer)
   -> 0.0008s
-- add_column(:theme_fields, :type_id, :integer, {:null=>false, :default=>0})
   -> 0.0019s
-- add_index(:theme_fields, [:theme_id, :target_id, :type_id, :name], {:unique=>true, :name=>"theme_field_unique_index"})
   -> 0.0028s
-- execute("UPDATE theme_fields SET type_id = 1 WHERE name IN ('scss', 'embedded_scss')")
   -> 0.0004s
== 20170501191912 AddUploadIdToThemeFields: migrated (0.0230s) ================

== 20170505035229 MigrateMailingListDailyUpdatesUsersToDailySummary: migrating
-- change_column_default(:user_options, :mailing_list_mode_frequency, 1)
   -> 0.0025s
-- execute("UPDATE user_options\nSET digest_after_minutes = 1440, email_digests = 't', mailing_list_mode = 'f'\nWHERE mailing_list_mode_frequency = 0 AND mailing_list_mode\n")
   -> 0.0003s
== 20170505035229 MigrateMailingListDailyUpdatesUsersToDailySummary: migrated (0.0034s)

== 20170508183819 AddCssClassNameToEmbeddableHosts: migrating =================
-- add_column(:embeddable_hosts, :class_name, :string)
   -> 0.0008s
== 20170508183819 AddCssClassNameToEmbeddableHosts: migrated (0.0016s) ========

== 20170511071355 RemoveConvertPastedImageSiteSetting: migrating ==============
-- execute("DELETE FROM site_settings WHERE name = 'convert_pasted_images_to_hq_jpg'")
   -> 0.0003s
== 20170511071355 RemoveConvertPastedImageSiteSetting: migrated (0.0008s) =====

== 20170511080007 RenameConvertPastedImagesQualitySiteSetting: migrating ======
-- execute("UPDATE site_settings SET name = 'png_to_jpg_quality' WHERE name = 'convert_pasted_images_quality'")
   -> 0.0002s
== 20170511080007 RenameConvertPastedImagesQualitySiteSetting: migrated (0.0009s)

== 20170511184842 RenameTopicStatusUpdatesToTopicTimers: migrating ============
-- rename_table(:topic_status_updates, :topic_timers)
   -> 0.0044s
== 20170511184842 RenameTopicStatusUpdatesToTopicTimers: migrated (0.0052s) ===

== 20170512153318 AddThemeKeyToUserOptions: migrating =========================
-- add_column(:user_options, :theme_key, :string)
   -> 0.0018s
== 20170512153318 AddThemeKeyToUserOptions: migrated (0.0023s) ================

== 20170512185227 CreateTopicStatusUpdatesAgain: migrating ====================
-- create_table(:topic_status_updates, {:id=>:integer})
   -> 0.0033s
== 20170512185227 CreateTopicStatusUpdatesAgain: migrated (0.0075s) ===========

== 20170515152725 AddThemeKeySeqToUserOptions: migrating ======================
-- add_column(:user_options, :theme_key_seq, :integer, {:null=>false, :default=>0})
   -> 0.0009s
== 20170515152725 AddThemeKeySeqToUserOptions: migrated (0.0016s) =============

== 20170515203721 AddPublicTypeToTopicTimers: migrating =======================
-- add_column(:topic_timers, :public_type, :boolean, {:default=>true})
   -> 0.0009s
-- execute("DROP INDEX IF EXISTS idx_topic_id_status_type_deleted_at")
   -> 0.0003s
-- execute("CREATE UNIQUE INDEX idx_topic_id_public_type_deleted_at\nON topic_timers (topic_id)\nWHERE public_type = TRUE\nAND deleted_at IS NULL\n")
   -> 0.0017s
== 20170515203721 AddPublicTypeToTopicTimers: migrated (0.0037s) ==============

== 20170602132735 FixGroupAllowMembershipRequests: migrating ==================
-- execute("UPDATE groups g\nSET allow_membership_requests = 'f'\nWHERE NOT EXISTS (SELECT 1 FROM group_users gu WHERE gu.owner = 't' AND gu.group_id = g.id LIMIT 1)\n")
   -> 0.0008s
== 20170602132735 FixGroupAllowMembershipRequests: migrated (0.0015s) =========

== 20170605014820 RemoveAutoCloseColumnsFromTopics: migrating =================
== 20170605014820 RemoveAutoCloseColumnsFromTopics: migrated (0.0004s) ========

== 20170609115401 AddExtensionToTopicLinks: migrating =========================
-- add_column(:topic_links, :extension, :string, {:limit=>10})
   -> 0.0009s
-- add_index(:topic_links, :extension)
   -> 0.0031s
== 20170609115401 AddExtensionToTopicLinks: migrated (0.0053s) ================

== 20170628152322 CreateWatchedWords: migrating ===============================
-- create_table(:watched_words, {:id=>:integer})
   -> 0.0062s
-- add_index(:watched_words, [:action, :word], {:unique=>true})
   -> 0.0020s
== 20170628152322 CreateWatchedWords: migrated (0.0090s) ======================

== 20170630083540 AddCustomMessageToInvite: migrating =========================
-- add_column(:invites, :custom_message, :text)
   -> 0.0006s
== 20170630083540 AddCustomMessageToInvite: migrated (0.0012s) ================

== 20170703115216 AddExtensionToUploads: migrating ============================
-- add_column(:uploads, :extension, :string, {:limit=>10})
   -> 0.0003s
-- execute("CREATE INDEX index_uploads_on_extension ON uploads(lower(extension))")
   -> 0.0015s
== 20170703115216 AddExtensionToUploads: migrated (0.0022s) ===================

== 20170703144855 AddVisibilityLevelToGroups: migrating =======================
-- add_column(:groups, :visibility_level, :integer, {:default=>0, :null=>false})
   -> 0.0007s
-- execute("UPDATE groups\nSET visibility_level = 1\nWHERE NOT visible\n")
   -> 0.0005s
-- remove_column(:groups, :visible)
   -> 0.0006s
== 20170703144855 AddVisibilityLevelToGroups: migrated (0.0023s) ==============

== 20170704142141 AddVisibleBackToGroups: migrating ===========================
-- add_column(:groups, :visible, :boolean, {:default=>true, :null=>false})
   -> 0.0008s
-- execute("UPDATE groups set visible = false where visibility_level > 0")
   -> 0.0007s
== 20170704142141 AddVisibleBackToGroups: migrated (0.0025s) ==================

== 20170713164357 CreateSearchLogs: migrating =================================
-- create_table(:search_logs, {:id=>:integer})
   -> 0.0058s
== 20170713164357 CreateSearchLogs: migrated (0.0067s) ========================

== 20170717084947 CreateUserEmails: migrating =================================
-- create_table(:user_emails, {:id=>:integer})
   -> 0.0062s
-- add_index(:user_emails, :user_id)
   -> 0.0019s
-- add_index(:user_emails, [:user_id, :primary], {:unique=>true})
   -> 0.0020s
-- execute("CREATE UNIQUE INDEX index_user_emails_on_email ON user_emails (lower(email));")
   -> 0.0021s
-- execute("INSERT INTO user_emails (\n  id,\n  user_id,\n  email,\n  \"primary\",\n  created_at,\n  updated_at\n) SELECT\n  id,\n  id,\n  email,\n  'TRUE',\n  created_at,\n  updated_at\nFROM users\n")
   -> 0.0008s
-- change_column_null(:users, :email, true)
   -> 0.0004s
== 20170717084947 CreateUserEmails: migrated (0.0168s) ========================

== 20170725075535 CorrectDefaultEmailMailingListModeFrequency: migrating ======
-- execute("UPDATE site_settings SET value = '1' WHERE value = '0' AND name = 'default_email_mailing_list_mode_frequency';")
   -> 0.0003s
== 20170725075535 CorrectDefaultEmailMailingListModeFrequency: migrated (0.0007s)

== 20170728012754 SplitPublicInGroups: migrating ==============================
-- add_column(:groups, :public_exit, :boolean, {:default=>false, :null=>false})
   -> 0.0011s
-- add_column(:groups, :public_admission, :boolean, {:default=>false, :null=>false})
   -> 0.0009s
== 20170728012754 SplitPublicInGroups: migrated (0.0037s) =====================

== 20170731075604 AddMembershipRequestTemplateToGroups: migrating =============
-- add_column(:groups, :membership_request_template, :text)
   -> 0.0005s
== 20170731075604 AddMembershipRequestTemplateToGroups: migrated (0.0013s) ====

== 20170803123704 AddVersionToSearchData: migrating ===========================
-- add_column(:post_search_data, :version, :integer, {:default=>0})
   -> 0.0009s
-- add_column(:topic_search_data, :version, :integer, {:default=>0})
   -> 0.0005s
-- add_column(:category_search_data, :version, :integer, {:default=>0})
   -> 0.0006s
-- add_column(:user_search_data, :version, :integer, {:default=>0})
   -> 0.0007s
== 20170803123704 AddVersionToSearchData: migrated (0.0033s) ==================

== 20170818191909 SplitAliasLevels: migrating =================================
-- add_column(:groups, :messageable_level, :integer, {:default=>0})
   -> 0.0012s
-- add_column(:groups, :mentionable_level, :integer, {:default=>0})
   -> 0.0009s
-- execute("UPDATE groups SET messageable_level = alias_level, mentionable_level = alias_level")
   -> 0.0004s
== 20170818191909 SplitAliasLevels: migrated (0.0033s) ========================

== 20170823173427 CreateTagSearchData: migrating ==============================
-- create_table(:tag_search_data, {:primary_key=>:tag_id, :id=>:integer})
   -> 0.0050s
-- execute("create index idx_search_tag on tag_search_data using gin(search_data)")
   -> 0.0004s
== 20170823173427 CreateTagSearchData: migrated (0.0060s) =====================

== 20170824172615 AddSlugIndexOnTopic: migrating ==============================
-- execute("CREATE INDEX idxTopicSlug ON topics(slug) WHERE deleted_at IS NULL AND slug IS NOT NULL")
   -> 0.0022s
== 20170824172615 AddSlugIndexOnTopic: migrated (0.0033s) =====================

== 20170831180419 RemoveWhisperTopicLinks: migrating ==========================
-- execute("      DELETE FROM topic_links\n       USING topic_links tl\n   LEFT JOIN posts p ON p.id = tl.post_id\n       WHERE p.post_type = 4\n         AND topic_links.id = tl.id\n")
   -> 0.0010s
== 20170831180419 RemoveWhisperTopicLinks: migrated (0.0015s) =================

== 20171003180951 RenameForgotPasswordStrictSetting: migrating ================
-- execute("UPDATE site_settings SET name = 'hide_email_address_taken' WHERE name = 'forgot_password_strict'")
   -> 0.0003s
== 20171003180951 RenameForgotPasswordStrictSetting: migrated (0.0009s) =======

== 20171006030028 AddAllowPrivateMessagesToUserOptions: migrating =============
-- add_column(:user_options, :allow_private_messages, :boolean, {:default=>true, :null=>false})
   -> 0.0009s
== 20171006030028 AddAllowPrivateMessagesToUserOptions: migrated (0.0015s) ====

== 20171026014317 AddUserOptionHome: migrating ================================
-- add_column(:user_options, :homepage_id, :integer, {:null=>true, :default=>nil})
   -> 0.0007s
== 20171026014317 AddUserOptionHome: migrated (0.0011s) =======================

== 20171110174413 RenameBlockedSilence: migrating =============================
-- add_column(:users, :silenced, :boolean, {:default=>false, :null=>false})
   -> 0.0009s
-- execute("UPDATE users set silenced = blocked")
   -> 0.0007s
-- execute("UPDATE site_settings SET name='notify_mods_when_user_silenced' where name='notify_mods_when_user_blocked'")
   -> 0.0006s
-- execute("UPDATE site_settings SET name='auto_silence_fast_typers_on_first_post' where name='auto_block_fast_typers_on_first_post'")
   -> 0.0003s
-- execute("UPDATE site_settings SET name='auto_silence_fast_typers_max_trust_level' where name='auto_block_fast_typers_max_trust_level'")
   -> 0.0002s
-- execute("UPDATE site_settings SET name='auto_silence_first_post_regex' where name='auto_block_first_post_regex'")
   -> 0.0002s
-- execute("UPDATE site_settings SET name='num_spam_flags_to_silence_new_user' where name='num_spam_flags_to_block_new_user'")
   -> 0.0002s
-- execute("UPDATE site_settings SET name='num_users_to_silence_new_user' where name='num_users_to_block_new_user'")
   -> 0.0002s
-- execute("UPDATE site_settings SET name='num_tl3_flags_to_silence_new_user' where name='num_tl3_flags_to_block_new_user'")
   -> 0.0002s
-- execute("UPDATE site_settings SET name='num_tl3_users_to_silence_new_user' where name='num_tl3_users_to_block_new_user'")
   -> 0.0002s
== 20171110174413 RenameBlockedSilence: migrated (0.0045s) ====================

== 20171113175414 AddSilencedTillToUsers: migrating ===========================
-- add_column(:users, :silenced_till, :timestamp, {:null=>true})
   -> 0.0008s
-- execute("UPDATE users\n  SET silenced_till = CURRENT_TIMESTAMP + INTERVAL '1000 YEAR'\n  WHERE silenced\n")
   -> 0.0005s
== 20171113175414 AddSilencedTillToUsers: migrated (0.0019s) ==================

== 20171113214725 AddTimeReadToUserVisits: migrating ==========================
-- add_column(:user_visits, :time_read, :integer, {:null=>false, :default=>0})
   -> 0.0010s
-- add_index(:user_visits, [:user_id, :visited_at, :time_read])
   -> 0.0021s
== 20171113214725 AddTimeReadToUserVisits: migrated (0.0036s) =================

== 20171115170858 AddMailinglistMirrorToCategories: migrating =================
-- add_column(:categories, :mailinglist_mirror, :boolean, {:default=>false, :null=>false})
   -> 0.0013s
== 20171115170858 AddMailinglistMirrorToCategories: migrated (0.0022s) ========

== 20171123200157 AddTrustLevelLocksToUsers: migrating ========================
-- add_column(:users, :group_locked_trust_level, :integer, {:null=>true})
   -> 0.0008s
-- add_column(:users, :manual_locked_trust_level, :integer, {:null=>true})
   -> 0.0007s
-- execute("UPDATE users SET manual_locked_trust_level = trust_level WHERE trust_level_locked\n")
   -> 0.0005s
-- execute("UPDATE users SET group_locked_trust_level = x.tl\nFROM users AS u\nINNER JOIN (\n  SELECT gu.user_id, MAX(g.grant_trust_level) AS tl\n  FROM group_users AS gu\n  INNER JOIN groups AS g ON gu.group_id = g.id\n    WHERE g.grant_trust_level IS NOT NULL\n  GROUP BY gu.user_id\n) AS x ON x.user_id = u.id\nWHERE users.id = u.id\n")
   -> 0.0012s
== 20171123200157 AddTrustLevelLocksToUsers: migrated (0.0044s) ===============

== 20171128172835 RenameClickedTopicIdToSearchResultId: migrating =============
-- rename_column(:search_logs, :clicked_topic_id, :search_result_id)
   -> 0.0014s
-- add_column(:search_logs, :search_result_type, :integer, {:null=>true})
   -> 0.0004s
-- execute("UPDATE search_logs SET search_result_type = 1 WHERE search_result_id is NOT NULL")
   -> 0.0007s
== 20171128172835 RenameClickedTopicIdToSearchResultId: migrated (0.0032s) ====

== 20171213105921 ReplaceInviteMailerTranslationOverride: migrating ===========
-- execute("UPDATE translation_overrides\nSET value = replace(value, '%{invitee_name}', '%{inviter_name}')\nWHERE translation_key IN ('invite_mailer.subject_template', 'invite_mailer.text_body_template',\n                          'invite_forum_mailer.subject_template', 'invite_forum_mailer.text_body_template',\n                          'custom_invite_mailer.subject_template', 'custom_invite_mailer.text_body_template',\n                          'custom_invite_forum_mailer.subject_template', 'custom_invite_forum_mailer.text_body_template');\n")
   -> 0.0004s
== 20171213105921 ReplaceInviteMailerTranslationOverride: migrated (0.0010s) ==

== 20171214040346 AddEmailToTwitterUserInfo: migrating ========================
-- add_column(:twitter_user_infos, :email, :string, {:limit=>1000, :null=>true})
   -> 0.0005s
== 20171214040346 AddEmailToTwitterUserInfo: migrated (0.0009s) ===============

== 20171220181249 ChangeUserEmailsPrimaryIndex: migrating =====================
-- remove_index(:user_emails, [:user_id, :primary])
   -> 0.0024s
-- add_index(:user_emails, [:user_id, :primary], {:unique=>true, :where=>"\"primary\""})
   -> 0.0027s
== 20171220181249 ChangeUserEmailsPrimaryIndex: migrated (0.0057s) ============

== 20171228122834 ReplaceBlockedSilenceTranslation: migrating =================
-- execute("UPDATE translation_overrides\nSET translation_key = 'system_messages.silenced_by_staff.subject_template'\nWHERE translation_key = 'system_messages.blocked_by_staff.subject_template'\nAND NOT EXISTS (SELECT 1 FROM translation_overrides WHERE translation_key = 'system_messages.silenced_by_staff.subject_template');\n")
   -> 0.0007s
-- execute("UPDATE translation_overrides\nSET translation_key = 'system_messages.silenced_by_staff.text_body_template'\nWHERE translation_key = 'system_messages.blocked_by_staff.text_body_template'\nAND NOT EXISTS (SELECT 1 FROM translation_overrides WHERE translation_key = 'system_messages.silenced_by_staff.text_body_template');\n")
   -> 0.0005s
== 20171228122834 ReplaceBlockedSilenceTranslation: migrated (0.0022s) ========

== 20180109222722 CreateUserSecondFactors: migrating ==========================
-- create_table(:user_second_factors)
   -> 0.0062s
== 20180109222722 CreateUserSecondFactors: migrated (0.0070s) =================

== 20180111092141 AddIndexesToEmailLogs: migrating ============================
-- add_index(:email_logs, :post_id)
   -> 0.0017s
-- add_index(:email_logs, :topic_id)
   -> 0.0013s
== 20180111092141 AddIndexesToEmailLogs: migrated (0.0037s) ===================

== 20180118215249 CreateThemeSettings: migrating ==============================
-- create_table(:theme_settings)
   -> 0.0058s
== 20180118215249 CreateThemeSettings: migrated (0.0066s) =====================

== 20180125185717 AddLockedByToPosts: migrating ===============================
-- add_column(:posts, :locked_by_id, :integer)
   -> 0.0007s
== 20180125185717 AddLockedByToPosts: migrated (0.0020s) ======================

== 20180127005644 RemoveOldGaSiteSettings: migrating ==========================
-- execute("DELETE FROM site_settings WHERE name = 'ga_tracking_code'")
   -> 0.0005s
-- execute("DELETE FROM site_settings WHERE name = 'ga_domain_name'")
   -> 0.0003s
== 20180127005644 RemoveOldGaSiteSettings: migrated (0.0015s) =================

== 20180131052859 RenamePrivatePersonal: migrating ============================
-- execute("UPDATE site_settings SET name='min_personal_message_post_length' where name='min_private_message_post_length'")
   -> 0.0004s
-- execute("UPDATE site_settings SET name='min_personal_message_title_length' where name='min_private_message_title_length'")
   -> 0.0005s
-- execute("UPDATE site_settings SET name='enable_personal_messages' where name='enable_private_messages'")
   -> 0.0004s
-- execute("UPDATE site_settings SET name='enable_personal_email_messages' where name='enable_private_email_messages'")
   -> 0.0004s
-- execute("UPDATE site_settings SET name='personal_email_time_window_seconds' where name='private_email_time_window_seconds'")
   -> 0.0004s
-- execute("UPDATE site_settings SET name='max_personal_messages_per_day' where name='max_private_messages_per_day'")
   -> 0.0002s
-- execute("UPDATE site_settings SET name='default_email_personal_messages' where name='default_email_private_messages'")
   -> 0.0003s
== 20180131052859 RenamePrivatePersonal: migrated (0.0037s) ===================

== 20180207161422 AddSkippedCreatedAtUserIdIndexOnEmailLogs: migrating ========
-- execute("CREATE INDEX idx_email_logs_user_created_filtered ON email_logs(user_id, created_at) WHERE skipped = 'f'")
   -> 0.0031s
== 20180207161422 AddSkippedCreatedAtUserIdIndexOnEmailLogs: migrated (0.0041s)

== 20180207163946 CreateCategoryTagStats: migrating ===========================
-- create_table(:category_tag_stats)
   -> 0.0054s
-- add_index(:category_tag_stats, [:category_id, :topic_count])
   -> 0.0016s
-- add_index(:category_tag_stats, [:category_id, :tag_id], {:unique=>true})
   -> 0.0015s
== 20180207163946 CreateCategoryTagStats: migrated (0.0094s) ==================

== 20180221215641 AddSuppressFromLatestToCategories: migrating ================
-- add_column(:categories, :suppress_from_latest, :boolean, {:default=>false})
   -> 0.0009s
-- execute("UPDATE categories SET suppress_from_latest = suppress_from_homepage\n")
   -> 0.0003s
== 20180221215641 AddSuppressFromLatestToCategories: migrated (0.0017s) =======

== 20180223041147 FixGoogleOauth2PromptDataType: migrating ====================
-- execute("UPDATE site_settings\nSET data_type=8\nWHERE data_type=7\nAND name='google_oauth2_prompt'\n")
   -> 0.0002s
== 20180223041147 FixGoogleOauth2PromptDataType: migrated (0.0005s) ===========

== 20180223222415 RemoveCensoredPatternSiteSetting: migrating =================
-- execute("INSERT INTO user_histories\n  (action, acting_user_id, subject, previous_value,\n   new_value, admin_only, created_at, updated_at)\nSELECT 3, -1, 'censored_pattern', value, '', true, now(), now()\n  FROM site_settings\n WHERE name = 'censored_pattern'\n   AND value != ''\n")
   -> 0.0005s
-- execute("DELETE FROM site_settings WHERE name = 'censored_pattern'")
   -> 0.0003s
== 20180223222415 RemoveCensoredPatternSiteSetting: migrated (0.0013s) ========

== 20180308071922 DropRaiseReadOnlyFunction: migrating ========================
== 20180308071922 DropRaiseReadOnlyFunction: migrated (0.0007s) ===============

== 20180309014014 AddPrivateKeyToRemoteTheme: migrating =======================
-- add_column(:remote_themes, :private_key, :text)
   -> 0.0003s
== 20180309014014 AddPrivateKeyToRemoteTheme: migrated (0.0007s) ==============

== 20180316092939 AddExternalProfileAndCardBackgroundUrlToSingleSignOnRecord: migrating
-- add_column(:single_sign_on_records, :external_profile_background_url, :string)
   -> 0.0004s
-- add_column(:single_sign_on_records, :external_card_background_url, :string)
   -> 0.0005s
== 20180316092939 AddExternalProfileAndCardBackgroundUrlToSingleSignOnRecord: migrated (0.0014s)

== 20180316165104 CreateSharedDrafts: migrating ===============================
-- create_table(:shared_drafts, {:id=>false})
   -> 0.0011s
-- add_index(:shared_drafts, :topic_id, {:unique=>true})
   -> 0.0024s
== 20180316165104 CreateSharedDrafts: migrated (0.0046s) ======================

== 20180320190339 CreateWebCrawlerRequests: migrating =========================
-- create_table(:web_crawler_requests)
   -> 0.0053s
-- add_index(:web_crawler_requests, [:date, :user_agent], {:unique=>true})
   -> 0.0026s
== 20180320190339 CreateWebCrawlerRequests: migrated (0.0087s) ================

== 20180323154826 CreateTagGroupPermissions: migrating ========================
-- create_table(:tag_group_permissions)
   -> 0.0093s
== 20180323154826 CreateTagGroupPermissions: migrated (0.0101s) ===============

== 20180323161659 AddIdToSharedDrafts: migrating ==============================
-- add_column(:shared_drafts, :id, :primary_key)
   -> 0.0071s
== 20180323161659 AddIdToSharedDrafts: migrated (0.0081s) =====================

== 20180328180317 AddCategoryIndexToSharedDrafts: migrating ===================
-- add_index(:shared_drafts, :category_id)
   -> 0.0044s
== 20180328180317 AddCategoryIndexToSharedDrafts: migrated (0.0053s) ==========

== 20180331125522 AddMinimumRequiredTagsToCategories: migrating ===============
-- add_column(:categories, :minimum_required_tags, :integer, {:default=>0})
   -> 0.0009s
== 20180331125522 AddMinimumRequiredTagsToCategories: migrated (0.0014s) ======

== 20180419095326 AddUploadIdToUserExports: migrating =========================
-- add_column(:user_exports, :upload_id, :integer)
   -> 0.0002s
== 20180419095326 AddUploadIdToUserExports: migrated (0.0005s) ================

== 20180420141134 RemoveStaffTagsSetting: migrating ===========================
-- execute("INSERT INTO tag_group_permissions\n      (tag_group_id, group_id, permission_type, created_at, updated_at)\n      SELECT id, 0,\n             1,\n             now(), now()\n        FROM tag_groups\n       WHERE id NOT IN (SELECT tag_group_id FROM tag_group_permissions)")
   -> 0.0007s
-- execute("SELECT value FROM site_settings WHERE name = 'staff_tags'")
   -> 0.0002s
-- execute("DELETE FROM site_settings WHERE name = 'staff_tags'")
   -> 0.0001s
== 20180420141134 RemoveStaffTagsSetting: migrated (0.0029s) ==================

== 20180425152503 DropUserCardBadgeColumns: migrating =========================
-- execute("INSERT INTO user_custom_fields (user_id, name, value, created_at, updated_at)\n      SELECT user_id, 'card_image_badge_id', card_image_badge_id, now(), now()\n        FROM user_profiles\n       WHERE card_image_badge_id IS NOT NULL\n         AND user_id NOT IN (\n            SELECT user_id\n              FROM user_custom_fields\n             WHERE name = 'card_image_badge_id'\n         )")
   -> 0.0005s
== 20180425152503 DropUserCardBadgeColumns: migrated (0.0009s) ================

== 20180425185749 CreatePushSubscription: migrating ===========================
-- create_table(:push_subscriptions)
   -> 0.0047s
== 20180425185749 CreatePushSubscription: migrated (0.0056s) ==================

== 20180508142711 RemoveInvitePassthroughHours: migrating =====================
-- execute("DELETE FROM site_settings WHERE name = 'invite_passthrough_hours'")
   -> 0.0005s
== 20180508142711 RemoveInvitePassthroughHours: migrated (0.0012s) ============

== 20180514133440 AddPmTopicCountToTags: migrating ============================
-- add_column(:tags, :pm_topic_count, :integer, {:null=>false, :default=>0})
   -> 0.0008s
== 20180514133440 AddPmTopicCountToTags: migrated (0.0012s) ===================

== 20180519053933 DeleteConfirmOldEmailTemplateOverrides: migrating ===========
-- execute("DELETE FROM translation_overrides WHERE translation_key = 'user_notifications.confirm_old_email.title'")
   -> 0.0002s
-- execute("DELETE FROM translation_overrides WHERE translation_key = 'user_notifications.confirm_old_email.subject_template'")
   -> 0.0001s
-- execute("DELETE FROM translation_overrides WHERE translation_key = 'user_notifications.confirm_old_email.text_body_template'")
   -> 0.0002s
== 20180519053933 DeleteConfirmOldEmailTemplateOverrides: migrated (0.0008s) ==

== 20180521175611 ChangeIndexesTopicViewItem: migrating =======================
-- remove_index(:topic_views, {:column=>[:ip_address, :topic_id], :name=>:ip_address_topic_id_topic_views, :unique=>true})
   -> 0.0027s
-- remove_index(:topic_views, {:column=>[:user_id, :topic_id], :name=>:user_id_topic_id_topic_views, :unique=>true})
   -> 0.0021s
== 20180521175611 ChangeIndexesTopicViewItem: migrated (0.0052s) ==============

== 20180521184439 AllowNullIpSearchLog: migrating =============================
-- change_column(:search_logs, :ip_address, :inet)
   -> 0.0004s
== 20180521184439 AllowNullIpSearchLog: migrated (0.0025s) ====================

== 20180521190040 AllowNullIpTopicLinkClick: migrating ========================
-- change_column(:topic_link_clicks, :ip_address, :inet)
   -> 0.0003s
== 20180521190040 AllowNullIpTopicLinkClick: migrated (0.0013s) ===============

== 20180521191418 AllowNullIpUserProfileView: migrating =======================
-- change_column(:user_profile_views, :ip_address, :inet)
   -> 0.0044s
-- remove_index(:user_profile_views, {:column=>[:viewed_at, :ip_address, :user_profile_id], :name=>:unique_profile_view_ip, :unique=>true})
   -> 0.0027s
-- remove_index(:user_profile_views, {:column=>[:viewed_at, :user_id, :user_profile_id], :name=>:unique_profile_view_user, :unique=>true})
   -> 0.0024s
-- add_index(:user_profile_views, [:viewed_at, :user_id, :ip_address, :user_profile_id], {:name=>:unique_profile_view_user_or_ip, :unique=>true})
   -> 0.0018s
== 20180521191418 AllowNullIpUserProfileView: migrated (0.0126s) ==============

== 20180607095414 MigrateDisableEmails: migrating =============================
-- execute("UPDATE site_settings SET data_type = 7 WHERE name = 'disable_emails';")
   -> 0.0003s
-- execute("UPDATE site_settings SET value = 'yes' WHERE value = 't' AND name = 'disable_emails';")
   -> 0.0005s
-- execute("UPDATE site_settings SET value = 'no' WHERE value = 'f' AND name = 'disable_emails';")
   -> 0.0002s
== 20180607095414 MigrateDisableEmails: migrated (0.0016s) ====================

== 20180621013807 AddIndexTopicIdPercentRankOnPosts: migrating ================
-- add_index(:posts, [:topic_id, :percent_rank], {:order=>{:percent_rank=>:asc}})
   -> 0.0028s
== 20180621013807 AddIndexTopicIdPercentRankOnPosts: migrated (0.0033s) =======

== 20180706054922 DropKeyColumnFromThemes: migrating ==========================
-- add_column(:user_options, :theme_ids, :integer, {:array=>true, :null=>false, :default=>[]})
   -> 0.0012s
-- execute("UPDATE user_options AS uo\n       SET theme_ids = (\n         SELECT array_agg(themes.id)\n         FROM themes\n         INNER JOIN user_options\n         ON themes.key = user_options.theme_key\n         WHERE user_options.user_id = uo.user_id\n       ) WHERE uo.theme_key IN (SELECT key FROM themes)")
   -> 0.0009s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\n       SELECT 'default_theme_id', 3, id, now(), now()\n         FROM themes\n       WHERE key = (SELECT value FROM site_settings WHERE name = 'default_theme_key')")
   -> 0.0009s
-- execute("DELETE FROM site_settings WHERE name = 'default_theme_key'")
   -> 0.0003s
== 20180706054922 DropKeyColumnFromThemes: migrated (0.0044s) =================

== 20180710075119 AddIndexTopicIdSortOrderOnPosts: migrating ==================
-- add_index(:posts, [:topic_id, :sort_order], {:order=>{:sort_order=>:asc}})
   -> 0.0026s
== 20180710075119 AddIndexTopicIdSortOrderOnPosts: migrated (0.0031s) =========

== 20180710172959 DisallowMultiLevelsThemeComponents: migrating ===============
-- execute("\n      UPDATE themes\n      SET user_selectable = false\n      FROM child_themes\n      WHERE themes.id = child_themes.child_theme_id\n      AND themes.user_selectable = true\n    ")
   -> 0.0004s
== 20180710172959 DisallowMultiLevelsThemeComponents: migrated (0.0020s) ======

== 20180716062012 AddIndexUserIdOnUserSecondFactors: migrating ================
-- add_index(:user_second_factors, :user_id)
   -> 0.0016s
== 20180716062012 AddIndexUserIdOnUserSecondFactors: migrated (0.0021s) =======

== 20180716062405 AddNavigateToFirstPostAfterReadToCategories: migrating ======
-- add_column(:categories, :navigate_to_first_post_after_read, :bool, {:null=>false, :default=>false})
   -> 0.0011s
== 20180716062405 AddNavigateToFirstPostAfterReadToCategories: migrated (0.0015s)

== 20180716072125 AlterBounceKeyOnEmailLogs: migrating ========================
-- change_column(:email_logs, :bounce_key, "uuid USING bounce_key::uuid")
   -> 0.0163s
== 20180716072125 AlterBounceKeyOnEmailLogs: migrated (0.0172s) ===============

== 20180716140323 AddUniqIpOrUserIdTopicViews: migrating ======================
-- index_exists?(:topic_views, [:user_id, :ip_address, :topic_id], {:name=>:uniq_ip_or_user_id_topic_views})
   -> 0.0023s
-- add_index(:topic_views, [:user_id, :ip_address, :topic_id], {:name=>:uniq_ip_or_user_id_topic_views, :unique=>true, :algorithm=>:concurrently})
   -> 0.0022s
== 20180716140323 AddUniqIpOrUserIdTopicViews: migrated (0.0052s) =============

== 20180716200103 AddThemeKeyDefault: migrating ===============================
-- column_exists?(:themes, :key)
   -> 0.0023s
-- execute("ALTER TABLE themes ALTER COLUMN key SET DEFAULT 'deprecated'")
   -> 0.0005s
== 20180716200103 AddThemeKeyDefault: migrated (0.0036s) ======================

== 20180717025038 DropNotNullIpAddressOnTopicViews: migrating =================
-- change_column_null(:topic_views, :ip_address, true)
   -> 0.0004s
== 20180717025038 DropNotNullIpAddressOnTopicViews: migrated (0.0009s) ========

== 20180717084758 AlterReplyKeyOnEmailLogs: migrating =========================
-- change_column(:email_logs, :reply_key, "uuid USING reply_key::uuid")
   -> 0.0271s
== 20180717084758 AlterReplyKeyOnEmailLogs: migrated (0.0282s) ================

== 20180718062728 CreatePostReplyKeys: migrating ==============================
-- create_table(:post_reply_keys)
   -> 0.0033s
-- add_index(:post_reply_keys, :reply_key, {:unique=>true})
   -> 0.0840s
-- execute("DELETE FROM email_logs\nWHERE id IN (\n  SELECT id\n  FROM (\n    SELECT\n      id,\n      ROW_NUMBER() OVER(PARTITION BY post_id, user_id ORDER BY id DESC) AS row_num\n    FROM email_logs\n  ) t\n  WHERE t.row_num > 1\n)\n")
   -> 0.0011s
-- execute("INSERT INTO post_reply_keys(\n  user_id, post_id, reply_key, updated_at, created_at\n) SELECT\n    user_id,\n    post_id,\n    reply_key,\n    updated_at,\n    created_at\n  FROM email_logs\n  WHERE reply_key IS NOT NULL AND post_id IS NOT NULL AND user_id IS NOT NULL\n")
   -> 0.0002s
-- add_index(:post_reply_keys, [:user_id, :post_id], {:unique=>true})
   -> 0.0016s
== 20180718062728 CreatePostReplyKeys: migrated (0.0926s) =====================

== 20180719103905 AlterIndexesOnEmailLogs: migrating ==========================
-- remove_index(:email_logs, {:name=>"index_email_logs_on_user_id_and_created_at", :column=>[:user_id, :created_at]})
   -> 0.0035s
-- add_index(:email_logs, :user_id)
   -> 0.0015s
-- remove_index(:email_logs, [:skipped, :created_at])
   -> 0.0047s
-- add_index(:email_logs, [:skipped, :bounced, :created_at])
   -> 0.0023s
== 20180719103905 AlterIndexesOnEmailLogs: migrated (0.0128s) =================

== 20180720054856 CreateSkippedEmailLogs: migrating ===========================
-- create_table(:skipped_email_logs)
   -> 0.0075s
-- add_index(:skipped_email_logs, :created_at)
   -> 0.0019s
-- add_index(:skipped_email_logs, :user_id)
   -> 0.0016s
-- add_index(:skipped_email_logs, :post_id)
   -> 0.0038s
-- add_index(:skipped_email_logs, :reason_type)
   -> 0.0030s
-- execute("INSERT INTO skipped_email_logs (\n  email_type,\n  to_address,\n  user_id,\n  post_id,\n  reason_type,\n  custom_reason,\n  created_at,\n  updated_at\n) SELECT\n    email_type,\n    to_address,\n    user_id,\n    post_id,\n    1,\n    skipped_reason,\n    created_at,\n    updated_at\n  FROM email_logs\n  WHERE skipped IS TRUE\n")
   -> 0.0010s
== 20180720054856 CreateSkippedEmailLogs: migrated (0.0217s) ==================

== 20180724070554 DropTopicIdOnEmailLogs: migrating ===========================
-- remove_index(:email_logs, :topic_id)
   -> 0.0064s
== 20180724070554 DropTopicIdOnEmailLogs: migrated (0.0072s) ==================

== 20180727042448 DropReplyKeySkippedSkippedReasonFromEmailLogs: migrating ====
-- remove_index(:email_logs, [:skipped, :bounced, :created_at])
   -> 0.0041s
-- remove_index(:email_logs, {:name=>"idx_email_logs_user_created_filtered"})
   -> 0.0003s
-- add_index(:email_logs, [:user_id, :created_at])
   -> 0.0024s
== 20180727042448 DropReplyKeySkippedSkippedReasonFromEmailLogs: migrated (0.0078s)

== 20180729092926 RemoveTrackExternalRightClicks: migrating ===================
-- execute("DELETE FROM site_settings WHERE name = 'track_external_right_clicks'")
   -> 0.0004s
== 20180729092926 RemoveTrackExternalRightClicks: migrated (0.0011s) ==========

== 20180803085321 AddIndexEmailLogsOnBounced: migrating =======================
-- add_index(:email_logs, :bounced)
   -> 0.0031s
-- remove_index(:email_logs, [:user_id, :created_at])
   -> 0.0057s
== 20180803085321 AddIndexEmailLogsOnBounced: migrated (0.0096s) ==============

== 20180812150839 AddUserApiKeysLastUsedAt: migrating =========================
-- add_column(:user_api_keys, :last_used_at, :timestamp, {:null=>false, :default=>#<Proc:0x00007f9765a05ce0 /var/www/discourse/db/migrate/20180812150839_add_user_api_keys_last_used_at.rb:9 (lambda)>, :precision=>nil})
   -> 0.0012s
== 20180812150839 AddUserApiKeysLastUsedAt: migrated (0.0017s) ================

== 20180813074843 AddComponentToThemes: migrating =============================
-- add_column(:themes, :component, :boolean, {:null=>false, :default=>false})
   -> 0.0013s
-- execute("\n      UPDATE themes\n      SET component = true, color_scheme_id = NULL, user_selectable = false\n      WHERE id IN (SELECT child_theme_id FROM child_themes)\n    ")
   -> 0.0005s
-- execute("\n      UPDATE site_settings\n      SET value = -1\n      WHERE name = 'default_theme_id' AND value::integer IN (SELECT id FROM themes WHERE component)\n    ")
   -> 0.0003s
-- execute("\n      DELETE FROM child_themes\n      WHERE parent_theme_id IN (SELECT id FROM themes WHERE component)\n    ")
   -> 0.0002s
== 20180813074843 AddComponentToThemes: migrated (0.0033s) ====================

== 20180820073549 CreatePollsTables: migrating ================================
-- create_table(:polls)
   -> 0.0094s
-- add_index(:polls, [:post_id, :name], {:unique=>true})
   -> 0.0025s
-- create_table(:poll_options)
   -> 0.0089s
-- add_index(:poll_options, [:poll_id, :digest], {:unique=>true})
   -> 0.0025s
-- create_table(:poll_votes, {:id=>false})
   -> 0.0069s
-- add_index(:poll_votes, [:poll_id, :poll_option_id, :user_id], {:unique=>true})
   -> 0.0013s
== 20180820073549 CreatePollsTables: migrated (0.0327s) =======================

== 20180820080623 MigratePollsData: migrating =================================
-- execute("INSERT INTO post_custom_fields (name, value, post_id, created_at, updated_at)\nSELECT 'has_polls', 't', post_id, MIN(created_at), MIN(updated_at)\n  FROM polls\n GROUP BY post_id\n")
   -> 0.0008s
== 20180820080623 MigratePollsData: migrated (0.0029s) ========================

== 20180827053514 AddFilesizeToOptimizedImages: migrating =====================
-- add_column(:optimized_images, :filesize, :integer)
   -> 0.0004s
-- add_column(:uploads, :thumbnail_width, :integer)
   -> 0.0005s
-- add_column(:uploads, :thumbnail_height, :integer)
   -> 0.0005s
== 20180827053514 AddFilesizeToOptimizedImages: migrated (0.0024s) ============

== 20180828065005 ChangeBounceScoreToFloat: migrating =========================
-- change_column(:user_stats, :bounce_score, :float)
   -> 0.0053s
== 20180828065005 ChangeBounceScoreToFloat: migrated (0.0060s) ================

== 20180831182853 AddBranchToRemoteTheme: migrating ===========================
-- add_column(:remote_themes, :branch, :string)
   -> 0.0007s
== 20180831182853 AddBranchToRemoteTheme: migrated (0.0015s) ==================

== 20180907075713 AddLastErrorTextToRemoteThemes: migrating ===================
-- add_column(:remote_themes, :last_error_text, :text)
   -> 0.0005s
== 20180907075713 AddLastErrorTextToRemoteThemes: migrated (0.0012s) ==========

== 20180913200027 RemoveEnforceSquareEmoji: migrating =========================
-- execute("DELETE FROM site_settings WHERE name = 'enforce_square_emoji'")
   -> 0.0002s
== 20180913200027 RemoveEnforceSquareEmoji: migrated (0.0007s) ================

== 20180916195601 MigrateS3BackupSiteSettings: migrating ======================
-- execute("UPDATE site_settings\nSET name      = 'backup_location',\n    data_type = 7,\n    value     = 's3'\nWHERE name = 'enable_s3_backups' AND value = 't';\n")
   -> 0.0005s
-- execute("DELETE\nFROM site_settings\nWHERE name = 'enable_s3_backups';\n")
   -> 0.0003s
== 20180916195601 MigrateS3BackupSiteSettings: migrated (0.0015s) =============

== 20180917024729 RemoveSuperfluousColumns: migrating =========================
== 20180917024729 RemoveSuperfluousColumns: migrated (0.1002s) ================

== 20180917034056 RemoveSuperfluousTables: migrating ==========================
== 20180917034056 RemoveSuperfluousTables: migrated (0.0058s) =================

== 20180920023559 AddExternalDetailsToUserFields: migrating ===================
-- add_column(:user_fields, :external_name, :string)
   -> 0.0006s
-- add_column(:user_fields, :external_type, :string)
   -> 0.0003s
== 20180920023559 AddExternalDetailsToUserFields: migrated (0.0017s) ==========

== 20180920042415 CreateUserUploads: migrating ================================
-- create_table(:user_uploads)
   -> 0.0041s
-- add_index(:user_uploads, [:upload_id, :user_id], {:unique=>true})
   -> 0.0020s
-- execute("INSERT INTO user_uploads(upload_id, user_id, created_at)\nSELECT id, user_id, COALESCE(created_at, current_timestamp)\nFROM uploads\nWHERE user_id IS NOT NULL\n")
   -> 0.0007s
== 20180920042415 CreateUserUploads: migrated (0.0077s) =======================

== 20180927135248 CreateJavascriptCaches: migrating ===========================
-- create_table(:javascript_caches)
   -> 0.0109s
== 20180927135248 CreateJavascriptCaches: migrated (0.0119s) ==================

== 20180928105835 AddIndexToTags: migrating ===================================
-- execute("UPDATE tags\nSET name = name || id\nWHERE EXISTS(SELECT * FROM tags t WHERE lower(t.name) = lower(tags.name) AND t.id < tags.id)\n")
   -> 0.0005s
-- add_index(:tags, "lower(name)", {:unique=>true})
   -> 0.0025s
== 20180928105835 AddIndexToTags: migrated (0.0038s) ==========================

== 20181005084357 AddSsoProviderSecretsToSiteSettings: migrating ==============
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nSELECT 'sso_provider_secrets', 8, '*|' || value, now(), now()\nFROM site_settings WHERE name = 'sso_secret'\nAND EXISTS (\n  SELECT 1 FROM site_settings WHERE name = 'enable_sso_provider' AND value = 't'\n)\n")
   -> 0.0005s
== 20181005084357 AddSsoProviderSecretsToSiteSettings: migrated (0.0011s) =====

== 20181005144357 AddViaEmailToInvites: migrating =============================
-- add_column(:invites, :via_email, :boolean, {:default=>false, :null=>false})
   -> 0.0013s
== 20181005144357 AddViaEmailToInvites: migrated (0.0021s) ====================

== 20181010150631 AddHideProfileAndPresenceToUserOptions: migrating ===========
-- add_column(:user_options, :hide_profile_and_presence, :boolean, {:default=>false, :null=>false})
   -> 0.0014s
== 20181010150631 AddHideProfileAndPresenceToUserOptions: migrated (0.0021s) ==

== 20181012123001 DropGroupLockedTrustLevelFromUser: migrating ================
== 20181012123001 DropGroupLockedTrustLevelFromUser: migrated (0.0039s) =======

== 20181031165343 AddFlagStatsToUser: migrating ===============================
-- add_column(:user_stats, :flags_agreed, :integer, {:default=>0, :null=>false})
   -> 0.0017s
-- add_column(:user_stats, :flags_disagreed, :integer, {:default=>0, :null=>false})
   -> 0.0012s
-- add_column(:user_stats, :flags_ignored, :integer, {:default=>0, :null=>false})
   -> 0.0010s
-- execute("UPDATE user_stats\nSET flags_agreed = x.flags_agreed,\n  flags_disagreed = x.flags_disagreed,\n  flags_ignored = x.flags_ignored\nFROM (\n  SELECT u.id AS user_id,\n    SUM(CASE WHEN pa.disagreed_at IS NOT NULL THEN 1 ELSE 0 END) as flags_disagreed,\n    SUM(CASE WHEN pa.agreed_at IS NOT NULL THEN 1 ELSE 0 END) as flags_agreed,\n    SUM(CASE WHEN pa.deferred_at IS NOT NULL THEN 1 ELSE 0 END) as flags_ignored\n  FROM post_actions AS pa\n  INNER JOIN users AS u ON u.id = pa.user_id\n  WHERE pa.post_action_type_id IN (3, 4, 8, 7, 10)\n  AND pa.user_id > 0\n  GROUP BY u.id\n) AS x\nWHERE x.user_id = user_stats.user_id\n")
   -> 0.0012s
== 20181031165343 AddFlagStatsToUser: migrated (0.0060s) ======================

== 20181108115009 CreateUserAssociatedAccounts: migrating =====================
-- create_table(:user_associated_accounts)
   -> 0.0063s
-- add_index(:user_associated_accounts, [:provider_name, :provider_uid], {:unique=>true, :name=>"associated_accounts_provider_uid"})
   -> 0.0014s
-- add_index(:user_associated_accounts, [:provider_name, :user_id], {:unique=>true, :name=>"associated_accounts_provider_user"})
   -> 0.0023s
== 20181108115009 CreateUserAssociatedAccounts: migrated (0.0108s) ============

== 20181112013117 MigrateUrlSiteSettings: migrating ===========================
== 20181112013117 MigrateUrlSiteSettings: migrated (0.0010s) ==================

== 20181120140552 MigrateCorporateSiteSettings: migrating =====================
-- execute("UPDATE site_settings\nSET name      = 'company_name'\nWHERE name = 'company_full_name';\n")
   -> 0.0005s
-- execute("DELETE\nFROM site_settings\nWHERE name IN ('company_short_name', 'company_domain');\n")
   -> 0.0005s
== 20181120140552 MigrateCorporateSiteSettings: migrated (0.0018s) ============

== 20181128140547 MigrateFacebookUserInfo: migrating ==========================
-- execute("INSERT INTO user_associated_accounts (\n  provider_name,\n  provider_uid,\n  user_id,\n  info,\n  last_used,\n  created_at,\n  updated_at\n) SELECT\n  'facebook',\n  facebook_user_id,\n  user_id,\n  json_build_object('email', email, 'first_name', first_name, 'last_name', last_name, 'name', name),\n  updated_at,\n  created_at,\n  updated_at\nFROM facebook_user_infos\n")
   -> 0.0009s
== 20181128140547 MigrateFacebookUserInfo: migrated (0.0017s) =================

== 20181129094518 AddNotNullMinimumRequiredTagsOnCategories: migrating ========
-- change_column_null(:categories, :minimum_required_tags, false, 0)
   -> 0.0052s
== 20181129094518 AddNotNullMinimumRequiredTagsOnCategories: migrated (0.0060s)

== 20181204123042 AddUploadedMetaIdToCategories: migrating ====================
-- add_column(:categories, :uploaded_meta_id, :integer)
   -> 0.0008s
== 20181204123042 AddUploadedMetaIdToCategories: migrated (0.0017s) ===========

== 20181204193426 CreateJoinTableWebHooksTags: migrating ======================
-- create_join_table(:web_hooks, :tags)
   -> 0.0041s
== 20181204193426 CreateJoinTableWebHooksTags: migrated (0.0055s) =============

== 20181207141900 MigrateTwitterUserInfo: migrating ===========================
-- execute("INSERT INTO user_associated_accounts (\n  provider_name,\n  provider_uid,\n  user_id,\n  info,\n  last_used,\n  created_at,\n  updated_at\n) SELECT\n  'twitter',\n  twitter_user_id,\n  user_id,\n  json_build_object('email', email, 'nickname', screen_name),\n  updated_at,\n  created_at,\n  updated_at\nFROM twitter_user_infos\n")
   -> 0.0010s
== 20181207141900 MigrateTwitterUserInfo: migrated (0.0017s) ==================

== 20181210122522 RemoveNotNullUserAssociatedAccountUser: migrating ===========
-- change_column_null(:user_associated_accounts, :user_id, true)
   -> 0.0003s
== 20181210122522 RemoveNotNullUserAssociatedAccountUser: migrated (0.0007s) ==

== 20181218071253 AddEtagToUploads: migrating =================================
-- add_column(:uploads, :etag, :string)
   -> 0.0004s
-- add_index(:uploads, [:etag])
   -> 0.0022s
-- add_column(:optimized_images, :etag, :string)
   -> 0.0006s
-- add_index(:optimized_images, [:etag])
   -> 0.0032s
== 20181218071253 AddEtagToUploads: migrated (0.0075s) ========================

== 20181220115844 AddSmtpAndImapToGroups: migrating ===========================
-- add_column(:groups, :smtp_server, :string)
   -> 0.0007s
-- add_column(:groups, :smtp_port, :integer)
   -> 0.0004s
-- add_column(:groups, :smtp_ssl, :boolean)
   -> 0.0003s
-- add_column(:groups, :imap_server, :string)
   -> 0.0002s
-- add_column(:groups, :imap_port, :integer)
   -> 0.0004s
-- add_column(:groups, :imap_ssl, :boolean)
   -> 0.0005s
-- add_column(:groups, :imap_mailbox_name, :string, {:default=>"", :null=>false})
   -> 0.0011s
-- add_column(:groups, :imap_uid_validity, :integer, {:default=>0, :null=>false})
   -> 0.0007s
-- add_column(:groups, :imap_last_uid, :integer, {:default=>0, :null=>false})
   -> 0.0008s
-- add_column(:groups, :email_username, :string)
   -> 0.0005s
-- add_column(:groups, :email_password, :string)
   -> 0.0004s
== 20181220115844 AddSmtpAndImapToGroups: migrated (0.0070s) ==================

== 20181221121805 CreateThemeTranslationOverride: migrating ===================
-- create_table(:theme_translation_overrides)
   -> 0.0097s
== 20181221121805 CreateThemeTranslationOverride: migrated (0.0105s) ==========

== 20190103051737 AddVersionToOptimizedImages: migrating ======================
-- add_column(:optimized_images, :version, :integer)
   -> 0.0003s
== 20190103051737 AddVersionToOptimizedImages: migrated (0.0007s) =============

== 20190103060819 ForceRebakeOnPostsWithImages: migrating =====================
-- execute("UPDATE posts SET baked_version = 0\nWHERE id IN (SELECT post_id FROM post_uploads)\n")
   -> 0.0008s
== 20190103060819 ForceRebakeOnPostsWithImages: migrated (0.0012s) ============

== 20190103065652 RemoveUploadedMetaIdFromCategory: migrating =================
== 20190103065652 RemoveUploadedMetaIdFromCategory: migrated (0.0020s) ========

== 20190103160533 CreateReviewables: migrating ================================
-- create_table(:reviewables)
   -> 0.0075s
-- add_index(:reviewables, :status)
   -> 0.0019s
-- add_index(:reviewables, [:status, :type])
   -> 0.0013s
-- add_index(:reviewables, [:status, :score])
   -> 0.0013s
-- add_index(:reviewables, [:type, :target_id], {:unique=>true})
   -> 0.0017s
== 20190103160533 CreateReviewables: migrated (0.0149s) =======================

== 20190103185626 CreateReviewableUsers: migrating ============================
== 20190103185626 CreateReviewableUsers: migrated (0.0009s) ===================

== 20190106041015 AddTopicIdIndexToUserHistories: migrating ===================
-- add_index(:user_histories, [:topic_id, :target_user_id, :action])
   -> 0.0019s
== 20190106041015 AddTopicIdIndexToUserHistories: migrated (0.0026s) ==========

== 20190108110630 AddTextSizeKeyToUserOptions: migrating ======================
-- add_column(:user_options, :text_size_key, :integer, {:null=>false, :default=>0})
   -> 0.0011s
== 20190108110630 AddTextSizeKeyToUserOptions: migrated (0.0017s) =============

== 20190110201340 RemoveGooglePlusFromShareLinksSiteSetting: migrating ========
-- execute("UPDATE site_settings\nSET value = array_to_string(array_remove(regexp_split_to_array(value, '\\|'), 'google+'), '|')\nWHERE name = 'share_links'\n")
   -> 0.0004s
== 20190110201340 RemoveGooglePlusFromShareLinksSiteSetting: migrated (0.0009s)

== 20190110212005 CreateReviewableHistories: migrating ========================
-- create_table(:reviewable_histories)
   -> 0.0063s
-- add_index(:reviewable_histories, :reviewable_id)
   -> 0.0016s
-- execute("INSERT INTO reviewable_histories (\n  reviewable_id,\n  reviewable_history_type,\n  status,\n  created_by_id,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  0,\n  0,\n  r.created_by_id,\n  r.created_at,\n  r.created_at\nFROM reviewables AS r\nWHERE r.type = 'ReviewableUser'\n")
   -> 0.0012s
-- execute("INSERT INTO reviewable_histories (\n  reviewable_id,\n  reviewable_history_type,\n  status,\n  created_by_id,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  1,\n  1,\n  r.created_by_id,\n  r.created_at,\n  r.created_at\nFROM reviewables AS r\nWHERE r.status = 1\n  AND r.type = 'ReviewableUser'\n")
   -> 0.0004s
== 20190110212005 CreateReviewableHistories: migrated (0.0109s) ===============

== 20190111170824 MigrateReviewableQueuedPosts: migrating =====================
-- execute("INSERT INTO reviewables (\n  type,\n  status,\n  created_by_id,\n  reviewable_by_moderator,\n  topic_id,\n  category_id,\n  payload,\n  created_at,\n  updated_at\n)\nSELECT 'ReviewableQueuedPost',\n  state - 1,\n  user_id,\n  true,\n  topic_id,\n  NULLIF(REGEXP_REPLACE(post_options->>'category', '[^0-9]+', '', 'g'), '')::int,\n  json_build_object(\n    'old_queued_post_id', id,\n    'raw', raw\n  )::jsonb || post_options::jsonb,\n  created_at,\n  updated_at\nFROM queued_posts\n")
   -> 0.0010s
-- execute("INSERT INTO reviewable_histories (\n  reviewable_id,\n  reviewable_history_type,\n  status,\n  created_by_id,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  0,\n  0,\n  qp.user_id,\n  qp.created_at,\n  qp.created_at\nFROM reviewables AS r\nINNER JOIN queued_posts AS qp ON qp.id = (payload->>'old_queued_post_id')::int\n")
   -> 0.0009s
-- execute("INSERT INTO reviewable_histories (\n  reviewable_id,\n  reviewable_history_type,\n  status,\n  created_by_id,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  1,\n  1,\n  qp.approved_by_id,\n  qp.approved_at,\n  qp.approved_at\nFROM reviewables AS r\nINNER JOIN queued_posts AS qp ON qp.id = (payload->>'old_queued_post_id')::int\nWHERE qp.state = 2\n")
   -> 0.0004s
-- execute("INSERT INTO reviewable_histories (\n  reviewable_id,\n  reviewable_history_type,\n  status,\n  created_by_id,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  1,\n  2,\n  qp.rejected_by_id,\n  qp.rejected_at,\n  qp.rejected_at\nFROM reviewables AS r\nINNER JOIN queued_posts AS qp ON qp.id = (payload->>'old_queued_post_id')::int\nWHERE qp.state = 3\n")
   -> 0.0003s
== 20190111170824 MigrateReviewableQueuedPosts: migrated (0.0033s) ============

== 20190111183409 AddImapFieldsToIncomingEmails: migrating ====================
-- add_column(:incoming_emails, :imap_uid_validity, :integer)
   -> 0.0007s
-- add_column(:incoming_emails, :imap_uid, :integer)
   -> 0.0005s
-- add_column(:incoming_emails, :imap_sync, :boolean)
   -> 0.0007s
-- add_index(:incoming_emails, :imap_sync)
   -> 0.0019s
== 20190111183409 AddImapFieldsToIncomingEmails: migrated (0.0048s) ===========

== 20190117191606 CreateGroupRequests: migrating ==============================
-- create_table(:group_requests)
   -> 0.0048s
-- add_index(:group_requests, :group_id)
   -> 0.0016s
-- add_index(:group_requests, :user_id)
   -> 0.0013s
== 20190117191606 CreateGroupRequests: migrated (0.0085s) =====================

== 20190121202656 RemoveUserActionPending: migrating ==========================
-- execute("DELETE FROM user_actions WHERE action_type = 14")
   -> 0.0006s
== 20190121202656 RemoveUserActionPending: migrated (0.0011s) =================

== 20190121203023 DropQueuedPostIdFromUserActions: migrating ==================
-- remove_column(:user_actions, :queued_post_id)
   -> 0.0005s
== 20190121203023 DropQueuedPostIdFromUserActions: migrated (0.0012s) =========

== 20190122132732 AddFieldsToRemoteThemes: migrating ==========================
-- add_column(:remote_themes, :authors, :string)
   -> 0.0007s
-- add_column(:remote_themes, :theme_version, :string)
   -> 0.0005s
-- add_column(:remote_themes, :minimum_discourse_version, :string)
   -> 0.0005s
-- add_column(:remote_themes, :maximum_discourse_version, :string)
   -> 0.0005s
== 20190122132732 AddFieldsToRemoteThemes: migrated (0.0033s) =================

== 20190123171817 DropQueuedPosts: migrating ==================================
-- drop_table(:queued_posts)
   -> 0.0012s
== 20190123171817 DropQueuedPosts: migrated (0.0019s) =========================

== 20190125103246 CopyLoginRequiredWelcomeMessage: migrating ==================
-- execute("INSERT INTO translation_overrides (locale, translation_key, value, created_at, updated_at)\nSELECT locale, 'login_required.welcome_message_invite_only', value, created_at, updated_at\nFROM translation_overrides\nWHERE translation_key = 'login_required.welcome_message'\nAND NOT EXISTS (SELECT 1 FROM translation_overrides WHERE translation_key = 'login_required.welcome_message_invite_only');\n")
   -> 0.0005s
== 20190125103246 CopyLoginRequiredWelcomeMessage: migrated (0.0011s) =========

== 20190125153345 AddTextSizeSeqToUserOption: migrating =======================
-- add_column(:user_options, :text_size_seq, :integer, {:null=>false, :default=>0})
   -> 0.0010s
== 20190125153345 AddTextSizeSeqToUserOption: migrated (0.0018s) ==============

== 20190130013015 AddIndexOnUserIdToSingleSignOnRecords: migrating ============
-- add_index(:single_sign_on_records, :user_id)
   -> 0.0024s
== 20190130013015 AddIndexOnUserIdToSingleSignOnRecords: migrated (0.0031s) ===

== 20190130163000 CreateReviewableScores: migrating ===========================
-- create_table(:reviewable_scores)
   -> 0.0039s
-- add_index(:reviewable_scores, :reviewable_id)
   -> 0.0023s
-- add_index(:reviewable_scores, :user_id)
   -> 0.0012s
== 20190130163000 CreateReviewableScores: migrated (0.0079s) ==================

== 20190130163001 MigrateReviewableFlaggedPosts: migrating ====================
-- execute("INSERT INTO reviewables (\n  type,\n  status,\n  topic_id,\n  reviewable_by_moderator,\n  category_id,\n  payload,\n  target_type,\n  target_id,\n  target_created_by_id,\n  score,\n  created_by_id,\n  created_at,\n  updated_at\n)\nSELECT 'ReviewableFlaggedPost',\n  CASE\n    WHEN MAX(pa.agreed_at) IS NOT NULL THEN 1\n    WHEN MAX(pa.disagreed_at) IS NOT NULL THEN 2\n    WHEN MAX(pa.deferred_at) IS NOT NULL THEN 3\n    WHEN MAX(pa.deleted_at) IS NOT NULL THEN 4\n    ELSE 0\n  END,\n  t.id,\n  true,\n  t.category_id,\n  json_build_object(),\n  'Post',\n  pa.post_id,\n  p.user_id,\n  0,\n  MAX(pa.user_id),\n  MIN(pa.created_at),\n  MAX(pa.updated_at)\nFROM post_actions AS pa\nINNER JOIN posts AS p ON pa.post_id = p.id\nINNER JOIN topics AS t ON t.id = p.topic_id\nINNER JOIN post_action_types AS pat ON pat.id = pa.post_action_type_id\nWHERE pat.is_flag\n  AND pat.name_key <> 'notify_user'\n  AND p.user_id > 0\n  AND p.deleted_at IS NULL\n  AND t.deleted_at IS NULL\nGROUP BY pa.post_id,\n  t.id,\n  t.category_id,\n  p.user_id\n")
   -> 0.0014s
-- execute("INSERT INTO reviewable_scores (\n  reviewable_id,\n  user_id,\n  reviewable_score_type,\n  status,\n  score,\n  meta_topic_id,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  pa.user_id,\n  pa.post_action_type_id,\n  CASE\n    WHEN pa.agreed_at IS NOT NULL THEN 1\n    WHEN pa.disagreed_at IS NOT NULL THEN 2\n    WHEN pa.deferred_at IS NOT NULL THEN 3\n    WHEN pa.deleted_at IS NOT NULL THEN 3\n    ELSE 0\n  END,\n  1.0 +\n  (CASE\n    WHEN pau.moderator OR pau.admin THEN 5.0\n    ELSE pau.trust_level\n  END) +\n  (CASE\n    WHEN pa.staff_took_action THEN 5.0\n    ELSE 0.0\n  END),\n  rp.topic_id,\n  pa.created_at,\n  pa.updated_at\nFROM post_actions AS pa\nINNER JOIN post_action_types AS pat ON pat.id = pa.post_action_type_id\nINNER JOIN users AS pau ON pa.user_id = pau.id\nINNER JOIN reviewables AS r ON pa.post_id = r.target_id\nLEFT OUTER JOIN posts AS rp ON rp.id = pa.related_post_id\nWHERE pat.is_flag\n  AND r.type = 'ReviewableFlaggedPost'\n")
   -> 0.0010s
-- execute("UPDATE reviewables\nSET score = COALESCE((\n  SELECT sum(score)\n  FROM reviewable_scores AS rs\n  WHERE rs.reviewable_id = reviewables.id\n    AND rs.status = 0\n), 0),\npotential_spam = EXISTS(\n  SELECT 1\n  FROM reviewable_scores AS rs\n  WHERE rs.reviewable_id = reviewables.id\n    AND rs.reviewable_score_type = 8\n)\n")
   -> 0.0007s
== 20190130163001 MigrateReviewableFlaggedPosts: migrated (0.0040s) ===========

== 20190205104116 DropUnusedAuthTables: migrating =============================
== 20190205104116 DropUnusedAuthTables: migrated (0.0008s) ====================

== 20190208144706 DropUnusedAuthTablesAgain: migrating ========================
== 20190208144706 DropUnusedAuthTablesAgain: migrated (0.0040s) ===============

== 20190215204033 AddScoreBonusToPostActionTypes: migrating ===================
-- add_column(:post_action_types, :score_bonus, :float, {:default=>0.0, :null=>false})
   -> 0.0007s
== 20190215204033 AddScoreBonusToPostActionTypes: migrated (0.0012s) ==========

== 20190225133654 AddIgnoredUsersTable: migrating =============================
-- create_table(:ignored_users)
   -> 0.0038s
-- add_index(:ignored_users, [:user_id, :ignored_user_id], {:unique=>true})
   -> 0.0016s
-- add_index(:ignored_users, [:ignored_user_id, :user_id], {:unique=>true})
   -> 0.0015s
== 20190225133654 AddIgnoredUsersTable: migrated (0.0074s) ====================

== 20190227150413 MigrateInstagramUserInfo: migrating =========================
-- execute("INSERT INTO user_associated_accounts (\n  provider_name,\n  provider_uid,\n  user_id,\n  info,\n  last_used,\n  created_at,\n  updated_at\n)\n  SELECT\n    'instagram',\n    instagram_user_id,\n    user_id,\n    json_build_object('nickname', screen_name),\n    updated_at,\n    created_at,\n    updated_at\n  FROM instagram_user_infos\n  ORDER BY updated_at DESC\nON CONFLICT (provider_name, provider_uid)\nDO NOTHING\n")
   -> 0.0006s
== 20190227150413 MigrateInstagramUserInfo: migrated (0.0014s) ================

== 20190227210035 AddMissingTopicIdSiteSettings: migrating ====================
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nSELECT 'welcome_topic_id', 3, topic_id, created_at, updated_at\nFROM topic_custom_fields\nWHERE name = 'is_welcome_topic' AND value = 'true' AND NOT EXISTS(\n    SELECT 1\n    FROM site_settings\n    WHERE name = 'welcome_topic_id'\n  )\nLIMIT 1\n")
   -> 0.0008s
-- execute("DELETE FROM topic_custom_fields\nWHERE name = 'is_welcome_topic' AND value = 'true'\n")
   -> 0.0003s
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nSELECT 'lounge_welcome_topic_id', 3, id, created_at, updated_at\nFROM topics\nWHERE title = 'Welcome to the Lounge' AND NOT EXISTS(\n    SELECT 1\n    FROM site_settings\n    WHERE name = 'lounge_welcome_topic_id'\n  ) AND category_id IN (\n  SELECT value::INT\n  FROM site_settings\n  WHERE name = 'lounge_category_id'\n)\nORDER BY created_at\nLIMIT 1\n")
   -> 0.0005s
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nSELECT 'admin_quick_start_topic_id', 3, id, created_at, updated_at\nFROM topics\nWHERE title IN ('READ ME FIRST: Admin Quick Start Guide', 'READ ME FIRST: Getting Started') AND NOT EXISTS(\n    SELECT 1\n    FROM site_settings\n    WHERE name = 'admin_quick_start_topic_id'\n  )\nORDER BY created_at\nLIMIT 1\n")
   -> 0.0009s
== 20190227210035 AddMissingTopicIdSiteSettings: migrated (0.0033s) ===========

== 20190304170931 MigrateUncategorizedCategoryName: migrating =================
-- execute("INSERT INTO translation_overrides (locale, translation_key, value, created_at, updated_at)\nSELECT 'en', 'uncategorized_category_name', name, now(), now()\nFROM categories\nWHERE id = -1 AND LOWER(name) <> 'uncategorized';\n")
   -> 0.0007s
== 20190304170931 MigrateUncategorizedCategoryName: migrated (0.0013s) ========

== 20190306154335 MigrateGoogleUserInfo: migrating ============================
-- execute("INSERT INTO user_associated_accounts (\n  provider_name,\n  provider_uid,\n  user_id,\n  info,\n  last_used,\n  created_at,\n  updated_at\n) SELECT\n  'google_oauth2',\n  google_user_id,\n  user_id,\n  json_build_object('email', email, 'first_name', first_name, 'last_name', last_name, 'name', name),\n  updated_at,\n  created_at,\n  updated_at\nFROM google_user_infos\n")
   -> 0.0007s
== 20190306154335 MigrateGoogleUserInfo: migrated (0.0014s) ===================

== 20190306184409 AddReviewableScoreToTopics: migrating =======================
-- add_column(:topics, :reviewable_score, :float, {:null=>false, :default=>0})
   -> 0.0016s
-- execute("UPDATE topics\nSET reviewable_score = sums.score\nFROM (\n   SELECT SUM(r.score) AS score,\n     r.topic_id\n   FROM reviewables AS r\n   WHERE r.status = 0\n   GROUP BY r.topic_id\n) AS sums\nWHERE sums.topic_id = topics.id\n")
   -> 0.0008s
== 20190306184409 AddReviewableScoreToTopics: migrated (0.0036s) ==============

== 20190312181641 MigrateEmailUserOptions: migrating ==========================
-- add_column(:user_options, :email_level, :integer, {:default=>1, :null=>false})
   -> 0.0012s
-- add_column(:user_options, :email_messages_level, :integer, {:default=>0, :null=>false})
   -> 0.0005s
-- execute("UPDATE user_options\nSET email_level = CASE\n  WHEN email_direct AND email_always\n  THEN 0\n  WHEN email_direct AND email_always IS NOT TRUE\n  THEN 1\n  ELSE 2\nEND,\nemail_messages_level = CASE\n  WHEN email_private_messages\n  THEN 0\n  ELSE 2\nEND\n")
   -> 0.0003s
== 20190312181641 MigrateEmailUserOptions: migrated (0.0025s) =================

== 20190312194528 DropEmailUserOptionsColumns: migrating ======================
== 20190312194528 DropEmailUserOptionsColumns: migrated (0.0058s) =============

== 20190313134642 MigrateDefaultUserEmailOptions: migrating ===================
-- execute("DELETE from site_settings where name in ('default_email_always', 'default_email_direct', 'default_email_personal_messages')")
   -> 0.0004s
== 20190313134642 MigrateDefaultUserEmailOptions: migrated (0.0021s) ==========

== 20190313171338 AddIndexesToReviewables: migrating ==========================
-- remove_index(:reviewables, :status)
   -> 0.0033s
-- add_index(:reviewables, [:status, :created_at])
   -> 0.0029s
== 20190313171338 AddIndexesToReviewables: migrated (0.0074s) =================

== 20190313205652 RenameModeratorSiteSettings: migrating ======================
-- execute("UPDATE site_settings SET name = 'moderators_view_emails' WHERE name = 'show_email_on_profile'")
   -> 0.0003s
-- execute("UPDATE site_settings SET name = 'moderators_create_categories' WHERE name = 'allow_moderators_to_create_categories'")
   -> 0.0002s
== 20190313205652 RenameModeratorSiteSettings: migrated (0.0009s) =============

== 20190314082018 AddSearchPriorityToCategories: migrating ====================
-- add_column(:categories, :search_priority, :integer, {:default=>0})
   -> 0.0010s
-- add_index(:categories, :search_priority)
   -> 0.0018s
== 20190314082018 AddSearchPriorityToCategories: migrated (0.0036s) ===========

== 20190314144755 AddSummarizedAtColumnToIgnoredUsersTable: migrating =========
-- add_column(:ignored_users, :summarized_at, :timestamp, {:precision=>nil})
   -> 0.0007s
== 20190314144755 AddSummarizedAtColumnToIgnoredUsersTable: migrated (0.0014s)

== 20190315170411 AddIndexToReviewableHistories: migrating ====================
-- add_index(:reviewable_histories, :created_by_id)
   -> 0.0019s
== 20190315170411 AddIndexToReviewableHistories: migrated (0.0025s) ===========

== 20190315174428 MigrateFlagHistory: migrating ===============================
-- execute("INSERT INTO reviewable_histories (\n  reviewable_id,\n  reviewable_history_type,\n  status,\n  created_by_id,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  0,\n  0,\n  r.created_by_id,\n  r.created_at,\n  r.created_at\nFROM reviewables AS r\nWHERE r.type = 'ReviewableFlaggedPost'\n  AND (\n    NOT EXISTS(\n      SELECT 1\n      FROM reviewable_histories AS rh\n      WHERE rh.reviewable_id = r.id\n        AND rh.reviewable_history_type = 0\n    )\n  )\n")
   -> 0.0007s
-- execute("INSERT INTO reviewable_histories (\n  reviewable_id,\n  reviewable_history_type,\n  status,\n  created_by_id,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  1,\n  1,\n  pa.agreed_by_id,\n  pa.agreed_at,\n  pa.agreed_at\nFROM reviewables AS r\nINNER JOIN post_actions AS pa ON pa.post_id = r.target_id\nWHERE r.type = 'ReviewableFlaggedPost'\n  AND pa.agreed_at IS NOT NULL\n  AND pa.agreed_by_id IS NOT NULL\n")
   -> 0.0009s
-- execute("INSERT INTO reviewable_histories (\n  reviewable_id,\n  reviewable_history_type,\n  status,\n  created_by_id,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  1,\n  2,\n  pa.disagreed_by_id,\n  pa.disagreed_at,\n  pa.disagreed_at\nFROM reviewables AS r\nINNER JOIN post_actions AS pa ON pa.post_id = r.target_id\nWHERE r.type = 'ReviewableFlaggedPost'\n  AND pa.disagreed_at IS NOT NULL\n  AND pa.disagreed_by_id IS NOT NULL\n")
   -> 0.0005s
-- execute("INSERT INTO reviewable_histories (\n  reviewable_id,\n  reviewable_history_type,\n  status,\n  created_by_id,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  1,\n  3,\n  pa.deferred_by_id,\n  pa.deferred_at,\n  pa.deferred_at\nFROM reviewables AS r\nINNER JOIN post_actions AS pa ON pa.post_id = r.target_id\nWHERE r.type = 'ReviewableFlaggedPost'\n  AND pa.deferred_at IS NOT NULL\n  AND pa.deferred_by_id IS NOT NULL\n")
   -> 0.0008s
-- execute("INSERT INTO reviewable_histories (\n  reviewable_id,\n  reviewable_history_type,\n  status,\n  created_by_id,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  1,\n  4,\n  pa.deleted_by_id,\n  pa.deleted_at,\n  pa.deleted_at\nFROM reviewables AS r\nINNER JOIN post_actions AS pa ON pa.post_id = r.target_id\nWHERE r.type = 'ReviewableFlaggedPost'\n  AND pa.deleted_at IS NOT NULL\n  AND pa.deleted_by_id IS NOT NULL\n")
   -> 0.0004s
== 20190315174428 MigrateFlagHistory: migrated (0.0043s) ======================

== 20190320091323 AddIndexPostActionTypeIdDisagreedAtOnPostActions: migrating =
-- add_index(:post_actions, [:post_action_type_id, :disagreed_at], {:where=>"(disagreed_at IS NULL)"})
   -> 0.0025s
== 20190320091323 AddIndexPostActionTypeIdDisagreedAtOnPostActions: migrated (0.0035s)

== 20190320104640 RemoveS3ForcePathStyle: migrating ===========================
-- execute("DELETE FROM site_settings WHERE name = 's3_force_path_style'")
   -> 0.0003s
== 20190320104640 RemoveS3ForcePathStyle: migrated (0.0007s) ==================

== 20190321072029 AddIndexMethodEnabledOnUserSecondFactors: migrating =========
-- add_index(:user_second_factors, [:method, :enabled])
   -> 0.0017s
== 20190321072029 AddIndexMethodEnabledOnUserSecondFactors: migrated (0.0025s)

== 20190322152347 ForceRebakeOnPostsWithLightboxes: migrating =================
-- execute("UPDATE posts SET baked_version = 0\nWHERE cooked LIKE '%lightbox-wrapper%'\n")
   -> 0.0005s
== 20190322152347 ForceRebakeOnPostsWithLightboxes: migrated (0.0010s) ========

== 20190325162154 MakeSiteSettingsUnique: migrating ===========================
-- execute("DELETE\nFROM site_settings a USING site_settings b\nWHERE a.id < b.id AND a.name = b.name\n")
   -> 0.0003s
-- add_index(:site_settings, [:name], {:unique=>true})
   -> 0.0022s
== 20190325162154 MakeSiteSettingsUnique: migrated (0.0036s) ==================

== 20190326123708 AddIndexCreatedAtOnSearchLogs: migrating ====================
-- add_index(:search_logs, :created_at)
   -> 0.0026s
== 20190326123708 AddIndexCreatedAtOnSearchLogs: migrated (0.0033s) ===========

== 20190327090918 AddExpiringAtColumnToIgnoredUsersTable: migrating ===========
-- add_column(:ignored_users, :expiring_at, :timestamp, {:precision=>nil})
   -> 0.0006s
== 20190327090918 AddExpiringAtColumnToIgnoredUsersTable: migrated (0.0012s) ==

== 20190327205525 RequireReviewableScores: migrating ==========================
-- execute("INSERT INTO reviewable_scores (\n  reviewable_id,\n  user_id,\n  reviewable_score_type,\n  score,\n  status,\n  created_at,\n  updated_at\n)\nSELECT r.id,\n  -1,\n  9,\n  1.0,\n  r.status,\n  r.created_at,\n  r.created_at\nFROM reviewables AS r\nWHERE r.type IN ('ReviewableQueuedPost', 'ReviewableUser')\n")
   -> 0.0005s
-- execute("UPDATE reviewables SET score = (\n  SELECT COALESCE(SUM(score), 0)\n  FROM reviewable_scores\n  WHERE reviewable_scores.reviewable_id = reviewables.id\n)\n")
   -> 0.0003s
== 20190327205525 RequireReviewableScores: migrated (0.0019s) =================

== 20190402024053 AddFirstUnreadAtToUserStats: migrating ======================
-- column_exists?(:user_stats, :first_unread_at)
   -> 0.0019s
-- add_column(:user_stats, :first_unread_at, :timestamp, {:null=>false, :default=>#<Proc:0x00007f97651d01d8 /var/www/discourse/db/migrate/20190402024053_add_first_unread_at_to_user_stats.rb:13 (lambda)>, :precision=>nil})
   -> 0.0006s
-- execute("UPDATE user_stats us\nSET first_unread_at = u.created_at\nFROM users u\nWHERE u.id = us.user_id\n")
   -> 0.0007s
-- index_exists?(:topics, [:updated_at, :visible, :highest_staff_post_number, :highest_post_number, :category_id, :created_at, :id], {:name=>"index_topics_on_updated_at_public"})
   -> 0.0034s
-- add_index(:topics, [:updated_at, :visible, :highest_staff_post_number, :highest_post_number, :category_id, :created_at, :id], {:algorithm=>:concurrently, :name=>"index_topics_on_updated_at_public", :where=>"(topics.archetype <> 'private_message') AND (topics.deleted_at IS NULL)"})
   -> 0.0020s
== 20190402024053 AddFirstUnreadAtToUserStats: migrated (0.0099s) =============

== 20190402142223 DisableInviteOnlySso: migrating =============================
-- execute("UPDATE site_settings SET value = 'f'\nWHERE name = 'invite_only'\n  AND EXISTS(SELECT 1 FROM site_settings WHERE name = 'enable_sso' AND value = 't')\n")
   -> 0.0004s
== 20190402142223 DisableInviteOnlySso: migrated (0.0014s) ====================

== 20190403180142 AddAllowGlobalTagsToCategories: migrating ===================
-- add_column(:categories, :allow_global_tags, :boolean, {:default=>false, :null=>false})
   -> 0.0018s
== 20190403180142 AddAllowGlobalTagsToCategories: migrated (0.0029s) ==========

== 20190403202001 FixReviewableUsers: migrating ===============================
-- execute("UPDATE reviewables\nSET payload = json_build_object(\n  'username', u.username,\n  'name', u.name,\n  'email', ue.email\n)::jsonb\nFROM reviewables AS r\nLEFT OUTER JOIN users AS u ON u.id = r.target_id\nLEFT OUTER JOIN user_emails AS ue ON ue.user_id = u.id AND ue.primary\nWHERE r.id = reviewables.id\n  AND r.type = 'ReviewableUser'\n")
   -> 0.0010s
== 20190403202001 FixReviewableUsers: migrated (0.0016s) ======================

== 20190405044140 AddIndexActionTypeCreatedAtOnUserActions: migrating =========
-- add_index(:user_actions, [:action_type, :created_at])
   -> 0.0023s
== 20190405044140 AddIndexActionTypeCreatedAtOnUserActions: migrated (0.0032s)

== 20190408072550 AddIndexIdBakedVersionOnPosts: migrating ====================
-- add_index(:posts, [:id, :baked_version], {:order=>{:id=>:desc}, :where=>"(deleted_at IS NULL)"})
   -> 0.0020s
== 20190408072550 AddIndexIdBakedVersionOnPosts: migrated (0.0027s) ===========

== 20190408082101 AddSearchDataIndexes: migrating =============================
-- add_index(:topic_search_data, [:topic_id, :version, :locale])
   -> 0.0028s
-- add_index(:post_search_data, [:post_id, :version, :locale])
   -> 0.0022s
== 20190408082101 AddSearchDataIndexes: migrated (0.0060s) ====================

== 20190409054736 AddIndexForRebakeOldOnPosts: migrating ======================
-- index_exists?(:posts, :index_posts_on_id_and_baked_version)
   -> 0.0057s
-- index_exists?(:posts, :index_for_rebake_old)
   -> 0.0059s
-- add_index(:posts, :id, {:order=>{:id=>:desc}, :where=>"(baked_version IS NULL OR baked_version < 2) AND deleted_at IS NULL", :name=>:index_for_rebake_old, :algorithm=>:concurrently})
   -> 0.0032s
== 20190409054736 AddIndexForRebakeOldOnPosts: migrated (0.0160s) =============

== 20190410055459 AddIndexReplyIdOnPostReplies: migrating =====================
-- add_index(:post_replies, :reply_id)
   -> 0.0020s
== 20190410055459 AddIndexReplyIdOnPostReplies: migrated (0.0029s) ============

== 20190410102915 RemoveIgnoreUserEnabledSiteSetting: migrating ===============
-- execute("DELETE FROM site_settings WHERE name = 'ignore_user_enabled'")
   -> 0.0003s
== 20190410102915 RemoveIgnoreUserEnabledSiteSetting: migrated (0.0008s) ======

== 20190410122835 AddMissingUploadsIndexToPostCustomFields: migrating =========
-- add_index(:post_custom_fields, :post_id, {:unique=>true, :where=>"name = 'missing uploads'"})
   -> 0.0032s
== 20190410122835 AddMissingUploadsIndexToPostCustomFields: migrated (0.0040s)

== 20190411121312 AddTitleCountModeToUserOptions: migrating ===================
-- add_column(:user_options, :title_count_mode_key, :integer, {:null=>false, :default=>0})
   -> 0.0015s
== 20190411121312 AddTitleCountModeToUserOptions: migrated (0.0021s) ==========

== 20190411144545 AddReasonToReviewableScores: migrating ======================
-- add_column(:reviewable_scores, :reason, :string)
   -> 0.0023s
== 20190411144545 AddReasonToReviewableScores: migrated (0.0031s) =============

== 20190412161430 AddCreatedByIndexToReviewables: migrating ===================
-- add_index(:reviewables, [:topic_id, :status, :created_by_id])
   -> 0.0021s
== 20190412161430 AddCreatedByIndexToReviewables: migrated (0.0032s) ==========

== 20190414162753 RenamePostNotices: migrating ================================
-- add_index(:post_custom_fields, :post_id, {:unique=>true, :name=>"index_post_custom_fields_on_notice_type", :where=>"name = 'notice_type'"})
   -> 0.0027s
-- add_index(:post_custom_fields, :post_id, {:unique=>true, :name=>"index_post_custom_fields_on_notice_args", :where=>"name = 'notice_args'"})
   -> 0.0019s
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nSELECT 'new_user_notice_tl', data_type, value, created_at, updated_at\nFROM site_settings WHERE name = 'min_post_notice_tl'\nUNION\nSELECT 'returning_user_notice_tl', data_type, value, created_at, updated_at\nFROM site_settings WHERE name = 'min_post_notice_tl'\n")
   -> 0.0006s
-- execute("DELETE FROM site_settings WHERE name = 'min_post_notice_tl'")
   -> 0.0002s
-- execute("UPDATE post_custom_fields SET name = 'notice_type', value = 'new_user'       WHERE name = 'post_notice_type' AND value = 'first'")
   -> 0.0005s
-- execute("UPDATE post_custom_fields SET name = 'notice_type', value = 'returning_user' WHERE name = 'post_notice_type' AND value = 'returning'")
   -> 0.0002s
-- execute("UPDATE post_custom_fields SET name = 'notice_args'                           WHERE name = 'post_notice_time'")
   -> 0.0002s
-- execute("DELETE FROM user_custom_fields\nWHERE (name = 'notice_type' OR name = 'notice_args')\n  AND user_id IN (SELECT id FROM users WHERE id <= 0 OR staged = true\n                  UNION\n                  SELECT user_id FROM user_custom_fields ucf WHERE name = 'master_id')\n")
   -> 0.0004s
== 20190414162753 RenamePostNotices: migrated (0.0079s) =======================

== 20190417135049 MigrateNativeAppBannerSiteSetting: migrating ================
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\n             SELECT 'native_app_install_banner_android', 5, value, now(), now()\n             FROM site_settings\n             WHERE name = 'native_app_install_banner'")
   -> 0.0003s
-- execute("UPDATE site_settings\n             SET name = 'native_app_install_banner_ios'\n             WHERE name = 'native_app_install_banner'")
   -> 0.0002s
== 20190417135049 MigrateNativeAppBannerSiteSetting: migrated (0.0012s) =======

== 20190417203622 AddReviewGroupToCategory: migrating =========================
-- add_column(:categories, :reviewable_by_group_id, :integer, {:null=>true})
   -> 0.0006s
-- add_index(:categories, :reviewable_by_group_id)
   -> 0.0029s
-- add_index(:reviewables, :reviewable_by_group_id)
   -> 0.0017s
== 20190417203622 AddReviewGroupToCategory: migrated (0.0062s) ================

== 20190418113814 AddUniqueIndexToGroupRequests: migrating ====================
-- execute("DELETE FROM group_requests WHERE id NOT IN (SELECT MIN(id) FROM group_requests GROUP BY group_id, user_id)")
   -> 0.0006s
-- add_index(:group_requests, [:group_id, :user_id], {:unique=>true})
   -> 0.0015s
== 20190418113814 AddUniqueIndexToGroupRequests: migrated (0.0027s) ===========

== 20190423112954 IncreaseThemeFieldNameLength: migrating =====================
-- change_column(:theme_fields, :name, :string, {:limit=>255})
   -> 0.0008s
== 20190423112954 IncreaseThemeFieldNameLength: migrated (0.0016s) ============

== 20190424065841 AddPostImageIndexes: migrating ==============================
-- execute("DELETE FROM post_custom_fields f\nWHERE name = 'large_images' AND id > (\n  SELECT MIN(f2.id) FROM post_custom_fields f2\n    WHERE f2.post_id = f.post_id AND f2.name = f.name\n)\n")
   -> 0.0008s
-- add_index(:post_custom_fields, [:post_id], {:name=>"post_custom_field_large_images_idx", :unique=>true, :where=>"name = 'large_images'"})
   -> 0.0020s
-- execute("DELETE FROM post_custom_fields f\nWHERE name = 'broken_images' AND id > (\n  SELECT MIN(f2.id) FROM post_custom_fields f2\n    WHERE f2.post_id = f.post_id AND f2.name = f.name\n)\n")
   -> 0.0007s
-- add_index(:post_custom_fields, [:post_id], {:name=>"post_custom_field_broken_images_idx", :unique=>true, :where=>"name = 'broken_images'"})
   -> 0.0025s
-- execute("DELETE FROM post_custom_fields f\nWHERE name = 'downloaded_images' AND id > (\n  SELECT MIN(f2.id) FROM post_custom_fields f2\n    WHERE f2.post_id = f.post_id AND f2.name = f.name\n)\n")
   -> 0.0005s
-- add_index(:post_custom_fields, [:post_id], {:name=>"post_custom_field_downloaded_images_idx", :unique=>true, :where=>"name = 'downloaded_images'"})
   -> 0.0015s
== 20190424065841 AddPostImageIndexes: migrated (0.0092s) =====================

== 20190426011148 AddUploadForeignKeysToUserProfiles: migrating ===============
-- add_column(:user_profiles, :profile_background_upload_id, :integer, {:null=>true})
   -> 0.0007s
-- add_column(:user_profiles, :card_background_upload_id, :integer, {:null=>true})
   -> 0.0005s
-- add_foreign_key(:user_profiles, :uploads, {:column=>:profile_background_upload_id})
   -> 0.0016s
-- add_foreign_key(:user_profiles, :uploads, {:column=>:card_background_upload_id})
   -> 0.0014s
-- execute("UPDATE user_profiles up1\nSET profile_background_upload_id = u.id\nFROM user_profiles up2\nINNER JOIN uploads u ON u.url = up2.profile_background\nWHERE up1.user_id = up2.user_id\n")
   -> 0.0003s
-- execute("UPDATE user_profiles up1\nSET card_background_upload_id = u.id\nFROM user_profiles up2\nINNER JOIN uploads u ON u.url = up2.card_background\nWHERE up1.user_id = up2.user_id\n")
   -> 0.0003s
== 20190426011148 AddUploadForeignKeysToUserProfiles: migrated (0.0087s) ======

== 20190426074404 AddMissingUserDestroyerIndexes: migrating ===================
-- add_index(:user_actions, [:target_user_id], {:where=>"target_user_id IS NOT NULL"})
   -> 0.0035s
-- add_index(:post_actions, [:user_id])
   -> 0.0022s
-- add_index(:user_uploads, [:user_id, :upload_id])
   -> 0.0034s
-- add_index(:user_auth_token_logs, [:user_id])
   -> 0.0030s
-- add_index(:topic_links, [:user_id])
   -> 0.0028s
== 20190426074404 AddMissingUserDestroyerIndexes: migrated (0.0158s) ==========

== 20190426123026 AddIncomingEmailByUserIdIndex: migrating ====================
-- add_index(:incoming_emails, [:user_id], {:where=>"user_id IS NOT NULL"})
   -> 0.0017s
== 20190426123026 AddIncomingEmailByUserIdIndex: migrated (0.0023s) ===========

== 20190426123658 AddIndexOnUserAuthTokenUser: migrating ======================
-- add_index(:user_auth_tokens, [:user_id])
   -> 0.0015s
== 20190426123658 AddIndexOnUserAuthTokenUser: migrated (0.0019s) =============

== 20190427211829 AddNameToUserSecondFactors: migrating =======================
-- add_column(:user_second_factors, :name, :string)
   -> 0.0007s
== 20190427211829 AddNameToUserSecondFactors: migrated (0.0012s) ==============

== 20190430135846 MigrateEnglishLocale: migrating =============================
-- execute("UPDATE users\nSET locale = 'en_US'\nWHERE locale = 'en'\n")
   -> 0.0007s
-- execute("UPDATE site_settings\nSET value = 'en_US'\nWHERE name = 'default_locale' AND value = 'en'\n")
   -> 0.0002s
-- execute("UPDATE translation_overrides\nSET locale = 'en_US'\nWHERE locale = 'en'\n")
   -> 0.0003s
-- execute("UPDATE theme_translation_overrides\nSET locale = 'en_US'\nWHERE locale = 'en'\n")
   -> 0.0004s
== 20190430135846 MigrateEnglishLocale: migrated (0.0025s) ====================

== 20190502223613 AddBounceKeyIndexOnEmailLogs: migrating =====================
-- add_index(:email_logs, [:bounce_key], {:unique=>true, :where=>"bounce_key IS NOT NULL"})
   -> 0.0012s
== 20190502223613 AddBounceKeyIndexOnEmailLogs: migrated (0.0018s) ============

== 20190503180839 RemoveLikeCountFromPostMenu: migrating ======================
-- execute("UPDATE site_settings\nSET value = REGEXP_REPLACE(REPLACE(REPLACE(value, 'like-count', ''), '||', '|'), '^\\|', '')\nWHERE name = 'post_menu'\n")
   -> 0.0005s
== 20190503180839 RemoveLikeCountFromPostMenu: migrated (0.0011s) =============

== 20190508135348 RenameSiteSettingDefaultTopics: migrating ===================
-- execute("UPDATE site_settings SET name = 'reviewable_default_topics' WHERE name = 'flags_default_topics'")
   -> 0.0002s
== 20190508135348 RenameSiteSettingDefaultTopics: migrated (0.0008s) ==========

== 20190508141327 CreateReviewableClaimedTopics: migrating ====================
-- create_table(:reviewable_claimed_topics)
   -> 0.0031s
-- add_index(:reviewable_claimed_topics, :topic_id, {:unique=>true})
   -> 0.0018s
== 20190508141327 CreateReviewableClaimedTopics: migrated (0.0059s) ===========

== 20190508141824 DropClaimedById: migrating ==================================
-- remove_column(:reviewables, :claimed_by_id)
   -> 0.0004s
== 20190508141824 DropClaimedById: migrated (0.0009s) =========================

== 20190508193900 AddMissingUploadsIgnoredIndexToPostCustomFields: migrating ==
-- add_index(:post_custom_fields, :post_id, {:unique=>true, :where=>"name = 'missing uploads ignored'", :name=>"index_post_id_where_missing_uploads_ignored"})
   -> 0.0019s
== 20190508193900 AddMissingUploadsIgnoredIndexToPostCustomFields: migrated (0.0025s)

== 20190513143015 AddThemeIdToJavascriptCache: migrating ======================
-- execute("DELETE FROM javascript_caches jc\nWHERE  NOT EXISTS (\n  SELECT 1\n  FROM   theme_fields tf\n  WHERE  tf.id = jc.theme_field_id\n  );\n")
   -> 0.0006s
-- add_reference(:javascript_caches, :theme, {:foreign_key=>{:on_delete=>:cascade}})
   -> 0.0034s
-- add_foreign_key(:javascript_caches, :theme_fields, {:on_delete=>:cascade})
   -> 0.0008s
-- change_column_null(:javascript_caches, :theme_field_id, true)
   -> 0.0006s
-- execute("ALTER TABLE javascript_caches ADD CONSTRAINT enforce_theme_or_theme_field CHECK ((theme_id IS NOT NULL AND theme_field_id IS NULL) OR (theme_id IS NULL AND theme_field_id IS NOT NULL))")
   -> 0.0007s
== 20190513143015 AddThemeIdToJavascriptCache: migrated (0.0071s) =============

== 20190514055014 AddReadNotificationIndex: migrating =========================
-- execute("CREATE UNIQUE INDEX CONCURRENTLY index_notifications_on_read_or_n_type\nON notifications(user_id, id DESC, read, topic_id)\nWHERE read or notification_type <> 6\n")
   -> 0.0027s
-- execute("VACUUM ANALYZE notifications\n")
   -> 0.0114s
== 20190514055014 AddReadNotificationIndex: migrated (0.0147s) ================

== 20190522194332 AddPriorityToPostActionTypes: migrating =====================
-- add_column(:post_action_types, :reviewable_priority, :integer, {:default=>0, :null=>false})
   -> 0.0011s
-- execute("UPDATE post_action_types\nSET reviewable_priority = CASE\n  WHEN score_bonus > 5 THEN 10\n  WHEN score_bonus > 0 THEN 5\n  ELSE 0\nEND\n")
   -> 0.0006s
== 20190522194332 AddPriorityToPostActionTypes: migrated (0.0024s) ============

== 20190523093215 AddTopicIdToUserExports: migrating ==========================
-- add_column(:user_exports, :topic_id, :integer)
   -> 0.0004s
== 20190523093215 AddTopicIdToUserExports: migrated (0.0009s) =================

== 20190529002752 AddUniqueConstraintToShadowAccounts: migrating ==============
-- create_table(:anonymous_users)
   -> 0.0096s
== 20190529002752 AddUniqueConstraintToShadowAccounts: migrated (0.0118s) =====

== 20190531044744 AddEnableDeferToUserOptions: migrating ======================
-- add_column(:user_options, :enable_defer, :boolean, {:default=>false, :null=>false})
   -> 0.0012s
== 20190531044744 AddEnableDeferToUserOptions: migrated (0.0021s) =============

== 20190531101648 MergeRemoveMutedTagsFromLatestSiteSettings: migrating =======
-- execute("UPDATE site_settings SET value = 'always', data_type = 7 WHERE name = 'remove_muted_tags_from_latest' AND value = 't'")
   -> 0.0006s
-- execute("UPDATE site_settings SET value = 'never',  data_type = 7 WHERE name = 'remove_muted_tags_from_latest' AND value = 'f'")
   -> 0.0003s
-- execute("DELETE FROM site_settings WHERE name = 'mute_other_present_tags'")
   -> 0.0004s
== 20190531101648 MergeRemoveMutedTagsFromLatestSiteSettings: migrated (0.0022s)

== 20190603134013 ChangeThemeFieldCompilerVersion: migrating ==================
-- change_column(:theme_fields, :compiler_version, :string, {:limit=>50})
   -> 0.0064s
== 20190603134013 ChangeThemeFieldCompilerVersion: migrated (0.0070s) =========

== 20190621095105 RemoveNotificationLevelFromCategoryUserIndexes: migrating ===
-- execute("DELETE FROM category_users cu USING category_users cu1\n  WHERE cu.user_id = cu1.user_id AND\n        cu.category_id = cu1.category_id AND\n        cu.notification_level < cu1.notification_level\n")
   -> 0.0006s
-- remove_index(:category_users, {:name=>"idx_category_users_u1"})
   -> 0.0004s
-- remove_index(:category_users, {:name=>"idx_category_users_u2"})
   -> 0.0002s
-- add_index(:category_users, [:user_id, :category_id], {:name=>"idx_category_users_user_id_category_id", :unique=>true})
   -> 0.0022s
-- add_index(:category_users, [:category_id, :user_id], {:name=>"idx_category_users_category_id_user_id", :unique=>true})
   -> 0.0040s
== 20190621095105 RemoveNotificationLevelFromCategoryUserIndexes: migrated (0.0084s)

== 20190630165003 AddEnabledToThemes: migrating ===============================
-- add_column(:themes, :enabled, :boolean, {:null=>false, :default=>true})
   -> 0.0012s
== 20190630165003 AddEnabledToThemes: migrated (0.0017s) ======================

== 20190704133453 CreateBackupMetadata: migrating =============================
-- create_table(:backup_metadata)
   -> 0.0063s
== 20190704133453 CreateBackupMetadata: migrated (0.0070s) ====================

== 20190705173948 RenumberGroupVisibilityLevels: migrating ====================
-- execute("UPDATE groups SET visibility_level = 4 WHERE visibility_level = 3")
   -> 0.0007s
-- execute("UPDATE groups SET visibility_level = 3 WHERE visibility_level = 2")
   -> 0.0004s
-- execute("UPDATE groups SET visibility_level = 2 WHERE visibility_level = 1")
   -> 0.0004s
== 20190705173948 RenumberGroupVisibilityLevels: migrated (0.0024s) ===========

== 20190711154946 AddEmailedStatusToInvite: migrating =========================
-- add_column(:invites, :emailed_status, :integer)
   -> 0.0005s
-- add_index(:invites, :emailed_status)
   -> 0.0025s
== 20190711154946 AddEmailedStatusToInvite: migrated (0.0044s) ================

== 20190716014949 RenameDeprecatedBadgeIcons: migrating =======================
-- execute("UPDATE badges SET icon = 'far-clock' WHERE icon = 'fa-clock-o'")
   -> 0.0006s
-- execute("UPDATE badges SET icon = 'far-eye' WHERE icon = 'fa-eye'")
   -> 0.0002s
== 20190716014949 RenameDeprecatedBadgeIcons: migrated (0.0013s) ==============

== 20190716124050 RemoveViaEmailFromInvite: migrating =========================
== 20190716124050 RemoveViaEmailFromInvite: migrated (0.0025s) ================

== 20190716173854 AddSecureToUploads: migrating ===============================
-- add_column(:uploads, :secure, :boolean, {:default=>false, :null=>false})
   -> 0.0012s
== 20190716173854 AddSecureToUploads: migrated (0.0021s) ======================

== 20190717133743 MigrateGroupListSiteSettings: migrating =====================
== 20190717133743 MigrateGroupListSiteSettings: migrated (0.0009s) ============

== 20190724162522 MigrateForwardedEmailsBehaviourSiteSettings: migrating ======
-- execute("UPDATE site_settings\nSET name      = 'forwarded_emails_behaviour',\n    data_type = 7,\n    value     = 'create_replies'\nWHERE name = 'enable_forwarded_emails' AND value = 't';\n")
   -> 0.0002s
-- execute("DELETE\nFROM site_settings\nWHERE name = 'enable_forwarded_emails';\n")
   -> 0.0001s
== 20190724162522 MigrateForwardedEmailsBehaviourSiteSettings: migrated (0.0008s)

== 20190731090219 RenameEditNotificationSetting: migrating ====================
-- execute("UPDATE site_settings SET name = 'disable_system_edit_notifications' WHERE name = 'disable_edit_notifications'")
   -> 0.0002s
== 20190731090219 RenameEditNotificationSetting: migrated (0.0006s) ===========

== 20190807194043 GroupsPublishReadState: migrating ===========================
-- add_column(:groups, :publish_read_state, :boolean, {:null=>false, :default=>false})
   -> 0.0008s
== 20190807194043 GroupsPublishReadState: migrated (0.0012s) ==================

== 20190812141433 AddMembersVisibilityLevelToGroups: migrating ================
-- add_column(:groups, :members_visibility_level, :integer, {:default=>0, :null=>false})
   -> 0.0014s
== 20190812141433 AddMembersVisibilityLevelToGroups: migrated (0.0021s) =======

== 20190820192341 CreateTopicGroupTable: migrating ============================
-- create_table(:topic_groups)
   -> 0.0045s
-- add_index(:topic_groups, [:group_id, :topic_id], {:unique=>true})
   -> 0.0024s
== 20190820192341 CreateTopicGroupTable: migrated (0.0076s) ===================

== 20190903073730 AddLastUsedAtToApiKey: migrating ============================
-- add_column(:api_keys, :last_used_at, :timestamp, {:precision=>nil})
   -> 0.0008s
== 20190903073730 AddLastUsedAtToApiKey: migrated (0.0019s) ===================

== 20190904104533 CreateUserSecurityKeys: migrating ===========================
-- create_table(:user_security_keys)
   -> 0.0132s
-- add_index(:user_security_keys, :credential_id, {:unique=>true})
   -> 0.0032s
-- add_index(:user_security_keys, :last_used)
   -> 0.0019s
== 20190904104533 CreateUserSecurityKeys: migrated (0.0197s) ==================

== 20190908233325 AddSecureIdentifierColumnToUsers: migrating =================
-- add_column(:users, :secure_identifier, :string)
   -> 0.0007s
-- add_index(:users, :secure_identifier, {:unique=>true})
   -> 0.0026s
== 20190908233325 AddSecureIdentifierColumnToUsers: migrated (0.0042s) ========

== 20190908234054 MigratePostEditTimeLimit: migrating =========================
-- execute("INSERT INTO site_settings (\n  name,\n  value,\n  data_type,\n  created_at,\n  updated_at\n)\n  SELECT\n    'tl2_post_edit_time_limit',\n    value,\n    data_type,\n    CURRENT_TIMESTAMP,\n    CURRENT_TIMESTAMP\n  FROM site_settings\n  WHERE\n    name = 'post_edit_time_limit'\nON CONFLICT\nDO NOTHING\n")
   -> 0.0004s
== 20190908234054 MigratePostEditTimeLimit: migrated (0.0012s) ================

== 20190917100006 AddEnabledIndexToUserSecurityKey: migrating =================
-- add_index(:user_security_keys, [:factor_type, :enabled])
   -> 0.0024s
== 20190917100006 AddEnabledIndexToUserSecurityKey: migrated (0.0032s) ========

== 20191007140446 AddUserAccuracyBonusToReviewableScores: migrating ===========
-- add_column(:reviewable_scores, :user_accuracy_bonus, :float, {:default=>0, :null=>false})
   -> 0.0013s
-- execute("UPDATE reviewable_scores\nSET user_accuracy_bonus = score - users.trust_level - 1\nFROM users\nWHERE reviewable_scores.user_id = users.id\n")
   -> 0.0011s
== 20191007140446 AddUserAccuracyBonusToReviewableScores: migrated (0.0033s) ==

== 20191008124357 AddUniqueIndexCategoriesOnSlug: migrating ===================
-- add_index(:categories, "COALESCE(parent_category_id, -1), slug", {:name=>"unique_index_categories_on_slug"})
   -> 0.0017s
== 20191008124357 AddUniqueIndexCategoriesOnSlug: migrated (0.0022s) ==========

== 20191011131041 MigrateDecompressedFileMaxSizeMb: migrating =================
== 20191011131041 MigrateDecompressedFileMaxSizeMb: migrated (0.0011s) ========

== 20191016124059 FixCategorySlugsIndex: migrating ============================
-- remove_index(:categories, {:name=>"unique_index_categories_on_slug"})
   -> 0.0006s
-- add_index(:categories, "COALESCE(parent_category_id, -1), slug", {:name=>"unique_index_categories_on_slug", :where=>"slug != ''", :unique=>true})
   -> 0.0032s
== 20191016124059 FixCategorySlugsIndex: migrated (0.0045s) ===================

== 20191017044811 AddDraftBackupTables: migrating =============================
-- create_table(:backup_draft_topics)
   -> 0.0042s
-- create_table(:backup_draft_posts)
   -> 0.0075s
-- add_index(:backup_draft_posts, [:user_id, :key], {:unique=>true})
   -> 0.0020s
-- add_index(:backup_draft_posts, [:post_id], {:unique=>true})
   -> 0.0017s
-- add_index(:backup_draft_topics, [:user_id], {:unique=>true})
   -> 0.0022s
-- add_index(:backup_draft_topics, [:topic_id], {:unique=>true})
   -> 0.0013s
== 20191017044811 AddDraftBackupTables: migrated (0.0201s) ====================

== 20191022155215 AddIndexToOauth2UserInfo: migrating =========================
-- add_index(:oauth2_user_infos, [:user_id, :provider])
   -> 0.0013s
== 20191022155215 AddIndexToOauth2UserInfo: migrated (0.0019s) ================

== 20191022161944 AddIndexOnGroupToCategoryGroups: migrating ==================
-- add_index(:category_groups, :group_id)
   -> 0.0017s
== 20191022161944 AddIndexOnGroupToCategoryGroups: migrated (0.0023s) =========

== 20191025005204 AmendOauth2UserInfoIndex: migrating =========================
-- execute("DROP INDEX index_oauth2_user_infos_on_user_id_and_provider")
   -> 0.0004s
-- add_index(:oauth2_user_infos, [:user_id, :provider])
   -> 0.0023s
== 20191025005204 AmendOauth2UserInfoIndex: migrated (0.0039s) ================

== 20191030112559 AddIndexToNotifications: migrating ==========================
-- index_exists?(:notifications, [:topic_id, :post_number])
   -> 0.0032s
-- add_index(:notifications, [:topic_id, :post_number], {:algorithm=>:concurrently})
   -> 0.0028s
== 20191030112559 AddIndexToNotifications: migrated (0.0067s) =================

== 20191030155530 AddRequiredTagGroupToCategories: migrating ==================
-- add_column(:categories, :required_tag_group_id, :integer, {:null=>true})
   -> 0.0013s
-- add_column(:categories, :min_tags_from_required_group, :integer, {:null=>false, :default=>1})
   -> 0.0007s
== 20191030155530 AddRequiredTagGroupToCategories: migrated (0.0025s) =========

== 20191031042212 AddOwnerToDrafts: migrating =================================
-- add_column(:drafts, :owner, :string)
   -> 0.0004s
== 20191031042212 AddOwnerToDrafts: migrated (0.0012s) ========================

== 20191031052711 AddGrantedTitleBadgeIdToUserProfile: migrating ==============
-- add_reference(:user_profiles, :granted_title_badge, {:foreign_key=>{:to_table=>:badges}, :index=>true, :null=>true})
   -> 0.0028s
== 20191031052711 AddGrantedTitleBadgeIdToUserProfile: migrated (0.0058s) =====

== 20191101001705 AddBannerIndexToTopics: migrating ===========================
-- add_index(:topics, [:id], {:name=>"index_topics_on_id_filtered_banner", :where=>"archetype = 'banner' AND deleted_at IS NULL", :unique=>true})
   -> 0.0021s
== 20191101001705 AddBannerIndexToTopics: migrated (0.0027s) ==================

== 20191101113230 AddRevokedAtToApiKey: migrating =============================
-- add_column(:api_keys, :revoked_at, :timestamp, {:precision=>nil})
   -> 0.0006s
-- add_column(:api_keys, :description, :text)
   -> 0.0004s
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\n             VALUES ('api_key_last_used_epoch', 1, now(), now(), now())")
   -> 0.0006s
-- remove_index(:api_keys, :user_id)
   -> 0.0026s
-- add_index(:api_keys, :user_id)
   -> 0.0026s
== 20191101113230 AddRevokedAtToApiKey: migrated (0.0081s) ====================

== 20191107025041 AddLastSeenToCategoryUsers: migrating =======================
-- add_column(:category_users, :last_seen_at, :timestamp, {:precision=>nil})
   -> 0.0008s
== 20191107025041 AddLastSeenToCategoryUsers: migrated (0.0020s) ==============

== 20191107025140 AddIndexToLastSeenAtOnCategoryUsers: migrating ==============
-- index_exists?(:category_users, [:user_id, :last_seen_at])
   -> 0.0024s
-- add_index(:category_users, [:user_id, :last_seen_at], {:algorithm=>:concurrently})
   -> 0.0028s
== 20191107025140 AddIndexToLastSeenAtOnCategoryUsers: migrated (0.0060s) =====

== 20191107032231 ChangeNotificationLevel: migrating ==========================
-- change_column(:category_users, :notification_level, :integer, {:null=>true})
   -> 0.0009s
== 20191107032231 ChangeNotificationLevel: migrated (0.0017s) =================

== 20191107190330 RemoveSuppressFromLatestFromCategory: migrating =============
== 20191107190330 RemoveSuppressFromLatestFromCategory: migrated (0.0047s) ====

== 20191108000414 AddUniqueIndexToDrafts: migrating ===========================
-- execute("DELETE FROM drafts d1\nUSING (\n  SELECT MAX(id) as id, draft_key, user_id\n  FROM drafts\n  GROUP BY draft_key, user_id\n  HAVING COUNT(*) > 1\n) d2\nWHERE\n  d1.draft_key = d2.draft_key AND\n  d1.user_id = d2.user_id AND\n  d1.id <> d2.id\n")
   -> 0.0007s
-- remove_index(:drafts, [:user_id, :draft_key])
   -> 0.0016s
-- add_index(:drafts, [:user_id, :draft_key], {:unique=>true})
   -> 0.0016s
== 20191108000414 AddUniqueIndexToDrafts: migrated (0.0045s) ==================

== 20191113193141 AddTargetTagIdToTags: migrating =============================
-- add_column(:tags, :target_tag_id, :integer)
   -> 0.0005s
== 20191113193141 AddTargetTagIdToTags: migrated (0.0010s) ====================

== 20191114160613 AddGraphToPolls: migrating ==================================
-- add_column(:polls, :chart_type, :integer, {:default=>0, :null=>false})
   -> 0.0010s
== 20191114160613 AddGraphToPolls: migrated (0.0016s) =========================

== 20191120015344 AddTimezoneToUserOptions: migrating =========================
-- add_column(:user_options, :timezone, :string)
   -> 0.0007s
-- execute("        UPDATE user_options\n        SET timezone = ucf.value\n        FROM user_custom_fields AS ucf\n        WHERE ucf.user_id = user_options.user_id AND ucf.name = 'timezone'\n")
   -> 0.0009s
== 20191120015344 AddTimezoneToUserOptions: migrated (0.0025s) ================

== 20191128222140 AddUniqueIndexToDevelopers: migrating =======================
-- execute("DELETE FROM developers d1\nUSING (\n  SELECT MAX(id) as id, user_id\n  FROM developers\n  GROUP BY user_id\n  HAVING COUNT(*) > 1\n) d2\nWHERE\n  d1.user_id = d2.user_id AND\n  d1.id <> d2.id\n")
   -> 0.0007s
-- add_index(:developers, [:user_id], {:unique=>true})
   -> 0.0019s
== 20191128222140 AddUniqueIndexToDevelopers: migrated (0.0034s) ==============

== 20191129144706 DropUnusedGoogleInstagramAuthTables: migrating ==============
== 20191129144706 DropUnusedGoogleInstagramAuthTables: migrated (0.0037s) =====

== 20191202202212 AddFeaturedTopicIdToUserProfiles: migrating =================
-- add_column(:user_profiles, :featured_topic_id, :integer)
   -> 0.0007s
== 20191202202212 AddFeaturedTopicIdToUserProfiles: migrated (0.0014s) ========

== 20191205100434 CreateStandaloneBookmarksTable: migrating ===================
-- create_table(:bookmarks)
   -> 0.0168s
-- add_index(:bookmarks, [:user_id, :post_id], {:unique=>true})
   -> 0.0021s
== 20191205100434 CreateStandaloneBookmarksTable: migrated (0.0197s) ==========

== 20191206123012 AddGroupNameToPolls: migrating ==============================
-- add_column(:polls, :groups, :string)
   -> 0.0005s
== 20191206123012 AddGroupNameToPolls: migrated (0.0009s) =====================

== 20191211152404 AddIndexToInvites: migrating ================================
-- add_index(:invites, [:invited_by_id])
   -> 0.0023s
== 20191211152404 AddIndexToInvites: migrated (0.0031s) =======================

== 20191211170000 AddHashedApiKey: migrating ==================================
-- add_column(:api_keys, :key_hash, :string)
   -> 0.0006s
-- add_column(:api_keys, :truncated_key, :string)
   -> 0.0004s
-- execute("UPDATE api_keys\nSET truncated_key = LEFT(key, 4)\n")
   -> 0.0005s
-- change_column_null(:api_keys, :key_hash, false)
   -> 0.0004s
-- change_column_null(:api_keys, :truncated_key, false)
   -> 0.0004s
-- add_index(:api_keys, :key_hash)
   -> 0.0017s
-- change_column_null(:api_keys, :key, true)
   -> 0.0003s
== 20191211170000 AddHashedApiKey: migrated (0.0057s) =========================

== 20191217035630 PopulateTopicIdOnBookmarks: migrating =======================
== 20191217035630 PopulateTopicIdOnBookmarks: migrated (0.0135s) ==============

== 20191219112000 RemoveKeyFromApiKeys: migrating =============================
== 20191219112000 RemoveKeyFromApiKeys: migrated (0.0030s) ====================

== 20191220134101 AddDistinctBadgeCountToUserStats: migrating =================
-- add_column(:user_stats, :distinct_badge_count, :integer, {:default=>0, :null=>false})
   -> 0.0013s
-- execute("UPDATE user_stats\nSET distinct_badge_count = x.distinct_badge_count\nFROM (\n  SELECT users.id user_id, COUNT(distinct user_badges.badge_id) distinct_badge_count\n  FROM users\n  LEFT JOIN user_badges ON user_badges.user_id = users.id\n                        AND (user_badges.badge_id IN (SELECT id FROM badges WHERE enabled))\n  GROUP BY users.id\n) x\nWHERE user_stats.user_id = x.user_id AND user_stats.distinct_badge_count <> x.distinct_badge_count\n")
   -> 0.0018s
== 20191220134101 AddDistinctBadgeCountToUserStats: migrated (0.0041s) ========

== 20191230055237 AddAccessControlColumnsToUpload: migrating ==================
-- add_reference(:uploads, :access_control_post, {:foreign_key=>{:to_table=>:posts}, :index=>true, :null=>true})
   -> 0.0047s
-- add_column(:uploads, :original_sha1, :string, {:null=>true})
   -> 0.0004s
-- add_index(:uploads, :original_sha1)
   -> 0.0020s
== 20191230055237 AddAccessControlColumnsToUpload: migrated (0.0077s) =========

== 20200107161405 AddFeaturedRankToUserBadges: migrating ======================
-- add_column(:user_badges, :featured_rank, :integer, {:null=>true})
   -> 0.0005s
-- execute("WITH featured_tl_badge AS -- Find the best trust level badge for each user\n(\n  SELECT user_id, max(badge_id) as badge_id\n  FROM user_badges\n  WHERE badge_id IN (1,2,3,4)\n  GROUP BY user_id\n),\nranks AS ( -- Take all user badges, group by user_id and badge_id, and calculate a rank for each one\n  SELECT\n    user_badges.user_id,\n    user_badges.badge_id,\n    RANK() OVER (\n      PARTITION BY user_badges.user_id -- Do a separate rank for each user\n      ORDER BY BOOL_OR(badges.enabled) DESC, -- Disabled badges last\n              MAX(featured_tl_badge.user_id) NULLS LAST, -- Best tl badge first\n              CASE WHEN user_badges.badge_id IN (1,2,3,4) THEN 1 ELSE 0 END ASC, -- Non-featured tl badges last\n              MAX(badges.badge_type_id) ASC,\n              MAX(badges.grant_count) ASC,\n              user_badges.badge_id DESC\n    ) rank_number\n  FROM user_badges\n  INNER JOIN badges ON badges.id = user_badges.badge_id\n  LEFT JOIN featured_tl_badge ON featured_tl_badge.user_id = user_badges.user_id AND featured_tl_badge.badge_id = user_badges.badge_id\n  GROUP BY user_badges.user_id, user_badges.badge_id\n)\n-- Now use that data to update the featured_rank column\nUPDATE user_badges SET featured_rank = rank_number\nFROM ranks WHERE ranks.badge_id = user_badges.badge_id AND ranks.user_id = user_badges.user_id\n")
   -> 0.0010s
== 20200107161405 AddFeaturedRankToUserBadges: migrated (0.0026s) =============

== 20200109130028 UpdateUserProfilesIndexes: migrating ========================
-- remove_index(:user_profiles, :card_background)
   -> 0.0033s
-- add_index(:user_profiles, :card_background_upload_id)
   -> 0.0018s
-- remove_index(:user_profiles, :profile_background)
   -> 0.0037s
-- add_index(:user_profiles, :profile_background_upload_id)
   -> 0.0026s
== 20200109130028 UpdateUserProfilesIndexes: migrated (0.0124s) ===============

== 20200116092259 AddGroupToCustomEmojis: migrating ===========================
-- add_column(:custom_emojis, :group, :string, {:null=>true, :limit=>20})
   -> 0.0009s
== 20200116092259 AddGroupToCustomEmojis: migrated (0.0015s) ==================

== 20200116140132 RenameReplyIdColumn: migrating ==============================
-- add_column(:post_replies, :reply_post_id, :integer)
   -> 0.0006s
-- execute("UPDATE post_replies\nSET reply_post_id = reply_id\n")
   -> 0.0004s
== 20200116140132 RenameReplyIdColumn: migrated (0.0019s) =====================

== 20200117141138 UpdatePostReplyIndexes: migrating ===========================
-- index_exists?(:post_replies, [:post_id, :reply_post_id])
   -> 0.0030s
-- add_index(:post_replies, [:post_id, :reply_post_id], {:unique=>true, :algorithm=>:concurrently})
   -> 0.0020s
-- index_exists?(:post_replies, [:reply_post_id])
   -> 0.0022s
-- add_index(:post_replies, [:reply_post_id], {:algorithm=>:concurrently})
   -> 0.0029s
-- index_exists?(:post_replies, [:post_id, :reply_id])
   -> 0.0026s
-- remove_index(:post_replies, {:column=>[:post_id, :reply_id], :algorithm=>:concurrently})
   -> 0.0039s
-- index_exists?(:post_replies, [:reply_id])
   -> 0.0024s
-- remove_index(:post_replies, {:column=>[:reply_id], :algorithm=>:concurrently})
   -> 0.0040s
== 20200117141138 UpdatePostReplyIndexes: migrated (0.0244s) ==================

== 20200117172135 AddTriggerToSyncPostReplies: migrating ======================
-- execute("UPDATE post_replies\nSET reply_post_id = reply_id\nWHERE reply_post_id IS NULL\n")
   -> 0.0005s
== 20200117172135 AddTriggerToSyncPostReplies: migrated (0.0032s) =============

== 20200117174646 MakePostReplyIdColumnReadOnly: migrating ====================
== 20200117174646 MakePostReplyIdColumnReadOnly: migrated (0.0028s) ===========

== 20200120131338 DropUnusedColumns: migrating ================================
== 20200120131338 DropUnusedColumns: migrated (0.0053s) =======================

== 20200130115859 RemoveBounceScoreThresholdDeactivateSiteSetting: migrating ==
-- execute("DELETE FROM site_settings WHERE name = 'bounce_score_threshold_deactivate'")
   -> 0.0002s
== 20200130115859 RemoveBounceScoreThresholdDeactivateSiteSetting: migrated (0.0008s)

== 20200203061927 MarkBookmarksTopicIdNotNull: migrating ======================
-- change_column_null(:bookmarks, :topic_id, false)
   -> 0.0005s
== 20200203061927 MarkBookmarksTopicIdNotNull: migrated (0.0012s) =============

== 20200227073837 AddReminderLastSentAtToBookmarks: migrating =================
-- add_column(:bookmarks, :reminder_last_sent_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0004s
== 20200227073837 AddReminderLastSentAtToBookmarks: migrated (0.0008s) ========

== 20200302120829 AddThemeModifierSet: migrating ==============================
-- create_table(:theme_modifier_sets)
   -> 0.0078s
== 20200302120829 AddThemeModifierSet: migrated (0.0086s) =====================

== 20200306060737 AddReminderSetAtToBookmarks: migrating ======================
-- add_column(:bookmarks, :reminder_set_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0005s
-- add_index(:bookmarks, :reminder_set_at)
   -> 0.0014s
== 20200306060737 AddReminderSetAtToBookmarks: migrated (0.0027s) =============

== 20200311135425 ClearApprovedUsersFromTheReviewQueue: migrating =============
== 20200311135425 ClearApprovedUsersFromTheReviewQueue: migrated (0.0012s) ====

== 20200312122846 AddDurationToTopicTimers: migrating =========================
-- add_column(:topic_timers, :duration, :integer, {:null=>true})
   -> 0.0005s
== 20200312122846 AddDurationToTopicTimers: migrated (0.0010s) ================

== 20200320193612 BackFillTopicTimerDurations: migrating ======================
== 20200320193612 BackFillTopicTimerDurations: migrated (0.0020s) =============

== 20200327164420 AddImapStatsToGroup: migrating ==============================
-- add_column(:groups, :imap_last_error, :text)
   -> 0.0009s
-- add_column(:groups, :imap_old_emails, :integer)
   -> 0.0004s
-- add_column(:groups, :imap_new_emails, :integer)
   -> 0.0003s
== 20200327164420 AddImapStatsToGroup: migrated (0.0025s) =====================

== 20200329222246 AddHighPriorityColumnToNotifications: migrating =============
-- column_exists?(:notifications, :high_priority)
   -> 0.0014s
-- add_column(:notifications, :high_priority, :boolean, {:default=>nil})
   -> 0.0007s
-- column_exists?(:notifications, :high_priority)
   -> 0.0016s
-- execute("UPDATE notifications SET high_priority = TRUE WHERE notification_type IN (6, 24);\n")
   -> 0.0007s
-- execute("UPDATE notifications SET high_priority = FALSE WHERE notification_type NOT IN (6, 24);\n")
   -> 0.0003s
-- execute("ALTER TABLE notifications ALTER COLUMN high_priority SET DEFAULT FALSE;\n")
   -> 0.0004s
-- execute("UPDATE notifications SET high_priority = FALSE WHERE high_priority IS NULL;\n")
   -> 0.0004s
-- execute("ALTER TABLE notifications ALTER COLUMN high_priority SET NOT NULL;\n")
   -> 0.0003s
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS index_notifications_read_or_not_high_priority ON notifications(user_id, id DESC, read, topic_id) WHERE (read OR (high_priority = FALSE));\n")
   -> 0.0035s
-- execute("CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS index_notifications_unique_unread_high_priority ON notifications(user_id, id) WHERE NOT read AND high_priority = TRUE;\n")
   -> 0.0024s
== 20200329222246 AddHighPriorityColumnToNotifications: migrated (0.0129s) ====

== 20200330233427 DropOldUnreadPmNotificationIndices: migrating ===============
== 20200330233427 DropOldUnreadPmNotificationIndices: migrated (0.0011s) ======

== 20200401172023 CreatePublishedPages: migrating =============================
-- create_table(:published_pages)
   -> 0.0067s
-- add_index(:published_pages, :slug, {:unique=>true})
   -> 0.0015s
== 20200401172023 CreatePublishedPages: migrated (0.0090s) ====================

== 20200403100259 AddKeyHashToUserApiKey: migrating ===========================
-- add_column(:user_api_keys, :key_hash, :string)
   -> 0.0004s
-- change_column_null(:user_api_keys, :key_hash, false)
   -> 0.0008s
== 20200403100259 AddKeyHashToUserApiKey: migrated (0.0027s) ==================

== 20200408121312 RemoveKeyFromUserApiKey: migrating ==========================
== 20200408121312 RemoveKeyFromUserApiKey: migrated (0.0030s) =================

== 20200408121834 AddIndexToUserApiKeyOnKeyHash: migrating ====================
-- add_index(:user_api_keys, :key_hash, {:unique=>true})
   -> 0.0041s
== 20200408121834 AddIndexToUserApiKeyOnKeyHash: migrated (0.0051s) ===========

== 20200409033412 CreateBookmarksFromPostActionBookmarks: migrating ===========
== 20200409033412 CreateBookmarksFromPostActionBookmarks: migrated (0.0035s) ==

== 20200415140830 DropAutomaticMembershipRetroactiveFromGroup: migrating ======
== 20200415140830 DropAutomaticMembershipRetroactiveFromGroup: migrated (0.0034s)

== 20200417183143 AddCreatedAtToBadgeUser: migrating ==========================
-- add_column(:user_badges, :created_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0006s
-- execute("UPDATE user_badges SET created_at = granted_at WHERE created_at IS NULL")
   -> 0.0003s
-- change_column(:user_badges, :created_at, :timestamp, {:null=>false, :default=>"current_timestamp", :precision=>nil})
   -> 0.0011s
== 20200417183143 AddCreatedAtToBadgeUser: migrated (0.0028s) =================

== 20200424032633 RemoveCanonicalEmailFromUserEmails: migrating ===============
-- execute("ALTER TABLE user_emails\nDROP COLUMN IF EXISTS canonical_email\n")
   -> 0.0001s
== 20200424032633 RemoveCanonicalEmailFromUserEmails: migrated (0.0006s) ======

== 20200427222624 AddReadOnlyToCategories: migrating ==========================
-- add_column(:categories, :read_only_banner, :string)
   -> 0.0007s
== 20200427222624 AddReadOnlyToCategories: migrated (0.0012s) =================

== 20200428014005 CorrectTopicUserBookmarkedBoolean: migrating ================
== 20200428014005 CorrectTopicUserBookmarkedBoolean: migrated (0.0022s) =======

== 20200428102014 AddBulkInviteLinkToInvites: migrating =======================
-- add_column(:invites, :max_redemptions_allowed, :integer, {:null=>false, :default=>1})
   -> 0.0009s
-- add_column(:invites, :redemption_count, :integer, {:null=>false, :default=>0})
   -> 0.0005s
-- add_column(:invites, :expires_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0004s
-- execute("UPDATE invites SET expires_at = updated_at + INTERVAL '30 days'\n")
   -> 0.0007s
-- change_column(:invites, :expires_at, :timestamp, {:null=>false, :precision=>nil})
   -> 0.0005s
== 20200428102014 AddBulkInviteLinkToInvites: migrated (0.0042s) ==============

== 20200429045956 RemoveBookmarksWithReminderPostMenuItem: migrating ==========
-- execute("UPDATE site_settings SET value = REPLACE(value, '|bookmarkWithReminder|', '|') WHERE name = 'post_menu';\n")
   -> 0.0003s
-- execute("UPDATE site_settings SET value = REPLACE(value, 'bookmarkWithReminder|', '') WHERE name = 'post_menu';\n")
   -> 0.0003s
-- execute("UPDATE site_settings SET value = REPLACE(value, '|bookmarkWithReminder', '') WHERE name = 'post_menu';\n")
   -> 0.0002s
-- execute("UPDATE site_settings SET value = REPLACE(value, '|bookmarkWithReminder|', '|') WHERE name = 'post_menu_hidden';\n")
   -> 0.0002s
-- execute("UPDATE site_settings SET value = REPLACE(value, 'bookmarkWithReminder|', '') WHERE name = 'post_menu_hidden';\n")
   -> 0.0002s
-- execute("UPDATE site_settings SET value = REPLACE(value, '|bookmarkWithReminder', '') WHERE name = 'post_menu_hidden';\n")
   -> 0.0002s
== 20200429045956 RemoveBookmarksWithReminderPostMenuItem: migrated (0.0021s) =

== 20200429095034 AddTopicThumbnailInformation: migrating =====================
-- execute("ALTER TABLE posts\nADD COLUMN IF NOT EXISTS image_upload_id bigint\n")
   -> 0.0008s
-- execute("ALTER TABLE topics\nADD COLUMN IF NOT EXISTS image_upload_id bigint\n")
   -> 0.0005s
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS\nindex_posts_on_image_upload_id ON posts USING btree (image_upload_id)\n")
   -> 0.0043s
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS\nindex_topics_on_image_upload_id ON topics USING btree (image_upload_id)\n")
   -> 0.0030s
-- add_column(:theme_modifier_sets, :topic_thumbnail_sizes, :string, {:array=>true})
   -> 0.0006s
-- create_table(:topic_thumbnails)
   -> 0.0074s
-- add_index(:topic_thumbnails, [:upload_id, :max_width, :max_height], {:name=>:unique_topic_thumbnails, :unique=>true})
   -> 0.0021s
== 20200429095034 AddTopicThumbnailInformation: migrated (0.0212s) ============

== 20200429095035 MigrateImageUrlToImageUploadId: migrating ===================
-- execute("DROP TABLE IF EXISTS tmp_post_image_uploads\n")
   -> 0.0002s
-- execute("CREATE TABLE tmp_post_image_uploads(\n  post_id int primary key,\n  upload_id int\n)\n")
   -> 0.0022s
-- execute("INSERT INTO tmp_post_image_uploads(post_id, upload_id)\nSELECT\n  posts.id as post_id,\n  uploads.id as upload_id\nFROM posts\nLEFT JOIN LATERAL regexp_matches(posts.image_url, '\\/(original|optimized)\\/\\dX[\\/\\.\\w]*\\/([a-zA-Z0-9]+)[\\.\\w]*') matched_sha1 ON TRUE\nLEFT JOIN uploads on uploads.sha1 = matched_sha1[2]\nWHERE posts.image_url IS NOT NULL\nAND uploads.id IS NOT NULL\nORDER BY posts.id ASC\n")
   -> 0.0011s
-- execute("DROP TABLE IF EXISTS tmp_post_image_uploads\n")
   -> 0.0015s
== 20200429095035 MigrateImageUrlToImageUploadId: migrated (0.0079s) ==========

== 20200430010528 RemoveAvgTimeFromTopicsPosts: migrating =====================
-- execute("ALTER TABLE topics DROP COLUMN IF EXISTS avg_time\n")
   -> 0.0009s
-- execute("DROP VIEW badge_posts")
   -> 0.0008s
-- execute("ALTER TABLE posts DROP COLUMN IF EXISTS avg_time\n")
   -> 0.0005s
-- execute("CREATE VIEW badge_posts AS\nSELECT p.*\nFROM posts p\nJOIN topics t ON t.id = p.topic_id\nJOIN categories c ON c.id = t.category_id\nWHERE c.allow_badges AND\n      p.deleted_at IS NULL AND\n      t.deleted_at IS NULL AND\n      NOT c.read_restricted AND\n      t.visible AND\n      p.post_type IN (1,2,3)\n")
   -> 0.0030s
== 20200430010528 RemoveAvgTimeFromTopicsPosts: migrated (0.0067s) ============

== 20200430072846 CreateInvitedUsers: migrating ===============================
-- create_table(:invited_users)
   -> 0.0029s
-- add_index(:invited_users, :invite_id)
   -> 0.0018s
-- add_index(:invited_users, [:user_id, :invite_id], {:unique=>true, :where=>"user_id IS NOT NULL"})
   -> 0.0014s
== 20200430072846 CreateInvitedUsers: migrated (0.0066s) ======================

== 20200505060712 AddDeleteWhenReminderSentBooleanToBookmarks: migrating ======
-- add_column(:bookmarks, :delete_when_reminder_sent, :boolean, {:null=>false, :default=>false})
   -> 0.0008s
== 20200505060712 AddDeleteWhenReminderSentBooleanToBookmarks: migrated (0.0014s)

== 20200506044956 MigrateAtDesktopBookmarkReminders: migrating ================
== 20200506044956 MigrateAtDesktopBookmarkReminders: migrated (0.0014s) =======

== 20200507234409 EnsureBookmarkDeleteWhenReminderSentNotNull: migrating ======
-- change_column_null(:bookmarks, :delete_when_reminder_sent, false)
   -> 0.0004s
== 20200507234409 EnsureBookmarkDeleteWhenReminderSentNotNull: migrated (0.0023s)

== 20200508141209 AllowNullOldEmailOnEmailChangeRequests: migrating ===========
-- change_column(:email_change_requests, :old_email, :string, {:null=>true})
   -> 0.0008s
== 20200508141209 AllowNullOldEmailOnEmailChangeRequests: migrated (0.0014s) ==

== 20200511043818 AddMoreFlairColumnsToGroup: migrating =======================
-- add_column(:groups, :flair_icon, :string)
   -> 0.0008s
-- add_column(:groups, :flair_upload_id, :integer)
   -> 0.0006s
== 20200511043818 AddMoreFlairColumnsToGroup: migrated (0.0038s) ==============

== 20200512064023 ChangeDraftSequenceToBigint: migrating ======================
-- change_column(:drafts, :sequence, :bigint, {:default=>0, :null=>false})
   -> 0.0080s
-- change_column(:draft_sequences, :sequence, :bigint, {:null=>false})
   -> 0.0063s
== 20200512064023 ChangeDraftSequenceToBigint: migrated (0.0151s) =============

== 20200513185052 DropTopicReplyCount: migrating ==============================
== 20200513185052 DropTopicReplyCount: migrated (0.0030s) =====================

== 20200517140915 UpdateDeprecatedIconNames: migrating ========================
-- execute("UPDATE badges\nSET icon = 'fab-500px'\nWHERE icon = '500px' OR icon = 'fa-500px'\n")
   -> 0.0006s
-- execute("UPDATE groups\nSET flair_icon = 'fab-500px'\nWHERE flair_icon = '500px' OR flair_icon = 'fa-500px'\n")
   -> 0.0007s
-- execute("UPDATE badges\nSET icon = 'far-address-book'\nWHERE icon = 'address-book-o' OR icon = 'fa-address-book-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-address-book'\nWHERE flair_icon = 'address-book-o' OR flair_icon = 'fa-address-book-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-address-card'\nWHERE icon = 'address-card-o' OR icon = 'fa-address-card-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-address-card'\nWHERE flair_icon = 'address-card-o' OR flair_icon = 'fa-address-card-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-adn'\nWHERE icon = 'adn' OR icon = 'fa-adn'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-adn'\nWHERE flair_icon = 'adn' OR flair_icon = 'fa-adn'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-amazon'\nWHERE icon = 'amazon' OR icon = 'fa-amazon'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-amazon'\nWHERE flair_icon = 'amazon' OR flair_icon = 'fa-amazon'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-android'\nWHERE icon = 'android' OR icon = 'fa-android'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-android'\nWHERE flair_icon = 'android' OR flair_icon = 'fa-android'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-angellist'\nWHERE icon = 'angellist' OR icon = 'fa-angellist'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-angellist'\nWHERE flair_icon = 'angellist' OR flair_icon = 'fa-angellist'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'fab-apple'\nWHERE icon = 'apple' OR icon = 'fa-apple'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-apple'\nWHERE flair_icon = 'apple' OR flair_icon = 'fa-apple'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'chart-area'\nWHERE icon = 'area-chart' OR icon = 'fa-area-chart'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'chart-area'\nWHERE flair_icon = 'area-chart' OR flair_icon = 'fa-area-chart'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-arrow-alt-circle-down'\nWHERE icon = 'arrow-circle-o-down' OR icon = 'fa-arrow-circle-o-down'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'far-arrow-alt-circle-down'\nWHERE flair_icon = 'arrow-circle-o-down' OR flair_icon = 'fa-arrow-circle-o-down'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-arrow-alt-circle-left'\nWHERE icon = 'arrow-circle-o-left' OR icon = 'fa-arrow-circle-o-left'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'far-arrow-alt-circle-left'\nWHERE flair_icon = 'arrow-circle-o-left' OR flair_icon = 'fa-arrow-circle-o-left'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-arrow-alt-circle-right'\nWHERE icon = 'arrow-circle-o-right' OR icon = 'fa-arrow-circle-o-right'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-arrow-alt-circle-right'\nWHERE flair_icon = 'arrow-circle-o-right' OR flair_icon = 'fa-arrow-circle-o-right'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-arrow-alt-circle-up'\nWHERE icon = 'arrow-circle-o-up' OR icon = 'fa-arrow-circle-o-up'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-arrow-alt-circle-up'\nWHERE flair_icon = 'arrow-circle-o-up' OR flair_icon = 'fa-arrow-circle-o-up'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'arrows-alt'\nWHERE icon = 'arrows' OR icon = 'fa-arrows'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'arrows-alt'\nWHERE flair_icon = 'arrows' OR flair_icon = 'fa-arrows'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'expand-arrows-alt'\nWHERE icon = 'arrows-alt' OR icon = 'fa-arrows-alt'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'expand-arrows-alt'\nWHERE flair_icon = 'arrows-alt' OR flair_icon = 'fa-arrows-alt'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'arrows-alt-h'\nWHERE icon = 'arrows-h' OR icon = 'fa-arrows-h'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'arrows-alt-h'\nWHERE flair_icon = 'arrows-h' OR flair_icon = 'fa-arrows-h'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'arrows-alt-v'\nWHERE icon = 'arrows-v' OR icon = 'fa-arrows-v'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'arrows-alt-v'\nWHERE flair_icon = 'arrows-v' OR flair_icon = 'fa-arrows-v'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'american-sign-language-interpreting'\nWHERE icon = 'asl-interpreting' OR icon = 'fa-asl-interpreting'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'american-sign-language-interpreting'\nWHERE flair_icon = 'asl-interpreting' OR flair_icon = 'fa-asl-interpreting'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'car'\nWHERE icon = 'automobile' OR icon = 'fa-automobile'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'car'\nWHERE flair_icon = 'automobile' OR flair_icon = 'fa-automobile'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-bandcamp'\nWHERE icon = 'bandcamp' OR icon = 'fa-bandcamp'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-bandcamp'\nWHERE flair_icon = 'bandcamp' OR flair_icon = 'fa-bandcamp'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'university'\nWHERE icon = 'bank' OR icon = 'fa-bank'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'university'\nWHERE flair_icon = 'bank' OR flair_icon = 'fa-bank'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'far-chart-bar'\nWHERE icon = 'bar-chart' OR icon = 'fa-bar-chart'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-chart-bar'\nWHERE flair_icon = 'bar-chart' OR flair_icon = 'fa-bar-chart'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-chart-bar'\nWHERE icon = 'bar-chart-o' OR icon = 'fa-bar-chart-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-chart-bar'\nWHERE flair_icon = 'bar-chart-o' OR flair_icon = 'fa-bar-chart-o'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'bath'\nWHERE icon = 'bathtub' OR icon = 'fa-bathtub'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'bath'\nWHERE flair_icon = 'bathtub' OR flair_icon = 'fa-bathtub'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'battery-full'\nWHERE icon = 'battery' OR icon = 'fa-battery'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'battery-full'\nWHERE flair_icon = 'battery' OR flair_icon = 'fa-battery'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'battery-empty'\nWHERE icon = 'battery-0' OR icon = 'fa-battery-0'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'battery-empty'\nWHERE flair_icon = 'battery-0' OR flair_icon = 'fa-battery-0'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'battery-quarter'\nWHERE icon = 'battery-1' OR icon = 'fa-battery-1'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'battery-quarter'\nWHERE flair_icon = 'battery-1' OR flair_icon = 'fa-battery-1'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'battery-half'\nWHERE icon = 'battery-2' OR icon = 'fa-battery-2'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'battery-half'\nWHERE flair_icon = 'battery-2' OR flair_icon = 'fa-battery-2'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'battery-three-quarters'\nWHERE icon = 'battery-3' OR icon = 'fa-battery-3'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'battery-three-quarters'\nWHERE flair_icon = 'battery-3' OR flair_icon = 'fa-battery-3'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'battery-full'\nWHERE icon = 'battery-4' OR icon = 'fa-battery-4'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'battery-full'\nWHERE flair_icon = 'battery-4' OR flair_icon = 'fa-battery-4'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-behance'\nWHERE icon = 'behance' OR icon = 'fa-behance'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-behance'\nWHERE flair_icon = 'behance' OR flair_icon = 'fa-behance'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-behance-square'\nWHERE icon = 'behance-square' OR icon = 'fa-behance-square'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'fab-behance-square'\nWHERE flair_icon = 'behance-square' OR flair_icon = 'fa-behance-square'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-bell'\nWHERE icon = 'bell-o' OR icon = 'fa-bell-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-bell'\nWHERE flair_icon = 'bell-o' OR flair_icon = 'fa-bell-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-bell-slash'\nWHERE icon = 'bell-slash-o' OR icon = 'fa-bell-slash-o'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'far-bell-slash'\nWHERE flair_icon = 'bell-slash-o' OR flair_icon = 'fa-bell-slash-o'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'fab-bitbucket'\nWHERE icon = 'bitbucket' OR icon = 'fa-bitbucket'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-bitbucket'\nWHERE flair_icon = 'bitbucket' OR flair_icon = 'fa-bitbucket'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-bitbucket'\nWHERE icon = 'bitbucket-square' OR icon = 'fa-bitbucket-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-bitbucket'\nWHERE flair_icon = 'bitbucket-square' OR flair_icon = 'fa-bitbucket-square'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-btc'\nWHERE icon = 'bitcoin' OR icon = 'fa-bitcoin'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-btc'\nWHERE flair_icon = 'bitcoin' OR flair_icon = 'fa-bitcoin'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-black-tie'\nWHERE icon = 'black-tie' OR icon = 'fa-black-tie'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-black-tie'\nWHERE flair_icon = 'black-tie' OR flair_icon = 'fa-black-tie'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-bluetooth'\nWHERE icon = 'bluetooth' OR icon = 'fa-bluetooth'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-bluetooth'\nWHERE flair_icon = 'bluetooth' OR flair_icon = 'fa-bluetooth'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-bluetooth-b'\nWHERE icon = 'bluetooth-b' OR icon = 'fa-bluetooth-b'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-bluetooth-b'\nWHERE flair_icon = 'bluetooth-b' OR flair_icon = 'fa-bluetooth-b'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-bookmark'\nWHERE icon = 'bookmark-o' OR icon = 'fa-bookmark-o'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'far-bookmark'\nWHERE flair_icon = 'bookmark-o' OR flair_icon = 'fa-bookmark-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-btc'\nWHERE icon = 'btc' OR icon = 'fa-btc'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-btc'\nWHERE flair_icon = 'btc' OR flair_icon = 'fa-btc'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-building'\nWHERE icon = 'building-o' OR icon = 'fa-building-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-building'\nWHERE flair_icon = 'building-o' OR flair_icon = 'fa-building-o'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'fab-buysellads'\nWHERE icon = 'buysellads' OR icon = 'fa-buysellads'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-buysellads'\nWHERE flair_icon = 'buysellads' OR flair_icon = 'fa-buysellads'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'taxi'\nWHERE icon = 'cab' OR icon = 'fa-cab'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'taxi'\nWHERE flair_icon = 'cab' OR flair_icon = 'fa-cab'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'calendar-alt'\nWHERE icon = 'calendar' OR icon = 'fa-calendar'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'calendar-alt'\nWHERE flair_icon = 'calendar' OR flair_icon = 'fa-calendar'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-calendar-check'\nWHERE icon = 'calendar-check-o' OR icon = 'fa-calendar-check-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-calendar-check'\nWHERE flair_icon = 'calendar-check-o' OR flair_icon = 'fa-calendar-check-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-calendar-minus'\nWHERE icon = 'calendar-minus-o' OR icon = 'fa-calendar-minus-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-calendar-minus'\nWHERE flair_icon = 'calendar-minus-o' OR flair_icon = 'fa-calendar-minus-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-calendar'\nWHERE icon = 'calendar-o' OR icon = 'fa-calendar-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-calendar'\nWHERE flair_icon = 'calendar-o' OR flair_icon = 'fa-calendar-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-calendar-plus'\nWHERE icon = 'calendar-plus-o' OR icon = 'fa-calendar-plus-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-calendar-plus'\nWHERE flair_icon = 'calendar-plus-o' OR flair_icon = 'fa-calendar-plus-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-calendar-times'\nWHERE icon = 'calendar-times-o' OR icon = 'fa-calendar-times-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-calendar-times'\nWHERE flair_icon = 'calendar-times-o' OR flair_icon = 'fa-calendar-times-o'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-caret-square-down'\nWHERE icon = 'caret-square-o-down' OR icon = 'fa-caret-square-o-down'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-caret-square-down'\nWHERE flair_icon = 'caret-square-o-down' OR flair_icon = 'fa-caret-square-o-down'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-caret-square-left'\nWHERE icon = 'caret-square-o-left' OR icon = 'fa-caret-square-o-left'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-caret-square-left'\nWHERE flair_icon = 'caret-square-o-left' OR flair_icon = 'fa-caret-square-o-left'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-caret-square-right'\nWHERE icon = 'caret-square-o-right' OR icon = 'fa-caret-square-o-right'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'far-caret-square-right'\nWHERE flair_icon = 'caret-square-o-right' OR flair_icon = 'fa-caret-square-o-right'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-caret-square-up'\nWHERE icon = 'caret-square-o-up' OR icon = 'fa-caret-square-o-up'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-caret-square-up'\nWHERE flair_icon = 'caret-square-o-up' OR flair_icon = 'fa-caret-square-o-up'\n")
   -> 0.0006s
-- execute("UPDATE badges\nSET icon = 'far-closed-captioning'\nWHERE icon = 'cc' OR icon = 'fa-cc'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-closed-captioning'\nWHERE flair_icon = 'cc' OR flair_icon = 'fa-cc'\n")
   -> 0.0006s
-- execute("UPDATE badges\nSET icon = 'fab-cc-amex'\nWHERE icon = 'cc-amex' OR icon = 'fa-cc-amex'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-cc-amex'\nWHERE flair_icon = 'cc-amex' OR flair_icon = 'fa-cc-amex'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-cc-diners-club'\nWHERE icon = 'cc-diners-club' OR icon = 'fa-cc-diners-club'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-cc-diners-club'\nWHERE flair_icon = 'cc-diners-club' OR flair_icon = 'fa-cc-diners-club'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-cc-discover'\nWHERE icon = 'cc-discover' OR icon = 'fa-cc-discover'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-cc-discover'\nWHERE flair_icon = 'cc-discover' OR flair_icon = 'fa-cc-discover'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-cc-jcb'\nWHERE icon = 'cc-jcb' OR icon = 'fa-cc-jcb'\n")
   -> 0.0006s
-- execute("UPDATE groups\nSET flair_icon = 'fab-cc-jcb'\nWHERE flair_icon = 'cc-jcb' OR flair_icon = 'fa-cc-jcb'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-cc-mastercard'\nWHERE icon = 'cc-mastercard' OR icon = 'fa-cc-mastercard'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-cc-mastercard'\nWHERE flair_icon = 'cc-mastercard' OR flair_icon = 'fa-cc-mastercard'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-cc-paypal'\nWHERE icon = 'cc-paypal' OR icon = 'fa-cc-paypal'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-cc-paypal'\nWHERE flair_icon = 'cc-paypal' OR flair_icon = 'fa-cc-paypal'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-cc-stripe'\nWHERE icon = 'cc-stripe' OR icon = 'fa-cc-stripe'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-cc-stripe'\nWHERE flair_icon = 'cc-stripe' OR flair_icon = 'fa-cc-stripe'\n")
   -> 0.0006s
-- execute("UPDATE badges\nSET icon = 'fab-cc-visa'\nWHERE icon = 'cc-visa' OR icon = 'fa-cc-visa'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-cc-visa'\nWHERE flair_icon = 'cc-visa' OR flair_icon = 'fa-cc-visa'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'link'\nWHERE icon = 'chain' OR icon = 'fa-chain'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'link'\nWHERE flair_icon = 'chain' OR flair_icon = 'fa-chain'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'unlink'\nWHERE icon = 'chain-broken' OR icon = 'fa-chain-broken'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'unlink'\nWHERE flair_icon = 'chain-broken' OR flair_icon = 'fa-chain-broken'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-check-circle'\nWHERE icon = 'check-circle-o' OR icon = 'fa-check-circle-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-check-circle'\nWHERE flair_icon = 'check-circle-o' OR flair_icon = 'fa-check-circle-o'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-check-square'\nWHERE icon = 'check-square-o' OR icon = 'fa-check-square-o'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'far-check-square'\nWHERE flair_icon = 'check-square-o' OR flair_icon = 'fa-check-square-o'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'fab-chrome'\nWHERE icon = 'chrome' OR icon = 'fa-chrome'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-chrome'\nWHERE flair_icon = 'chrome' OR flair_icon = 'fa-chrome'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-circle'\nWHERE icon = 'circle-o' OR icon = 'fa-circle-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-circle'\nWHERE flair_icon = 'circle-o' OR flair_icon = 'fa-circle-o'\n")
   -> 0.0011s
-- execute("UPDATE badges\nSET icon = 'circle-notch'\nWHERE icon = 'circle-o-notch' OR icon = 'fa-circle-o-notch'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'circle-notch'\nWHERE flair_icon = 'circle-o-notch' OR flair_icon = 'fa-circle-o-notch'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-circle'\nWHERE icon = 'circle-thin' OR icon = 'fa-circle-thin'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-circle'\nWHERE flair_icon = 'circle-thin' OR flair_icon = 'fa-circle-thin'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-clipboard'\nWHERE icon = 'clipboard' OR icon = 'fa-clipboard'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-clipboard'\nWHERE flair_icon = 'clipboard' OR flair_icon = 'fa-clipboard'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-clock'\nWHERE icon = 'clock-o' OR icon = 'fa-clock-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-clock'\nWHERE flair_icon = 'clock-o' OR flair_icon = 'fa-clock-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-clone'\nWHERE icon = 'clone' OR icon = 'fa-clone'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-clone'\nWHERE flair_icon = 'clone' OR flair_icon = 'fa-clone'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'times'\nWHERE icon = 'close' OR icon = 'fa-close'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'times'\nWHERE flair_icon = 'close' OR flair_icon = 'fa-close'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'cloud-download-alt'\nWHERE icon = 'cloud-download' OR icon = 'fa-cloud-download'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'cloud-download-alt'\nWHERE flair_icon = 'cloud-download' OR flair_icon = 'fa-cloud-download'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'cloud-upload-alt'\nWHERE icon = 'cloud-upload' OR icon = 'fa-cloud-upload'\n")
   -> 0.0007s
-- execute("UPDATE groups\nSET flair_icon = 'cloud-upload-alt'\nWHERE flair_icon = 'cloud-upload' OR flair_icon = 'fa-cloud-upload'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'yen-sign'\nWHERE icon = 'cny' OR icon = 'fa-cny'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'yen-sign'\nWHERE flair_icon = 'cny' OR flair_icon = 'fa-cny'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'code-branch'\nWHERE icon = 'code-fork' OR icon = 'fa-code-fork'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'code-branch'\nWHERE flair_icon = 'code-fork' OR flair_icon = 'fa-code-fork'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-codepen'\nWHERE icon = 'codepen' OR icon = 'fa-codepen'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-codepen'\nWHERE flair_icon = 'codepen' OR flair_icon = 'fa-codepen'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-codiepie'\nWHERE icon = 'codiepie' OR icon = 'fa-codiepie'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-codiepie'\nWHERE flair_icon = 'codiepie' OR flair_icon = 'fa-codiepie'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-comment'\nWHERE icon = 'comment-o' OR icon = 'fa-comment-o'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'far-comment'\nWHERE flair_icon = 'comment-o' OR flair_icon = 'fa-comment-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-comment-dots'\nWHERE icon = 'commenting' OR icon = 'fa-commenting'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-comment-dots'\nWHERE flair_icon = 'commenting' OR flair_icon = 'fa-commenting'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-comment-dots'\nWHERE icon = 'commenting-o' OR icon = 'fa-commenting-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-comment-dots'\nWHERE flair_icon = 'commenting-o' OR flair_icon = 'fa-commenting-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-comments'\nWHERE icon = 'comments-o' OR icon = 'fa-comments-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-comments'\nWHERE flair_icon = 'comments-o' OR flair_icon = 'fa-comments-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-compass'\nWHERE icon = 'compass' OR icon = 'fa-compass'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-compass'\nWHERE flair_icon = 'compass' OR flair_icon = 'fa-compass'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-connectdevelop'\nWHERE icon = 'connectdevelop' OR icon = 'fa-connectdevelop'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'fab-connectdevelop'\nWHERE flair_icon = 'connectdevelop' OR flair_icon = 'fa-connectdevelop'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-contao'\nWHERE icon = 'contao' OR icon = 'fa-contao'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-contao'\nWHERE flair_icon = 'contao' OR flair_icon = 'fa-contao'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-copyright'\nWHERE icon = 'copyright' OR icon = 'fa-copyright'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-copyright'\nWHERE flair_icon = 'copyright' OR flair_icon = 'fa-copyright'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-creative-commons'\nWHERE icon = 'creative-commons' OR icon = 'fa-creative-commons'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-creative-commons'\nWHERE flair_icon = 'creative-commons' OR flair_icon = 'fa-creative-commons'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-credit-card'\nWHERE icon = 'credit-card' OR icon = 'fa-credit-card'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-credit-card'\nWHERE flair_icon = 'credit-card' OR flair_icon = 'fa-credit-card'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'credit-card'\nWHERE icon = 'credit-card-alt' OR icon = 'fa-credit-card-alt'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'credit-card'\nWHERE flair_icon = 'credit-card-alt' OR flair_icon = 'fa-credit-card-alt'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-css3'\nWHERE icon = 'css3' OR icon = 'fa-css3'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-css3'\nWHERE flair_icon = 'css3' OR flair_icon = 'fa-css3'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'utensils'\nWHERE icon = 'cutlery' OR icon = 'fa-cutlery'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'utensils'\nWHERE flair_icon = 'cutlery' OR flair_icon = 'fa-cutlery'\n")
   -> 0.0007s
-- execute("UPDATE badges\nSET icon = 'tachometer-alt'\nWHERE icon = 'dashboard' OR icon = 'fa-dashboard'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'tachometer-alt'\nWHERE flair_icon = 'dashboard' OR flair_icon = 'fa-dashboard'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-dashcube'\nWHERE icon = 'dashcube' OR icon = 'fa-dashcube'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-dashcube'\nWHERE flair_icon = 'dashcube' OR flair_icon = 'fa-dashcube'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'deaf'\nWHERE icon = 'deafness' OR icon = 'fa-deafness'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'deaf'\nWHERE flair_icon = 'deafness' OR flair_icon = 'fa-deafness'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'outdent'\nWHERE icon = 'dedent' OR icon = 'fa-dedent'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'outdent'\nWHERE flair_icon = 'dedent' OR flair_icon = 'fa-dedent'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-delicious'\nWHERE icon = 'delicious' OR icon = 'fa-delicious'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-delicious'\nWHERE flair_icon = 'delicious' OR flair_icon = 'fa-delicious'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-deviantart'\nWHERE icon = 'deviantart' OR icon = 'fa-deviantart'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-deviantart'\nWHERE flair_icon = 'deviantart' OR flair_icon = 'fa-deviantart'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-gem'\nWHERE icon = 'diamond' OR icon = 'fa-diamond'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-gem'\nWHERE flair_icon = 'diamond' OR flair_icon = 'fa-diamond'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-digg'\nWHERE icon = 'digg' OR icon = 'fa-digg'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-digg'\nWHERE flair_icon = 'digg' OR flair_icon = 'fa-digg'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'fab-discord'\nWHERE icon = 'discord' OR icon = 'fa-discord'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-discord'\nWHERE flair_icon = 'discord' OR flair_icon = 'fa-discord'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'dollar-sign'\nWHERE icon = 'dollar' OR icon = 'fa-dollar'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'dollar-sign'\nWHERE flair_icon = 'dollar' OR flair_icon = 'fa-dollar'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-dot-circle'\nWHERE icon = 'dot-circle-o' OR icon = 'fa-dot-circle-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-dot-circle'\nWHERE flair_icon = 'dot-circle-o' OR flair_icon = 'fa-dot-circle-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-dribbble'\nWHERE icon = 'dribbble' OR icon = 'fa-dribbble'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-dribbble'\nWHERE flair_icon = 'dribbble' OR flair_icon = 'fa-dribbble'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'id-card'\nWHERE icon = 'drivers-license' OR icon = 'fa-drivers-license'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'id-card'\nWHERE flair_icon = 'drivers-license' OR flair_icon = 'fa-drivers-license'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-id-card'\nWHERE icon = 'drivers-license-o' OR icon = 'fa-drivers-license-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-id-card'\nWHERE flair_icon = 'drivers-license-o' OR flair_icon = 'fa-drivers-license-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-dropbox'\nWHERE icon = 'dropbox' OR icon = 'fa-dropbox'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-dropbox'\nWHERE flair_icon = 'dropbox' OR flair_icon = 'fa-dropbox'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-drupal'\nWHERE icon = 'drupal' OR icon = 'fa-drupal'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-drupal'\nWHERE flair_icon = 'drupal' OR flair_icon = 'fa-drupal'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-edge'\nWHERE icon = 'edge' OR icon = 'fa-edge'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-edge'\nWHERE flair_icon = 'edge' OR flair_icon = 'fa-edge'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-sellcast'\nWHERE icon = 'eercast' OR icon = 'fa-eercast'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-sellcast'\nWHERE flair_icon = 'eercast' OR flair_icon = 'fa-eercast'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-empire'\nWHERE icon = 'empire' OR icon = 'fa-empire'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-empire'\nWHERE flair_icon = 'empire' OR flair_icon = 'fa-empire'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-envelope'\nWHERE icon = 'envelope-o' OR icon = 'fa-envelope-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-envelope'\nWHERE flair_icon = 'envelope-o' OR flair_icon = 'fa-envelope-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-envelope-open'\nWHERE icon = 'envelope-open-o' OR icon = 'fa-envelope-open-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-envelope-open'\nWHERE flair_icon = 'envelope-open-o' OR flair_icon = 'fa-envelope-open-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-envira'\nWHERE icon = 'envira' OR icon = 'fa-envira'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-envira'\nWHERE flair_icon = 'envira' OR flair_icon = 'fa-envira'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-etsy'\nWHERE icon = 'etsy' OR icon = 'fa-etsy'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-etsy'\nWHERE flair_icon = 'etsy' OR flair_icon = 'fa-etsy'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'euro-sign'\nWHERE icon = 'eur' OR icon = 'fa-eur'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'euro-sign'\nWHERE flair_icon = 'eur' OR flair_icon = 'fa-eur'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'euro-sign'\nWHERE icon = 'euro' OR icon = 'fa-euro'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'euro-sign'\nWHERE flair_icon = 'euro' OR flair_icon = 'fa-euro'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'exchange-alt'\nWHERE icon = 'exchange' OR icon = 'fa-exchange'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'exchange-alt'\nWHERE flair_icon = 'exchange' OR flair_icon = 'fa-exchange'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-expeditedssl'\nWHERE icon = 'expeditedssl' OR icon = 'fa-expeditedssl'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-expeditedssl'\nWHERE flair_icon = 'expeditedssl' OR flair_icon = 'fa-expeditedssl'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'external-link-alt'\nWHERE icon = 'external-link' OR icon = 'fa-external-link'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'external-link-alt'\nWHERE flair_icon = 'external-link' OR flair_icon = 'fa-external-link'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'external-link-square-alt'\nWHERE icon = 'external-link-square' OR icon = 'fa-external-link-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'external-link-square-alt'\nWHERE flair_icon = 'external-link-square' OR flair_icon = 'fa-external-link-square'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'far-eye'\nWHERE icon = 'eye' OR icon = 'fa-eye'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-eye'\nWHERE flair_icon = 'eye' OR flair_icon = 'fa-eye'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-eye-slash'\nWHERE icon = 'eye-slash' OR icon = 'fa-eye-slash'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-eye-slash'\nWHERE flair_icon = 'eye-slash' OR flair_icon = 'fa-eye-slash'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'eye-dropper'\nWHERE icon = 'eyedropper' OR icon = 'fa-eyedropper'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'eye-dropper'\nWHERE flair_icon = 'eyedropper' OR flair_icon = 'fa-eyedropper'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-font-awesome'\nWHERE icon = 'fa' OR icon = 'fa-fa'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'fab-font-awesome'\nWHERE flair_icon = 'fa' OR flair_icon = 'fa-fa'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-facebook-f'\nWHERE icon = 'facebook' OR icon = 'fa-facebook'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-facebook-f'\nWHERE flair_icon = 'facebook' OR flair_icon = 'fa-facebook'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-facebook-f'\nWHERE icon = 'facebook-f' OR icon = 'fa-facebook-f'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-facebook-f'\nWHERE flair_icon = 'facebook-f' OR flair_icon = 'fa-facebook-f'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-facebook'\nWHERE icon = 'facebook-official' OR icon = 'fa-facebook-official'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-facebook'\nWHERE flair_icon = 'facebook-official' OR flair_icon = 'fa-facebook-official'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-facebook-square'\nWHERE icon = 'facebook-square' OR icon = 'fa-facebook-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-facebook-square'\nWHERE flair_icon = 'facebook-square' OR flair_icon = 'fa-facebook-square'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'rss'\nWHERE icon = 'feed' OR icon = 'fa-feed'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'rss'\nWHERE flair_icon = 'feed' OR flair_icon = 'fa-feed'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-file-archive'\nWHERE icon = 'file-archive-o' OR icon = 'fa-file-archive-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-archive'\nWHERE flair_icon = 'file-archive-o' OR flair_icon = 'fa-file-archive-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-file-audio'\nWHERE icon = 'file-audio-o' OR icon = 'fa-file-audio-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-audio'\nWHERE flair_icon = 'file-audio-o' OR flair_icon = 'fa-file-audio-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-file-code'\nWHERE icon = 'file-code-o' OR icon = 'fa-file-code-o'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-code'\nWHERE flair_icon = 'file-code-o' OR flair_icon = 'fa-file-code-o'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-file-excel'\nWHERE icon = 'file-excel-o' OR icon = 'fa-file-excel-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-excel'\nWHERE flair_icon = 'file-excel-o' OR flair_icon = 'fa-file-excel-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-file-image'\nWHERE icon = 'file-image-o' OR icon = 'fa-file-image-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-image'\nWHERE flair_icon = 'file-image-o' OR flair_icon = 'fa-file-image-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-file-video'\nWHERE icon = 'file-movie-o' OR icon = 'fa-file-movie-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-video'\nWHERE flair_icon = 'file-movie-o' OR flair_icon = 'fa-file-movie-o'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-file'\nWHERE icon = 'file-o' OR icon = 'fa-file-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-file'\nWHERE flair_icon = 'file-o' OR flair_icon = 'fa-file-o'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-file-pdf'\nWHERE icon = 'file-pdf-o' OR icon = 'fa-file-pdf-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-pdf'\nWHERE flair_icon = 'file-pdf-o' OR flair_icon = 'fa-file-pdf-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-file-image'\nWHERE icon = 'file-photo-o' OR icon = 'fa-file-photo-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-image'\nWHERE flair_icon = 'file-photo-o' OR flair_icon = 'fa-file-photo-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-file-image'\nWHERE icon = 'file-picture-o' OR icon = 'fa-file-picture-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-image'\nWHERE flair_icon = 'file-picture-o' OR flair_icon = 'fa-file-picture-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-file-powerpoint'\nWHERE icon = 'file-powerpoint-o' OR icon = 'fa-file-powerpoint-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-powerpoint'\nWHERE flair_icon = 'file-powerpoint-o' OR flair_icon = 'fa-file-powerpoint-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-file-audio'\nWHERE icon = 'file-sound-o' OR icon = 'fa-file-sound-o'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-audio'\nWHERE flair_icon = 'file-sound-o' OR flair_icon = 'fa-file-sound-o'\n")
   -> 0.0006s
-- execute("UPDATE badges\nSET icon = 'file-alt'\nWHERE icon = 'file-text' OR icon = 'fa-file-text'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'file-alt'\nWHERE flair_icon = 'file-text' OR flair_icon = 'fa-file-text'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-file-alt'\nWHERE icon = 'file-text-o' OR icon = 'fa-file-text-o'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-alt'\nWHERE flair_icon = 'file-text-o' OR flair_icon = 'fa-file-text-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-file-video'\nWHERE icon = 'file-video-o' OR icon = 'fa-file-video-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-video'\nWHERE flair_icon = 'file-video-o' OR flair_icon = 'fa-file-video-o'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-file-word'\nWHERE icon = 'file-word-o' OR icon = 'fa-file-word-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-word'\nWHERE flair_icon = 'file-word-o' OR flair_icon = 'fa-file-word-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-file-archive'\nWHERE icon = 'file-zip-o' OR icon = 'fa-file-zip-o'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'far-file-archive'\nWHERE flair_icon = 'file-zip-o' OR flair_icon = 'fa-file-zip-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-copy'\nWHERE icon = 'files-o' OR icon = 'fa-files-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-copy'\nWHERE flair_icon = 'files-o' OR flair_icon = 'fa-files-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-firefox'\nWHERE icon = 'firefox' OR icon = 'fa-firefox'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-firefox'\nWHERE flair_icon = 'firefox' OR flair_icon = 'fa-firefox'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-first-order'\nWHERE icon = 'first-order' OR icon = 'fa-first-order'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-first-order'\nWHERE flair_icon = 'first-order' OR flair_icon = 'fa-first-order'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-flag'\nWHERE icon = 'flag-o' OR icon = 'fa-flag-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-flag'\nWHERE flair_icon = 'flag-o' OR flair_icon = 'fa-flag-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'bolt'\nWHERE icon = 'flash' OR icon = 'fa-flash'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'bolt'\nWHERE flair_icon = 'flash' OR flair_icon = 'fa-flash'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-flickr'\nWHERE icon = 'flickr' OR icon = 'fa-flickr'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-flickr'\nWHERE flair_icon = 'flickr' OR flair_icon = 'fa-flickr'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-save'\nWHERE icon = 'floppy-o' OR icon = 'fa-floppy-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-save'\nWHERE flair_icon = 'floppy-o' OR flair_icon = 'fa-floppy-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-folder'\nWHERE icon = 'folder-o' OR icon = 'fa-folder-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-folder'\nWHERE flair_icon = 'folder-o' OR flair_icon = 'fa-folder-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-folder-open'\nWHERE icon = 'folder-open-o' OR icon = 'fa-folder-open-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-folder-open'\nWHERE flair_icon = 'folder-open-o' OR flair_icon = 'fa-folder-open-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-font-awesome'\nWHERE icon = 'font-awesome' OR icon = 'fa-font-awesome'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-font-awesome'\nWHERE flair_icon = 'font-awesome' OR flair_icon = 'fa-font-awesome'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-fonticons'\nWHERE icon = 'fonticons' OR icon = 'fa-fonticons'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-fonticons'\nWHERE flair_icon = 'fonticons' OR flair_icon = 'fa-fonticons'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-fort-awesome'\nWHERE icon = 'fort-awesome' OR icon = 'fa-fort-awesome'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-fort-awesome'\nWHERE flair_icon = 'fort-awesome' OR flair_icon = 'fa-fort-awesome'\n")
   -> 0.0006s
-- execute("UPDATE badges\nSET icon = 'fab-forumbee'\nWHERE icon = 'forumbee' OR icon = 'fa-forumbee'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-forumbee'\nWHERE flair_icon = 'forumbee' OR flair_icon = 'fa-forumbee'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-foursquare'\nWHERE icon = 'foursquare' OR icon = 'fa-foursquare'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-foursquare'\nWHERE flair_icon = 'foursquare' OR flair_icon = 'fa-foursquare'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-free-code-camp'\nWHERE icon = 'free-code-camp' OR icon = 'fa-free-code-camp'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-free-code-camp'\nWHERE flair_icon = 'free-code-camp' OR flair_icon = 'fa-free-code-camp'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-frown'\nWHERE icon = 'frown-o' OR icon = 'fa-frown-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-frown'\nWHERE flair_icon = 'frown-o' OR flair_icon = 'fa-frown-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-futbol'\nWHERE icon = 'futbol-o' OR icon = 'fa-futbol-o'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'far-futbol'\nWHERE flair_icon = 'futbol-o' OR flair_icon = 'fa-futbol-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'pound-sign'\nWHERE icon = 'gbp' OR icon = 'fa-gbp'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'pound-sign'\nWHERE flair_icon = 'gbp' OR flair_icon = 'fa-gbp'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-empire'\nWHERE icon = 'ge' OR icon = 'fa-ge'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-empire'\nWHERE flair_icon = 'ge' OR flair_icon = 'fa-ge'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'cog'\nWHERE icon = 'gear' OR icon = 'fa-gear'\n")
   -> 0.0006s
-- execute("UPDATE groups\nSET flair_icon = 'cog'\nWHERE flair_icon = 'gear' OR flair_icon = 'fa-gear'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'cogs'\nWHERE icon = 'gears' OR icon = 'fa-gears'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'cogs'\nWHERE flair_icon = 'gears' OR flair_icon = 'fa-gears'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-get-pocket'\nWHERE icon = 'get-pocket' OR icon = 'fa-get-pocket'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-get-pocket'\nWHERE flair_icon = 'get-pocket' OR flair_icon = 'fa-get-pocket'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-gg'\nWHERE icon = 'gg' OR icon = 'fa-gg'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-gg'\nWHERE flair_icon = 'gg' OR flair_icon = 'fa-gg'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-gg-circle'\nWHERE icon = 'gg-circle' OR icon = 'fa-gg-circle'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-gg-circle'\nWHERE flair_icon = 'gg-circle' OR flair_icon = 'fa-gg-circle'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-git'\nWHERE icon = 'git' OR icon = 'fa-git'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-git'\nWHERE flair_icon = 'git' OR flair_icon = 'fa-git'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-git-square'\nWHERE icon = 'git-square' OR icon = 'fa-git-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-git-square'\nWHERE flair_icon = 'git-square' OR flair_icon = 'fa-git-square'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-github'\nWHERE icon = 'github' OR icon = 'fa-github'\n")
   -> 0.0006s
-- execute("UPDATE groups\nSET flair_icon = 'fab-github'\nWHERE flair_icon = 'github' OR flair_icon = 'fa-github'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-github-alt'\nWHERE icon = 'github-alt' OR icon = 'fa-github-alt'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-github-alt'\nWHERE flair_icon = 'github-alt' OR flair_icon = 'fa-github-alt'\n")
   -> 0.0021s
-- execute("UPDATE badges\nSET icon = 'fab-github-square'\nWHERE icon = 'github-square' OR icon = 'fa-github-square'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-github-square'\nWHERE flair_icon = 'github-square' OR flair_icon = 'fa-github-square'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-gitlab'\nWHERE icon = 'gitlab' OR icon = 'fa-gitlab'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-gitlab'\nWHERE flair_icon = 'gitlab' OR flair_icon = 'fa-gitlab'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-gratipay'\nWHERE icon = 'gittip' OR icon = 'fa-gittip'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-gratipay'\nWHERE flair_icon = 'gittip' OR flair_icon = 'fa-gittip'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'glass-martini'\nWHERE icon = 'glass' OR icon = 'fa-glass'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'glass-martini'\nWHERE flair_icon = 'glass' OR flair_icon = 'fa-glass'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-glide'\nWHERE icon = 'glide' OR icon = 'fa-glide'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-glide'\nWHERE flair_icon = 'glide' OR flair_icon = 'fa-glide'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-glide-g'\nWHERE icon = 'glide-g' OR icon = 'fa-glide-g'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-glide-g'\nWHERE flair_icon = 'glide-g' OR flair_icon = 'fa-glide-g'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-google'\nWHERE icon = 'google' OR icon = 'fa-google'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-google'\nWHERE flair_icon = 'google' OR flair_icon = 'fa-google'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-google-plus-g'\nWHERE icon = 'google-plus' OR icon = 'fa-google-plus'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-google-plus-g'\nWHERE flair_icon = 'google-plus' OR flair_icon = 'fa-google-plus'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-google-plus'\nWHERE icon = 'google-plus-circle' OR icon = 'fa-google-plus-circle'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-google-plus'\nWHERE flair_icon = 'google-plus-circle' OR flair_icon = 'fa-google-plus-circle'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-google-plus'\nWHERE icon = 'google-plus-official' OR icon = 'fa-google-plus-official'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-google-plus'\nWHERE flair_icon = 'google-plus-official' OR flair_icon = 'fa-google-plus-official'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-google-plus-square'\nWHERE icon = 'google-plus-square' OR icon = 'fa-google-plus-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-google-plus-square'\nWHERE flair_icon = 'google-plus-square' OR flair_icon = 'fa-google-plus-square'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'fab-google-wallet'\nWHERE icon = 'google-wallet' OR icon = 'fa-google-wallet'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-google-wallet'\nWHERE flair_icon = 'google-wallet' OR flair_icon = 'fa-google-wallet'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'fab-gratipay'\nWHERE icon = 'gratipay' OR icon = 'fa-gratipay'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-gratipay'\nWHERE flair_icon = 'gratipay' OR flair_icon = 'fa-gratipay'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-grav'\nWHERE icon = 'grav' OR icon = 'fa-grav'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-grav'\nWHERE flair_icon = 'grav' OR flair_icon = 'fa-grav'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'users'\nWHERE icon = 'group' OR icon = 'fa-group'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'users'\nWHERE flair_icon = 'group' OR flair_icon = 'fa-group'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-hacker-news'\nWHERE icon = 'hacker-news' OR icon = 'fa-hacker-news'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-hacker-news'\nWHERE flair_icon = 'hacker-news' OR flair_icon = 'fa-hacker-news'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-hand-rock'\nWHERE icon = 'hand-grab-o' OR icon = 'fa-hand-grab-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-rock'\nWHERE flair_icon = 'hand-grab-o' OR flair_icon = 'fa-hand-grab-o'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-hand-lizard'\nWHERE icon = 'hand-lizard-o' OR icon = 'fa-hand-lizard-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-lizard'\nWHERE flair_icon = 'hand-lizard-o' OR flair_icon = 'fa-hand-lizard-o'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'far-hand-point-down'\nWHERE icon = 'hand-o-down' OR icon = 'fa-hand-o-down'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-point-down'\nWHERE flair_icon = 'hand-o-down' OR flair_icon = 'fa-hand-o-down'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-hand-point-left'\nWHERE icon = 'hand-o-left' OR icon = 'fa-hand-o-left'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-point-left'\nWHERE flair_icon = 'hand-o-left' OR flair_icon = 'fa-hand-o-left'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-hand-point-right'\nWHERE icon = 'hand-o-right' OR icon = 'fa-hand-o-right'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-point-right'\nWHERE flair_icon = 'hand-o-right' OR flair_icon = 'fa-hand-o-right'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-hand-point-up'\nWHERE icon = 'hand-o-up' OR icon = 'fa-hand-o-up'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-point-up'\nWHERE flair_icon = 'hand-o-up' OR flair_icon = 'fa-hand-o-up'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-hand-paper'\nWHERE icon = 'hand-paper-o' OR icon = 'fa-hand-paper-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-paper'\nWHERE flair_icon = 'hand-paper-o' OR flair_icon = 'fa-hand-paper-o'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-hand-peace'\nWHERE icon = 'hand-peace-o' OR icon = 'fa-hand-peace-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-peace'\nWHERE flair_icon = 'hand-peace-o' OR flair_icon = 'fa-hand-peace-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-hand-pointer'\nWHERE icon = 'hand-pointer-o' OR icon = 'fa-hand-pointer-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-pointer'\nWHERE flair_icon = 'hand-pointer-o' OR flair_icon = 'fa-hand-pointer-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-hand-rock'\nWHERE icon = 'hand-rock-o' OR icon = 'fa-hand-rock-o'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-rock'\nWHERE flair_icon = 'hand-rock-o' OR flair_icon = 'fa-hand-rock-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-hand-scissors'\nWHERE icon = 'hand-scissors-o' OR icon = 'fa-hand-scissors-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-scissors'\nWHERE flair_icon = 'hand-scissors-o' OR flair_icon = 'fa-hand-scissors-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-hand-spock'\nWHERE icon = 'hand-spock-o' OR icon = 'fa-hand-spock-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-spock'\nWHERE flair_icon = 'hand-spock-o' OR flair_icon = 'fa-hand-spock-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-hand-paper'\nWHERE icon = 'hand-stop-o' OR icon = 'fa-hand-stop-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-hand-paper'\nWHERE flair_icon = 'hand-stop-o' OR flair_icon = 'fa-hand-stop-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-handshake'\nWHERE icon = 'handshake-o' OR icon = 'fa-handshake-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-handshake'\nWHERE flair_icon = 'handshake-o' OR flair_icon = 'fa-handshake-o'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'deaf'\nWHERE icon = 'hard-of-hearing' OR icon = 'fa-hard-of-hearing'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'deaf'\nWHERE flair_icon = 'hard-of-hearing' OR flair_icon = 'fa-hard-of-hearing'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-hdd'\nWHERE icon = 'hdd-o' OR icon = 'fa-hdd-o'\n")
   -> 0.0006s
-- execute("UPDATE groups\nSET flair_icon = 'far-hdd'\nWHERE flair_icon = 'hdd-o' OR flair_icon = 'fa-hdd-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'heading'\nWHERE icon = 'header' OR icon = 'fa-header'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'heading'\nWHERE flair_icon = 'header' OR flair_icon = 'fa-header'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-heart'\nWHERE icon = 'heart-o' OR icon = 'fa-heart-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-heart'\nWHERE flair_icon = 'heart-o' OR flair_icon = 'fa-heart-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-hospital'\nWHERE icon = 'hospital-o' OR icon = 'fa-hospital-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-hospital'\nWHERE flair_icon = 'hospital-o' OR flair_icon = 'fa-hospital-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'bed'\nWHERE icon = 'hotel' OR icon = 'fa-hotel'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'bed'\nWHERE flair_icon = 'hotel' OR flair_icon = 'fa-hotel'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'hourglass-start'\nWHERE icon = 'hourglass-1' OR icon = 'fa-hourglass-1'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'hourglass-start'\nWHERE flair_icon = 'hourglass-1' OR flair_icon = 'fa-hourglass-1'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'hourglass-half'\nWHERE icon = 'hourglass-2' OR icon = 'fa-hourglass-2'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'hourglass-half'\nWHERE flair_icon = 'hourglass-2' OR flair_icon = 'fa-hourglass-2'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'hourglass-end'\nWHERE icon = 'hourglass-3' OR icon = 'fa-hourglass-3'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'hourglass-end'\nWHERE flair_icon = 'hourglass-3' OR flair_icon = 'fa-hourglass-3'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-hourglass'\nWHERE icon = 'hourglass-o' OR icon = 'fa-hourglass-o'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'far-hourglass'\nWHERE flair_icon = 'hourglass-o' OR flair_icon = 'fa-hourglass-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-houzz'\nWHERE icon = 'houzz' OR icon = 'fa-houzz'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-houzz'\nWHERE flair_icon = 'houzz' OR flair_icon = 'fa-houzz'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-html5'\nWHERE icon = 'html5' OR icon = 'fa-html5'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-html5'\nWHERE flair_icon = 'html5' OR flair_icon = 'fa-html5'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-id-card'\nWHERE icon = 'id-card-o' OR icon = 'fa-id-card-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-id-card'\nWHERE flair_icon = 'id-card-o' OR flair_icon = 'fa-id-card-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'shekel-sign'\nWHERE icon = 'ils' OR icon = 'fa-ils'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'shekel-sign'\nWHERE flair_icon = 'ils' OR flair_icon = 'fa-ils'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-image'\nWHERE icon = 'image' OR icon = 'fa-image'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-image'\nWHERE flair_icon = 'image' OR flair_icon = 'fa-image'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-imdb'\nWHERE icon = 'imdb' OR icon = 'fa-imdb'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-imdb'\nWHERE flair_icon = 'imdb' OR flair_icon = 'fa-imdb'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'rupee-sign'\nWHERE icon = 'inr' OR icon = 'fa-inr'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'rupee-sign'\nWHERE flair_icon = 'inr' OR flair_icon = 'fa-inr'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-instagram'\nWHERE icon = 'instagram' OR icon = 'fa-instagram'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-instagram'\nWHERE flair_icon = 'instagram' OR flair_icon = 'fa-instagram'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'university'\nWHERE icon = 'institution' OR icon = 'fa-institution'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'university'\nWHERE flair_icon = 'institution' OR flair_icon = 'fa-institution'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-internet-explorer'\nWHERE icon = 'internet-explorer' OR icon = 'fa-internet-explorer'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-internet-explorer'\nWHERE flair_icon = 'internet-explorer' OR flair_icon = 'fa-internet-explorer'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'transgender'\nWHERE icon = 'intersex' OR icon = 'fa-intersex'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'transgender'\nWHERE flair_icon = 'intersex' OR flair_icon = 'fa-intersex'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-ioxhost'\nWHERE icon = 'ioxhost' OR icon = 'fa-ioxhost'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'fab-ioxhost'\nWHERE flair_icon = 'ioxhost' OR flair_icon = 'fa-ioxhost'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-joomla'\nWHERE icon = 'joomla' OR icon = 'fa-joomla'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'fab-joomla'\nWHERE flair_icon = 'joomla' OR flair_icon = 'fa-joomla'\n")
   -> 0.0007s
-- execute("UPDATE badges\nSET icon = 'yen-sign'\nWHERE icon = 'jpy' OR icon = 'fa-jpy'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'yen-sign'\nWHERE flair_icon = 'jpy' OR flair_icon = 'fa-jpy'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-jsfiddle'\nWHERE icon = 'jsfiddle' OR icon = 'fa-jsfiddle'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-jsfiddle'\nWHERE flair_icon = 'jsfiddle' OR flair_icon = 'fa-jsfiddle'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-keyboard'\nWHERE icon = 'keyboard-o' OR icon = 'fa-keyboard-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-keyboard'\nWHERE flair_icon = 'keyboard-o' OR flair_icon = 'fa-keyboard-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'won-sign'\nWHERE icon = 'krw' OR icon = 'fa-krw'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'won-sign'\nWHERE flair_icon = 'krw' OR flair_icon = 'fa-krw'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-lastfm'\nWHERE icon = 'lastfm' OR icon = 'fa-lastfm'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-lastfm'\nWHERE flair_icon = 'lastfm' OR flair_icon = 'fa-lastfm'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'fab-lastfm-square'\nWHERE icon = 'lastfm-square' OR icon = 'fa-lastfm-square'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'fab-lastfm-square'\nWHERE flair_icon = 'lastfm-square' OR flair_icon = 'fa-lastfm-square'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-leanpub'\nWHERE icon = 'leanpub' OR icon = 'fa-leanpub'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-leanpub'\nWHERE flair_icon = 'leanpub' OR flair_icon = 'fa-leanpub'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'gavel'\nWHERE icon = 'legal' OR icon = 'fa-legal'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'gavel'\nWHERE flair_icon = 'legal' OR flair_icon = 'fa-legal'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-lemon'\nWHERE icon = 'lemon-o' OR icon = 'fa-lemon-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-lemon'\nWHERE flair_icon = 'lemon-o' OR flair_icon = 'fa-lemon-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'level-down-alt'\nWHERE icon = 'level-down' OR icon = 'fa-level-down'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'level-down-alt'\nWHERE flair_icon = 'level-down' OR flair_icon = 'fa-level-down'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'level-up-alt'\nWHERE icon = 'level-up' OR icon = 'fa-level-up'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'level-up-alt'\nWHERE flair_icon = 'level-up' OR flair_icon = 'fa-level-up'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-life-ring'\nWHERE icon = 'life-bouy' OR icon = 'fa-life-bouy'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-life-ring'\nWHERE flair_icon = 'life-bouy' OR flair_icon = 'fa-life-bouy'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-life-ring'\nWHERE icon = 'life-buoy' OR icon = 'fa-life-buoy'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-life-ring'\nWHERE flair_icon = 'life-buoy' OR flair_icon = 'fa-life-buoy'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'far-life-ring'\nWHERE icon = 'life-ring' OR icon = 'fa-life-ring'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'far-life-ring'\nWHERE flair_icon = 'life-ring' OR flair_icon = 'fa-life-ring'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-life-ring'\nWHERE icon = 'life-saver' OR icon = 'fa-life-saver'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-life-ring'\nWHERE flair_icon = 'life-saver' OR flair_icon = 'fa-life-saver'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-lightbulb'\nWHERE icon = 'lightbulb-o' OR icon = 'fa-lightbulb-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-lightbulb'\nWHERE flair_icon = 'lightbulb-o' OR flair_icon = 'fa-lightbulb-o'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'chart-line'\nWHERE icon = 'line-chart' OR icon = 'fa-line-chart'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'chart-line'\nWHERE flair_icon = 'line-chart' OR flair_icon = 'fa-line-chart'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-linkedin-in'\nWHERE icon = 'linkedin' OR icon = 'fa-linkedin'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-linkedin-in'\nWHERE flair_icon = 'linkedin' OR flair_icon = 'fa-linkedin'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-linkedin'\nWHERE icon = 'linkedin-square' OR icon = 'fa-linkedin-square'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-linkedin'\nWHERE flair_icon = 'linkedin-square' OR flair_icon = 'fa-linkedin-square'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-linode'\nWHERE icon = 'linode' OR icon = 'fa-linode'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-linode'\nWHERE flair_icon = 'linode' OR flair_icon = 'fa-linode'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-linux'\nWHERE icon = 'linux' OR icon = 'fa-linux'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-linux'\nWHERE flair_icon = 'linux' OR flair_icon = 'fa-linux'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-list-alt'\nWHERE icon = 'list-alt' OR icon = 'fa-list-alt'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-list-alt'\nWHERE flair_icon = 'list-alt' OR flair_icon = 'fa-list-alt'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'long-arrow-alt-down'\nWHERE icon = 'long-arrow-down' OR icon = 'fa-long-arrow-down'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'long-arrow-alt-down'\nWHERE flair_icon = 'long-arrow-down' OR flair_icon = 'fa-long-arrow-down'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'long-arrow-alt-left'\nWHERE icon = 'long-arrow-left' OR icon = 'fa-long-arrow-left'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'long-arrow-alt-left'\nWHERE flair_icon = 'long-arrow-left' OR flair_icon = 'fa-long-arrow-left'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'long-arrow-alt-right'\nWHERE icon = 'long-arrow-right' OR icon = 'fa-long-arrow-right'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'long-arrow-alt-right'\nWHERE flair_icon = 'long-arrow-right' OR flair_icon = 'fa-long-arrow-right'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'long-arrow-alt-up'\nWHERE icon = 'long-arrow-up' OR icon = 'fa-long-arrow-up'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'long-arrow-alt-up'\nWHERE flair_icon = 'long-arrow-up' OR flair_icon = 'fa-long-arrow-up'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'share'\nWHERE icon = 'mail-forward' OR icon = 'fa-mail-forward'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'share'\nWHERE flair_icon = 'mail-forward' OR flair_icon = 'fa-mail-forward'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'reply'\nWHERE icon = 'mail-reply' OR icon = 'fa-mail-reply'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'reply'\nWHERE flair_icon = 'mail-reply' OR flair_icon = 'fa-mail-reply'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'reply-all'\nWHERE icon = 'mail-reply-all' OR icon = 'fa-mail-reply-all'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'reply-all'\nWHERE flair_icon = 'mail-reply-all' OR flair_icon = 'fa-mail-reply-all'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'map-marker-alt'\nWHERE icon = 'map-marker' OR icon = 'fa-map-marker'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'map-marker-alt'\nWHERE flair_icon = 'map-marker' OR flair_icon = 'fa-map-marker'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-map'\nWHERE icon = 'map-o' OR icon = 'fa-map-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-map'\nWHERE flair_icon = 'map-o' OR flair_icon = 'fa-map-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-maxcdn'\nWHERE icon = 'maxcdn' OR icon = 'fa-maxcdn'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-maxcdn'\nWHERE flair_icon = 'maxcdn' OR flair_icon = 'fa-maxcdn'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-font-awesome'\nWHERE icon = 'meanpath' OR icon = 'fa-meanpath'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-font-awesome'\nWHERE flair_icon = 'meanpath' OR flair_icon = 'fa-meanpath'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-medium'\nWHERE icon = 'medium' OR icon = 'fa-medium'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-medium'\nWHERE flair_icon = 'medium' OR flair_icon = 'fa-medium'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-meetup'\nWHERE icon = 'meetup' OR icon = 'fa-meetup'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-meetup'\nWHERE flair_icon = 'meetup' OR flair_icon = 'fa-meetup'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-meh'\nWHERE icon = 'meh-o' OR icon = 'fa-meh-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-meh'\nWHERE flair_icon = 'meh-o' OR flair_icon = 'fa-meh-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-minus-square'\nWHERE icon = 'minus-square-o' OR icon = 'fa-minus-square-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-minus-square'\nWHERE flair_icon = 'minus-square-o' OR flair_icon = 'fa-minus-square-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-mixcloud'\nWHERE icon = 'mixcloud' OR icon = 'fa-mixcloud'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-mixcloud'\nWHERE flair_icon = 'mixcloud' OR flair_icon = 'fa-mixcloud'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'mobile-alt'\nWHERE icon = 'mobile' OR icon = 'fa-mobile'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'mobile-alt'\nWHERE flair_icon = 'mobile' OR flair_icon = 'fa-mobile'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'mobile-alt'\nWHERE icon = 'mobile-phone' OR icon = 'fa-mobile-phone'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'mobile-alt'\nWHERE flair_icon = 'mobile-phone' OR flair_icon = 'fa-mobile-phone'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-modx'\nWHERE icon = 'modx' OR icon = 'fa-modx'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-modx'\nWHERE flair_icon = 'modx' OR flair_icon = 'fa-modx'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-money-bill-alt'\nWHERE icon = 'money' OR icon = 'fa-money'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'far-money-bill-alt'\nWHERE flair_icon = 'money' OR flair_icon = 'fa-money'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'far-moon'\nWHERE icon = 'moon-o' OR icon = 'fa-moon-o'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'far-moon'\nWHERE flair_icon = 'moon-o' OR flair_icon = 'fa-moon-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'graduation-cap'\nWHERE icon = 'mortar-board' OR icon = 'fa-mortar-board'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'graduation-cap'\nWHERE flair_icon = 'mortar-board' OR flair_icon = 'fa-mortar-board'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'bars'\nWHERE icon = 'navicon' OR icon = 'fa-navicon'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'bars'\nWHERE flair_icon = 'navicon' OR flair_icon = 'fa-navicon'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-newspaper'\nWHERE icon = 'newspaper-o' OR icon = 'fa-newspaper-o'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'far-newspaper'\nWHERE flair_icon = 'newspaper-o' OR flair_icon = 'fa-newspaper-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-object-group'\nWHERE icon = 'object-group' OR icon = 'fa-object-group'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-object-group'\nWHERE flair_icon = 'object-group' OR flair_icon = 'fa-object-group'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-object-ungroup'\nWHERE icon = 'object-ungroup' OR icon = 'fa-object-ungroup'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-object-ungroup'\nWHERE flair_icon = 'object-ungroup' OR flair_icon = 'fa-object-ungroup'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-odnoklassniki'\nWHERE icon = 'odnoklassniki' OR icon = 'fa-odnoklassniki'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-odnoklassniki'\nWHERE flair_icon = 'odnoklassniki' OR flair_icon = 'fa-odnoklassniki'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-odnoklassniki-square'\nWHERE icon = 'odnoklassniki-square' OR icon = 'fa-odnoklassniki-square'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-odnoklassniki-square'\nWHERE flair_icon = 'odnoklassniki-square' OR flair_icon = 'fa-odnoklassniki-square'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-opencart'\nWHERE icon = 'opencart' OR icon = 'fa-opencart'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-opencart'\nWHERE flair_icon = 'opencart' OR flair_icon = 'fa-opencart'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-openid'\nWHERE icon = 'openid' OR icon = 'fa-openid'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-openid'\nWHERE flair_icon = 'openid' OR flair_icon = 'fa-openid'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-opera'\nWHERE icon = 'opera' OR icon = 'fa-opera'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-opera'\nWHERE flair_icon = 'opera' OR flair_icon = 'fa-opera'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-optin-monster'\nWHERE icon = 'optin-monster' OR icon = 'fa-optin-monster'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-optin-monster'\nWHERE flair_icon = 'optin-monster' OR flair_icon = 'fa-optin-monster'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-pagelines'\nWHERE icon = 'pagelines' OR icon = 'fa-pagelines'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-pagelines'\nWHERE flair_icon = 'pagelines' OR flair_icon = 'fa-pagelines'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-paper-plane'\nWHERE icon = 'paper-plane-o' OR icon = 'fa-paper-plane-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-paper-plane'\nWHERE flair_icon = 'paper-plane-o' OR flair_icon = 'fa-paper-plane-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-clipboard'\nWHERE icon = 'paste' OR icon = 'fa-paste'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-clipboard'\nWHERE flair_icon = 'paste' OR flair_icon = 'fa-paste'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-patreon'\nWHERE icon = 'patreon' OR icon = 'fa-patreon'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-patreon'\nWHERE flair_icon = 'patreon' OR flair_icon = 'fa-patreon'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-pause-circle'\nWHERE icon = 'pause-circle-o' OR icon = 'fa-pause-circle-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-pause-circle'\nWHERE flair_icon = 'pause-circle-o' OR flair_icon = 'fa-pause-circle-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-paypal'\nWHERE icon = 'paypal' OR icon = 'fa-paypal'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-paypal'\nWHERE flair_icon = 'paypal' OR flair_icon = 'fa-paypal'\n")
   -> 0.0007s
-- execute("UPDATE badges\nSET icon = 'pencil-alt'\nWHERE icon = 'pencil' OR icon = 'fa-pencil'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'pencil-alt'\nWHERE flair_icon = 'pencil' OR flair_icon = 'fa-pencil'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'pen-square'\nWHERE icon = 'pencil-square' OR icon = 'fa-pencil-square'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'pen-square'\nWHERE flair_icon = 'pencil-square' OR flair_icon = 'fa-pencil-square'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-edit'\nWHERE icon = 'pencil-square-o' OR icon = 'fa-pencil-square-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-edit'\nWHERE flair_icon = 'pencil-square-o' OR flair_icon = 'fa-pencil-square-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-image'\nWHERE icon = 'photo' OR icon = 'fa-photo'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'far-image'\nWHERE flair_icon = 'photo' OR flair_icon = 'fa-photo'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-image'\nWHERE icon = 'picture-o' OR icon = 'fa-picture-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-image'\nWHERE flair_icon = 'picture-o' OR flair_icon = 'fa-picture-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'chart-pie'\nWHERE icon = 'pie-chart' OR icon = 'fa-pie-chart'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'chart-pie'\nWHERE flair_icon = 'pie-chart' OR flair_icon = 'fa-pie-chart'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'fab-pied-piper'\nWHERE icon = 'pied-piper' OR icon = 'fa-pied-piper'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-pied-piper'\nWHERE flair_icon = 'pied-piper' OR flair_icon = 'fa-pied-piper'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-pied-piper-alt'\nWHERE icon = 'pied-piper-alt' OR icon = 'fa-pied-piper-alt'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-pied-piper-alt'\nWHERE flair_icon = 'pied-piper-alt' OR flair_icon = 'fa-pied-piper-alt'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-pied-piper-pp'\nWHERE icon = 'pied-piper-pp' OR icon = 'fa-pied-piper-pp'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-pied-piper-pp'\nWHERE flair_icon = 'pied-piper-pp' OR flair_icon = 'fa-pied-piper-pp'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-pinterest'\nWHERE icon = 'pinterest' OR icon = 'fa-pinterest'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-pinterest'\nWHERE flair_icon = 'pinterest' OR flair_icon = 'fa-pinterest'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-pinterest-p'\nWHERE icon = 'pinterest-p' OR icon = 'fa-pinterest-p'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-pinterest-p'\nWHERE flair_icon = 'pinterest-p' OR flair_icon = 'fa-pinterest-p'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-pinterest-square'\nWHERE icon = 'pinterest-square' OR icon = 'fa-pinterest-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-pinterest-square'\nWHERE flair_icon = 'pinterest-square' OR flair_icon = 'fa-pinterest-square'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-play-circle'\nWHERE icon = 'play-circle-o' OR icon = 'fa-play-circle-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-play-circle'\nWHERE flair_icon = 'play-circle-o' OR flair_icon = 'fa-play-circle-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-plus-square'\nWHERE icon = 'plus-square-o' OR icon = 'fa-plus-square-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-plus-square'\nWHERE flair_icon = 'plus-square-o' OR flair_icon = 'fa-plus-square-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-product-hunt'\nWHERE icon = 'product-hunt' OR icon = 'fa-product-hunt'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-product-hunt'\nWHERE flair_icon = 'product-hunt' OR flair_icon = 'fa-product-hunt'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-qq'\nWHERE icon = 'qq' OR icon = 'fa-qq'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-qq'\nWHERE flair_icon = 'qq' OR flair_icon = 'fa-qq'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-question-circle'\nWHERE icon = 'question-circle-o' OR icon = 'fa-question-circle-o'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'far-question-circle'\nWHERE flair_icon = 'question-circle-o' OR flair_icon = 'fa-question-circle-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-quora'\nWHERE icon = 'quora' OR icon = 'fa-quora'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-quora'\nWHERE flair_icon = 'quora' OR flair_icon = 'fa-quora'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-rebel'\nWHERE icon = 'ra' OR icon = 'fa-ra'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-rebel'\nWHERE flair_icon = 'ra' OR flair_icon = 'fa-ra'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-ravelry'\nWHERE icon = 'ravelry' OR icon = 'fa-ravelry'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-ravelry'\nWHERE flair_icon = 'ravelry' OR flair_icon = 'fa-ravelry'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-rebel'\nWHERE icon = 'rebel' OR icon = 'fa-rebel'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-rebel'\nWHERE flair_icon = 'rebel' OR flair_icon = 'fa-rebel'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-reddit'\nWHERE icon = 'reddit' OR icon = 'fa-reddit'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-reddit'\nWHERE flair_icon = 'reddit' OR flair_icon = 'fa-reddit'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-reddit-alien'\nWHERE icon = 'reddit-alien' OR icon = 'fa-reddit-alien'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'fab-reddit-alien'\nWHERE flair_icon = 'reddit-alien' OR flair_icon = 'fa-reddit-alien'\n")
   -> 0.0006s
-- execute("UPDATE badges\nSET icon = 'fab-reddit-square'\nWHERE icon = 'reddit-square' OR icon = 'fa-reddit-square'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-reddit-square'\nWHERE flair_icon = 'reddit-square' OR flair_icon = 'fa-reddit-square'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'sync'\nWHERE icon = 'refresh' OR icon = 'fa-refresh'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'sync'\nWHERE flair_icon = 'refresh' OR flair_icon = 'fa-refresh'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-registered'\nWHERE icon = 'registered' OR icon = 'fa-registered'\n")
   -> 0.0007s
-- execute("UPDATE groups\nSET flair_icon = 'far-registered'\nWHERE flair_icon = 'registered' OR flair_icon = 'fa-registered'\n")
   -> 0.0006s
-- execute("UPDATE badges\nSET icon = 'times'\nWHERE icon = 'remove' OR icon = 'fa-remove'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'times'\nWHERE flair_icon = 'remove' OR flair_icon = 'fa-remove'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-renren'\nWHERE icon = 'renren' OR icon = 'fa-renren'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-renren'\nWHERE flair_icon = 'renren' OR flair_icon = 'fa-renren'\n")
   -> 0.0008s
-- execute("UPDATE badges\nSET icon = 'bars'\nWHERE icon = 'reorder' OR icon = 'fa-reorder'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'bars'\nWHERE flair_icon = 'reorder' OR flair_icon = 'fa-reorder'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'redo'\nWHERE icon = 'repeat' OR icon = 'fa-repeat'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'redo'\nWHERE flair_icon = 'repeat' OR flair_icon = 'fa-repeat'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-rebel'\nWHERE icon = 'resistance' OR icon = 'fa-resistance'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-rebel'\nWHERE flair_icon = 'resistance' OR flair_icon = 'fa-resistance'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'yen-sign'\nWHERE icon = 'rmb' OR icon = 'fa-rmb'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'yen-sign'\nWHERE flair_icon = 'rmb' OR flair_icon = 'fa-rmb'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'undo'\nWHERE icon = 'rotate-left' OR icon = 'fa-rotate-left'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'undo'\nWHERE flair_icon = 'rotate-left' OR flair_icon = 'fa-rotate-left'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'redo'\nWHERE icon = 'rotate-right' OR icon = 'fa-rotate-right'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'redo'\nWHERE flair_icon = 'rotate-right' OR flair_icon = 'fa-rotate-right'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'ruble-sign'\nWHERE icon = 'rouble' OR icon = 'fa-rouble'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'ruble-sign'\nWHERE flair_icon = 'rouble' OR flair_icon = 'fa-rouble'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'ruble-sign'\nWHERE icon = 'rub' OR icon = 'fa-rub'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'ruble-sign'\nWHERE flair_icon = 'rub' OR flair_icon = 'fa-rub'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'ruble-sign'\nWHERE icon = 'ruble' OR icon = 'fa-ruble'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'ruble-sign'\nWHERE flair_icon = 'ruble' OR flair_icon = 'fa-ruble'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'rupee-sign'\nWHERE icon = 'rupee' OR icon = 'fa-rupee'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'rupee-sign'\nWHERE flair_icon = 'rupee' OR flair_icon = 'fa-rupee'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'bath'\nWHERE icon = 's15' OR icon = 'fa-s15'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'bath'\nWHERE flair_icon = 's15' OR flair_icon = 'fa-s15'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-safari'\nWHERE icon = 'safari' OR icon = 'fa-safari'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-safari'\nWHERE flair_icon = 'safari' OR flair_icon = 'fa-safari'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'cut'\nWHERE icon = 'scissors' OR icon = 'fa-scissors'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'cut'\nWHERE flair_icon = 'scissors' OR flair_icon = 'fa-scissors'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-scribd'\nWHERE icon = 'scribd' OR icon = 'fa-scribd'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-scribd'\nWHERE flair_icon = 'scribd' OR flair_icon = 'fa-scribd'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'fab-sellsy'\nWHERE icon = 'sellsy' OR icon = 'fa-sellsy'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-sellsy'\nWHERE flair_icon = 'sellsy' OR flair_icon = 'fa-sellsy'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'paper-plane'\nWHERE icon = 'send' OR icon = 'fa-send'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'paper-plane'\nWHERE flair_icon = 'send' OR flair_icon = 'fa-send'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-paper-plane'\nWHERE icon = 'send-o' OR icon = 'fa-send-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-paper-plane'\nWHERE flair_icon = 'send-o' OR flair_icon = 'fa-send-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-share-square'\nWHERE icon = 'share-square-o' OR icon = 'fa-share-square-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-share-square'\nWHERE flair_icon = 'share-square-o' OR flair_icon = 'fa-share-square-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'shekel-sign'\nWHERE icon = 'shekel' OR icon = 'fa-shekel'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'shekel-sign'\nWHERE flair_icon = 'shekel' OR flair_icon = 'fa-shekel'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'shekel-sign'\nWHERE icon = 'sheqel' OR icon = 'fa-sheqel'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'shekel-sign'\nWHERE flair_icon = 'sheqel' OR flair_icon = 'fa-sheqel'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'shield-alt'\nWHERE icon = 'shield' OR icon = 'fa-shield'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'shield-alt'\nWHERE flair_icon = 'shield' OR flair_icon = 'fa-shield'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-shirtsinbulk'\nWHERE icon = 'shirtsinbulk' OR icon = 'fa-shirtsinbulk'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-shirtsinbulk'\nWHERE flair_icon = 'shirtsinbulk' OR flair_icon = 'fa-shirtsinbulk'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'sign-in-alt'\nWHERE icon = 'sign-in' OR icon = 'fa-sign-in'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'sign-in-alt'\nWHERE flair_icon = 'sign-in' OR flair_icon = 'fa-sign-in'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'sign-out-alt'\nWHERE icon = 'sign-out' OR icon = 'fa-sign-out'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'sign-out-alt'\nWHERE flair_icon = 'sign-out' OR flair_icon = 'fa-sign-out'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'sign-language'\nWHERE icon = 'signing' OR icon = 'fa-signing'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'sign-language'\nWHERE flair_icon = 'signing' OR flair_icon = 'fa-signing'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-simplybuilt'\nWHERE icon = 'simplybuilt' OR icon = 'fa-simplybuilt'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-simplybuilt'\nWHERE flair_icon = 'simplybuilt' OR flair_icon = 'fa-simplybuilt'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-skyatlas'\nWHERE icon = 'skyatlas' OR icon = 'fa-skyatlas'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-skyatlas'\nWHERE flair_icon = 'skyatlas' OR flair_icon = 'fa-skyatlas'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-skype'\nWHERE icon = 'skype' OR icon = 'fa-skype'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-skype'\nWHERE flair_icon = 'skype' OR flair_icon = 'fa-skype'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-slack'\nWHERE icon = 'slack' OR icon = 'fa-slack'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-slack'\nWHERE flair_icon = 'slack' OR flair_icon = 'fa-slack'\n")
   -> 0.0006s
-- execute("UPDATE badges\nSET icon = 'sliders-h'\nWHERE icon = 'sliders' OR icon = 'fa-sliders'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'sliders-h'\nWHERE flair_icon = 'sliders' OR flair_icon = 'fa-sliders'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-slideshare'\nWHERE icon = 'slideshare' OR icon = 'fa-slideshare'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-slideshare'\nWHERE flair_icon = 'slideshare' OR flair_icon = 'fa-slideshare'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'far-smile'\nWHERE icon = 'smile-o' OR icon = 'fa-smile-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-smile'\nWHERE flair_icon = 'smile-o' OR flair_icon = 'fa-smile-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-snapchat'\nWHERE icon = 'snapchat' OR icon = 'fa-snapchat'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-snapchat'\nWHERE flair_icon = 'snapchat' OR flair_icon = 'fa-snapchat'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'fab-snapchat-ghost'\nWHERE icon = 'snapchat-ghost' OR icon = 'fa-snapchat-ghost'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-snapchat-ghost'\nWHERE flair_icon = 'snapchat-ghost' OR flair_icon = 'fa-snapchat-ghost'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-snapchat-square'\nWHERE icon = 'snapchat-square' OR icon = 'fa-snapchat-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-snapchat-square'\nWHERE flair_icon = 'snapchat-square' OR flair_icon = 'fa-snapchat-square'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-snowflake'\nWHERE icon = 'snowflake-o' OR icon = 'fa-snowflake-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-snowflake'\nWHERE flair_icon = 'snowflake-o' OR flair_icon = 'fa-snowflake-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-futbol'\nWHERE icon = 'soccer-ball-o' OR icon = 'fa-soccer-ball-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-futbol'\nWHERE flair_icon = 'soccer-ball-o' OR flair_icon = 'fa-soccer-ball-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'sort-alpha-down'\nWHERE icon = 'sort-alpha-asc' OR icon = 'fa-sort-alpha-asc'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'sort-alpha-down'\nWHERE flair_icon = 'sort-alpha-asc' OR flair_icon = 'fa-sort-alpha-asc'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'sort-alpha-up'\nWHERE icon = 'sort-alpha-desc' OR icon = 'fa-sort-alpha-desc'\n")
   -> 0.0007s
-- execute("UPDATE groups\nSET flair_icon = 'sort-alpha-up'\nWHERE flair_icon = 'sort-alpha-desc' OR flair_icon = 'fa-sort-alpha-desc'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'sort-amount-down'\nWHERE icon = 'sort-amount-asc' OR icon = 'fa-sort-amount-asc'\n")
   -> 0.0008s
-- execute("UPDATE groups\nSET flair_icon = 'sort-amount-down'\nWHERE flair_icon = 'sort-amount-asc' OR flair_icon = 'fa-sort-amount-asc'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'sort-amount-up'\nWHERE icon = 'sort-amount-desc' OR icon = 'fa-sort-amount-desc'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'sort-amount-up'\nWHERE flair_icon = 'sort-amount-desc' OR flair_icon = 'fa-sort-amount-desc'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'sort-up'\nWHERE icon = 'sort-asc' OR icon = 'fa-sort-asc'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'sort-up'\nWHERE flair_icon = 'sort-asc' OR flair_icon = 'fa-sort-asc'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'sort-down'\nWHERE icon = 'sort-desc' OR icon = 'fa-sort-desc'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'sort-down'\nWHERE flair_icon = 'sort-desc' OR flair_icon = 'fa-sort-desc'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'sort-numeric-down'\nWHERE icon = 'sort-numeric-asc' OR icon = 'fa-sort-numeric-asc'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'sort-numeric-down'\nWHERE flair_icon = 'sort-numeric-asc' OR flair_icon = 'fa-sort-numeric-asc'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'sort-numeric-up'\nWHERE icon = 'sort-numeric-desc' OR icon = 'fa-sort-numeric-desc'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'sort-numeric-up'\nWHERE flair_icon = 'sort-numeric-desc' OR flair_icon = 'fa-sort-numeric-desc'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-soundcloud'\nWHERE icon = 'soundcloud' OR icon = 'fa-soundcloud'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-soundcloud'\nWHERE flair_icon = 'soundcloud' OR flair_icon = 'fa-soundcloud'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'utensil-spoon'\nWHERE icon = 'spoon' OR icon = 'fa-spoon'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'utensil-spoon'\nWHERE flair_icon = 'spoon' OR flair_icon = 'fa-spoon'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-spotify'\nWHERE icon = 'spotify' OR icon = 'fa-spotify'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-spotify'\nWHERE flair_icon = 'spotify' OR flair_icon = 'fa-spotify'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-square'\nWHERE icon = 'square-o' OR icon = 'fa-square-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-square'\nWHERE flair_icon = 'square-o' OR flair_icon = 'fa-square-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-stack-exchange'\nWHERE icon = 'stack-exchange' OR icon = 'fa-stack-exchange'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'fab-stack-exchange'\nWHERE flair_icon = 'stack-exchange' OR flair_icon = 'fa-stack-exchange'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-stack-overflow'\nWHERE icon = 'stack-overflow' OR icon = 'fa-stack-overflow'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-stack-overflow'\nWHERE flair_icon = 'stack-overflow' OR flair_icon = 'fa-stack-overflow'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'far-star-half'\nWHERE icon = 'star-half-empty' OR icon = 'fa-star-half-empty'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-star-half'\nWHERE flair_icon = 'star-half-empty' OR flair_icon = 'fa-star-half-empty'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-star-half'\nWHERE icon = 'star-half-full' OR icon = 'fa-star-half-full'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-star-half'\nWHERE flair_icon = 'star-half-full' OR flair_icon = 'fa-star-half-full'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-star-half'\nWHERE icon = 'star-half-o' OR icon = 'fa-star-half-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-star-half'\nWHERE flair_icon = 'star-half-o' OR flair_icon = 'fa-star-half-o'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'far-star'\nWHERE icon = 'star-o' OR icon = 'fa-star-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-star'\nWHERE flair_icon = 'star-o' OR flair_icon = 'fa-star-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-steam'\nWHERE icon = 'steam' OR icon = 'fa-steam'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-steam'\nWHERE flair_icon = 'steam' OR flair_icon = 'fa-steam'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-steam-square'\nWHERE icon = 'steam-square' OR icon = 'fa-steam-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-steam-square'\nWHERE flair_icon = 'steam-square' OR flair_icon = 'fa-steam-square'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-sticky-note'\nWHERE icon = 'sticky-note-o' OR icon = 'fa-sticky-note-o'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'far-sticky-note'\nWHERE flair_icon = 'sticky-note-o' OR flair_icon = 'fa-sticky-note-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-stop-circle'\nWHERE icon = 'stop-circle-o' OR icon = 'fa-stop-circle-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-stop-circle'\nWHERE flair_icon = 'stop-circle-o' OR flair_icon = 'fa-stop-circle-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-stumbleupon'\nWHERE icon = 'stumbleupon' OR icon = 'fa-stumbleupon'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-stumbleupon'\nWHERE flair_icon = 'stumbleupon' OR flair_icon = 'fa-stumbleupon'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-stumbleupon-circle'\nWHERE icon = 'stumbleupon-circle' OR icon = 'fa-stumbleupon-circle'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'fab-stumbleupon-circle'\nWHERE flair_icon = 'stumbleupon-circle' OR flair_icon = 'fa-stumbleupon-circle'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'far-sun'\nWHERE icon = 'sun-o' OR icon = 'fa-sun-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-sun'\nWHERE flair_icon = 'sun-o' OR flair_icon = 'fa-sun-o'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-superpowers'\nWHERE icon = 'superpowers' OR icon = 'fa-superpowers'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-superpowers'\nWHERE flair_icon = 'superpowers' OR flair_icon = 'fa-superpowers'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-life-ring'\nWHERE icon = 'support' OR icon = 'fa-support'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-life-ring'\nWHERE flair_icon = 'support' OR flair_icon = 'fa-support'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'tablet-alt'\nWHERE icon = 'tablet' OR icon = 'fa-tablet'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'tablet-alt'\nWHERE flair_icon = 'tablet' OR flair_icon = 'fa-tablet'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'tachometer-alt'\nWHERE icon = 'tachometer' OR icon = 'fa-tachometer'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'tachometer-alt'\nWHERE flair_icon = 'tachometer' OR flair_icon = 'fa-tachometer'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-telegram'\nWHERE icon = 'telegram' OR icon = 'fa-telegram'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-telegram'\nWHERE flair_icon = 'telegram' OR flair_icon = 'fa-telegram'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'tv'\nWHERE icon = 'television' OR icon = 'fa-television'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'tv'\nWHERE flair_icon = 'television' OR flair_icon = 'fa-television'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'fab-tencent-weibo'\nWHERE icon = 'tencent-weibo' OR icon = 'fa-tencent-weibo'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-tencent-weibo'\nWHERE flair_icon = 'tencent-weibo' OR flair_icon = 'fa-tencent-weibo'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-themeisle'\nWHERE icon = 'themeisle' OR icon = 'fa-themeisle'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-themeisle'\nWHERE flair_icon = 'themeisle' OR flair_icon = 'fa-themeisle'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'thermometer-full'\nWHERE icon = 'thermometer' OR icon = 'fa-thermometer'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'thermometer-full'\nWHERE flair_icon = 'thermometer' OR flair_icon = 'fa-thermometer'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'thermometer-empty'\nWHERE icon = 'thermometer-0' OR icon = 'fa-thermometer-0'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'thermometer-empty'\nWHERE flair_icon = 'thermometer-0' OR flair_icon = 'fa-thermometer-0'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'thermometer-quarter'\nWHERE icon = 'thermometer-1' OR icon = 'fa-thermometer-1'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'thermometer-quarter'\nWHERE flair_icon = 'thermometer-1' OR flair_icon = 'fa-thermometer-1'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'thermometer-half'\nWHERE icon = 'thermometer-2' OR icon = 'fa-thermometer-2'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'thermometer-half'\nWHERE flair_icon = 'thermometer-2' OR flair_icon = 'fa-thermometer-2'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'thermometer-three-quarters'\nWHERE icon = 'thermometer-3' OR icon = 'fa-thermometer-3'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'thermometer-three-quarters'\nWHERE flair_icon = 'thermometer-3' OR flair_icon = 'fa-thermometer-3'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'thermometer-full'\nWHERE icon = 'thermometer-4' OR icon = 'fa-thermometer-4'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'thermometer-full'\nWHERE flair_icon = 'thermometer-4' OR flair_icon = 'fa-thermometer-4'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'thumbtack'\nWHERE icon = 'thumb-tack' OR icon = 'fa-thumb-tack'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'thumbtack'\nWHERE flair_icon = 'thumb-tack' OR flair_icon = 'fa-thumb-tack'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-thumbs-down'\nWHERE icon = 'thumbs-o-down' OR icon = 'fa-thumbs-o-down'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-thumbs-down'\nWHERE flair_icon = 'thumbs-o-down' OR flair_icon = 'fa-thumbs-o-down'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-thumbs-up'\nWHERE icon = 'thumbs-o-up' OR icon = 'fa-thumbs-o-up'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-thumbs-up'\nWHERE flair_icon = 'thumbs-o-up' OR flair_icon = 'fa-thumbs-o-up'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'ticket-alt'\nWHERE icon = 'ticket' OR icon = 'fa-ticket'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'ticket-alt'\nWHERE flair_icon = 'ticket' OR flair_icon = 'fa-ticket'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-times-circle'\nWHERE icon = 'times-circle-o' OR icon = 'fa-times-circle-o'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'far-times-circle'\nWHERE flair_icon = 'times-circle-o' OR flair_icon = 'fa-times-circle-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'window-close'\nWHERE icon = 'times-rectangle' OR icon = 'fa-times-rectangle'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'window-close'\nWHERE flair_icon = 'times-rectangle' OR flair_icon = 'fa-times-rectangle'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'far-window-close'\nWHERE icon = 'times-rectangle-o' OR icon = 'fa-times-rectangle-o'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'far-window-close'\nWHERE flair_icon = 'times-rectangle-o' OR flair_icon = 'fa-times-rectangle-o'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'far-caret-square-down'\nWHERE icon = 'toggle-down' OR icon = 'fa-toggle-down'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-caret-square-down'\nWHERE flair_icon = 'toggle-down' OR flair_icon = 'fa-toggle-down'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-caret-square-left'\nWHERE icon = 'toggle-left' OR icon = 'fa-toggle-left'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-caret-square-left'\nWHERE flair_icon = 'toggle-left' OR flair_icon = 'fa-toggle-left'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-caret-square-right'\nWHERE icon = 'toggle-right' OR icon = 'fa-toggle-right'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-caret-square-right'\nWHERE flair_icon = 'toggle-right' OR flair_icon = 'fa-toggle-right'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-caret-square-up'\nWHERE icon = 'toggle-up' OR icon = 'fa-toggle-up'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'far-caret-square-up'\nWHERE flair_icon = 'toggle-up' OR flair_icon = 'fa-toggle-up'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'trash-alt'\nWHERE icon = 'trash' OR icon = 'fa-trash'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'trash-alt'\nWHERE flair_icon = 'trash' OR flair_icon = 'fa-trash'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-trash-alt'\nWHERE icon = 'trash-o' OR icon = 'fa-trash-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-trash-alt'\nWHERE flair_icon = 'trash-o' OR flair_icon = 'fa-trash-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-trello'\nWHERE icon = 'trello' OR icon = 'fa-trello'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-trello'\nWHERE flair_icon = 'trello' OR flair_icon = 'fa-trello'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'fab-tripadvisor'\nWHERE icon = 'tripadvisor' OR icon = 'fa-tripadvisor'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-tripadvisor'\nWHERE flair_icon = 'tripadvisor' OR flair_icon = 'fa-tripadvisor'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'lira-sign'\nWHERE icon = 'try' OR icon = 'fa-try'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'lira-sign'\nWHERE flair_icon = 'try' OR flair_icon = 'fa-try'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-tumblr'\nWHERE icon = 'tumblr' OR icon = 'fa-tumblr'\n")
   -> 0.0007s
-- execute("UPDATE groups\nSET flair_icon = 'fab-tumblr'\nWHERE flair_icon = 'tumblr' OR flair_icon = 'fa-tumblr'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-tumblr-square'\nWHERE icon = 'tumblr-square' OR icon = 'fa-tumblr-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-tumblr-square'\nWHERE flair_icon = 'tumblr-square' OR flair_icon = 'fa-tumblr-square'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'lira-sign'\nWHERE icon = 'turkish-lira' OR icon = 'fa-turkish-lira'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'lira-sign'\nWHERE flair_icon = 'turkish-lira' OR flair_icon = 'fa-turkish-lira'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'fab-twitch'\nWHERE icon = 'twitch' OR icon = 'fa-twitch'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-twitch'\nWHERE flair_icon = 'twitch' OR flair_icon = 'fa-twitch'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-twitter'\nWHERE icon = 'twitter' OR icon = 'fa-twitter'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-twitter'\nWHERE flair_icon = 'twitter' OR flair_icon = 'fa-twitter'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-twitter-square'\nWHERE icon = 'twitter-square' OR icon = 'fa-twitter-square'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-twitter-square'\nWHERE flair_icon = 'twitter-square' OR flair_icon = 'fa-twitter-square'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'sort'\nWHERE icon = 'unsorted' OR icon = 'fa-unsorted'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'sort'\nWHERE flair_icon = 'unsorted' OR flair_icon = 'fa-unsorted'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-usb'\nWHERE icon = 'usb' OR icon = 'fa-usb'\n")
   -> 0.0006s
-- execute("UPDATE groups\nSET flair_icon = 'fab-usb'\nWHERE flair_icon = 'usb' OR flair_icon = 'fa-usb'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'dollar-sign'\nWHERE icon = 'usd' OR icon = 'fa-usd'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'dollar-sign'\nWHERE flair_icon = 'usd' OR flair_icon = 'fa-usd'\n")
   -> 0.0006s
-- execute("UPDATE badges\nSET icon = 'far-user-circle'\nWHERE icon = 'user-circle-o' OR icon = 'fa-user-circle-o'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-user-circle'\nWHERE flair_icon = 'user-circle-o' OR flair_icon = 'fa-user-circle-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-user'\nWHERE icon = 'user-o' OR icon = 'fa-user-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-user'\nWHERE flair_icon = 'user-o' OR flair_icon = 'fa-user-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'address-card'\nWHERE icon = 'vcard' OR icon = 'fa-vcard'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'address-card'\nWHERE flair_icon = 'vcard' OR flair_icon = 'fa-vcard'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'far-address-card'\nWHERE icon = 'vcard-o' OR icon = 'fa-vcard-o'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'far-address-card'\nWHERE flair_icon = 'vcard-o' OR flair_icon = 'fa-vcard-o'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-viacoin'\nWHERE icon = 'viacoin' OR icon = 'fa-viacoin'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-viacoin'\nWHERE flair_icon = 'viacoin' OR flair_icon = 'fa-viacoin'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-viadeo'\nWHERE icon = 'viadeo' OR icon = 'fa-viadeo'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-viadeo'\nWHERE flair_icon = 'viadeo' OR flair_icon = 'fa-viadeo'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-viadeo-square'\nWHERE icon = 'viadeo-square' OR icon = 'fa-viadeo-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-viadeo-square'\nWHERE flair_icon = 'viadeo-square' OR flair_icon = 'fa-viadeo-square'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'video'\nWHERE icon = 'video-camera' OR icon = 'fa-video-camera'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'video'\nWHERE flair_icon = 'video-camera' OR flair_icon = 'fa-video-camera'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'fab-vimeo-v'\nWHERE icon = 'vimeo' OR icon = 'fa-vimeo'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-vimeo-v'\nWHERE flair_icon = 'vimeo' OR flair_icon = 'fa-vimeo'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-vimeo-square'\nWHERE icon = 'vimeo-square' OR icon = 'fa-vimeo-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-vimeo-square'\nWHERE flair_icon = 'vimeo-square' OR flair_icon = 'fa-vimeo-square'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-vine'\nWHERE icon = 'vine' OR icon = 'fa-vine'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-vine'\nWHERE flair_icon = 'vine' OR flair_icon = 'fa-vine'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-vk'\nWHERE icon = 'vk' OR icon = 'fa-vk'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-vk'\nWHERE flair_icon = 'vk' OR flair_icon = 'fa-vk'\n")
   -> 0.0001s
-- execute("UPDATE badges\nSET icon = 'fab-vk'\nWHERE icon = 'vkontakte' OR icon = 'fa-vkontakte'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'fab-vk'\nWHERE flair_icon = 'vkontakte' OR flair_icon = 'fa-vkontakte'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'phone-volume'\nWHERE icon = 'volume-control-phone' OR icon = 'fa-volume-control-phone'\n")
   -> 0.0001s
-- execute("UPDATE groups\nSET flair_icon = 'phone-volume'\nWHERE flair_icon = 'volume-control-phone' OR flair_icon = 'fa-volume-control-phone'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'exclamation-triangle'\nWHERE icon = 'warning' OR icon = 'fa-warning'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'exclamation-triangle'\nWHERE flair_icon = 'warning' OR flair_icon = 'fa-warning'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-weixin'\nWHERE icon = 'wechat' OR icon = 'fa-wechat'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-weixin'\nWHERE flair_icon = 'wechat' OR flair_icon = 'fa-wechat'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-weibo'\nWHERE icon = 'weibo' OR icon = 'fa-weibo'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-weibo'\nWHERE flair_icon = 'weibo' OR flair_icon = 'fa-weibo'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-weixin'\nWHERE icon = 'weixin' OR icon = 'fa-weixin'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-weixin'\nWHERE flair_icon = 'weixin' OR flair_icon = 'fa-weixin'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-whatsapp'\nWHERE icon = 'whatsapp' OR icon = 'fa-whatsapp'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-whatsapp'\nWHERE flair_icon = 'whatsapp' OR flair_icon = 'fa-whatsapp'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-accessible-icon'\nWHERE icon = 'wheelchair-alt' OR icon = 'fa-wheelchair-alt'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-accessible-icon'\nWHERE flair_icon = 'wheelchair-alt' OR flair_icon = 'fa-wheelchair-alt'\n")
   -> 0.0005s
-- execute("UPDATE badges\nSET icon = 'fab-wikipedia-w'\nWHERE icon = 'wikipedia-w' OR icon = 'fa-wikipedia-w'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-wikipedia-w'\nWHERE flair_icon = 'wikipedia-w' OR flair_icon = 'fa-wikipedia-w'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-window-close'\nWHERE icon = 'window-close-o' OR icon = 'fa-window-close-o'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-window-close'\nWHERE flair_icon = 'window-close-o' OR flair_icon = 'fa-window-close-o'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-window-maximize'\nWHERE icon = 'window-maximize' OR icon = 'fa-window-maximize'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'far-window-maximize'\nWHERE flair_icon = 'window-maximize' OR flair_icon = 'fa-window-maximize'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'far-window-restore'\nWHERE icon = 'window-restore' OR icon = 'fa-window-restore'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'far-window-restore'\nWHERE flair_icon = 'window-restore' OR flair_icon = 'fa-window-restore'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-windows'\nWHERE icon = 'windows' OR icon = 'fa-windows'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-windows'\nWHERE flair_icon = 'windows' OR flair_icon = 'fa-windows'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'won-sign'\nWHERE icon = 'won' OR icon = 'fa-won'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'won-sign'\nWHERE flair_icon = 'won' OR flair_icon = 'fa-won'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-wordpress'\nWHERE icon = 'wordpress' OR icon = 'fa-wordpress'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-wordpress'\nWHERE flair_icon = 'wordpress' OR flair_icon = 'fa-wordpress'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-wpbeginner'\nWHERE icon = 'wpbeginner' OR icon = 'fa-wpbeginner'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-wpbeginner'\nWHERE flair_icon = 'wpbeginner' OR flair_icon = 'fa-wpbeginner'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-wpexplorer'\nWHERE icon = 'wpexplorer' OR icon = 'fa-wpexplorer'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'fab-wpexplorer'\nWHERE flair_icon = 'wpexplorer' OR flair_icon = 'fa-wpexplorer'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-wpforms'\nWHERE icon = 'wpforms' OR icon = 'fa-wpforms'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-wpforms'\nWHERE flair_icon = 'wpforms' OR flair_icon = 'fa-wpforms'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-xing'\nWHERE icon = 'xing' OR icon = 'fa-xing'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-xing'\nWHERE flair_icon = 'xing' OR flair_icon = 'fa-xing'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-xing-square'\nWHERE icon = 'xing-square' OR icon = 'fa-xing-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-xing-square'\nWHERE flair_icon = 'xing-square' OR flair_icon = 'fa-xing-square'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-y-combinator'\nWHERE icon = 'y-combinator' OR icon = 'fa-y-combinator'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-y-combinator'\nWHERE flair_icon = 'y-combinator' OR flair_icon = 'fa-y-combinator'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-hacker-news'\nWHERE icon = 'y-combinator-square' OR icon = 'fa-y-combinator-square'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-hacker-news'\nWHERE flair_icon = 'y-combinator-square' OR flair_icon = 'fa-y-combinator-square'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-yahoo'\nWHERE icon = 'yahoo' OR icon = 'fa-yahoo'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-yahoo'\nWHERE flair_icon = 'yahoo' OR flair_icon = 'fa-yahoo'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-y-combinator'\nWHERE icon = 'yc' OR icon = 'fa-yc'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-y-combinator'\nWHERE flair_icon = 'yc' OR flair_icon = 'fa-yc'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-hacker-news'\nWHERE icon = 'yc-square' OR icon = 'fa-yc-square'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-hacker-news'\nWHERE flair_icon = 'yc-square' OR flair_icon = 'fa-yc-square'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-yelp'\nWHERE icon = 'yelp' OR icon = 'fa-yelp'\n")
   -> 0.0005s
-- execute("UPDATE groups\nSET flair_icon = 'fab-yelp'\nWHERE flair_icon = 'yelp' OR flair_icon = 'fa-yelp'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'yen-sign'\nWHERE icon = 'yen' OR icon = 'fa-yen'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'yen-sign'\nWHERE flair_icon = 'yen' OR flair_icon = 'fa-yen'\n")
   -> 0.0004s
-- execute("UPDATE badges\nSET icon = 'fab-yoast'\nWHERE icon = 'yoast' OR icon = 'fa-yoast'\n")
   -> 0.0003s
-- execute("UPDATE groups\nSET flair_icon = 'fab-yoast'\nWHERE flair_icon = 'yoast' OR flair_icon = 'fa-yoast'\n")
   -> 0.0003s
-- execute("UPDATE badges\nSET icon = 'fab-youtube'\nWHERE icon = 'youtube' OR icon = 'fa-youtube'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-youtube'\nWHERE flair_icon = 'youtube' OR flair_icon = 'fa-youtube'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-youtube'\nWHERE icon = 'youtube-play' OR icon = 'fa-youtube-play'\n")
   -> 0.0002s
-- execute("UPDATE groups\nSET flair_icon = 'fab-youtube'\nWHERE flair_icon = 'youtube-play' OR flair_icon = 'fa-youtube-play'\n")
   -> 0.0002s
-- execute("UPDATE badges\nSET icon = 'fab-youtube-square'\nWHERE icon = 'youtube-square' OR icon = 'fa-youtube-square'\n")
   -> 0.0004s
-- execute("UPDATE groups\nSET flair_icon = 'fab-youtube-square'\nWHERE flair_icon = 'youtube-square' OR flair_icon = 'fa-youtube-square'\n")
   -> 0.0005s
== 20200517140915 UpdateDeprecatedIconNames: migrated (0.2832s) ===============

== 20200520001619 RemoveFksFromBookmarks: migrating ===========================
-- remove_foreign_key(:bookmarks, :topics)
   -> 0.0030s
-- remove_foreign_key(:bookmarks, :posts)
   -> 0.0023s
-- remove_foreign_key(:bookmarks, :users)
   -> 0.0041s
== 20200520001619 RemoveFksFromBookmarks: migrated (0.0100s) ==================

== 20200520015508 ClearLastGravatarDownloadAttemptOnUserAvatars: migrating ====
-- execute("UPDATE user_avatars\nSET last_gravatar_download_attempt = null\nWHERE user_id = -2 AND custom_upload_id IS NULL AND gravatar_upload_id IS NULL\n")
   -> 0.0007s
== 20200520015508 ClearLastGravatarDownloadAttemptOnUserAvatars: migrated (0.0012s)

== 20200520124359 AddApiKeyScopes: migrating ==================================
-- create_table(:api_key_scopes)
   -> 0.0071s
-- add_index(:api_key_scopes, :api_key_id)
   -> 0.0040s
== 20200520124359 AddApiKeyScopes: migrated (0.0120s) =========================

== 20200522004855 RemoveAccessControlPostFk: migrating ========================
-- remove_foreign_key(:uploads, {:column=>:access_control_post_id})
   -> 0.0038s
== 20200522004855 RemoveAccessControlPostFk: migrated (0.0048s) ===============

== 20200522204356 AddTagToPermalink: migrating ================================
-- add_column(:permalinks, :tag_id, :integer)
   -> 0.0008s
== 20200522204356 AddTagToPermalink: migrated (0.0017s) =======================

== 20200524181959 AddDefaultListFilterToCategories: migrating =================
-- add_column(:categories, :default_list_filter, :string, {:limit=>20, :default=>"all"})
   -> 0.0014s
== 20200524181959 AddDefaultListFilterToCategories: migrated (0.0024s) ========

== 20200525072638 RemoveNoneTags: migrating ===================================
== 20200525072638 RemoveNoneTags: migrated (0.0016s) ==========================

== 20200601111500 RemoveImageUrlFromPostAndTopic: migrating ===================
-- execute("ALTER TABLE topics DROP COLUMN IF EXISTS image_url\n")
   -> 0.0008s
-- execute("DROP VIEW badge_posts")
   -> 0.0010s
-- execute("ALTER TABLE posts DROP COLUMN IF EXISTS image_url\n")
   -> 0.0004s
-- execute("CREATE VIEW badge_posts AS\nSELECT p.*\nFROM posts p\nJOIN topics t ON t.id = p.topic_id\nJOIN categories c ON c.id = t.category_id\nWHERE c.allow_badges AND\n      p.deleted_at IS NULL AND\n      t.deleted_at IS NULL AND\n      NOT c.read_restricted AND\n      t.visible AND\n      p.post_type IN (1,2,3)\n")
   -> 0.0032s
== 20200601111500 RemoveImageUrlFromPostAndTopic: migrated (0.0067s) ==========

== 20200601130900 CorrectSchemaDiscrepancies: migrating =======================
== 20200601130900 CorrectSchemaDiscrepancies: migrated (0.0206s) ==============

== 20200602153813 MigrateInviteRedeemedDataToInvitedUsers: migrating ==========
-- execute("INSERT INTO invited_users (\n  user_id,\n  invite_id,\n  redeemed_at,\n  created_at,\n  updated_at\n)\nSELECT user_id, id, redeemed_at, created_at, updated_at\nFROM invites\nWHERE user_id IS NOT NULL AND redeemed_at IS NOT NULL\n")
   -> 0.0005s
== 20200602153813 MigrateInviteRedeemedDataToInvitedUsers: migrated (0.0056s) =

== 20200610150900 CorrectPostsSchema: migrating ===============================
== 20200610150900 CorrectPostsSchema: migrated (0.0049s) ======================

== 20200611104600 CreateMissingBadgeIndexes: migrating ========================
-- execute("CREATE INDEX IF NOT EXISTS index_user_badges_on_user_id ON public.user_badges USING btree (user_id)")
   -> 0.0003s
-- execute("CREATE INDEX IF NOT EXISTS index_badges_on_badge_type_id ON public.badges USING btree (badge_type_id)")
   -> 0.0002s
== 20200611104600 CreateMissingBadgeIndexes: migrated (0.0011s) ===============

== 20200617144300 AddPublicFieldToPublishedPages: migrating ===================
-- execute("DELETE FROM schema_migrations WHERE version='20201006172700'\n")
   -> 0.0002s
-- execute("DELETE FROM schema_migrations WHERE version='20201006172701'\n")
   -> 0.0001s
-- execute("ALTER TABLE \"published_pages\" ADD COLUMN IF NOT EXISTS \"public\" boolean DEFAULT FALSE NOT NULL\n")
   -> 0.0004s
== 20200617144300 AddPublicFieldToPublishedPages: migrated (0.0012s) ==========

== 20200618175923 DeleteTrackingStateForStagedUsers: migrating ================
-- execute("DELETE FROM category_users\nWHERE user_id IN (SELECT id FROM users WHERE staged = true)\n")
   -> 0.0008s
-- execute("DELETE FROM tag_users\nWHERE user_id IN (SELECT id FROM users WHERE staged = true)\n")
   -> 0.0004s
== 20200618175923 DeleteTrackingStateForStagedUsers: migrated (0.0018s) =======

== 20200706202436 RenameCategoryGroupModerationSetting: migrating =============
-- execute("UPDATE site_settings SET name = 'enable_category_group_moderation' WHERE name = 'enable_category_group_review'")
   -> 0.0002s
-- execute("UPDATE user_histories SET subject = 'enable_category_group_moderation' WHERE subject = 'enable_category_group_review'")
   -> 0.0004s
== 20200706202436 RenameCategoryGroupModerationSetting: migrated (0.0012s) ====

== 20200707154522 FixTopicLikeCount: migrating ================================
== 20200707154522 FixTopicLikeCount: migrated (0.0009s) =======================

== 20200707183007 AddAnimatedToUploads: migrating =============================
-- add_column(:uploads, :animated, :boolean)
   -> 0.0006s
== 20200707183007 AddAnimatedToUploads: migrated (0.0012s) ====================

== 20200708035330 FixTopicUserBookmarkedSyncIssues: migrating =================
== 20200708035330 FixTopicUserBookmarkedSyncIssues: migrated (0.0012s) ========

== 20200708051009 CapBookmarkNameAt100Characters: migrating ===================
-- change_column(:bookmarks, :name, :string, {:limit=>100})
   -> 0.0133s
== 20200708051009 CapBookmarkNameAt100Characters: migrated (0.0148s) ==========

== 20200709032247 AllowlistAndBlocklistSiteSettings: migrating ================
== 20200709032247 AllowlistAndBlocklistSiteSettings: migrated (0.0072s) =======

== 20200709094846 AddTimestampsToOptimizedImages: migrating ===================
-- add_column(:optimized_images, :created_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0006s
-- add_column(:optimized_images, :updated_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0003s
-- execute("UPDATE optimized_images\nSET created_at = uploads.created_at,\n    updated_at = uploads.created_at\nFROM uploads\nWHERE uploads.id = optimized_images.upload_id\n")
   -> 0.0007s
-- execute("UPDATE optimized_images\nSET created_at = NOW(),\n    updated_at = NOW()\nWHERE created_at IS NULL\n")
   -> 0.0004s
-- execute("ALTER TABLE optimized_images ALTER COLUMN created_at SET NOT NULL;\n")
   -> 0.0006s
-- execute("ALTER TABLE optimized_images ALTER COLUMN updated_at SET NOT NULL;\n")
   -> 0.0003s
== 20200709094846 AddTimestampsToOptimizedImages: migrated (0.0037s) ==========

== 20200710013237 FixTopicUsersBookmarkedColumnThatShouldBeFalse: migrating ===
== 20200710013237 FixTopicUsersBookmarkedColumnThatShouldBeFalse: migrated (0.0031s)

== 20200713071305 AddBookmarkNameIndex: migrating =============================
-- add_index(:bookmarks, :name)
   -> 0.0022s
== 20200713071305 AddBookmarkNameIndex: migrated (0.0031s) ====================

== 20200714105026 DeleteAllowAnimatedAvatarsSiteSetting: migrating ============
-- execute("DELETE FROM site_settings WHERE name = 'allow_animated_avatars'")
   -> 0.0004s
== 20200714105026 DeleteAllowAnimatedAvatarsSiteSetting: migrated (0.0010s) ===

== 20200714105027 DeleteAllowAnimatedThumbnailsSiteSetting: migrating =========
-- execute("DELETE FROM site_settings WHERE name = 'allow_animated_thumbnails'")
   -> 0.0006s
== 20200714105027 DeleteAllowAnimatedThumbnailsSiteSetting: migrated (0.0012s)

== 20200715030908 RemoveUnneccessaryBookmarkNameIndex: migrating ==============
-- remove_index(:bookmarks, :name)
   -> 0.0052s
== 20200715030908 RemoveUnneccessaryBookmarkNameIndex: migrated (0.0062s) =====

== 20200715044833 AddDeleteOptionToBookmarks: migrating =======================
-- add_column(:bookmarks, :auto_delete_preference, :integer, {:index=>true, :null=>false, :default=>0})
   -> 0.0013s
== 20200715044833 AddDeleteOptionToBookmarks: migrated (0.0029s) ==============

== 20200715045152 RemoveBookmarksDeleteWhenReminderSent: migrating ============
-- remove_column(:bookmarks, :delete_when_reminder_sent)
   -> 0.0007s
== 20200715045152 RemoveBookmarksDeleteWhenReminderSent: migrated (0.0013s) ===

== 20200717193118 CreateAllowedPmUsers: migrating =============================
-- create_table(:allowed_pm_users)
   -> 0.0044s
-- add_index(:allowed_pm_users, [:user_id, :allowed_pm_user_id], {:unique=>true})
   -> 0.0023s
-- add_index(:allowed_pm_users, [:allowed_pm_user_id, :user_id], {:unique=>true})
   -> 0.0023s
== 20200717193118 CreateAllowedPmUsers: migrated (0.0102s) ====================

== 20200718154308 AddEnableAllowedPmUsersToUserOptions: migrating =============
-- add_column(:user_options, :enable_allowed_pm_users, :boolean, {:default=>false, :null=>false})
   -> 0.0015s
== 20200718154308 AddEnableAllowedPmUsersToUserOptions: migrated (0.0024s) ====

== 20200724060632 RemoveDeprecatedAllowlistSettings: migrating ================
== 20200724060632 RemoveDeprecatedAllowlistSettings: migrated (0.0043s) =======

== 20200728000854 DuplicateAllowedPathsFromPathWhitelist: migrating ===========
-- column_exists?(:embeddable_hosts, :allowed_paths)
   -> 0.0014s
-- add_column(:embeddable_hosts, :allowed_paths, :string)
   -> 0.0006s
-- column_exists?(:embeddable_hosts, :path_whitelist)
   -> 0.0012s
-- column_exists?(:embeddable_hosts, :allowed_paths)
   -> 0.0012s
== 20200728000854 DuplicateAllowedPathsFromPathWhitelist: migrated (0.0068s) ==

== 20200728004302 DropPathWhitelistFromEmbeddableHosts: migrating =============
== 20200728004302 DropPathWhitelistFromEmbeddableHosts: migrated (0.0030s) ====

== 20200728022830 SyncTopicUserBookmarkedColumnWithBookmarks: migrating =======
== 20200728022830 SyncTopicUserBookmarkedColumnWithBookmarks: migrated (0.0022s)

== 20200728072038 AddImapGroupIdToIncomingEmail: migrating ====================
-- execute("ALTER TABLE incoming_emails ADD COLUMN IF NOT EXISTS imap_group_id bigint NULL\n")
   -> 0.0004s
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS\nindex_incoming_emails_on_imap_group_id ON incoming_emails USING btree (imap_group_id)\n")
   -> 0.0025s
== 20200728072038 AddImapGroupIdToIncomingEmail: migrated (0.0034s) ===========

== 20200730205554 CreateGroupDefaultTracking: migrating =======================
-- create_table(:group_category_notification_defaults)
   -> 0.0040s
-- add_index(:group_category_notification_defaults, [:group_id, :category_id], {:unique=>true, :name=>:idx_group_category_notification_defaults_unique})
   -> 0.0026s
-- create_table(:group_tag_notification_defaults)
   -> 0.0033s
-- add_index(:group_tag_notification_defaults, [:group_id, :tag_id], {:unique=>true, :name=>:idx_group_tag_notification_defaults_unique})
   -> 0.0026s
== 20200730205554 CreateGroupDefaultTracking: migrated (0.0139s) ==============

== 20200804144550 AddTitleToPolls: migrating ==================================
-- add_column(:polls, :title, :string)
   -> 0.0007s
== 20200804144550 AddTitleToPolls: migrated (0.0014s) =========================

== 20200805151752 AddDarkSchemeIdToUserOptions: migrating =====================
-- add_column(:user_options, :dark_scheme_id, :integer)
   -> 0.0008s
== 20200805151752 AddDarkSchemeIdToUserOptions: migrated (0.0013s) ============

== 20200805163400 RenamePostImageSiteSettings: migrating ======================
-- execute("UPDATE site_settings SET name = 'newuser_max_embedded_media' WHERE name = 'newuser_max_images'")
   -> 0.0002s
-- execute("UPDATE user_histories SET subject = 'newuser_max_embedded_media' WHERE subject = 'newuser_max_images'")
   -> 0.0002s
-- execute("UPDATE site_settings SET name = 'min_trust_to_post_embedded_media' WHERE name = 'min_trust_to_post_images'")
   -> 0.0001s
-- execute("UPDATE user_histories SET subject = 'min_trust_to_post_embedded_media' WHERE subject = 'min_trust_to_post_images'")
   -> 0.0001s
== 20200805163400 RenamePostImageSiteSettings: migrated (0.0011s) =============

== 20200810194943 ChangeSelectableAvatarsSiteSetting: migrating ===============
-- execute("SELECT value FROM site_settings WHERE name = 'selectable_avatars'")
   -> 0.0006s
== 20200810194943 ChangeSelectableAvatarsSiteSetting: migrated (0.0015s) ======

== 20200810220841 RenameModeratorsCreateCategoriesSetting: migrating ==========
-- execute("UPDATE site_settings SET name = 'moderators_manage_categories_and_groups' WHERE name = 'moderators_create_categories'")
   -> 0.0003s
-- execute("UPDATE user_histories SET subject = 'moderators_manage_categories_and_groups' WHERE subject = 'moderators_create_categories'")
   -> 0.0003s
== 20200810220841 RenameModeratorsCreateCategoriesSetting: migrated (0.0012s) =

== 20200811004537 AddVerifiedColumnToUploads: migrating =======================
-- add_column(:uploads, :verified, :boolean, {:null=>true})
   -> 0.0010s
== 20200811004537 AddVerifiedColumnToUploads: migrated (0.0020s) ==============

== 20200813044955 CreateImapSyncLog: migrating ================================
-- create_table(:imap_sync_logs)
   -> 0.0060s
-- add_index(:imap_sync_logs, :group_id)
   -> 0.0015s
-- add_index(:imap_sync_logs, :level)
   -> 0.0016s
== 20200813044955 CreateImapSyncLog: migrated (0.0098s) =======================

== 20200813051337 AddPrivateMessageToPostSearchData: migrating ================
-- add_column(:post_search_data, :private_message, :boolean)
   -> 0.0005s
== 20200813051337 AddPrivateMessageToPostSearchData: migrated (0.0009s) =======

== 20200814081437 AddSkipNewUserTipsToUserOptions: migrating ==================
-- add_column(:user_options, :skip_new_user_tips, :boolean, {:default=>false, :null=>false})
   -> 0.0008s
== 20200814081437 AddSkipNewUserTipsToUserOptions: migrated (0.0016s) =========

== 20200818084329 UpdatePrivateMessageOnPostSearchData: migrating =============
-- execute("DELETE FROM post_search_data\nWHERE post_id IN (\n  SELECT posts.id\n  FROM posts\n  LEFT JOIN topics ON topics.id = posts.topic_id\n  WHERE topics.id IS NULL\n)\n")
   -> 0.0009s
-- execute("DELETE FROM post_search_data\nWHERE post_id IN (\n  SELECT post_search_data.post_id\n  FROM post_search_data\n  LEFT JOIN posts ON posts.id = post_search_data.post_id\n  WHERE posts.id IS NULL\n)\n")
   -> 0.0004s
-- execute("UPDATE post_search_data\nSET private_message = X.private_message\nFROM\n(\n  SELECT post_id,\n    CASE WHEN t.archetype = 'private_message' THEN TRUE ELSE FALSE END private_message\n  FROM posts p\n  JOIN post_search_data pd ON pd.post_id = p.id\n  JOIN topics t ON t.id = p.topic_id\n  WHERE pd.private_message IS NULL OR\n    pd.private_message <> CASE WHEN t.archetype = 'private_message' THEN TRUE ELSE FALSE END\n  LIMIT 3000000\n) X\nWHERE X.post_id = post_search_data.post_id\n")
   -> 0.0010s
-- execute("UPDATE post_search_data\nSET private_message = X.private_message\nFROM\n(\n  SELECT post_id,\n    CASE WHEN t.archetype = 'private_message' THEN TRUE ELSE FALSE END private_message\n  FROM posts p\n  JOIN post_search_data pd ON pd.post_id = p.id\n  JOIN topics t ON t.id = p.topic_id\n  WHERE pd.private_message IS NULL OR\n    pd.private_message <> CASE WHEN t.archetype = 'private_message' THEN TRUE ELSE FALSE END\n  LIMIT 3000000\n) X\nWHERE X.post_id = post_search_data.post_id\n")
   -> 0.0006s
-- change_column_null(:post_search_data, :private_message, false)
   -> 0.0003s
== 20200818084329 UpdatePrivateMessageOnPostSearchData: migrated (0.0047s) ====

== 20200819021210 AddUserSelectableColumnToColorSchemes: migrating ============
-- add_column(:color_schemes, :user_selectable, :bool, {:null=>false, :default=>false})
   -> 0.0011s
== 20200819021210 AddUserSelectableColumnToColorSchemes: migrated (0.0021s) ===

== 20200819030609 MigrateUserTopicTimersToBookmarkReminders: migrating ========
== 20200819030609 MigrateUserTopicTimersToBookmarkReminders: migrated (0.0016s)

== 20200819203846 AddColorSchemeIdToUserOptions: migrating ====================
-- add_column(:user_options, :color_scheme_id, :integer)
   -> 0.0007s
== 20200819203846 AddColorSchemeIdToUserOptions: migrated (0.0012s) ===========

== 20200820174703 AddPartialTargetIdIndexToReviewables: migrating =============
-- add_index(:reviewables, [:target_id], {:where=>"target_type = 'Post'", :algorithm=>:concurrently, :name=>"index_reviewables_on_target_id_where_post_type_eq_post"})
   -> 0.0022s
== 20200820174703 AddPartialTargetIdIndexToReviewables: migrated (0.0031s) ====

== 20200820232017 DropIdxRegularPostSearchData: migrating =====================
-- execute("DROP INDEX CONCURRENTLY IF EXISTS idx_regular_post_search_data\n")
   -> 0.0003s
== 20200820232017 DropIdxRegularPostSearchData: migrated (0.0008s) ============

== 20200902054531 AddFirstUnreadPmAToGroupUser: migrating =====================
-- add_column(:group_users, :first_unread_pm_at, :timestamp, {:null=>false, :default=>#<Proc:0x00007f9766fccba0 /var/www/discourse/db/migrate/20200902054531_add_first_unread_pm_a_to_group_user.rb:9 (lambda)>, :precision=>nil})
   -> 0.0008s
-- execute("UPDATE group_users gu\nSET first_unread_pm_at = gu.created_at\n")
   -> 0.0005s
== 20200902054531 AddFirstUnreadPmAToGroupUser: migrated (0.0024s) ============

== 20200902082203 AddFirstUnreadPmAtToUserStats: migrating ====================
-- add_column(:user_stats, :first_unread_pm_at, :timestamp, {:null=>false, :default=>#<Proc:0x00007f9766fc43d8 /var/www/discourse/db/migrate/20200902082203_add_first_unread_pm_at_to_user_stats.rb:9 (lambda)>, :precision=>nil})
   -> 0.0006s
-- execute("UPDATE user_stats us\nSET first_unread_pm_at = u.created_at\nFROM users u\nWHERE u.id = us.user_id\n")
   -> 0.0004s
== 20200902082203 AddFirstUnreadPmAtToUserStats: migrated (0.0017s) ===========

== 20200903045539 AddIndexTopicsOnTimestampsPrivate: migrating ================
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS\nindex_topics_on_timestamps_private\nON topics (bumped_at, created_at, updated_at)\nWHERE deleted_at IS NULL AND archetype = 'private_message'\n")
   -> 0.0028s
== 20200903045539 AddIndexTopicsOnTimestampsPrivate: migrated (0.0036s) =======

== 20200910020909 MakeImapSyncLogColsNotNull: migrating =======================
-- change_column_null(:imap_sync_logs, :message, false)
   -> 0.0003s
-- change_column_null(:imap_sync_logs, :level, false)
   -> 0.0002s
== 20200910020909 MakeImapSyncLogColsNotNull: migrated (0.0010s) ==============

== 20200910051633 ChangeUploadsVerifiedToInteger: migrating ===================
-- add_column(:uploads, :verification_status, :integer, {:null=>false, :default=>1})
   -> 0.0009s
== 20200910051633 ChangeUploadsVerifiedToInteger: migrated (0.0044s) ==========

== 20200911031738 AddIndexToUploadsVerificationStatus: migrating ==============
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS\nidx_uploads_on_verification_status ON uploads USING btree (verification_status)\n")
   -> 0.0026s
== 20200911031738 AddIndexToUploadsVerificationStatus: migrated (0.0032s) =====

== 20200916085541 CreateUserIpAddressHistories: migrating =====================
-- create_table(:user_ip_address_histories)
   -> 0.0047s
-- add_index(:user_ip_address_histories, [:user_id, :ip_address], {:unique=>true})
   -> 0.0025s
== 20200916085541 CreateUserIpAddressHistories: migrated (0.0081s) ============

== 20200918095554 AddUserApiKeyScopes: migrating ==============================
-- create_table(:user_api_key_scopes)
   -> 0.0044s
-- add_index(:user_api_key_scopes, :user_api_key_id)
   -> 0.0015s
-- execute("INSERT INTO user_api_key_scopes\n(\n  user_api_key_id,\n  name,\n  created_at,\n  updated_at\n)\nSELECT\n  user_api_keys.id,\n  unnest(user_api_keys.scopes),\n  created_at,\n  updated_at\nFROM user_api_keys\n")
   -> 0.0007s
-- change_column_null(:user_api_keys, :scopes, true)
   -> 0.0002s
-- change_column_default(:user_api_keys, :scopes, nil)
   -> 0.0023s
== 20200918095554 AddUserApiKeyScopes: migrated (0.0120s) =====================

== 20201005165544 AddTopicSlowModeInterval: migrating =========================
-- add_column(:topics, :slow_mode_seconds, :integer, {:null=>false, :default=>0})
   -> 0.0011s
== 20201005165544 AddTopicSlowModeInterval: migrated (0.0016s) ================

== 20201006021020 AddRequestedByToEmailChangeRequest: migrating ===============
-- add_column(:email_change_requests, :requested_by_user_id, :integer, {:null=>true})
   -> 0.0003s
== 20201006021020 AddRequestedByToEmailChangeRequest: migrated (0.0022s) ======

== 20201007124955 AddDigestAttemptedAtToUserStats: migrating ==================
-- add_column(:user_stats, :digest_attempted_at, :timestamp)
   -> 0.0003s
== 20201007124955 AddDigestAttemptedAtToUserStats: migrated (0.0007s) =========

== 20201008105539 AddAllowedParametersToUserApiKeyScope: migrating ============
-- add_column(:user_api_key_scopes, :allowed_parameters, :jsonb)
   -> 0.0005s
== 20201008105539 AddAllowedParametersToUserApiKeyScope: migrated (0.0011s) ===

== 20201009190955 AddLastPostedAtToTopicUser: migrating =======================
-- add_column(:topic_users, :last_posted_at, :timestamp, {:precision=>nil})
   -> 0.0004s
== 20201009190955 AddLastPostedAtToTopicUser: migrated (0.0010s) ==============

== 20201027110546 CreateLinkedTopics: migrating ===============================
-- create_table(:linked_topics)
   -> 0.0040s
-- add_index(:linked_topics, [:topic_id, :original_topic_id], {:unique=>true})
   -> 0.0030s
-- add_index(:linked_topics, [:topic_id, :sequence], {:unique=>true})
   -> 0.0022s
== 20201027110546 CreateLinkedTopics: migrated (0.0101s) ======================

== 20201102162044 AddAutoUpdateToThemes: migrating ============================
-- add_column(:themes, :auto_update, :boolean, {:null=>false, :default=>true})
   -> 0.0010s
== 20201102162044 AddAutoUpdateToThemes: migrated (0.0014s) ===================

== 20201103103401 AddNotNullToIgnoredUsers: migrating =========================
-- execute("UPDATE ignored_users\nSET expiring_at = created_at + interval '4 months'\nWHERE expiring_at IS NULL\n")
   -> 0.0009s
-- change_column_null(:ignored_users, :expiring_at, false)
   -> 0.0003s
== 20201103103401 AddNotNullToIgnoredUsers: migrated (0.0018s) ================

== 20201105190351 MovePostNoticesToJson: migrating ============================
-- execute("INSERT INTO post_custom_fields(post_id, name, value, created_at, updated_at)\nSELECT\n  posts.id,\n  'notice',\n  CASE\n    WHEN pcf_type.value = 'custom'         THEN json_build_object('type', pcf_type.value, 'raw', pcf_args.value, 'cooked', pcf_args.value)\n    WHEN pcf_type.value = 'new_user'       THEN json_build_object('type', pcf_type.value)\n    WHEN pcf_type.value = 'returning_user' THEN json_build_object('type', pcf_type.value, 'last_posted_at', pcf_args.value)\n  END,\n  pcf_type.created_at created_at,\n  pcf_type.updated_at updated_at\nFROM posts\nJOIN post_custom_fields pcf_type ON posts.id = pcf_type.post_id AND pcf_type.name = 'notice_type'\nLEFT JOIN post_custom_fields pcf_args ON posts.id = pcf_args.post_id AND pcf_args.name = 'notice_args'\n")
   -> 0.0014s
-- execute("DELETE FROM post_custom_fields WHERE name = 'notice_type' OR name = 'notice_args'")
   -> 0.0002s
-- add_index(:post_custom_fields, :post_id, {:unique=>true, :name=>"index_post_custom_fields_on_notice", :where=>"name = 'notice'"})
   -> 0.0021s
-- remove_index(:post_custom_fields, {:name=>"index_post_custom_fields_on_notice_type"})
   -> 0.0008s
-- remove_index(:post_custom_fields, {:name=>"index_post_custom_fields_on_notice_args"})
   -> 0.0005s
== 20201105190351 MovePostNoticesToJson: migrated (0.0067s) ===================

== 20201109170951 MigrateGithubUserInfos: migrating ===========================
-- execute("INSERT INTO user_associated_accounts (\n  provider_name,\n  provider_uid,\n  user_id,\n  info,\n  last_used,\n  created_at,\n  updated_at\n  , id\n) SELECT\n  'github',\n  github_user_id,\n  user_id,\n  json_build_object('nickname', screen_name),\n  updated_at,\n  created_at,\n  updated_at\n  , id\nFROM github_user_infos\n")
   -> 0.0008s
-- execute("SELECT setval(\n  pg_get_serial_sequence('user_associated_accounts', 'id'),\n  (select greatest(max(id), 1) from user_associated_accounts)\n);\n")
   -> 0.0006s
== 20201109170951 MigrateGithubUserInfos: migrated (0.0027s) ==================

== 20201110110952 DropGithubUserInfos: migrating ==============================
== 20201110110952 DropGithubUserInfos: migrated (0.0021s) =====================

== 20201112142419 AddReviewablesForceReview: migrating ========================
-- add_column(:reviewables, :force_review, :boolean, {:default=>false, :null=>false})
   -> 0.0007s
== 20201112142419 AddReviewablesForceReview: migrated (0.0012s) ===============

== 20201116132948 SetThemesAutoUpdateFalse: migrating =========================
-- execute("UPDATE themes SET auto_update = false")
   -> 0.0003s
== 20201116132948 SetThemesAutoUpdateFalse: migrated (0.0007s) ================

== 20201117212328 SetCategorySlugToLower: migrating ===========================
-- remove_index(:categories, {:name=>"unique_index_categories_on_slug"})
   -> 0.0003s
-- execute("UPDATE categories SET slug = LOWER(slug)")
   -> 0.0005s
-- add_index(:categories, "COALESCE(parent_category_id, -1), LOWER(slug)", {:name=>"unique_index_categories_on_slug", :where=>"slug != ''", :unique=>true})
   -> 0.0023s
== 20201117212328 SetCategorySlugToLower: migrated (0.0044s) ==================

== 20201210151635 CreateDoNotDisturbTimings: migrating ========================
-- create_table(:do_not_disturb_timings)
   -> 0.0042s
-- add_index(:do_not_disturb_timings, [:user_id], {:unique=>false})
   -> 0.0022s
-- add_index(:do_not_disturb_timings, [:starts_at], {:unique=>false})
   -> 0.0021s
-- add_index(:do_not_disturb_timings, [:ends_at], {:unique=>false})
   -> 0.0012s
== 20201210151635 CreateDoNotDisturbTimings: migrated (0.0106s) ===============

== 20201218000000 RemoveFlagWebHooks: migrating ===============================
-- execute("DELETE FROM web_hook_event_types_hooks\nWHERE web_hook_event_type_id = 7\n")
   -> 0.0003s
-- execute("DELETE FROM web_hook_event_types\nWHERE id = 7\n")
   -> 0.0003s
== 20201218000000 RemoveFlagWebHooks: migrated (0.0010s) ======================

== 20201218000001 RemoveQueuedPostWebHooks: migrating =========================
-- execute("DELETE FROM web_hook_event_types_hooks\nWHERE web_hook_event_type_id = 8\n")
   -> 0.0002s
-- execute("DELETE FROM web_hook_event_types\nWHERE id = 8\n")
   -> 0.0001s
== 20201218000001 RemoveQueuedPostWebHooks: migrated (0.0007s) ================

== 20201223071241 DeleteStaleCategorySearchPrioritiesFromSiteSettings: migrating
-- execute("DELETE FROM site_settings WHERE name IN ('category_search_priority_very_low_weight', 'category_search_priority_very_high_weight')\n")
   -> 0.0004s
== 20201223071241 DeleteStaleCategorySearchPrioritiesFromSiteSettings: migrated (0.0013s)

== 20201229031635 AddUserProfileIndexes: migrating ============================
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS index_topic_links_on_user_and_clicks\nON topic_links(user_id, clicks DESC, created_at DESC)\nWHERE (NOT reflection and NOT quote and NOT internal)\n")
   -> 0.0033s
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS index_posts_user_and_likes\nON posts(user_id, like_count desc, created_at desc)\nWHERE post_number > 1\n")
   -> 0.0019s
== 20201229031635 AddUserProfileIndexes: migrated (0.0060s) ===================

== 20210105165605 AddProcessedToNotifications: migrating ======================
== 20210105165605 AddProcessedToNotifications: migrated (0.0005s) =============

== 20210106181418 CreateUserNotificationSchedules: migrating ==================
-- create_table(:user_notification_schedules)
   -> 0.0045s
-- add_index(:user_notification_schedules, [:user_id])
   -> 0.0020s
-- add_index(:user_notification_schedules, [:enabled])
   -> 0.0022s
-- add_column(:do_not_disturb_timings, :scheduled, :boolean, {:default=>false})
   -> 0.0012s
-- add_index(:do_not_disturb_timings, [:scheduled])
   -> 0.0021s
== 20210106181418 CreateUserNotificationSchedules: migrated (0.0132s) =========

== 20210107005832 AddImapMissingColumnToIncomingEmail: migrating ==============
-- add_column(:incoming_emails, :imap_missing, :boolean, {:default=>false, :null=>false})
   -> 0.0011s
== 20210107005832 AddImapMissingColumnToIncomingEmail: migrated (0.0021s) =====

== 20210111025920 AddRejectReasonToReviewables: migrating =====================
-- add_column(:reviewables, :reject_reason, :text)
   -> 0.0004s
== 20210111025920 AddRejectReasonToReviewables: migrated (0.0010s) ============

== 20210119005647 AddCreatedViaToIncomingEmail: migrating =====================
-- add_column(:incoming_emails, :created_via, :integer, {:null=>true})
   -> 0.0004s
== 20210119005647 AddCreatedViaToIncomingEmail: migrated (0.0009s) ============

== 20210120125607 RenameEnglishLocale: migrating ==============================
-- execute("UPDATE users\nSET locale = 'en_GB'\nWHERE locale = 'en'\n")
   -> 0.0003s
-- execute("UPDATE site_settings\nSET value = 'en_GB'\nWHERE name = 'default_locale' AND value = 'en'\n")
   -> 0.0002s
-- execute("UPDATE translation_overrides\nSET locale = 'en_GB'\nWHERE locale = 'en'\n")
   -> 0.0002s
-- execute("UPDATE theme_translation_overrides\nSET locale = 'en_GB'\nWHERE locale = 'en'\n")
   -> 0.0002s
-- execute("UPDATE users\nSET locale = 'en'\nWHERE locale = 'en_US'\n")
   -> 0.0002s
-- execute("UPDATE site_settings\nSET value = 'en'\nWHERE name = 'default_locale' AND value = 'en_US'\n")
   -> 0.0002s
-- execute("UPDATE translation_overrides\nSET locale = 'en'\nWHERE locale = 'en_US'\n")
   -> 0.0001s
-- execute("UPDATE theme_translation_overrides\nSET locale = 'en'\nWHERE locale = 'en_US'\n")
   -> 0.0001s
== 20210120125607 RenameEnglishLocale: migrated (0.0019s) =====================

== 20210121001720 ChangeIncomingEmailCreatedAtNull: migrating =================
-- change_column_default(:incoming_emails, :created_via, 0)
   -> 0.0027s
-- change_column_null(:incoming_emails, :created_via, false)
   -> 0.0002s
== 20210121001720 ChangeIncomingEmailCreatedAtNull: migrated (0.0040s) ========

== 20210125100452 MigrateSearchDataAfterDefaultLocaleRename: migrating ========
Migrating category_search_data to new locale.
-- execute("UPDATE category_search_data\n   SET locale = 'en'\n WHERE category_id IN (\n        SELECT category_id\n          FROM category_search_data\n         WHERE locale = 'en_US'\n         LIMIT 100000\n     )\n")
   -> 0.0008s
Migrating tag_search_data to new locale.
-- execute("UPDATE tag_search_data\n   SET locale = 'en'\n WHERE tag_id IN (\n        SELECT tag_id\n          FROM tag_search_data\n         WHERE locale = 'en_US'\n         LIMIT 100000\n     )\n")
   -> 0.0005s
Migrating topic_search_data to new locale.
-- execute("UPDATE topic_search_data\n   SET locale = 'en'\n WHERE topic_id IN (\n        SELECT topic_id\n          FROM topic_search_data\n         WHERE locale = 'en_US'\n         LIMIT 100000\n     )\n")
   -> 0.0007s
Migrating user_search_data to new locale.
-- execute("UPDATE user_search_data\n   SET locale = 'en'\n WHERE user_id IN (\n        SELECT user_id\n          FROM user_search_data\n         WHERE locale = 'en_US'\n         LIMIT 100000\n     )\n")
   -> 0.0008s
== 20210125100452 MigrateSearchDataAfterDefaultLocaleRename: migrated (0.0036s)

== 20210126222142 CreateShelvedNotifications: migrating =======================
-- create_table(:shelved_notifications)
   -> 0.0046s
-- add_index(:shelved_notifications, [:notification_id])
   -> 0.0021s
== 20210126222142 CreateShelvedNotifications: migrated (0.0075s) ==============

== 20210127013637 AddUploadSecurityLogColumns: migrating ======================
-- add_column(:uploads, :security_last_changed_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0009s
-- add_column(:uploads, :security_last_changed_reason, :string, {:null=>true})
   -> 0.0005s
== 20210127013637 AddUploadSecurityLogColumns: migrated (0.0020s) =============

== 20210127140730 UndoAddProcessedToNotifications: migrating ==================
-- execute("ALTER TABLE notifications DROP COLUMN IF EXISTS processed")
   -> 0.0004s
== 20210127140730 UndoAddProcessedToNotifications: migrated (0.0013s) =========

== 20210128021147 AddAllowUnknownSenderTopicRepliesToGroup: migrating =========
-- add_column(:groups, :allow_unknown_sender_topic_replies, :boolean, {:default=>false, :null=>false})
   -> 0.0014s
== 20210128021147 AddAllowUnknownSenderTopicRepliesToGroup: migrated (0.0022s)

== 20210131221311 CreateDismissedTopicUsersTable: migrating ===================
-- create_table(:dismissed_topic_users)
   -> 0.0033s
-- add_index(:dismissed_topic_users, [:user_id, :topic_id], {:unique=>true})
   -> 0.0016s
== 20210131221311 CreateDismissedTopicUsersTable: migrated (0.0057s) ==========

== 20210201034048 MoveCategoryLastSeenAtToNewTable: migrating =================
== 20210201034048 MoveCategoryLastSeenAtToNewTable: migrated (0.0091s) ========

== 20210203031628 AddDurationMinutesToTopicTimer: migrating ===================
-- add_column(:topic_timers, :duration_minutes, :integer)
   -> 0.0005s
== 20210203031628 AddDurationMinutesToTopicTimer: migrated (0.0027s) ==========

== 20210204135429 RenameSsoSiteSettings: migrating ============================
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'enable_discourse_connect', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'enable_sso'\n")
   -> 0.0005s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_allows_all_return_paths', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_allows_all_return_paths'\n")
   -> 0.0007s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'enable_discourse_connect_provider', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'enable_sso_provider'\n")
   -> 0.0004s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'verbose_discourse_connect_logging', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'verbose_sso_logging'\n")
   -> 0.0003s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_url', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_url'\n")
   -> 0.0004s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_secret', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_secret'\n")
   -> 0.0003s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_provider_secrets', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_provider_secrets'\n")
   -> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_groups', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_groups'\n")
   -> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_bio', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_bio'\n")
   -> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'auth_overrides_email', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_email'\n")
   -> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'auth_overrides_username', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_username'\n")
   -> 0.0003s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'auth_overrides_name', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_name'\n")
   -> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_avatar', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_avatar'\n")
   -> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_profile_background', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_profile_background'\n")
   -> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_location', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_location'\n")
   -> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_website', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_website'\n")
   -> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_overrides_card_background', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'sso_overrides_card_background'\n")
   -> 0.0001s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'auth_skip_create_confirm', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'external_auth_skip_create_confirm'\n")
   -> 0.0002s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'auth_immediately', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'external_auth_immediately'\n")
   -> 0.0002s
== 20210204135429 RenameSsoSiteSettings: migrated (0.0070s) ===================

== 20210204195932 AddReplacementToWatchedWords: migrating =====================
-- add_column(:watched_words, :replacement, :string, {:null=>true})
   -> 0.0005s
== 20210204195932 AddReplacementToWatchedWords: migrated (0.0010s) ============

== 20210207232853 FixTopicTimerDurationMinutes: migrating =====================
== 20210207232853 FixTopicTimerDurationMinutes: migrated (0.0010s) ============

== 20210215231312 FixGroupFlairAvatarUploadSecurityAndAcls: migrating =========
== 20210215231312 FixGroupFlairAvatarUploadSecurityAndAcls: migrated (0.0008s)

== 20210218022739 MoveNewSinceToNewTableAgain: migrating ======================
== 20210218022739 MoveNewSinceToNewTableAgain: migrated (0.0010s) =============

== 20210218144656 AddIsFavoriteToUserBadge: migrating =========================
-- add_column(:user_badges, :is_favorite, :boolean)
   -> 0.0007s
== 20210218144656 AddIsFavoriteToUserBadge: migrated (0.0013s) ================

== 20210219171329 DropOldSsoSiteSettings: migrating ===========================
-- execute("DELETE FROM site_settings\nWHERE name IN (\n  'enable_sso',\n  'sso_allows_all_return_paths',\n  'enable_sso_provider',\n  'verbose_sso_logging',\n  'sso_url',\n  'sso_secret',\n  'sso_provider_secrets',\n  'sso_overrides_groups',\n  'sso_overrides_bio',\n  'sso_overrides_email',\n  'sso_overrides_username',\n  'sso_overrides_name',\n  'sso_overrides_avatar',\n  'sso_overrides_profile_background',\n  'sso_overrides_location',\n  'sso_overrides_website',\n  'sso_overrides_card_background',\n  'external_auth_skip_create_confirm',\n  'external_auth_immediately'\n)\n")
   -> 0.0004s
== 20210219171329 DropOldSsoSiteSettings: migrated (0.0012s) ==================

== 20210224162050 RemoveEmojiOneFromEmojiSetSiteSetting: migrating ============
-- execute("SELECT value FROM site_settings WHERE name='emoji_set' and value='emoji_one'")
   -> 0.0003s
== 20210224162050 RemoveEmojiOneFromEmojiSetSiteSetting: migrated (0.0010s) ===

== 20210225230057 CreateChatTables: migrating =================================
-- create_table(:topic_chats)
   -> 0.0058s
-- create_table(:topic_chat_messages)
   -> 0.0063s
-- add_index(:topic_chat_messages, [:topic_id, :created_at])
   -> 0.0014s
== 20210225230057 CreateChatTables: migrated (0.0145s) ========================

== 20210302164429 DropFlashOneboxSiteSetting: migrating =======================
-- execute("DELETE FROM site_settings\nWHERE name = 'enable_flash_video_onebox'\n")
   -> 0.0002s
== 20210302164429 DropFlashOneboxSiteSetting: migrated (0.0008s) ==============

== 20210308010745 DeleteOrphanPostActions: migrating ==========================
-- execute("DELETE FROM post_actions\nUSING post_actions pa\nLEFT JOIN posts ON posts.id = pa.post_id\nWHERE posts.id IS NULL\nAND post_actions.id = pa.id\n")
   -> 0.0007s
== 20210308010745 DeleteOrphanPostActions: migrated (0.0012s) =================

== 20210308195916 AddUniqueIndexToInvitedGroups: migrating ====================
-- execute("DELETE FROM invited_groups a\nUSING invited_groups b\nWHERE a.id < b.id\n  AND a.invite_id = b.invite_id\n  AND a.group_id = b.group_id\n")
   -> 0.0007s
-- add_index(:invited_groups, [:group_id, :invite_id], {:unique=>true})
   -> 0.0022s
== 20210308195916 AddUniqueIndexToInvitedGroups: migrated (0.0041s) ===========

== 20210311022303 DropShowFilterByTagSiteSetting: migrating ===================
-- execute("DELETE FROM site_settings\nWHERE name = 'show_filter_by_tag'\n")
   -> 0.0003s
== 20210311022303 DropShowFilterByTagSiteSetting: migrated (0.0010s) ==========

== 20210311070755 AddImageUploadIdToBadges: migrating =========================
-- add_column(:badges, :image_upload_id, :integer)
   -> 0.0008s
== 20210311070755 AddImageUploadIdToBadges: migrated (0.0025s) ================

== 20210315173137 SetDisableMailingListMode: migrating ========================
-- execute("SELECT COUNT(*) FROM user_options WHERE mailing_list_mode")
   -> 0.0003s
== 20210315173137 SetDisableMailingListMode: migrated (0.0008s) ===============

== 20210318020143 AddPinnedColumnToBookmarks: migrating =======================
-- add_column(:bookmarks, :pinned, :boolean, {:default=>false})
   -> 0.0007s
== 20210318020143 AddPinnedColumnToBookmarks: migrated (0.0015s) ==============

== 20210323142518 UpdateInvitesRedemptionCount: migrating =====================
-- execute("WITH invite_counts AS (\n  SELECT invite_id, COUNT(*) count\n  FROM invited_users\n  GROUP BY invite_id\n)\nUPDATE invites\nSET redemption_count = GREATEST(redemption_count, count)\nFROM invite_counts\nWHERE invites.id = invite_counts.invite_id\n")
   -> 0.0009s
== 20210323142518 UpdateInvitesRedemptionCount: migrated (0.0014s) ============

== 20210324043327 DeleteOrphanPostRevisions: migrating ========================
-- execute("DELETE FROM post_revisions\nUSING post_revisions pr\nLEFT JOIN posts ON posts.id = pr.post_id\nWHERE posts.id IS NULL\nAND post_revisions.id = pr.id\n")
   -> 0.0004s
== 20210324043327 DeleteOrphanPostRevisions: migrated (0.0009s) ===============

== 20210328233843 FixBookmarksWithIncorrectTopicId: migrating =================
== 20210328233843 FixBookmarksWithIncorrectTopicId: migrated (0.0011s) ========

== 20210403025854 AddActionCodeToTopicChatMessage: migrating ==================
-- add_column(:topic_chat_messages, :action_code, :string, {:null=>true})
   -> 0.0005s
== 20210403025854 AddActionCodeToTopicChatMessage: migrated (0.0010s) =========

== 20210406060434 FixTopicUserBookmarkedSyncIssuesAgain: migrating ============
== 20210406060434 FixTopicUserBookmarkedSyncIssuesAgain: migrated (0.0027s) ===

== 20210409142455 AddTokenToInvites: migrating ================================
-- add_column(:invites, :email_token, :string)
   -> 0.0008s
== 20210409142455 AddTokenToInvites: migrated (0.0015s) =======================

== 20210414013318 AddCategorySettingAllowUnlimitedOwnerEditsOp: migrating =====
-- add_column(:categories, :allow_unlimited_owner_edits_on_first_post, :boolean, {:default=>false, :null=>false})
   -> 0.0015s
== 20210414013318 AddCategorySettingAllowUnlimitedOwnerEditsOp: migrated (0.0024s)

== 20210420015635 AddSearchableToUserFields: migrating ========================
-- add_column(:user_fields, :searchable, :boolean, {:default=>false, :null=>false})
   -> 0.0010s
== 20210420015635 AddSearchableToUserFields: migrated (0.0016s) ===============

== 20210426193009 MoveApprovedQueuedPostsTopicAndPostData: migrating ==========
== 20210426193009 MoveApprovedQueuedPostsTopicAndPostData: migrated (0.0011s) =

== 20210513125608 RemoveLengthConstrainFromTopicExcerpt: migrating ============
-- change_column(:topics, :excerpt, :string, {:null=>true})
   -> 0.0007s
== 20210513125608 RemoveLengthConstrainFromTopicExcerpt: migrated (0.0016s) ===

== 20210517061815 AddDedicatedEnableImapSmtpColumnsForGroup: migrating ========
-- add_column(:groups, :smtp_enabled, :boolean, {:default=>false})
   -> 0.0011s
-- add_column(:groups, :smtp_updated_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0005s
-- add_column(:groups, :smtp_updated_by_id, :integer, {:null=>true})
   -> 0.0004s
-- add_column(:groups, :imap_enabled, :boolean, {:default=>false})
   -> 0.0008s
-- add_column(:groups, :imap_updated_at, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0007s
-- add_column(:groups, :imap_updated_by_id, :integer, {:null=>true})
   -> 0.0007s
== 20210517061815 AddDedicatedEnableImapSmtpColumnsForGroup: migrated (0.0064s)

== 20210525112226 RemoveLengthConstrainFromTopicLinkUrl: migrating ============
-- change_column(:topic_links, :url, :string, {:null=>false})
   -> 0.0015s
== 20210525112226 RemoveLengthConstrainFromTopicLinkUrl: migrated (0.0021s) ===

== 20210526053611 AddErrorCountToPushSubscriptions: migrating =================
-- add_column(:push_subscriptions, :error_count, :integer, {:null=>false, :default=>0})
   -> 0.0010s
-- add_column(:push_subscriptions, :first_error_at, :timestamp, {:precision=>nil})
   -> 0.0006s
== 20210526053611 AddErrorCountToPushSubscriptions: migrated (0.0023s) ========

== 20210527114834 SetTaggingEnabled: migrating ================================
== 20210527114834 SetTaggingEnabled: migrated (0.0021s) =======================

== 20210527131318 CreateDirectoryColumns: migrating ===========================
-- create_table(:directory_columns)
   -> 0.0055s
-- add_index(:directory_columns, [:enabled, :position, :user_field_id], {:name=>"directory_column_index"})
   -> 0.0025s
== 20210527131318 CreateDirectoryColumns: migrated (0.0098s) ==================

== 20210528003603 FixBadgeImageAvatarUploadSecurityAndAcls: migrating =========
== 20210528003603 FixBadgeImageAvatarUploadSecurityAndAcls: migrated (0.0014s)

== 20210528144647 MigrateWatchedWordsFromReplaceToLink: migrating =============
-- execute("UPDATE watched_words\nSET action = 8\nWHERE action = 5 AND replacement ILIKE 'http%'\n")
   -> 0.0005s
== 20210528144647 MigrateWatchedWordsFromReplaceToLink: migrated (0.0010s) ====

== 20210601002145 RenameTrustLevelTranslations: migrating =====================
-- execute("UPDATE translation_overrides\nSET translation_key = 'js.trust_levels.names.newuser'\nWHERE translation_key = 'trust_levels.newuser.title'\n")
   -> 0.0002s
-- execute("UPDATE translation_overrides\nSET translation_key = 'js.trust_levels.names.basic'\nWHERE translation_key = 'trust_levels.basic.title'\n")
   -> 0.0002s
-- execute("UPDATE translation_overrides\nSET translation_key = 'js.trust_levels.names.member'\nWHERE translation_key = 'trust_levels.member.title'\n")
   -> 0.0005s
-- execute("UPDATE translation_overrides\nSET translation_key = 'js.trust_levels.names.regular'\nWHERE translation_key = 'trust_levels.regular.title'\n")
   -> 0.0002s
-- execute("UPDATE translation_overrides\nSET translation_key = 'js.trust_levels.names.leader'\nWHERE translation_key = 'trust_levels.leader.title'\n")
   -> 0.0004s
== 20210601002145 RenameTrustLevelTranslations: migrated (0.0021s) ============

== 20210614232334 AddSmtpGroupIdToEmailLog: migrating =========================
-- add_column(:email_logs, :smtp_group_id, :integer, {:null=>true, :index=>true})
   -> 0.0010s
== 20210614232334 AddSmtpGroupIdToEmailLog: migrated (0.0017s) ================

== 20210617183010 AddAutomaticColumnDirectoryColumns: migrating ===============
== 20210617183010 AddAutomaticColumnDirectoryColumns: migrated (0.0019s) ======

== 20210617202227 ChangeAutomaticOnDirectoryColumnsToBool: migrating ==========
-- remove_column(:directory_columns, :automatic)
   -> 0.0004s
-- add_column(:directory_columns, :automatic, :boolean, {:default=>true, :null=>false})
   -> 0.0007s
-- execute("UPDATE directory_columns SET automatic = (user_field_id IS NULL);\n")
   -> 0.0004s
== 20210617202227 ChangeAutomaticOnDirectoryColumnsToBool: migrated (0.0020s) =

== 20210618135229 ReintroduceTypeToDirectoryColumns: migrating ================
-- add_column(:directory_columns, :type, :integer, {:default=>0, :null=>false})
   -> 0.0010s
== 20210618135229 ReintroduceTypeToDirectoryColumns: migrated (0.0036s) =======

== 20210621002201 AddColumnsToEmailLogToMatchIncomingForSmtpImap: migrating ===
-- add_column(:email_logs, :cc_addresses, :text, {:null=>true})
   -> 0.0006s
-- add_column(:email_logs, :cc_user_ids, :integer, {:array=>true, :null=>true})
   -> 0.0005s
-- add_column(:email_logs, :raw, :text, {:null=>true})
   -> 0.0006s
-- add_column(:email_logs, :topic_id, :integer, {:null=>true})
   -> 0.0004s
-- add_index(:email_logs, :topic_id, {:where=>"topic_id IS NOT NULL"})
   -> 0.0021s
== 20210621002201 AddColumnsToEmailLogToMatchIncomingForSmtpImap: migrated (0.0058s)

== 20210621103509 AddBanneredUntil: migrating =================================
-- add_column(:topics, :bannered_until, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0009s
-- add_index(:topics, :bannered_until, {:where=>"bannered_until IS NOT NULL"})
   -> 0.0025s
== 20210621103509 AddBanneredUntil: migrated (0.0042s) ========================

== 20210621190335 MigratePendingUsersReminderDelaySetting: migrating ==========
== 20210621190335 MigratePendingUsersReminderDelaySetting: migrated (0.0017s) =

== 20210621234939 BackfillEmailLogTopicId: migrating ==========================
== 20210621234939 BackfillEmailLogTopicId: migrated (0.0020s) =================

== 20210624023831 RemoveHighestSeenPostNumberFromTopicUsers: migrating ========
== 20210624023831 RemoveHighestSeenPostNumberFromTopicUsers: migrated (0.0030s)

== 20210624080131 AddPartialIndexPinnedUntil: migrating =======================
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS \"index_topics_on_pinned_until\"\nON \"topics\" (\"pinned_until\")\nWHERE pinned_until IS NOT NULL\n")
   -> 0.0034s
== 20210624080131 AddPartialIndexPinnedUntil: migrated (0.0041s) ==============

== 20210625203049 AddFlairGroupIdToUsers: migrating ===========================
-- add_column(:users, :flair_group_id, :integer, {:null=>true})
   -> 0.0009s
== 20210625203049 AddFlairGroupIdToUsers: migrated (0.0017s) ==================

== 20210628035905 DropDurationColumnFromTopicTimers: migrating ================
== 20210628035905 DropDurationColumnFromTopicTimers: migrated (0.0021s) =======

== 20210701233509 DeleteOldReminderTopicTimers: migrating =====================
== 20210701233509 DeleteOldReminderTopicTimers: migrated (0.0006s) ============

== 20210702204007 AddDefaultAutoCloseSecondsToCategory: migrating =============
-- add_column(:categories, :default_slow_mode_seconds, :integer)
   -> 0.0005s
== 20210702204007 AddDefaultAutoCloseSecondsToCategory: migrated (0.0010s) ====

== 20210706091905 DropDisableJumpReplyColumnFromUserOptions: migrating ========
== 20210706091905 DropDisableJumpReplyColumnFromUserOptions: migrated (0.0019s)

== 20210706214013 RenameTopicChatsToChatChannels: migrating ===================
-- rename_table(:topic_chats, :chat_channels)
   -> 0.0046s
-- rename_column(:chat_channels, :topic_id, :chatable_id)
   -> 0.0018s
-- change_column(:chat_channels, :chatable_id, :integer, {:unique=>false})
   -> 0.0006s
-- add_column(:chat_channels, :chatable_type, :string)
   -> 0.0027s
-- change_column_null(:chat_channels, :chatable_type, false)
   -> 0.0004s
-- add_index(:chat_channels, [:chatable_id, :chatable_type])
   -> 0.0020s
-- rename_table(:topic_chat_messages, :chat_messages)
   -> 0.0047s
-- rename_column(:chat_messages, :topic_id, :chat_channel_id)
   -> 0.0020s
-- change_column_null(:chat_messages, :post_id, true)
   -> 0.0003s
== 20210706214013 RenameTopicChatsToChatChannels: migrated (0.0215s) ==========

== 20210708035525 AddUserIdIndexToPostRevisions: migrating ====================
-- add_index(:post_revisions, :user_id)
   -> 0.0031s
== 20210708035525 AddUserIdIndexToPostRevisions: migrated (0.0037s) ===========

== 20210708035538 AddPostEditsCountToUserStats: migrating =====================
-- add_column(:user_stats, :post_edits_count, :integer)
   -> 0.0008s
== 20210708035538 AddPostEditsCountToUserStats: migrated (0.0027s) ============

== 20210709042135 CreateExternalUploadStubs: migrating ========================
-- create_table(:external_upload_stubs)
   -> 0.0070s
-- add_index(:external_upload_stubs, [:key], {:unique=>true})
   -> 0.0017s
== 20210709042135 CreateExternalUploadStubs: migrated (0.0094s) ===============

== 20210709053030 DropUploadsVerified: migrating ==============================
== 20210709053030 DropUploadsVerified: migrated (0.0023s) =====================

== 20210713092503 SetUsersFlairGroupId: migrating =============================
-- execute("UPDATE users\nSET flair_group_id = primary_group_id\nFROM groups\nWHERE users.primary_group_id = groups.id AND\n      users.flair_group_id IS NULL AND\n      (groups.flair_icon IS NOT NULL OR groups.flair_upload_id IS NOT NULL)\n")
   -> 0.0012s
== 20210713092503 SetUsersFlairGroupId: migrated (0.0018s) ====================

== 20210720221817 AddDraftCountToUserStat: migrating ==========================
-- add_column(:user_stats, :draft_count, :integer, {:default=>0, :null=>false})
   -> 0.0011s
-- execute("UPDATE user_stats\nSET draft_count = new_user_stats.draft_count\nFROM (SELECT user_stats.user_id, COUNT(drafts.id) draft_count\n      FROM user_stats\n      LEFT JOIN drafts ON user_stats.user_id = drafts.user_id\n      GROUP BY user_stats.user_id) new_user_stats\nWHERE user_stats.user_id = new_user_stats.user_id\n  AND user_stats.draft_count <> new_user_stats.draft_count\n")
   -> 0.0010s
== 20210720221817 AddDraftCountToUserStat: migrated (0.0030s) =================

== 20210729134042 CreateChatMessageRevisions: migrating =======================
-- create_table(:chat_message_revisions)
   -> 0.0150s
-- add_index(:chat_message_revisions, [:chat_message_id])
   -> 0.0028s
== 20210729134042 CreateChatMessageRevisions: migrated (0.0186s) ==============

== 20210730134847 CreateUserChatChannelLastRead: migrating ====================
-- create_table(:user_chat_channel_last_reads)
   -> 0.0034s
-- add_index(:user_chat_channel_last_reads, [:chat_channel_id, :user_id], {:unique=>true, :name=>"user_chat_channel_reads_index"})
   -> 0.0015s
== 20210730134847 CreateUserChatChannelLastRead: migrated (0.0056s) ===========

== 20210802131421 RemovePostProcessedTriggerOption: migrating =================
== 20210802131421 RemovePostProcessedTriggerOption: migrated (0.0007s) ========

== 20210812033033 AddMultipartAndSizeColumnsToExternalUploadStubs: migrating ==
-- add_column(:external_upload_stubs, :multipart, :boolean, {:default=>false, :null=>false})
   -> 0.0007s
-- add_column(:external_upload_stubs, :external_upload_identifier, :string, {:null=>true})
   -> 0.0002s
-- add_column(:external_upload_stubs, :filesize, :bigint)
   -> 0.0002s
-- add_index(:external_upload_stubs, :external_upload_identifier)
   -> 0.0016s
-- change_column_null(:external_upload_stubs, :filesize, false)
   -> 0.0006s
== 20210812033033 AddMultipartAndSizeColumnsToExternalUploadStubs: migrated (0.0045s)

== 20210812145801 CreateDirectMessageTables: migrating ========================
-- create_table(:direct_message_channels)
   -> 0.0031s
-- create_table(:direct_message_users)
   -> 0.0052s
-- add_index(:direct_message_users, [:direct_message_channel_id, :user_id], {:unique=>true, :name=>"direct_message_users_index"})
   -> 0.0016s
== 20210812145801 CreateDirectMessageTables: migrated (0.0111s) ===============

== 20210813141741 AddTimestampsToChatChannels: migrating ======================
-- add_column(:chat_channels, :created_at, :timestamp)
   -> 0.0008s
-- add_column(:chat_channels, :updated_at, :timestamp)
   -> 0.0005s
-- change_column_null(:chat_channels, :created_at, false)
   -> 0.0006s
-- change_column_null(:chat_channels, :updated_at, false)
   -> 0.0004s
== 20210813141741 AddTimestampsToChatChannels: migrated (0.0042s) =============

== 20210819152920 ChangeAllowUploadedAvatars: migrating =======================
-- execute("UPDATE site_settings\nSET data_type = 7, value = (CASE WHEN value = 'f' THEN 'disabled' ELSE '0' END)\nWHERE name = 'allow_uploaded_avatars'\n")
   -> 0.0003s
== 20210819152920 ChangeAllowUploadedAvatars: migrated (0.0008s) ==============

== 20210819202912 CreateIncomingChatWebhooks: migrating =======================
-- create_table(:incoming_chat_webhooks)
   -> 0.0050s
-- add_index(:incoming_chat_webhooks, [:key, :chat_channel_id])
   -> 0.0015s
== 20210819202912 CreateIncomingChatWebhooks: migrated (0.0074s) ==============

== 20210823160357 CreateChatWebhookEvents: migrating ==========================
-- create_table(:chat_webhook_events)
   -> 0.0045s
-- add_index(:chat_webhook_events, [:chat_message_id, :incoming_chat_webhook_id], {:unique=>true, :name=>"chat_webhook_events_index"})
   -> 0.0026s
== 20210823160357 CreateChatWebhookEvents: migrated (0.0082s) =================

== 20210824203421 RemovePostTimingsSummaryIndex: migrating ====================
-- remove_index(:post_timings, {:column=>[:topic_id, :post_number], :name=>:post_timings_summary, :if_exists=>true})
   -> 0.0076s
== 20210824203421 RemovePostTimingsSummaryIndex: migrated (0.0082s) ===========

== 20210901130308 CreateUserChatChannelMembership: migrating ==================
-- create_table(:user_chat_channel_memberships)
   -> 0.0057s
-- add_index(:user_chat_channel_memberships, [:user_id, :chat_channel_id, :desktop_notification_level, :mobile_notification_level, :following], {:name=>"user_chat_channel_memberships_index"})
   -> 0.0026s
-- add_index(:user_chat_channel_memberships, [:user_id, :chat_channel_id], {:unique=>true, :name=>"user_chat_channel_unique_memberships"})
   -> 0.0027s
== 20210901130308 CreateUserChatChannelMembership: migrated (0.0131s) =========

== 20210909041448 MakeTopicIdNullableForBookmarks: migrating ==================
-- change_column_null(:bookmarks, :topic_id, true)
   -> 0.0007s
== 20210909041448 MakeTopicIdNullableForBookmarks: migrated (0.0034s) =========

== 20210913032326 AddForTopicToBookmarks: migrating ===========================
-- add_column(:bookmarks, :for_topic, :boolean, {:default=>false, :null=>false})
   -> 0.0012s
-- add_index(:bookmarks, [:user_id, :post_id, :for_topic], {:unique=>true})
   -> 0.0024s
-- index_exists?(:bookmarks, [:user_id, :post_id])
   -> 0.0036s
-- remove_index(:bookmarks, [:user_id, :post_id])
   -> 0.0039s
== 20210913032326 AddForTopicToBookmarks: migrated (0.0119s) ==================

== 20210914011037 ChangeUploadsFilesizeToBigint: migrating ====================
-- change_column(:uploads, :filesize, :bigint)
   -> 0.0203s
== 20210914011037 ChangeUploadsFilesizeToBigint: migrated (0.0215s) ===========

== 20210914152002 UpdateValueOnThemeSettingForUploadType: migrating ===========
-- execute("UPDATE theme_settings\nSET value = (SELECT id FROM uploads WHERE uploads.url = theme_settings.value)\nWHERE data_type = 6\n")
   -> 0.0015s
== 20210914152002 UpdateValueOnThemeSettingForUploadType: migrated (0.0022s) ==

== 20210915142958 AddPendingPostsCountToUserStats: migrating ==================
-- add_column(:user_stats, :pending_posts_count, :integer, {:null=>false, :default=>0})
   -> 0.0011s
== 20210915142958 AddPendingPostsCountToUserStats: migrated (0.0022s) =========

== 20210915215952 MarkReminderTypeAsReadonlyForBookmarks: migrating ===========
== 20210915215952 MarkReminderTypeAsReadonlyForBookmarks: migrated (0.0037s) ==

== 20210915222124 DropReminderTypeIndexForBookmarks: migrating ================
-- index_exists?(:bookmarks, [:reminder_type])
   -> 0.0036s
-- remove_index(:bookmarks, [:reminder_type])
   -> 0.0042s
== 20210915222124 DropReminderTypeIndexForBookmarks: migrated (0.0088s) =======

== 20210920044353 AddDefaultCalendarToUserOptions: migrating ==================
-- add_column(:user_options, :default_calendar, :integer, {:default=>0, :null=>false})
   -> 0.0009s
-- add_index(:user_options, [:user_id, :default_calendar])
   -> 0.0020s
== 20210920044353 AddDefaultCalendarToUserOptions: migrated (0.0036s) =========

== 20210922064213 AlterBumpedAtIndexesOnTopics: migrating =====================
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS index_topics_on_bumped_at_public\nON topics (bumped_at)\nWHERE ((deleted_at IS NULL) AND ((archetype)::text <> 'private_message'::text));\n")
   -> 0.0038s
-- execute("DROP INDEX IF EXISTS index_topics_on_bumped_at;\n")
   -> 0.0045s
-- execute("DROP INDEX IF EXISTS index_forum_threads_on_bumped_at;\n")
   -> 0.0003s
== 20210922064213 AlterBumpedAtIndexesOnTopics: migrated (0.0095s) ============

== 20210928161912 MigrateDeprecatedHtmlSettingType: migrating =================
-- execute("UPDATE site_settings\nSET data_type = 1\nWHERE data_type = 25\n")
   -> 0.0004s
== 20210928161912 MigrateDeprecatedHtmlSettingType: migrated (0.0011s) ========

== 20210929215543 AddTokenHashToEmailToken: migrating =========================
-- add_column(:email_tokens, :token_hash, :string)
   -> 0.0005s
-- change_column_null(:email_tokens, :token_hash, false)
   -> 0.0002s
== 20210929215543 AddTokenHashToEmailToken: migrated (0.0017s) ================

== 20210930144333 AddChatEnabledToUserOptions: migrating ======================
-- add_column(:user_options, :chat_enabled, :boolean, {:default=>true, :null=>false})
   -> 0.0009s
== 20210930144333 AddChatEnabledToUserOptions: migrated (0.0018s) =============

== 20211005163152 AddScopeToEmailToken: migrating =============================
-- add_column(:email_tokens, :scope, :integer)
   -> 0.0010s
== 20211005163152 AddScopeToEmailToken: migrated (0.0025s) ====================

== 20211013092406 AddNormalizedEmailToUserEmail: migrating ====================
-- add_column(:user_emails, :normalized_email, :string)
   -> 0.0007s
-- execute("CREATE INDEX index_user_emails_on_normalized_email ON user_emails (LOWER(normalized_email))")
   -> 0.0024s
== 20211013092406 AddNormalizedEmailToUserEmail: migrated (0.0039s) ===========

== 20211018234219 RemoveEnableExperimentalImageUploaderSiteSetting: migrating =
-- execute("DELETE FROM site_settings\nWHERE name = 'enable_experimental_image_uploader'\n")
   -> 0.0003s
== 20211018234219 RemoveEnableExperimentalImageUploaderSiteSetting: migrated (0.0011s)

== 20211019092048 RemoveCrawlImagesSiteSetting: migrating =====================
-- execute("DELETE\nFROM site_settings\nWHERE name = 'crawl_images';\n")
   -> 0.0002s
== 20211019092048 RemoveCrawlImagesSiteSetting: migrated (0.0007s) ============

== 20211019152356 PopulatePendingPostsCountColumn: migrating ==================
-- execute("WITH to_update AS (\n  SELECT COUNT(id) AS posts, created_by_id\n  FROM reviewables\n  WHERE type = 'ReviewableQueuedPost'\n    AND status = 0\n  GROUP BY created_by_id\n)\nUPDATE user_stats\nSET pending_posts_count = to_update.posts\nFROM to_update\nWHERE to_update.created_by_id = user_stats.user_id\n")
   -> 0.0010s
== 20211019152356 PopulatePendingPostsCountColumn: migrated (0.0042s) =========

== 20211022151713 CreateChatMessagePostConnections: migrating =================
-- create_table(:chat_message_post_connections)
   -> 0.0053s
-- add_index(:chat_message_post_connections, [:post_id, :chat_message_id], {:unique=>true, :name=>"chat_message_post_connections_index"})
   -> 0.0036s
== 20211022151713 CreateChatMessagePostConnections: migrated (0.0110s) ========

== 20211029145508 AddChatIsolatedToUserOptions: migrating =====================
-- add_column(:user_options, :chat_isolated, :boolean, {:null=>true})
   -> 0.0008s
== 20211029145508 AddChatIsolatedToUserOptions: migrated (0.0016s) ============

== 20211104141254 AddOnlyChatPushNotificationsToUserOptions: migrating ========
-- add_column(:user_options, :only_chat_push_notifications, :boolean, {:null=>true})
   -> 0.0011s
== 20211104141254 AddOnlyChatPushNotificationsToUserOptions: migrated (0.0019s)

== 20211106085344 CreateAssociatedGroups: migrating ===========================
-- create_table(:associated_groups)
   -> 0.0056s
-- add_index(:associated_groups, [:provider_name, :provider_id], {:unique=>true, :name=>"associated_groups_provider_id"})
   -> 0.0012s
== 20211106085344 CreateAssociatedGroups: migrated (0.0076s) ==================

== 20211106085527 CreateUserAssociatedGroups: migrating =======================
-- create_table(:user_associated_groups)
   -> 0.0110s
-- add_index(:user_associated_groups, [:user_id, :associated_group_id], {:unique=>true, :name=>"index_user_associated_groups"})
   -> 0.0016s
== 20211106085527 CreateUserAssociatedGroups: migrated (0.0135s) ==============

== 20211106085605 CreateGroupAssociatedGroups: migrating ======================
-- create_table(:group_associated_groups)
   -> 0.0083s
-- add_index(:group_associated_groups, [:group_id, :associated_group_id], {:unique=>true, :name=>"index_group_associated_groups"})
   -> 0.0014s
== 20211106085605 CreateGroupAssociatedGroups: migrated (0.0105s) =============

== 20211116225901 AddDescriptionToTags: migrating =============================
-- add_column(:tags, :description, :string)
   -> 0.0005s
== 20211116225901 AddDescriptionToTags: migrated (0.0010s) ====================

== 20211119142000 AddCookedToChatMessages: migrating ==========================
-- add_column(:chat_messages, :cooked, :text)
   -> 0.0003s
-- add_column(:chat_messages, :cooked_version, :integer)
   -> 0.0003s
== 20211119142000 AddCookedToChatMessages: migrated (0.0018s) =================

== 20211123033311 ResetFirstUnreadPmAtOnUserStat: migrating ===================
-- execute("UPDATE user_stats us\nSET first_unread_pm_at = u.created_at\nFROM users u\nWHERE u.id = us.user_id\n")
   -> 0.0004s
== 20211123033311 ResetFirstUnreadPmAtOnUserStat: migrated (0.0009s) ==========

== 20211123144714 AddRecentSearches: migrating ================================
-- add_column(:user_options, :oldest_search_log_date, :timestamp, {:precision=>nil})
   -> 0.0011s
-- add_index(:search_logs, [:user_id, :created_at], {:where=>"user_id IS NOT NULL"})
   -> 0.0033s
== 20211123144714 AddRecentSearches: migrated (0.0054s) =======================

== 20211124161346 QueueInternalOneboxRebake: migrating ========================
== 20211124161346 QueueInternalOneboxRebake: migrated (0.0009s) ===============

== 20211129171229 CreateChatUploads: migrating ================================
-- create_table(:chat_uploads)
   -> 0.0028s
-- add_index(:chat_uploads, [:chat_message_id, :upload_id], {:unique=>true})
   -> 0.0014s
== 20211129171229 CreateChatUploads: migrated (0.0047s) =======================

== 20211201171813 CreateChatReactions: migrating ==============================
-- create_table(:chat_message_reactions)
   -> 0.0049s
-- add_index(:chat_message_reactions, [:chat_message_id, :user_id, :emoji], {:unique=>true, :name=>:chat_message_reactions_index})
   -> 0.0022s
== 20211201171813 CreateChatReactions: migrated (0.0083s) =====================

== 20211201221028 MigrateEmailToNormalizedEmail: migrating ====================
== 20211201221028 MigrateEmailToNormalizedEmail: migrated (0.0015s) ===========

== 20211206160211 CreateIndexOnEmailTokensTokenHash: migrating ================
-- add_index(:email_tokens, :token_hash, {:unique=>true})
   -> 0.0025s
== 20211206160211 CreateIndexOnEmailTokensTokenHash: migrated (0.0032s) =======

== 20211206160212 DropTokenFromEmailTokens: migrating =========================
== 20211206160212 DropTokenFromEmailTokens: migrated (0.0038s) ================

== 20211207130646 AddDomainToInvites: migrating ===============================
-- add_column(:invites, :domain, :string)
   -> 0.0007s
== 20211207130646 AddDomainToInvites: migrated (0.0014s) ======================

== 20211210191830 CreateChatMentions: migrating ===============================
-- create_table(:chat_mentions)
   -> 0.0042s
-- add_index(:chat_mentions, [:chat_message_id, :user_id, :notification_id], {:unique=>true, :name=>"chat_mentions_index"})
   -> 0.0022s
== 20211210191830 CreateChatMentions: migrated (0.0077s) ======================

== 20211213060445 EmailTokensTokenToNullable: migrating =======================
== 20211213060445 EmailTokensTokenToNullable: migrated (0.0026s) ==============

== 20211213150607 AddChatSoundToUserOptions: migrating ========================
-- add_column(:user_options, :chat_sound, :string, {:null=>true})
   -> 0.0007s
== 20211213150607 AddChatSoundToUserOptions: migrated (0.0013s) ===============

== 20211216191224 RemoveAdvancedEditorPreviewSiteSetting: migrating ===========
-- execute("DELETE FROM site_settings WHERE name = 'enable_advanced_editor_preview_sync'")
   -> 0.0003s
== 20211216191224 RemoveAdvancedEditorPreviewSiteSetting: migrated (0.0007s) ==

== 20211217221026 AddNameToChatChannel: migrating =============================
-- add_column(:chat_channels, :name, :string, {:null=>true})
   -> 0.0007s
== 20211217221026 AddNameToChatChannel: migrated (0.0022s) ====================

== 20211220023034 RemoveExperimentalBackupUploaderSetting: migrating ==========
-- execute("DELETE FROM site_settings\nWHERE name = 'enable_experimental_backup_uploader'\n")
   -> 0.0004s
== 20211220023034 RemoveExperimentalBackupUploaderSetting: migrated (0.0009s) =

== 20211221164540 RemoveLimitForFancyTitleInTopics: migrating =================
-- change_column(:topics, :fancy_title, :string, {:limit=>nil})
   -> 0.0008s
== 20211221164540 RemoveLimitForFancyTitleInTopics: migrated (0.0013s) ========

== 20211222153716 AddDescriptionToChatChannels: migrating =====================
-- add_column(:chat_channels, :description, :text, {:null=>true})
   -> 0.0007s
== 20211222153716 AddDescriptionToChatChannels: migrated (0.0012s) ============

== 20211224010204 DropOldBookmarkColumns: migrating ===========================
== 20211224010204 DropOldBookmarkColumns: migrated (0.0050s) ==================

== 20211224011511 DeleteExperimentalComposerUploadSetting: migrating ==========
-- execute("DELETE FROM site_settings WHERE name = 'enable_experimental_composer_uploader'")
   -> 0.0004s
== 20211224011511 DeleteExperimentalComposerUploadSetting: migrated (0.0013s) =

== 20211224111749 NotNullNotificationLevelInCategoryUsers: migrating ==========
-- execute("DELETE FROM category_users WHERE notification_level IS NULL")
   -> 0.0003s
-- change_column_null(:category_users, :notification_level, false)
   -> 0.0004s
== 20211224111749 NotNullNotificationLevelInCategoryUsers: migrated (0.0013s) =

== 20220104051326 ChangeChatChannelsTimestampColumnsToTimestampType: migrating
-- change_column_default(:chat_channels, :created_at, nil)
   -> 0.0030s
-- change_column_default(:chat_channels, :updated_at, nil)
   -> 0.0026s
-- column_exists?(:chat_channels, :created_at, :timestamp)
   -> 0.0011s
-- change_column(:chat_channels, :created_at, :timestamp)
   -> 0.0004s
-- column_exists?(:chat_channels, :updated_at, :timestamp)
   -> 0.0014s
-- change_column(:chat_channels, :updated_at, :timestamp)
   -> 0.0004s
== 20220104051326 ChangeChatChannelsTimestampColumnsToTimestampType: migrated (0.0100s)

== 20220105024605 AddTriggerForPolymorphicBookmarkColumnsToSyncData: migrating
== 20220105024605 AddTriggerForPolymorphicBookmarkColumnsToSyncData: migrated (0.0007s)

== 20220118065658 AddConstraintsToUserStat: migrating =========================
-- execute("UPDATE user_stats\nSET post_count = 0\nWHERE post_count < 0\n")
   -> 0.0003s
-- execute("UPDATE user_stats\nSET topic_count = 0\nWHERE topic_count < 0\n")
   -> 0.0002s
-- execute("ALTER TABLE user_stats ADD CONSTRAINT topic_count_positive CHECK (topic_count >= 0)")
   -> 0.0010s
-- execute("ALTER TABLE user_stats ADD CONSTRAINT post_count_positive CHECK (post_count >= 0)")
   -> 0.0008s
== 20220118065658 AddConstraintsToUserStat: migrated (0.0033s) ================

== 20220119170535 AddChatRetentionFieldsToUserOptions: migrating ==============
-- add_column(:user_options, :dismissed_channel_retention_reminder, :boolean, {:null=>true})
   -> 0.0006s
-- add_column(:user_options, :dismissed_dm_retention_reminder, :boolean, {:null=>true})
   -> 0.0007s
== 20220119170535 AddChatRetentionFieldsToUserOptions: migrated (0.0025s) =====

== 20220124003259 AddEmailFromAliasToGroups: migrating ========================
-- add_column(:groups, :email_from_alias, :string, {:null=>true})
   -> 0.0008s
== 20220124003259 AddEmailFromAliasToGroups: migrated (0.0018s) ===============

== 20220125052845 FixTopicLikeCountIncludingWhispers: migrating ===============
== 20220125052845 FixTopicLikeCountIncludingWhispers: migrated (0.0020s) ======

== 20220126052157 ChangeSegmentCjkSiteSetting: migrating ======================
-- execute("UPDATE site_settings\nSET name = 'search_tokenize_chinese'\nWHERE name = 'search_tokenize_chinese_japanese_korean'\n")
   -> 0.0004s
-- execute("DELETE FROM site_settings\nWHERE name = 'search_tokenize_chinese_japanese_korean'\n")
   -> 0.0002s
== 20220126052157 ChangeSegmentCjkSiteSetting: migrated (0.0014s) =============

== 20220130192155 SetUseEmailForUsernameAndNameSuggestionsOnExistingSites: migrating
== 20220130192155 SetUseEmailForUsernameAndNameSuggestionsOnExistingSites: migrated (0.0009s)

== 20220202223955 MigrateSelectableAvatarsEnabled: migrating ==================
-- execute("UPDATE site_settings AS s\n  SET value =\n    CASE WHEN t.value = 't' THEN 'no_one'\n    ELSE 'disabled'\n    END,\n  data_type = 7,\n  name = 'selectable_avatars_mode'\n  FROM site_settings t\n  WHERE s.id = t.id AND s.name = 'selectable_avatars_enabled'\n")
   -> 0.0004s
== 20220202223955 MigrateSelectableAvatarsEnabled: migrated (0.0010s) =========

== 20220202225716 AddExternalIdToTopics: migrating ============================
-- add_column(:topics, :external_id, :string, {:null=>true})
   -> 0.0006s
-- add_index(:topics, :external_id, {:unique=>true, :where=>"external_id IS NOT NULL"})
   -> 0.0024s
== 20220202225716 AddExternalIdToTopics: migrated (0.0037s) ===================

== 20220203204002 CreateChatDraftsTable: migrating ============================
-- create_table(:chat_drafts)
   -> 0.0059s
== 20220203204002 CreateChatDraftsTable: migrated (0.0067s) ===================

== 20220203204003 MigrateDraftsToChatDrafts: migrating ========================
-- execute("INSERT INTO chat_drafts(user_id, chat_channel_id, data, created_at, updated_at)\nSELECT user_id, SUBSTRING(draft_key, LENGTH('chat_') + 1)::integer chat_channel_id, data, created_at, updated_at\nFROM drafts\nWHERE draft_key LIKE 'chat_%'\n")
   -> 0.0007s
-- execute("DELETE FROM drafts\nWHERE draft_key LIKE 'chat_%'\n")
   -> 0.0004s
== 20220203204003 MigrateDraftsToChatDrafts: migrated (0.0020s) ===============

== 20220209210449 AddBookmarkAutoDeletePreferenceToUserOption: migrating ======
-- add_column(:user_options, :bookmark_auto_delete_preference, :integer, {:default=>3, :null=>false})
   -> 0.0008s
== 20220209210449 AddBookmarkAutoDeletePreferenceToUserOption: migrated (0.0018s)

== 20220214224506 ResetCustomEmojiPostBakesVersionSecureFix: migrating ========
== 20220214224506 ResetCustomEmojiPostBakesVersionSecureFix: migrated (0.0007s)

== 20220214233625 AddBounceErrorCodeToEmailLog: migrating =====================
-- add_column(:email_logs, :bounce_error_code, :string, {:null=>true})
   -> 0.0004s
== 20220214233625 AddBounceErrorCodeToEmailLog: migrated (0.0008s) ============

== 20220215015538 DropUserStatCountConstraints: migrating =====================
-- execute("ALTER TABLE user_stats DROP CONSTRAINT topic_count_positive")
   -> 0.0003s
-- execute("ALTER TABLE user_stats DROP CONSTRAINT post_count_positive")
   -> 0.0002s
== 20220215015538 DropUserStatCountConstraints: migrated (0.0010s) ============

== 20220218023859 AddStatusToChatChannel: migrating ===========================
-- add_column(:chat_channels, :status, :integer, {:default=>0, :null=>false})
   -> 0.0011s
-- add_index(:chat_channels, :status)
   -> 0.0021s
== 20220218023859 AddStatusToChatChannel: migrated (0.0043s) ==================

== 20220220234155 ConformBounceErrorCode: migrating ===========================
== 20220220234155 ConformBounceErrorCode: migrated (0.0011s) ==================

== 20220228051724 CreateChatChannelArchiveTable: migrating ====================
-- create_table(:chat_channel_archives)
   -> 0.0098s
-- add_index(:chat_channel_archives, :chat_channel_id)
   -> 0.0035s
== 20220228051724 CreateChatChannelArchiveTable: migrated (0.0143s) ===========

== 20220302163246 UpdateAvatarServiceDomain: migrating ========================
== 20220302163246 UpdateAvatarServiceDomain: migrated (0.0012s) ===============

== 20220302171443 RebakeOldAvatarServiceUrls: migrating =======================
== 20220302171443 RebakeOldAvatarServiceUrls: migrated (0.0012s) ==============

== 20220304162250 EnableUnaccentExtension: migrating ==========================
-- enable_extension("unaccent")
   -> 0.0035s
== 20220304162250 EnableUnaccentExtension: migrated (0.0040s) =================

== 20220308165620 AddUserCountToChatChannel: migrating ========================
-- add_column(:chat_channels, :user_count, :integer, {:null=>true, :default=>0})
   -> 0.0013s
-- change_column_null(:chat_channels, :user_count, false)
   -> 0.0003s
== 20220308165620 AddUserCountToChatChannel: migrated (0.0021s) ===============

== 20220308201942 CreateUploadReferences: migrating ===========================
-- create_table(:upload_references)
   -> 0.0098s
-- add_index(:upload_references, [:upload_id, :target_type, :target_id], {:unique=>true, :name=>"index_upload_references_on_upload_and_target"})
   -> 0.0020s
== 20220308201942 CreateUploadReferences: migrated (0.0125s) ==================

== 20220309132719 CopyPostUploadsToUploadReferences: migrating ================
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT post_uploads.upload_id, 'Post', post_uploads.post_id, uploads.created_at, uploads.updated_at\nFROM post_uploads\nJOIN uploads ON uploads.id = post_uploads.upload_id\nON CONFLICT DO NOTHING\n")
   -> 0.0007s
== 20220309132719 CopyPostUploadsToUploadReferences: migrated (0.0012s) =======

== 20220309132720 CopyPostUploadsToUploadReferencesForSync: migrating =========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT upload_id, 'Post', post_id, NOW(), NOW()\nFROM post_uploads\nON CONFLICT DO NOTHING\n")
   -> 0.0002s
== 20220309132720 CopyPostUploadsToUploadReferencesForSync: migrated (0.0006s)

== 20220309174820 AddLastMessageCreatedAtToChatChannels: migrating ============
-- add_column(:chat_channels, :last_message_sent_at, :timestamp, {:default=>#<Proc:0x00007f97674971f8 /var/www/discourse/plugins/chat/db/migrate/20220309174820_add_last_message_created_at_to_chat_channels.rb:4 (lambda)>, :precision=>nil})
   -> 0.0006s
-- change_column_null(:chat_channels, :last_message_sent_at, false)
   -> 0.0002s
== 20220309174820 AddLastMessageCreatedAtToChatChannels: migrated (0.0012s) ===

== 20220316150247 ResetBookmarksReminderLastSentAt: migrating =================
== 20220316150247 ResetBookmarksReminderLastSentAt: migrated (0.0011s) ========

== 20220321235638 DropChatMessagePostConnectionsTable: migrating ==============
== 20220321235638 DropChatMessagePostConnectionsTable: migrated (0.0026s) =====

== 20220322024216 AddBookmarkPolymorphicColumns: migrating ====================
-- column_exists?(:bookmarks, :bookmarkable_id)
   -> 0.0021s
-- add_column(:bookmarks, :bookmarkable_id, :integer)
   -> 0.0004s
-- column_exists?(:bookmarks, :bookmarkable_type)
   -> 0.0019s
-- add_column(:bookmarks, :bookmarkable_type, :string)
   -> 0.0040s
-- index_exists?(:bookmarks, [:user_id, :bookmarkable_type, :bookmarkable_id])
   -> 0.0040s
-- add_index(:bookmarks, [:user_id, :bookmarkable_type, :bookmarkable_id], {:name=>"idx_bookmarks_user_polymorphic_unique", :unique=>true})
   -> 0.0029s
== 20220322024216 AddBookmarkPolymorphicColumns: migrated (0.0165s) ===========

== 20220323141645 RemovePollingSiteSettings: migrating ========================
-- execute("DELETE FROM site_settings WHERE name = 'enable_long_polling'")
   -> 0.0002s
-- execute("DELETE FROM site_settings WHERE name = 'long_polling_interval'")
   -> 0.0003s
== 20220323141645 RemovePollingSiteSettings: migrated (0.0010s) ===============

== 20220324062937 IgnoreChannelWideMentionToUserOptions: migrating ============
-- add_column(:user_options, :ignore_channel_wide_mention, :boolean, {:null=>true})
   -> 0.0006s
== 20220324062937 IgnoreChannelWideMentionToUserOptions: migrated (0.0011s) ===

== 20220325064954 MakeSomeBookmarkColumnsNullable: migrating ==================
-- change_column_null(:bookmarks, :post_id, true)
   -> 0.0004s
-- execute("ALTER TABLE bookmarks ADD CONSTRAINT enforce_post_id_or_bookmarkable CHECK (\n      (post_id IS NOT NULL) OR (bookmarkable_id IS NOT NULL AND bookmarkable_type IS NOT NULL)\n    )")
   -> 0.0004s
== 20220325064954 MakeSomeBookmarkColumnsNullable: migrated (0.0012s) =========

== 20220328142120 CreateUserChatMessageStatuses: migrating ====================
-- create_table(:chat_message_email_statuses)
   -> 0.0049s
-- add_index(:chat_message_email_statuses, [:user_id, :chat_message_id], {:name=>"chat_message_email_status_user_message_index"})
   -> 0.0015s
-- add_index(:chat_message_email_statuses, :status)
   -> 0.0021s
-- add_column(:user_options, :chat_email_frequency, :integer, {:default=>1, :null=>false})
   -> 0.0015s
-- add_column(:user_options, :last_emailed_for_chat, :timestamp, {:null=>true, :precision=>nil})
   -> 0.0004s
== 20220328142120 CreateUserChatMessageStatuses: migrated (0.0115s) ===========

== 20220330160740 CleanupSelectableAvatarsData: migrating =====================
-- execute("DELETE FROM site_settings\nWHERE name = 'selectable_avatars_urls'\n")
   -> 0.0003s
== 20220330160740 CleanupSelectableAvatarsData: migrated (0.0008s) ============

== 20220330160747 CopySiteSettingsUploadsToUploadReferences: migrating ========
-- execute("WITH site_settings_uploads AS (\n  SELECT id, raw_upload_id::integer AS upload_id\n  FROM (\n    SELECT id, unnest(string_to_array(value, '|')) AS raw_upload_id\n    FROM site_settings\n    WHERE data_type = 17\n  ) raw\n  WHERE raw_upload_id ~ '^d+$'\n  UNION\n  SELECT id, value::integer\n  FROM site_settings\n  WHERE data_type = 18 AND value != ''\n)\nINSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT site_settings_uploads.upload_id, 'SiteSetting', site_settings_uploads.id, uploads.created_at, uploads.updated_at\nFROM site_settings_uploads\nJOIN uploads ON uploads.id = site_settings_uploads.upload_id\nON CONFLICT DO NOTHING\n")
   -> 0.0010s
== 20220330160747 CopySiteSettingsUploadsToUploadReferences: migrated (0.0018s)

== 20220330160751 CopyBadgesUploadsToUploadReferences: migrating ==============
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT badges.image_upload_id, 'Badge', badges.id, uploads.created_at, uploads.updated_at\nFROM badges\nJOIN uploads ON uploads.id = badges.image_upload_id\nWHERE badges.image_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
   -> 0.0005s
== 20220330160751 CopyBadgesUploadsToUploadReferences: migrated (0.0011s) =====

== 20220330160754 CopyGroupsUploadsToUploadReferences: migrating ==============
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT groups.flair_upload_id, 'Group', groups.id, uploads.created_at, uploads.updated_at\nFROM groups\nJOIN uploads ON uploads.id = groups.flair_upload_id\nWHERE groups.flair_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
   -> 0.0011s
== 20220330160754 CopyGroupsUploadsToUploadReferences: migrated (0.0017s) =====

== 20220330160757 CopyUserExportsUploadsToUploadReferences: migrating =========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT user_exports.upload_id, 'UserExport', user_exports.id, uploads.created_at, uploads.updated_at\nFROM user_exports\nJOIN uploads ON uploads.id = user_exports.upload_id\nON CONFLICT DO NOTHING\n")
   -> 0.0010s
== 20220330160757 CopyUserExportsUploadsToUploadReferences: migrated (0.0015s)

== 20220330164740 CopyThemeFieldsUploadsToUploadReferences: migrating =========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT theme_fields.upload_id, 'ThemeField', theme_fields.id, uploads.created_at, uploads.updated_at\nFROM theme_fields\nJOIN uploads ON uploads.id = theme_fields.upload_id\nWHERE type_id = 2\nON CONFLICT DO NOTHING\n")
   -> 0.0012s
== 20220330164740 CopyThemeFieldsUploadsToUploadReferences: migrated (0.0021s)

== 20220331204447 CreateSitemapsTable: migrating ==============================
-- create_table(:sitemaps, {:if_not_exists=>true})
   -> 0.0060s
-- add_index(:sitemaps, :name, {:unique=>true, :if_not_exists=>true})
   -> 0.0013s
== 20220331204447 CreateSitemapsTable: migrated (0.0083s) =====================

== 20220401130745 CreateCategoryRequiredTagGroups: migrating ==================
-- create_table(:category_required_tag_groups)
   -> 0.0030s
-- add_index(:category_required_tag_groups, [:category_id, :tag_group_id], {:name=>"idx_category_required_tag_groups", :unique=>true})
   -> 0.0026s
-- execute("INSERT INTO category_required_tag_groups\n(category_id, tag_group_id, min_count, updated_at, created_at)\nSELECT c.id, c.required_tag_group_id, c.min_tags_from_required_group, NOW(), NOW()\nFROM categories c\nINNER JOIN tag_groups tg ON tg.id = c.required_tag_group_id\nWHERE tg.id IS NOT NULL\n")
   -> 0.0012s
== 20220401130745 CreateCategoryRequiredTagGroups: migrated (0.0078s) =========

== 20220401140745 DropCategoryRequiredTagGroupColumns: migrating ==============
== 20220401140745 DropCategoryRequiredTagGroupColumns: migrated (0.0043s) =====

== 20220404195635 CopyCategoriesUploadsToUploadReferences: migrating ==========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT categories.uploaded_logo_id, 'Category', categories.id, uploads.created_at, uploads.updated_at\nFROM categories\nJOIN uploads ON uploads.id = categories.uploaded_logo_id\nWHERE categories.uploaded_logo_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
   -> 0.0006s
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT categories.uploaded_background_id, 'Category', categories.id, uploads.created_at, uploads.updated_at\nFROM categories\nJOIN uploads ON uploads.id = categories.uploaded_background_id\nWHERE categories.uploaded_background_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
   -> 0.0003s
== 20220404195635 CopyCategoriesUploadsToUploadReferences: migrated (0.0015s) =

== 20220404201949 CopyCustomEmojisUploadsToUploadReferences: migrating ========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT custom_emojis.upload_id, 'CustomEmoji', custom_emojis.id, uploads.created_at, uploads.updated_at\nFROM custom_emojis\nJOIN uploads ON uploads.id = custom_emojis.upload_id\nWHERE custom_emojis.upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
   -> 0.0006s
== 20220404201949 CopyCustomEmojisUploadsToUploadReferences: migrated (0.0016s)

== 20220404203356 CopyUserProfilesUploadsToUploadReferences: migrating ========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT user_profiles.profile_background_upload_id, 'UserProfile', user_profiles.user_id, uploads.created_at, uploads.updated_at\nFROM user_profiles\nJOIN uploads ON uploads.id = user_profiles.profile_background_upload_id\nWHERE user_profiles.profile_background_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
   -> 0.0007s
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT user_profiles.card_background_upload_id, 'UserProfile', user_profiles.user_id, uploads.created_at, uploads.updated_at\nFROM user_profiles\nJOIN uploads ON uploads.id = user_profiles.card_background_upload_id\nWHERE user_profiles.card_background_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
   -> 0.0004s
== 20220404203356 CopyUserProfilesUploadsToUploadReferences: migrated (0.0019s)

== 20220404204439 CopyUserAvatarsUploadsToUploadReferences: migrating =========
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT user_avatars.custom_upload_id, 'UserAvatar', user_avatars.id, uploads.created_at, uploads.updated_at\nFROM user_avatars\nJOIN uploads ON uploads.id = user_avatars.custom_upload_id\nWHERE user_avatars.custom_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
   -> 0.0004s
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT user_avatars.gravatar_upload_id, 'UserAvatar', user_avatars.id, uploads.created_at, uploads.updated_at\nFROM user_avatars\nJOIN uploads ON uploads.id = user_avatars.gravatar_upload_id\nWHERE user_avatars.gravatar_upload_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
   -> 0.0002s
== 20220404204439 CopyUserAvatarsUploadsToUploadReferences: migrated (0.0011s)

== 20220404212716 CopyThemeSettingsUploadsToUploadReferences: migrating =======
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT theme_settings.value::int, 'ThemeSetting', theme_settings.id, uploads.created_at, uploads.updated_at\nFROM theme_settings\nJOIN uploads ON uploads.id = theme_settings.value::int\nWHERE data_type = 6 AND theme_settings.value IS NOT NULL AND theme_settings.value != ''\nON CONFLICT DO NOTHING\n")
   -> 0.0004s
== 20220404212716 CopyThemeSettingsUploadsToUploadReferences: migrated (0.0008s)

== 20220407195246 RemoveCategoryRequiredTagGroupsWithoutTagGroups: migrating ==
-- execute("DELETE FROM category_required_tag_groups\nWHERE id IN (\n  SELECT crtg.id\n  FROM category_required_tag_groups crtg\n  LEFT OUTER JOIN tag_groups tg ON crtg.tag_group_id = tg.id\n  WHERE tg.id IS NULL\n)\n")
   -> 0.0006s
== 20220407195246 RemoveCategoryRequiredTagGroupsWithoutTagGroups: migrated (0.0012s)

== 20220428025825 AddEnableExperimentalSidebarToUserOptions: migrating ========
-- add_column(:user_options, :enable_experimental_sidebar, :boolean, {:default=>false})
   -> 0.0011s
== 20220428025825 AddEnableExperimentalSidebarToUserOptions: migrated (0.0016s)

== 20220428094026 CreatePostHotlinkedMedia: migrating =========================
-- execute("CREATE TYPE hotlinked_media_status AS ENUM('downloaded', 'too_large', 'download_failed', 'upload_create_failed')\n")
   -> 0.0018s
-- create_table(:post_hotlinked_media)
   -> 0.0053s
-- execute("CREATE UNIQUE INDEX index_post_hotlinked_media_on_post_id_and_url_md5\nON post_hotlinked_media (post_id, md5(url));\n")
   -> 0.0017s
-- execute("INSERT INTO post_hotlinked_media (post_id, url, status, upload_id, created_at, updated_at)\nSELECT\n  post_id,\n  obj.key AS url,\n  'downloaded',\n  obj.value::bigint AS upload_id,\n  pcf.created_at,\n  pcf.updated_at\nFROM post_custom_fields pcf\nJOIN json_each_text(pcf.value::json) obj ON true\nJOIN uploads ON obj.value::bigint = uploads.id\nWHERE name='downloaded_images'\nAND pcf.value LIKE '{%' -- JSON Object\nON CONFLICT (post_id, md5(url::text)) DO NOTHING\n")
   -> 0.0009s
-- execute("INSERT INTO post_hotlinked_media (post_id, url, status, upload_id, created_at, updated_at)\nSELECT\n  post_id,\n  url.value,\n  'download_failed',\n  NULL,\n  pcf.created_at,\n  pcf.updated_at\nFROM post_custom_fields pcf\nJOIN json_array_elements_text(pcf.value::json) url ON true\nWHERE name='broken_images'\nAND pcf.value LIKE '[%' -- JSON Array\nON CONFLICT (post_id, md5(url::text)) DO NOTHING\n")
   -> 0.0004s
-- execute("INSERT INTO post_hotlinked_media (post_id, url, status, upload_id, created_at, updated_at)\nSELECT\n  post_id,\n  url.value,\n  'too_large',\n  NULL,\n  pcf.created_at,\n  pcf.updated_at\nFROM post_custom_fields pcf\nJOIN json_array_elements_text(pcf.value::json) url ON true\nWHERE name='large_images'\nAND pcf.value LIKE '[%' -- JSON Array\nON CONFLICT (post_id, md5(url::text)) DO NOTHING\n")
   -> 0.0003s
== 20220428094026 CreatePostHotlinkedMedia: migrated (0.0116s) ================

== 20220428094027 FixPostHotlinkedMediaIndex: migrating =======================
-- execute("CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS index_post_hotlinked_media_on_post_id_and_url_md5\nON post_hotlinked_media (post_id, md5(url));\n")
   -> 0.0004s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_post_hotlinked_media_on_post_id_and_url;\n")
   -> 0.0002s
== 20220428094027 FixPostHotlinkedMediaIndex: migrated (0.0014s) ==============

== 20220429164301 DeleteHotlinkedImageCustomFields: migrating =================
-- execute("DELETE FROM post_custom_fields\nWHERE name IN (\n  'downloaded_images',\n  'broken_images',\n  'large_images'\n)\n")
   -> 0.0005s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS post_custom_field_broken_images_idx\n")
   -> 0.0016s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS post_custom_field_downloaded_images_idx\n")
   -> 0.0012s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS post_custom_field_large_images_idx\n")
   -> 0.0010s
== 20220429164301 DeleteHotlinkedImageCustomFields: migrated (0.0051s) ========

== 20220504080457 DropOldChatMessagePostIdActionCodeColumns: migrating ========
== 20220504080457 DropOldChatMessagePostIdActionCodeColumns: migrated (0.0036s)

== 20220505133851 MigrateCustomGroupDeletionLogs: migrating ===================
== 20220505133851 MigrateCustomGroupDeletionLogs: migrated (0.0009s) ==========

== 20220505191131 AddLastSeenReviewableIdToUser: migrating ====================
-- add_column(:users, :last_seen_reviewable_id, :integer)
   -> 0.0008s
== 20220505191131 AddLastSeenReviewableIdToUser: migrated (0.0015s) ===========

== 20220506221447 SetPmTagsAllowedForGroupsDefault: migrating =================
== 20220506221447 SetPmTagsAllowedForGroupsDefault: migrated (0.0008s) ========

== 20220510131525 RemoveAllowStaffToTagPmsSiteSetting: migrating ==============
-- execute("DELETE FROM site_settings WHERE name = 'allow_staff_to_tag_pms'")
   -> 0.0004s
== 20220510131525 RemoveAllowStaffToTagPmsSiteSetting: migrated (0.0011s) =====

== 20220512011522 BackfillPolymorphicBookmarksAndMakeDefault: migrating =======
== 20220512011522 BackfillPolymorphicBookmarksAndMakeDefault: migrated (0.0028s)

== 20220512011531 BackfillPolymorphicBookmarks: migrating =====================
== 20220512011531 BackfillPolymorphicBookmarks: migrated (0.0025s) ============

== 20220516142658 RemoveEmailStatusesTable: migrating =========================
-- remove_index(:chat_message_email_statuses, :status)
   -> 0.0032s
-- remove_index(:chat_message_email_statuses, [:user_id, :chat_message_id])
   -> 0.0018s
== 20220516142658 RemoveEmailStatusesTable: migrated (0.0070s) ================

== 20220518140004 TrackLastUnreadMentionWhenEmailed: migrating ================
-- add_column(:user_chat_channel_memberships, :last_unread_mention_when_emailed_id, :integer)
   -> 0.0005s
== 20220518140004 TrackLastUnreadMentionWhenEmailed: migrated (0.0015s) =======

== 20220518180642 RemoveUserOptionLastEmailedAt: migrating ====================
-- remove_column(:user_options, :last_emailed_for_chat, :datetime)
   -> 0.0006s
== 20220518180642 RemoveUserOptionLastEmailedAt: migrated (0.0015s) ===========

== 20220519190829 CreateUserStatuses: migrating ===============================
-- create_table(:user_statuses, {:id=>false})
   -> 0.0091s
== 20220519190829 CreateUserStatuses: migrated (0.0101s) ======================

== 20220526135414 RemoveCorruptedLastReadMessageId: migrating =================
-- execute("DELETE FROM user_chat_channel_memberships uccm\nWHERE NOT EXISTS (\n  SELECT FROM chat_channels cc\n  WHERE cc.id = uccm.chat_channel_id\n);\n")
   -> 0.0009s
-- execute("DELETE FROM chat_messages cm\nWHERE NOT EXISTS (\n  SELECT FROM chat_channels cc\n  WHERE cc.id = cm.chat_channel_id\n);\n")
   -> 0.0004s
-- execute("WITH highest_channel_message_id AS (\n  SELECT chat_channel_id, max(chat_messages.id) as highest_id\n  FROM chat_messages\n  GROUP BY chat_channel_id\n)\nUPDATE user_chat_channel_memberships uccm\nSET last_read_message_id = highest_channel_message_id.highest_id\nFROM highest_channel_message_id\nWHERE highest_channel_message_id.chat_channel_id = uccm.chat_channel_id\nAND uccm.last_read_message_id IS NOT NULL\nAND uccm.last_read_message_id NOT IN (\n  SELECT id FROM chat_messages WHERE chat_messages.chat_channel_id = uccm.chat_channel_id\n)\n")
   -> 0.0007s
-- execute("UPDATE chat_messages cm\nSET in_reply_to_id = NULL\nWHERE NOT EXISTS (\n  SELECT FROM chat_messages cm2\n  WHERE cm.in_reply_to_id = cm2.id\n);\n")
   -> 0.0004s
-- execute("DELETE FROM chat_message_revisions cmr\nWHERE NOT EXISTS (\n  SELECT FROM chat_messages cm\n  WHERE cm.id = cmr.chat_message_id\n);\n")
   -> 0.0007s
-- execute("DELETE FROM chat_message_reactions cmr\nWHERE NOT EXISTS (\n  SELECT FROM chat_messages cm\n  WHERE cm.id = cmr.chat_message_id\n);\n")
   -> 0.0004s
-- execute("DELETE FROM bookmarks b\nWHERE b.bookmarkable_type = 'ChatMessage'\nAND NOT EXISTS (\n  SELECT FROM chat_messages cm\n  WHERE cm.id = b.bookmarkable_id\n);\n")
   -> 0.0005s
-- execute("DELETE FROM chat_mentions\nWHERE NOT EXISTS (\n  SELECT FROM chat_messages cm\n  WHERE cm.id = chat_mentions.chat_message_id\n);\n")
   -> 0.0005s
-- execute("DELETE FROM chat_webhook_events cwe\nWHERE NOT EXISTS (\n  SELECT FROM chat_messages cm\n  WHERE cm.id = cwe.chat_message_id\n);\n")
   -> 0.0005s
-- execute("DELETE FROM chat_uploads\nWHERE NOT EXISTS (\n  SELECT FROM chat_messages cm\n  WHERE cm.id = chat_uploads.chat_message_id\n);\n")
   -> 0.0005s
== 20220526135414 RemoveCorruptedLastReadMessageId: migrated (0.0068s) ========

== 20220526203356 CopyUserUploadsToUploadReferences: migrating ================
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT users.uploaded_avatar_id, 'User', users.id, uploads.created_at, uploads.updated_at\nFROM users\nJOIN uploads ON uploads.id = users.uploaded_avatar_id\nWHERE users.uploaded_avatar_id IS NOT NULL\nON CONFLICT DO NOTHING\n")
   -> 0.0008s
== 20220526203356 CopyUserUploadsToUploadReferences: migrated (0.0014s) =======

== 20220531105951 DropUserChatChannelLastReads: migrating =====================
== 20220531105951 DropUserChatChannelLastReads: migrated (0.0027s) ============

== 20220606061813 AddSmtpTransactionResponseToEmailLogs: migrating ============
-- add_column(:email_logs, :smtp_transaction_response, :string, {:null=>true, :limit=>500})
   -> 0.0005s
== 20220606061813 AddSmtpTransactionResponseToEmailLogs: migrated (0.0009s) ===

== 20220607150432 DisallowNullEmojiOnUserStatus: migrating ====================
-- execute("UPDATE user_statuses SET emoji = 'speech_balloon'")
   -> 0.0003s
-- change_column(:user_statuses, :emoji, :string, {:null=>false})
   -> 0.0004s
== 20220607150432 DisallowNullEmojiOnUserStatus: migrated (0.0013s) ===========

== 20220617151846 RenameDefaultCategoriesRegularSetting: migrating ============
-- execute("UPDATE site_settings\nSET name = 'default_categories_normal'\nWHERE name = 'default_categories_regular'\n")
   -> 0.0002s
== 20220617151846 RenameDefaultCategoriesRegularSetting: migrated (0.0006s) ===

== 20220621164914 DropFlairUrlFromGroups: migrating ===========================
== 20220621164914 DropFlairUrlFromGroups: migrated (0.0026s) ==================

== 20220628031850 CreateSidebarSectionLinks: migrating ========================
-- create_table(:sidebar_section_links)
   -> 0.0057s
-- add_index(:sidebar_section_links, [:user_id, :linkable_type, :linkable_id], {:unique=>true, :name=>"idx_unique_sidebar_section_links"})
   -> 0.0014s
== 20220628031850 CreateSidebarSectionLinks: migrated (0.0079s) ===============

== 20220629190633 AutoJoinUsersToChannels: migrating ==========================
-- add_column(:chat_channels, :auto_join_users, :boolean, {:null=>false, :default=>false})
   -> 0.0014s
== 20220629190633 AutoJoinUsersToChannels: migrated (0.0022s) =================

== 20220630074200 DropChatIsolatedFromUserOptions: migrating ==================
== 20220630074200 DropChatIsolatedFromUserOptions: migrated (0.0023s) =========

== 20220701195731 ConvertChatableTopicsToCategories: migrating ================
== 20220701195731 ConvertChatableTopicsToCategories: migrated (0.0022s) =======

== 20220706114835 AddJoinModeToChannelMemberships: migrating ==================
-- add_column(:user_chat_channel_memberships, :join_mode, :integer, {:null=>false, :default=>0})
   -> 0.0006s
== 20220706114835 AddJoinModeToChannelMemberships: migrated (0.0010s) =========

== 20220712040959 AddCaseSensitiveToWatchedWords: migrating ===================
-- add_column(:watched_words, :case_sensitive, :boolean, {:default=>false, :null=>false})
   -> 0.0006s
== 20220712040959 AddCaseSensitiveToWatchedWords: migrated (0.0013s) ==========

== 20220726164831 FixDeleteRejectedEmailAfterDaysSiteSetting: migrating =======
== 20220726164831 FixDeleteRejectedEmailAfterDaysSiteSetting: migrated (0.0020s)

== 20220727040437 AddTopicTimersIndex: migrating ==============================
-- add_index(:topic_timers, [:topic_id], {:where=>"deleted_at IS NULL"})
   -> 0.0033s
== 20220727040437 AddTopicTimersIndex: migrated (0.0041s) =====================

== 20220727085001 CreateIndexOnReviewablesScoreDescCreatedAtDesc: migrating ===
-- add_index(:reviewables, [:score, :created_at], {:order=>{:score=>:desc, :created_at=>:desc}, :name=>"idx_reviewables_score_desc_created_at_desc"})
   -> 0.0020s
== 20220727085001 CreateIndexOnReviewablesScoreDescCreatedAtDesc: migrated (0.0026s)

== 20220729032237 AddIndexToChatMessageCreatedAt: migrating ===================
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS\nidx_chat_messages_by_created_at_not_deleted\nON chat_messages (created_at)\nWHERE deleted_at IS NULL\n")
   -> 0.0047s
== 20220729032237 AddIndexToChatMessageCreatedAt: migrated (0.0052s) ==========

== 20220801044610 AddOutboundMessageIdToPost: migrating =======================
-- add_column(:posts, :outbound_message_id, :string)
   -> 0.0007s
== 20220801044610 AddOutboundMessageIdToPost: migrated (0.0012s) ==============

== 20220802014549 DisableChatUploadsIfSecureMediaEnabled: migrating ===========
== 20220802014549 DisableChatUploadsIfSecureMediaEnabled: migrated (0.0012s) ==

== 20220811170600 ResetFlairGroupIdIfNotGroupMember: migrating ================
-- execute("UPDATE users\nSET flair_group_id = NULL\nWHERE flair_group_id IS NOT NULL AND NOT EXISTS (\n  SELECT 1\n  FROM group_users\n  WHERE group_users.user_id = users.id\n    AND group_users.group_id = users.flair_group_id\n)\n")
   -> 0.0008s
== 20220811170600 ResetFlairGroupIdIfNotGroupMember: migrated (0.0014s) =======

== 20220818171849 MoveTlUserHistoryToPreviousAndNewValue: migrating ===========
-- execute("UPDATE user_histories\nSET previous_value = old_tl,\n    new_value = new_tl,\n    details = NULL\nFROM (\n    SELECT id user_history_id,\n           (REGEXP_MATCHES(details, 'old trust level: (d+)', 'i'))[1] old_tl,\n           (REGEXP_MATCHES(details, 'new trust level: (d+)', 'i'))[1] new_tl\n    FROM user_histories\n    WHERE action = 2\n) trust_levels\nWHERE user_histories.id = trust_levels.user_history_id\n")
   -> 0.0007s
== 20220818171849 MoveTlUserHistoryToPreviousAndNewValue: migrated (0.0011s) ==

== 20220825005115 BackfillOutboundMessageId: migrating ========================
== 20220825005115 BackfillOutboundMessageId: migrated (0.0020s) ===============

== 20220825054405 FillPersonalMessageEnabledGroupsBasedOnDeprecatedSettings: migrating
== 20220825054405 FillPersonalMessageEnabledGroupsBasedOnDeprecatedSettings: migrated (0.0019s)

== 20220901034107 AddUserCountStaleToChannel: migrating =======================
-- add_column(:chat_channels, :user_count_stale, :boolean, {:default=>false, :null=>false})
   -> 0.0009s
== 20220901034107 AddUserCountStaleToChannel: migrated (0.0014s) ==============

== 20220915132547 AddDominantColorToUploads: migrating ========================
-- add_column(:uploads, :dominant_color, :text, {:null=>true})
   -> 0.0005s
-- add_index(:uploads, :id, {:where=>"dominant_color IS NULL"})
   -> 0.0024s
== 20220915132547 AddDominantColorToUploads: migrated (0.0038s) ===============

== 20220920044310 EnforceUserProfileMaxLimits: migrating ======================
-- execute("UPDATE user_profiles SET location = LEFT(location, 3000) WHERE location IS NOT NULL AND LENGTH(location) > 3000")
   -> 0.0005s
-- execute("UPDATE user_profiles SET website = LEFT(website, 3000) WHERE website IS NOT NULL AND LENGTH(website) > 3000")
   -> 0.0002s
-- change_column(:user_profiles, :location, :string, {:limit=>3000})
   -> 0.0112s
-- change_column(:user_profiles, :website, :string, {:limit=>3000})
   -> 0.0138s
== 20220920044310 EnforceUserProfileMaxLimits: migrated (0.0271s) =============

== 20220923212549 AddSeenPopupsToUserOptions: migrating =======================
-- add_column(:user_options, :seen_popups, :integer, {:array=>true})
   -> 0.0006s
== 20220923212549 AddSeenPopupsToUserOptions: migrated (0.0011s) ==============

== 20220927065328 SetSecureUploadsSettingsBasedOnSecureMediaEquivalent: migrating
== 20220927065328 SetSecureUploadsSettingsBasedOnSecureMediaEquivalent: migrated (0.0016s)

== 20220927171707 DisableAllowUncategorizedNewSites: migrating ================
== 20220927171707 DisableAllowUncategorizedNewSites: migrated (0.0015s) =======

== 20221004122254 DeleteReviewablesTargettingDeletedChatMessages: migrating ===
== 20221004122254 DeleteReviewablesTargettingDeletedChatMessages: migrated (0.0030s)

== 20221004122343 AddDarkModeLogoToCategories: migrating ======================
-- add_column(:categories, :uploaded_logo_dark_id, :integer, {:index=>true})
   -> 0.0007s
== 20221004122343 AddDarkModeLogoToCategories: migrated (0.0016s) =============

== 20221005143622 AddTypeToChatChannel: migrating =============================
-- add_column(:chat_channels, :type, :string)
   -> 0.0004s
== 20221005143622 AddTypeToChatChannel: migrated (0.0011s) ====================

== 20221013045158 AddSidebarListDestinationToUserOption: migrating ============
-- add_column(:user_options, :sidebar_list_destination, :integer, {:default=>0, :null=>false})
   -> 0.0011s
== 20221013045158 AddSidebarListDestinationToUserOption: migrated (0.0016s) ===

== 20221014005208 AddSlugColumnToChatChannel: migrating =======================
-- add_column(:chat_channels, :slug, :string)
   -> 0.0007s
-- add_index(:chat_channels, :slug)
   -> 0.0031s
== 20221014005208 AddSlugColumnToChatChannel: migrated (0.0048s) ==============

== 20221017223309 FixGeneralCategoryId: migrating =============================
== 20221017223309 FixGeneralCategoryId: migrated (0.0009s) ====================

== 20221018091412 MigrateChatChannels: migrating ==============================
== 20221018091412 MigrateChatChannels: migrated (0.0023s) =====================

== 20221018100550 AddSourceMapToJavascriptCache: migrating ====================
-- add_column(:javascript_caches, :source_map, :text)
   -> 0.0006s
== 20221018100550 AddSourceMapToJavascriptCache: migrated (0.0012s) ===========

== 20221026035440 SecurityLogOutInviteRedemptionInvitedUsers: migrating =======
== 20221026035440 SecurityLogOutInviteRedemptionInvitedUsers: migrated (0.0022s)

== 20221027090832 MigrateDmChannels: migrating ================================
== 20221027090832 MigrateDmChannels: migrated (0.0011s) =======================

== 20221101061319 AddLastEditorIdToChatMessages: migrating ====================
-- add_column(:chat_messages, :last_editor_id, :integer)
   -> 0.0005s
-- add_column(:chat_message_revisions, :user_id, :integer)
   -> 0.0003s
-- add_index(:chat_messages, :last_editor_id)
   -> 0.0027s
-- add_index(:chat_message_revisions, :user_id)
   -> 0.0027s
== 20221101061319 AddLastEditorIdToChatMessages: migrated (0.0069s) ===========

== 20221101140632 RenameOnboardingPopupsSiteSetting: migrating ================
-- execute("UPDATE site_settings SET name = 'enable_user_tips' WHERE name = 'enable_onboarding_popups'")
   -> 0.0003s
== 20221101140632 RenameOnboardingPopupsSiteSetting: migrated (0.0007s) =======

== 20221101181505 HideAllUserTipsForExistentUsers: migrating ==================
-- execute("UPDATE user_options SET seen_popups = '{1, 2}'")
   -> 0.0007s
== 20221101181505 HideAllUserTipsForExistentUsers: migrated (0.0012s) =========

== 20221103051248 RemoveInvalidTopicAllowedUsersFromInvites: migrating ========
== 20221103051248 RemoveInvalidTopicAllowedUsersFromInvites: migrated (0.0044s)

== 20221104054957 BackfillChannelSlugs: migrating =============================
== 20221104054957 BackfillChannelSlugs: migrated (0.0019s) ====================

== 20221107034541 MakeChatEditorIdsNotNull: migrating =========================
-- change_column_null(:chat_messages, :last_editor_id, false)
   -> 0.0003s
-- change_column_null(:chat_message_revisions, :user_id, false)
   -> 0.0004s
== 20221107034541 MakeChatEditorIdsNotNull: migrated (0.0027s) ================

== 20221108032233 DropOldBookmarkColumnsV2: migrating =========================
== 20221108032233 DropOldBookmarkColumnsV2: migrated (0.0053s) ================

== 20221110175456 PopulateDefaultComposerCategory: migrating ==================
== 20221110175456 PopulateDefaultComposerCategory: migrated (0.0008s) =========

== 20221114215902 HideUserTips3To5ForExistingUsers: migrating =================
-- execute("UPDATE user_options SET seen_popups = seen_popups || '{3, 4, 5}'")
   -> 0.0003s
== 20221114215902 HideUserTips3To5ForExistingUsers: migrated (0.0015s) ========

== 20221117052348 TruncateChatMessagesOverMaxLength: migrating ================
-- table_exists?(:chat_messages)
   -> 0.0007s
-- execute("UPDATE chat_messages\nSET message = LEFT(message, 6000), cooked_version = NULL\nWHERE LENGTH(message) > 6000\n")
   -> 0.0006s
== 20221117052348 TruncateChatMessagesOverMaxLength: migrated (0.0021s) =======

== 20221117142910 DeleteOrphanedChannels: migrating ===========================
== 20221117142910 DeleteOrphanedChannels: migrated (0.0017s) ==================

== 20221118104708 AddAllowChannelWideMentionsToChatChannels: migrating ========
-- add_column(:chat_channels, :allow_channel_wide_mentions, :boolean, {:null=>false, :default=>true})
   -> 0.0011s
== 20221118104708 AddAllowChannelWideMentionsToChatChannels: migrated (0.0020s)

== 20221122070108 SaveChatAllowedGroupsSiteSetting: migrating =================
== 20221122070108 SaveChatAllowedGroupsSiteSetting: migrated (0.0011s) ========

== 20221125001635 AddBccAddressesToEmailLog: migrating ========================
-- add_column(:email_logs, :bcc_addresses, :text, {:null=>true})
   -> 0.0006s
== 20221125001635 AddBccAddressesToEmailLog: migrated (0.0013s) ===============

== 20221125173217 RemoveEnableWhispersSiteSetting: migrating ==================
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nSELECT 'whispers_allowed_groups', '20', '3', created_at, NOW()\nFROM site_settings\nWHERE name = 'enable_whispers' AND value = 't'\nON CONFLICT DO NOTHING\n")
   -> 0.0007s
-- execute("UPDATE site_settings\nSET value = array_to_string(array_append(string_to_array(value, '|'), '3'), '|')\nWHERE name = 'whispers_allowed_groups' AND\n      EXISTS(SELECT 1 FROM site_settings WHERE name = 'enable_whispers' AND value = 't') AND\n      NOT '3' = ANY(string_to_array(value, '|'))\n")
   -> 0.0005s
-- execute("UPDATE site_settings\nSET value = ''\nWHERE name = 'whispers_allowed_groups' AND\n      NOT EXISTS(SELECT 1 FROM site_settings WHERE name = 'enable_whispers' AND value = 't')\n")
   -> 0.0004s
-- execute("DELETE FROM site_settings WHERE name = 'enable_whispers'\n")
   -> 0.0003s
== 20221125173217 RemoveEnableWhispersSiteSetting: migrated (0.0029s) =========

== 20221201024458 MakeChannelSlugsUniqueWithIndex: migrating ==================
== 20221201024458 MakeChannelSlugsUniqueWithIndex: migrated (0.0032s) =========

== 20221201032830 DropTmpChatSlugTables: migrating ============================
== 20221201032830 DropTmpChatSlugTables: migrated (0.0014s) ===================

== 20221201035918 AddSlugUniqueIndexForChatChannels: migrating ================
-- remove_index(:chat_channels, :slug)
   -> 0.0038s
-- add_index(:chat_channels, :slug, {:unique=>true})
   -> 0.0024s
== 20221201035918 AddSlugUniqueIndexForChatChannels: migrated (0.0069s) =======

== 20221202032006 AddChatMessageCountToChatChannels: migrating ================
-- add_column(:chat_channels, :messages_count, :integer, {:null=>false, :default=>0})
   -> 0.0012s
-- add_index(:chat_channels, :messages_count)
   -> 0.0024s
== 20221202032006 AddChatMessageCountToChatChannels: migrated (0.0042s) =======

== 20221202043755 UpdateChatChannelMessageCounts: migrating ===================
== 20221202043755 UpdateChatChannelMessageCounts: migrated (0.0014s) ==========

== 20221205225450 MigrateSidebarSiteSettings: migrating =======================
== 20221205225450 MigrateSidebarSiteSettings: migrated (0.0015s) ==============

== 20221211142629 RemoveUpdatedTranslationOverrides: migrating ================
-- execute("DELETE\nFROM translation_overrides\nWHERE translation_key IN (\n  'js.user.messages.read_more_group_pm_MF',\n  'js.user.messages.read_more_personal_pm_MF',\n  'js.topic.read_more_MF',\n  'js.topic.bumped_at_title_MF',\n  'js.topic.read_more_in_category',\n  'js.topic.read_more'\n)\n")
   -> 0.0004s
== 20221211142629 RemoveUpdatedTranslationOverrides: migrated (0.0012s) =======

== 20221212234948 DropTopicAllowedUsersBackupNov2022: migrating ===============
== 20221212234948 DropTopicAllowedUsersBackupNov2022: migrated (0.0008s) ======

== 20221219082223 AddIndexToChatMessages: migrating ===========================
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_chat_messages_on_chat_channel_id_and_id\n")
   -> 0.0003s
-- execute("CREATE INDEX CONCURRENTLY index_chat_messages_on_chat_channel_id_and_id\nON chat_messages (chat_channel_id,id)\nWHERE deleted_at IS NOT NULL\n")
   -> 0.0021s
== 20221219082223 AddIndexToChatMessages: migrated (0.0034s) ==================

== 20230103004613 MakeExperimentalHashtagFeatureDefaultForNewSites: migrating =
== 20230103004613 MakeExperimentalHashtagFeatureDefaultForNewSites: migrated (0.0009s)

== 20230104054425 RenameRateLimitSearchAnon: migrating ========================
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'rate_limit_search_anon_user_per_minute', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'rate_limit_search_anon_user'\n")
   -> 0.0007s
-- execute("INSERT INTO site_settings (name, data_type, value, created_at, updated_at)\nSELECT 'rate_limit_search_anon_global_per_minute', data_type, value, created_at, updated_at\nFROM site_settings\nWHERE name = 'rate_limit_search_anon_global'\n")
   -> 0.0003s
== 20230104054425 RenameRateLimitSearchAnon: migrated (0.0017s) ===============

== 20230104054426 DeleteOldRateLimitSearchAnon: migrating =====================
-- execute("DELETE FROM site_settings WHERE name in ('rate_limit_search_anon_user', 'rate_limit_search_anon_global')")
   -> 0.0002s
== 20230104054426 DeleteOldRateLimitSearchAnon: migrated (0.0009s) ============

== 20230105153520 TriggerPostRebakeLocalOneboxXss: migrating ==================
== 20230105153520 TriggerPostRebakeLocalOneboxXss: migrated (0.0010s) =========

== 20230111223803 DeleteMisconfiguredEmbeddableHosts: migrating ===============
-- execute("DELETE FROM embeddable_hosts eh1\nWHERE eh1.id IN (\n  SELECT eh2.id FROM embeddable_hosts eh2\n  LEFT JOIN categories ON categories.id = eh2.category_id\n  WHERE eh2.category_id IS NOT NULL\n  AND categories.id IS NULL\n)\n")
   -> 0.0006s
== 20230111223803 DeleteMisconfiguredEmbeddableHosts: migrated (0.0012s) ======

== 20230113002617 ReindexInvalidIndexes: migrating ============================
== 20230113002617 ReindexInvalidIndexes: migrated (0.0021s) ===================

== 20230115233416 CreateSidebarSections: migrating ============================
-- create_table(:sidebar_sections)
   -> 0.0061s
-- add_index(:sidebar_sections, [:user_id, :title], {:unique=>true})
   -> 0.0019s
== 20230115233416 CreateSidebarSections: migrated (0.0086s) ===================

== 20230116090324 DropChatDraftsOverMaxLength: migrating ======================
-- table_exists?(:chat_drafts)
   -> 0.0005s
-- execute("DELETE FROM chat_drafts\nWHERE LENGTH(data) > 50000\n")
   -> 0.0003s
== 20230116090324 DropChatDraftsOverMaxLength: migrated (0.0016s) =============

== 20230117002110 CreateSidebarUrl: migrating =================================
-- create_table(:sidebar_urls)
   -> 0.0047s
== 20230117002110 CreateSidebarUrl: migrated (0.0055s) ========================

== 20230117143451 DropInvalidDrafts: migrating ================================
-- execute("DELETE FROM drafts\nWHERE LENGTH(data) > 400000\n")
   -> 0.0003s
== 20230117143451 DropInvalidDrafts: migrated (0.0007s) =======================

== 20230118020114 AddPublicTopicCountToTags: migrating ========================
-- add_column(:tags, :public_topic_count, :integer, {:default=>0, :null=>false})
   -> 0.0011s
-- execute("UPDATE tags t\nSET public_topic_count = x.topic_count\nFROM (\n  SELECT\n    COUNT(topics.id) AS topic_count,\n    tags.id AS tag_id\n  FROM tags\n  INNER JOIN topic_tags ON tags.id = topic_tags.tag_id\n  INNER JOIN topics ON topics.id = topic_tags.topic_id AND topics.deleted_at IS NULL AND topics.archetype != 'private_message'\n  INNER JOIN categories ON categories.id = topics.category_id AND NOT categories.read_restricted\n  GROUP BY tags.id\n) x\nWHERE x.tag_id = t.id\nAND x.topic_count <> t.public_topic_count;\n")
   -> 0.0012s
== 20230118020114 AddPublicTopicCountToTags: migrated (0.0029s) ===============

== 20230118042740 AddSidebarSectionIdToSidebarSectionLinks: migrating =========
-- add_column(:sidebar_section_links, :sidebar_section_id, :integer, {:index=>true})
   -> 0.0005s
== 20230118042740 AddSidebarSectionIdToSidebarSectionLinks: migrated (0.0009s)

== 20230119000943 AddStaffTopicCountToTags: migrating =========================
-- add_column(:tags, :staff_topic_count, :integer, {:default=>0, :null=>false})
   -> 0.0008s
-- execute("UPDATE tags t\nSET staff_topic_count = x.topic_count\nFROM (\n  SELECT COUNT(topics.id) AS topic_count, tags.id AS tag_id\n  FROM tags\n  LEFT JOIN topic_tags ON tags.id = topic_tags.tag_id\n  LEFT JOIN topics ON topics.id = topic_tags.topic_id\n  AND topics.deleted_at IS NULL\n  AND topics.archetype != 'private_message'\n  GROUP BY tags.id\n) x\nWHERE x.tag_id = t.id\nAND x.topic_count <> t.staff_topic_count\n")
   -> 0.0008s
== 20230119000943 AddStaffTopicCountToTags: migrated (0.0021s) ================

== 20230119024157 RemoveTopicCountFromTags: migrating =========================
== 20230119024157 RemoveTopicCountFromTags: migrated (0.0020s) ================

== 20230119091939 DropOrphanedReviewableFlaggedPosts: migrating ===============
== 20230119091939 DropOrphanedReviewableFlaggedPosts: migrated (0.0013s) ======

== 20230119094939 RemoveWildcardFromEmailDomainSiteSettings: migrating ========
-- execute("UPDATE site_settings\nSET value = regexp_replace(value, '\\*(\\.)?|\\?', '', 'g')\nWHERE name IN (\n  'auto_approve_email_domains',\n  'allowed_email_domains',\n  'blocked_email_domains'\n)\n")
   -> 0.0002s
== 20230119094939 RemoveWildcardFromEmailDomainSiteSettings: migrated (0.0007s)

== 20230123020036 MoveChatUploadsToUploadReferences: migrating ================
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT chat_uploads.upload_id, 'ChatMessage', chat_uploads.chat_message_id, chat_uploads.created_at, chat_uploads.updated_at\nFROM chat_uploads\nINNER JOIN uploads ON uploads.id = chat_uploads.upload_id\nON CONFLICT DO NOTHING\n")
   -> 0.0007s
== 20230123020036 MoveChatUploadsToUploadReferences: migrated (0.0011s) =======

== 20230123025112 MoveChatUploadsToUploadReferencesPost: migrating ============
-- execute("INSERT INTO upload_references(upload_id, target_type, target_id, created_at, updated_at)\nSELECT chat_uploads.upload_id, 'ChatMessage', chat_uploads.chat_message_id, chat_uploads.created_at, chat_uploads.updated_at\nFROM chat_uploads\nINNER JOIN uploads ON uploads.id = chat_uploads.upload_id\nON CONFLICT DO NOTHING\n")
   -> 0.0004s
== 20230123025112 MoveChatUploadsToUploadReferencesPost: migrated (0.0011s) ===

== 20230127173249 TruncateUserStatusTo100Characters: migrating ================
-- execute("UPDATE user_statuses SET description = left(description, 100)")
   -> 0.0002s
-- execute("UPDATE user_statuses SET emoji = left(emoji, 100)")
   -> 0.0001s
== 20230127173249 TruncateUserStatusTo100Characters: migrated (0.0008s) =======

== 20230130053144 AddThreadingEnabledToChatChannels: migrating ================
-- add_column(:chat_channels, :threading_enabled, :boolean, {:default=>false, :null=>false})
   -> 0.0010s
== 20230130053144 AddThreadingEnabledToChatChannels: migrated (0.0014s) =======

== 20230201012734 CreateChatThreadingModels: migrating ========================
-- create_table(:chat_threads)
   -> 0.0052s
-- add_index(:chat_threads, :channel_id)
   -> 0.0017s
-- add_index(:chat_threads, :original_message_id)
   -> 0.0016s
-- add_index(:chat_threads, :original_message_user_id)
   -> 0.0037s
-- add_index(:chat_threads, :status)
   -> 0.0013s
-- add_index(:chat_threads, [:channel_id, :status])
   -> 0.0029s
-- add_column(:chat_messages, :thread_id, :bigint, {:null=>true})
   -> 0.0009s
-- add_index(:chat_messages, :thread_id)
   -> 0.0023s
== 20230201012734 CreateChatThreadingModels: migrated (0.0208s) ===============

== 20230201192925 AddTrigramIndexesToUsers: migrating =========================
-- add_index(:users, :username_lower, {:using=>"gist", :opclass=>:gist_trgm_ops, :algorithm=>:concurrently, :name=>"index_users_on_username_lower_trgm"})
   -> 0.0021s
-- add_index(:users, :name, {:using=>"gist", :opclass=>:gist_trgm_ops, :algorithm=>:concurrently, :name=>"index_users_on_name_trgm"})
   -> 0.0011s
== 20230201192925 AddTrigramIndexesToUsers: migrated (0.0038s) ================

== 20230202021414 RemoveEnableNewUserProfileNavGroupsSiteSettings: migrating ==
-- execute("DELETE FROM site_settings WHERE name = 'enable_new_user_profile_nav_groups'")
   -> 0.0004s
== 20230202021414 RemoveEnableNewUserProfileNavGroupsSiteSettings: migrated (0.0012s)

== 20230202173641 CreateFormTemplates: migrating ==============================
-- create_table(:form_templates)
   -> 0.0066s
-- add_index(:form_templates, :name, {:unique=>true})
   -> 0.0016s
== 20230202173641 CreateFormTemplates: migrated (0.0088s) =====================

== 20230202204937 AddIndexToPostsWhereNotDeletedOrEmpty: migrating ============
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_posts_on_id_topic_id_where_not_deleted_or_empty\n")
   -> 0.0003s
-- execute("CREATE INDEX CONCURRENTLY index_posts_on_id_topic_id_where_not_deleted_or_empty ON posts (id, topic_id) where deleted_at IS NULL AND raw <> ''\n")
   -> 0.0029s
== 20230202204937 AddIndexToPostsWhereNotDeletedOrEmpty: migrated (0.0037s) ===

== 20230206033907 AddIconToSidebarUrls: migrating =============================
-- add_column(:sidebar_urls, :icon, :string)
   -> 0.0004s
== 20230206033907 AddIconToSidebarUrls: migrated (0.0009s) ====================

== 20230207042719 AddLimitsToSidebarSectionsAndSidebarUrls: migrating =========
-- execute("UPDATE sidebar_urls SET icon = 'link' WHERE icon IS NULL")
   -> 0.0003s
-- change_column(:sidebar_sections, :title, :string, {:limit=>30, :null=>false})
   -> 0.0035s
-- change_column(:sidebar_urls, :icon, :string, {:limit=>40, :null=>false})
   -> 0.0035s
-- change_column(:sidebar_urls, :name, :string, {:limit=>80, :null=>false})
   -> 0.0044s
-- change_column(:sidebar_urls, :value, :string, {:limit=>200, :null=>false})
   -> 0.0037s
== 20230207042719 AddLimitsToSidebarSectionsAndSidebarUrls: migrated (0.0163s)

== 20230207093514 CreateCategorySettings: migrating ===========================
-- create_table(:category_settings)
   -> 0.0067s
== 20230207093514 CreateCategorySettings: migrated (0.0076s) ==================

== 20230208020404 PopulateCategorySettings: migrating =========================
-- execute("INSERT INTO\n  category_settings(\n    category_id,\n    require_topic_approval,\n    require_reply_approval,\n    num_auto_bump_daily,\n    created_at,\n    updated_at\n  )\nSELECT\n  category_id,\n  MAX(\n    CASE WHEN (name = 'require_topic_approval')\n    THEN NULLIF(value, '') ELSE NULL END\n  )::boolean AS require_topic_approval,\n  MAX(\n    CASE WHEN (name = 'require_reply_approval')\n    THEN NULLIF(value, '') ELSE NULL END\n  )::boolean AS require_reply_approval,\n  MAX(\n    CASE WHEN (name = 'num_auto_bump_daily')\n    THEN NULLIF(value, '') ELSE NULL END\n  )::integer AS num_auto_bump_daily,\n  NOW() AS created_at,\n  NOW() AS updated_at\nFROM category_custom_fields\nWHERE name IN (\n  'require_topic_approval',\n  'require_reply_approval',\n  'num_auto_bump_daily'\n)\nGROUP BY category_id;\n")
   -> 0.0009s
== 20230208020404 PopulateCategorySettings: migrated (0.0015s) ================

== 20230209222225 AddLinkableIndexToSidebarSectionLinks: migrating ============
-- execute("DROP INDEX CONCURRENTLY IF EXISTS index_sidebar_section_links_on_linkable_type_and_linkable_id\n")
   -> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY index_sidebar_section_links_on_linkable_type_and_linkable_id\nON sidebar_section_links (linkable_type,linkable_id)\n")
   -> 0.0030s
== 20230209222225 AddLinkableIndexToSidebarSectionLinks: migrated (0.0043s) ===

== 20230213234415 CreateCategoryFormTemplates: migrating ======================
-- create_table(:category_form_templates)
   -> 0.0063s
== 20230213234415 CreateCategoryFormTemplates: migrated (0.0069s) =============

== 20230214044350 AddPublicToSidebarSections: migrating =======================
-- add_column(:sidebar_sections, :public, :boolean, {:null=>false, :default=>false})
   -> 0.0006s
== 20230214044350 AddPublicToSidebarSections: migrated (0.0010s) ==============

== 20230224193734 CreateThemeSvgSprite: migrating =============================
-- create_table(:theme_svg_sprites)
   -> 0.0064s
-- add_index(:theme_svg_sprites, :theme_id, {:unique=>true})
   -> 0.0021s
== 20230224193734 CreateThemeSvgSprite: migrated (0.0096s) ====================

== 20230224225129 BackfillSvgSprites: migrating ===============================
== 20230224225129 BackfillSvgSprites: migrated (0.0217s) ======================

== 20230227050146 UpdateNarrativeBadgeIcons: migrating ========================
-- execute("UPDATE badges\nSET icon = 'stamp'\nWHERE\n  name IN ('Certified', 'Licensed')\n  AND icon = 'fa-certificate'\n")
   -> 0.0005s
== 20230227050146 UpdateNarrativeBadgeIcons: migrated (0.0100s) ===============

== 20230227050147 UpdateBadgeIcons: migrating =================================
-- execute("UPDATE badges SET icon = 'book-reader' WHERE id IN (17) AND icon = 'fa-certificate'")
   -> 0.0006s
-- execute("UPDATE badges SET icon = 'file-alt' WHERE id IN (16) AND icon = 'fa-certificate'")
   -> 0.0003s
-- execute("UPDATE badges SET icon = 'link' WHERE id IN (14,28,29,30) AND icon = 'fa-certificate'")
   -> 0.0004s
-- execute("UPDATE badges SET icon = 'quote-right' WHERE id IN (15) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'heart' WHERE id IN (11,5) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'flag' WHERE id IN (13) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'share-alt' WHERE id IN (12,21,22,23) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'user-edit' WHERE id IN (9) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'pen' WHERE id IN (10) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'far-edit' WHERE id IN (48) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'reply' WHERE id IN (6,7,8) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'file-signature' WHERE id IN (18,19,20) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'at' WHERE id IN (40) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'smile' WHERE id IN (41) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'cube' WHERE id IN (42) AND icon = 'fa-certificate'")
   -> 0.0002s
-- execute("UPDATE badges SET icon = 'envelope' WHERE id IN (43) AND icon = 'fa-certificate'")
   -> 0.0003s
-- execute("UPDATE badges SET icon = 'medal' WHERE id IN (44) AND icon = 'fa-certificate'")
   -> 0.0004s
-- execute("UPDATE badges SET icon = 'birthday-cake' WHERE id IN (24) AND icon = 'far-clock'")
   -> 0.0005s
== 20230227050147 UpdateBadgeIcons: migrated (0.0059s) ========================

== 20230227172543 MakeChatMentionNotificationIdNullable: migrating ============
-- change_column_null(:chat_mentions, :notification_id, true)
   -> 0.0004s
== 20230227172543 MakeChatMentionNotificationIdNullable: migrated (0.0012s) ===

== 20230228062442 AddChatHeaderIndicatorPreference: migrating =================
-- add_column(:user_options, :chat_header_indicator_preference, :integer, {:default=>0, :null=>false})
   -> 0.0015s
== 20230228062442 AddChatHeaderIndicatorPreference: migrated (0.0024s) ========

== 20230228105851 DropBadgeGrantedTitleColumn: migrating ======================
== 20230228105851 DropBadgeGrantedTitleColumn: migrated (0.0032s) =============

== 20230301071240 AddAutoBumpCooldownDaysToCategorySettings: migrating ========
-- add_column(:category_settings, :auto_bump_cooldown_days, :integer, {:default=>1})
   -> 0.0009s
== 20230301071240 AddAutoBumpCooldownDaysToCategorySettings: migrated (0.0018s)

== 20230303015952 AddExternalToSidebarUrls: migrating =========================
-- add_column(:sidebar_urls, :external, :boolean, {:default=>false, :null=>false})
   -> 0.0010s
== 20230303015952 AddExternalToSidebarUrls: migrated (0.0015s) ================

== 20230307051200 AddPositionToSidebarSectionLinks: migrating =================
-- add_column(:sidebar_section_links, :position, :integer, {:default=>0, :null=>false})
   -> 0.0007s
-- execute("UPDATE sidebar_section_links SET position = id")
   -> 0.0005s
-- add_index(:sidebar_section_links, [:user_id, :sidebar_section_id, :position], {:unique=>true, :name=>"links_user_id_section_id_position"})
   -> 0.0041s
== 20230307051200 AddPositionToSidebarSectionLinks: migrated (0.0062s) ========

== 20230308042434 BackfillAutoBumpCooldownDaysCategorySetting: migrating ======
-- execute("INSERT INTO\n  category_settings(\n    category_id,\n    auto_bump_cooldown_days,\n    created_at,\n    updated_at\n  )\nSELECT\n  id,\n  1,\n  NOW(),\n  NOW()\nFROM categories\nON CONFLICT (category_id)\nDO\n  UPDATE SET\n    auto_bump_cooldown_days = 1,\n    updated_at = NOW();\n")
   -> 0.0008s
== 20230308042434 BackfillAutoBumpCooldownDaysCategorySetting: migrated (0.0017s)

== 20230317194217 RebakeLazyYtPosts: migrating ================================
-- execute("UPDATE posts SET baked_version = 0\nWHERE cooked LIKE '%lazyYT-container%'\n")
   -> 0.0007s
== 20230317194217 RebakeLazyYtPosts: migrated (0.0013s) =======================

== 20230328034956 AddSidebarSectionIdIndexToSidebarSectionLink: migrating =====
-- execute("DROP INDEX CONCURRENTLY IF EXISTS idx_sidebar_section_links_on_sidebar_section_id\n")
   -> 0.0002s
-- execute("CREATE UNIQUE INDEX CONCURRENTLY idx_sidebar_section_links_on_sidebar_section_id\nON sidebar_section_links (sidebar_section_id, user_id, position)\n")
   -> 0.0023s
-- execute("DROP INDEX CONCURRENTLY IF EXISTS links_user_id_section_id_position\n")
   -> 0.0015s
== 20230328034956 AddSidebarSectionIdIndexToSidebarSectionLink: migrated (0.0054s)

== 20230403012844 DropChatUploads: migrating ==================================
== 20230403012844 DropChatUploads: migrated (0.0021s) =========================

== 20230403063113 DropIdxPostCustomFieldsAkismet: migrating ===================
-- execute("DROP INDEX IF EXISTS idx_post_custom_fields_akismet")
   -> 0.0002s
== 20230403063113 DropIdxPostCustomFieldsAkismet: migrated (0.0016s) ==========

== 20230403094936 ChangeGoogleAnalyticsDefault: migrating =====================
== 20230403094936 ChangeGoogleAnalyticsDefault: migrated (0.0011s) ============

== 20230404064728 SystemUserForPublicSections: migrating ======================
-- execute("      UPDATE sidebar_sections\n      SET user_id = -1\n      WHERE public IS TRUE\n")
   -> 0.0009s
-- execute("      UPDATE sidebar_section_links\n      SET user_id = -1\n      FROM sidebar_sections\n      WHERE sidebar_sections.public IS TRUE\n        AND sidebar_section_links.sidebar_section_id = sidebar_sections.id\n")
   -> 0.0006s
== 20230404064728 SystemUserForPublicSections: migrated (0.0023s) =============

== 20230405121453 AddPasswordAlgorithmToUsers: migrating ======================
-- column_exists?(:users, :password_algorithm)
   -> 0.0024s
-- add_column(:users, :password_algorithm, :string, {:limit=>64})
   -> 0.0010s
-- execute("UPDATE users SET password_algorithm = '$pbkdf2-sha256$i=64000,l=32$'\nWHERE id IN (\n  SELECT id FROM users\n  WHERE users.password_hash IS NOT NULL\n  AND users.password_algorithm IS NULL\n  LIMIT 5000\n)\n")
   -> 0.0017s
== 20230405121453 AddPasswordAlgorithmToUsers: migrated (0.0061s) =============

== 20230405121454 UpdatePasswordAlgorithmPostDeploy: migrating ================
-- execute("UPDATE users SET password_algorithm = '$pbkdf2-sha256$i=64000,l=32$'\nWHERE users.password_algorithm IS NULL\nAND users.password_hash IS NOT NULL\n")
   -> 0.0005s
== 20230405121454 UpdatePasswordAlgorithmPostDeploy: migrated (0.0012s) =======

== 20230411012630 AddThreadNotDeletedIndexChatMessages: migrating =============
-- execute("DROP INDEX IF EXISTS idx_chat_messages_by_thread_id_not_deleted\n")
   -> 0.0003s
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS\nidx_chat_messages_by_thread_id_not_deleted\nON chat_messages (thread_id)\nWHERE deleted_at IS NULL\n")
   -> 0.0026s
== 20230411012630 AddThreadNotDeletedIndexChatMessages: migrated (0.0039s) ====

== 20230411023246 AddChatMessageRepliesCountToChatThreads: migrating ==========
-- add_column(:chat_threads, :replies_count, :integer, {:null=>false, :default=>0})
   -> 0.0010s
-- add_index(:chat_threads, :replies_count)
   -> 0.0018s
== 20230411023246 AddChatMessageRepliesCountToChatThreads: migrated (0.0037s) =

== 20230411023340 UpdateThreadReplyCounts: migrating ==========================
== 20230411023340 UpdateThreadReplyCounts: migrated (0.0027s) =================

== 20230411031428 AddSegmentToSidebarUrls: migrating ==========================
-- add_column(:sidebar_urls, :segment, :integer, {:default=>0, :null=>false})
   -> 0.0010s
== 20230411031428 AddSegmentToSidebarUrls: migrated (0.0016s) =================

== 20230411031520 AddSectionTypeToSidebarSections: migrating ==================
-- add_column(:sidebar_sections, :section_type, :integer)
   -> 0.0006s
-- add_index(:sidebar_sections, :section_type, {:unique=>true})
   -> 0.0022s
== 20230411031520 AddSectionTypeToSidebarSections: migrated (0.0041s) =========

== 20230411032053 InsertCommunityToSidebarSections: migrating =================
== 20230411032053 InsertCommunityToSidebarSections: migrated (0.0030s) ========

== 20230413121500 AddDiscourseConnectAllowedRedirectDomainsToSiteSettings: migrating
-- execute("INSERT INTO site_settings(name, data_type, value, created_at, updated_at)\nSELECT 'discourse_connect_allowed_redirect_domains', 8, '*', created_at, NOW()\nFROM site_settings\nWHERE name = 'discourse_connect_allows_all_return_paths' AND value = 't'\n")
   -> 0.0006s
-- execute("DELETE FROM site_settings\nWHERE name = 'discourse_connect_allows_all_return_paths'\n")
   -> 0.0002s
== 20230413121500 AddDiscourseConnectAllowedRedirectDomainsToSiteSettings: migrated (0.0015s)

== 20230419001801 RemoveEnableCustomSidebarSectionsSetting: migrating =========
-- execute("DELETE FROM site_settings WHERE name = 'enable_custom_sidebar_sections'")
   -> 0.0002s
== 20230419001801 RemoveEnableCustomSidebarSectionsSetting: migrated (0.0009s)

== 20230501022508 RenameNotifyAboutFlagsAfterSiteSetting: migrating ===========
-- execute("UPDATE site_settings SET name = 'notify_about_reviewable_item_after' WHERE name = 'notify_about_flags_after'")
   -> 0.0004s
== 20230501022508 RenameNotifyAboutFlagsAfterSiteSetting: migrated (0.0010s) ==

== 20230505113906 HideUserTipsForExistingUsers: migrating =====================
-- execute("UPDATE user_options SET seen_popups = '{1, 2, 3, 4, 5}'")
   -> 0.0008s
== 20230505113906 HideUserTipsForExistingUsers: migrated (0.0014s) ============

== 20230509214723 SeparateTrustedUsersCanEditOthersSiteSetting: migrating =====
-- select_value("SELECT 1 FROM site_settings WHERE name = 'trusted_users_can_edit_others' AND value = 'f'")
   -> 0.0004s
== 20230509214723 SeparateTrustedUsersCanEditOthersSiteSetting: migrated (0.0008s)

== 20230510142249 AddUserChatThreadMemberships: migrating =====================
-- create_table(:user_chat_thread_memberships)
   -> 0.0058s
-- add_index(:user_chat_thread_memberships, [:user_id, :thread_id], {:unique=>true, :name=>"user_chat_thread_unique_memberships"})
   -> 0.0025s
== 20230510142249 AddUserChatThreadMemberships: migrated (0.0096s) ============

== 20230523073109 DeleteOldPersonalMessageSettings: migrating =================
-- execute("DELETE FROM site_settings WHERE name = 'enable_personal_messages'\n")
   -> 0.0003s
-- execute("DELETE FROM site_settings WHERE name = 'min_trust_to_send_messages'\n")
   -> 0.0003s
== 20230523073109 DeleteOldPersonalMessageSettings: migrated (0.0016s) ========

== 20230528134326 EnableExperimentalHashtagAutocompleteTrueForAllSites: migrating
== 20230528134326 EnableExperimentalHashtagAutocompleteTrueForAllSites: migrated (0.0013s)

== 20230602034711 RenameEverythingToTopicsLink: migrating =====================
== 20230602034711 RenameEverythingToTopicsLink: migrated (0.0012s) ============

== 20230607091233 BackfillThreadMemberships: migrating ========================
-- execute("INSERT INTO user_chat_thread_memberships(\n  user_id,\n  thread_id,\n  notification_level,\n  last_read_message_id,\n  created_at,\n  updated_at\n)\nSELECT\n  thread_participant_stats.user_id,\n  thread_participant_stats.thread_id,\n  2,\n  (\n    SELECT id FROM chat_messages\n    WHERE thread_id = thread_participant_stats.thread_id\n    AND deleted_at IS NULL\n    ORDER BY created_at DESC, id DESC\n    LIMIT 1\n  ),\n  NOW(),\n  NOW()\nFROM (\n  SELECT chat_messages.thread_id, chat_messages.user_id\n  FROM chat_messages\n  INNER JOIN chat_threads ON chat_threads.id = chat_messages.thread_id\n  WHERE chat_messages.thread_id IS NOT NULL\n  GROUP BY chat_messages.thread_id, chat_messages.user_id\n  ORDER BY chat_messages.thread_id ASC, chat_messages.user_id ASC\n) AS thread_participant_stats\nINNER JOIN users ON users.id = thread_participant_stats.user_id\nLEFT JOIN user_chat_thread_memberships ON user_chat_thread_memberships.thread_id = thread_participant_stats.thread_id\n  AND user_chat_thread_memberships.user_id = thread_participant_stats.user_id\nWHERE user_chat_thread_memberships IS NULL\nORDER BY user_chat_thread_memberships.thread_id ASC\nON CONFLICT DO NOTHING;\n")
   -> 0.0012s
== 20230607091233 BackfillThreadMemberships: migrated (0.0018s) ===============

== 20230608163854 CreateSummarySectionsTable: migrating =======================
-- create_table(:summary_sections)
   -> 0.0060s
== 20230608163854 CreateSummarySectionsTable: migrated (0.0068s) ==============

== 20230612134421 RemoveOldPollsDataFromCustomFields: migrating ===============
-- execute("DELETE FROM post_custom_fields\nWHERE name LIKE 'polls%'\n")
   -> 0.0004s
== 20230612134421 RemoveOldPollsDataFromCustomFields: migrated (0.0011s) ======

== 20230614011312 RenameDefaultSidebarCategoriesSetting: migrating ============
-- execute("UPDATE site_settings SET name = 'default_navigation_menu_categories' WHERE name = 'default_sidebar_categories'")
   -> 0.0004s
== 20230614011312 RenameDefaultSidebarCategoriesSetting: migrated (0.0009s) ===

== 20230614011419 RenameDefaultSidebarTagsSetting: migrating ==================
-- execute("UPDATE site_settings SET name = 'default_navigation_menu_tags' WHERE name = 'default_sidebar_tags'")
   -> 0.0007s
== 20230614011419 RenameDefaultSidebarTagsSetting: migrated (0.0015s) =========

== 20230614041219 DeleteDuplicatePollVotes: migrating =========================
-- execute("DELETE FROM poll_votes\nWHERE (poll_id, user_id, poll_option_id) IN (\n  SELECT pv.poll_id, pv.user_id, pv.poll_option_id\n  FROM poll_votes pv\n  JOIN polls p ON pv.poll_id = p.id\n  WHERE p.type = 0\n  AND EXISTS (\n    SELECT 1\n    FROM poll_votes pv2\n    WHERE pv.poll_id = pv2.poll_id\n    AND pv.user_id = pv2.user_id\n    AND pv.created_at < pv2.created_at\n  )\n);\n")
   -> 0.0019s
== 20230614041219 DeleteDuplicatePollVotes: migrated (0.0025s) ================

== 20230618041001 AddSidebarLinkToFilteredListToUserOption: migrating =========
-- add_column(:user_options, :sidebar_link_to_filtered_list, :boolean, {:default=>false, :null=>false})
   -> 0.0012s
-- execute("UPDATE user_options\nSET sidebar_link_to_filtered_list = true\nWHERE sidebar_list_destination = 1\n")
   -> 0.0003s
== 20230618041001 AddSidebarLinkToFilteredListToUserOption: migrated (0.0020s)

== 20230618041123 AddSidebarShowCountOfNewItemsToUserOption: migrating ========
-- add_column(:user_options, :sidebar_show_count_of_new_items, :boolean, {:default=>false, :null=>false})
   -> 0.0006s
-- execute("UPDATE user_options\nSET sidebar_show_count_of_new_items = true\nWHERE sidebar_list_destination = 1\n")
   -> 0.0002s
== 20230618041123 AddSidebarShowCountOfNewItemsToUserOption: migrated (0.0012s)

== 20230620050614 RemoveDefaultSidebarListDestinationSetting: migrating =======
-- execute("DELETE FROM site_settings WHERE name = 'default_sidebar_list_destination'")
   -> 0.0003s
== 20230620050614 RemoveDefaultSidebarListDestinationSetting: migrated (0.0010s)

== 20230627044755 AddLastViewedAtToUserChatChannelMemberships: migrating ======
-- add_column(:user_chat_channel_memberships, :last_viewed_at, :datetime, {:null=>false, :default=>#<Proc:0x00007f9766287f58 /var/www/discourse/plugins/chat/db/migrate/20230627044755_add_last_viewed_at_to_user_chat_channel_memberships.rb:9 (lambda)>})
   -> 0.0009s
== 20230627044755 AddLastViewedAtToUserChatChannelMemberships: migrated (0.0016s)

== 20230627060104 RemoveNewEditSidebarCategoriesTagsInterfaceGroupsSiteSetting: migrating
-- execute("DELETE FROM site_settings WHERE name = 'new_edit_sidebar_categories_tags_interface_groups'")
   -> 0.0004s
== 20230627060104 RemoveNewEditSidebarCategoriesTagsInterfaceGroupsSiteSetting: migrated (0.0016s)

== 20230628062236 AddWatchedPrecedenceOverMutedToUserOptions: migrating =======
-- add_column(:user_options, :watched_precedence_over_muted, :boolean)
   -> 0.0008s
== 20230628062236 AddWatchedPrecedenceOverMutedToUserOptions: migrated (0.0017s)

== 20230703035052 AddStatusToTranslationOverrides: migrating ==================
-- add_column(:translation_overrides, :original_translation, :text)
   -> 0.0009s
-- add_column(:translation_overrides, :status, :integer, {:null=>false, :default=>0})
   -> 0.0007s
== 20230703035052 AddStatusToTranslationOverrides: migrated (0.0021s) =========

== 20230707025733 AddLastMessageIdToChannelAndThread: migrating ===============
-- add_column(:chat_channels, :last_message_id, :bigint, {:null=>true})
   -> 0.0006s
-- add_column(:chat_threads, :last_message_id, :bigint, {:null=>true})
   -> 0.0003s
-- add_index(:chat_channels, :last_message_id)
   -> 0.0023s
-- add_index(:chat_threads, :last_message_id)
   -> 0.0018s
== 20230707025733 AddLastMessageIdToChannelAndThread: migrated (0.0058s) ======

== 20230707031122 AddWatchedPrecedenceOverMutedIndexToUserOptions: migrating ==
-- add_index(:user_options, :watched_precedence_over_muted)
   -> 0.0028s
== 20230707031122 AddWatchedPrecedenceOverMutedIndexToUserOptions: migrated (0.0032s)

== 20230707082645 BackfillChatChannelAndThreadLastMessageIds: migrating =======
-- execute("      UPDATE chat_channels\n      SET last_message_id = (\n        SELECT cm.id\n        FROM chat_messages cm\n        LEFT JOIN chat_threads ON chat_threads.original_message_id = cm.id\n        WHERE cm.chat_channel_id = chat_channels.id\n          AND cm.deleted_at IS NULL\n          AND (cm.thread_id IS NULL OR chat_threads.id IS NOT NULL)\n        ORDER BY cm.created_at DESC, cm.id DESC\n        LIMIT 1\n      );\n")
   -> 0.0009s
-- execute("      UPDATE chat_threads\n      SET last_message_id = (\n        SELECT cm.id\n        FROM chat_messages cm\n        WHERE cm.thread_id = chat_threads.id\n          AND cm.deleted_at IS NULL\n        ORDER BY cm.created_at DESC, cm.id DESC\n        LIMIT 1\n      );\n")
   -> 0.0003s
== 20230707082645 BackfillChatChannelAndThreadLastMessageIds: migrated (0.0017s)

== 20230708011310 FixReviewableQueuedPostsTargetCreatedById: migrating ========
-- execute("UPDATE reviewables\nSET target_created_by_id = created_by_id,\n    created_by_id = -1\nWHERE type = 'ReviewableQueuedPost' AND target_created_by_id IS NULL\n")
   -> 0.0004s
== 20230708011310 FixReviewableQueuedPostsTargetCreatedById: migrated (0.0008s)

-- execute("    UPDATE chat_channels\n    SET last_message_id = (\n      SELECT cm.id\n      FROM chat_messages cm\n      LEFT JOIN chat_threads ON chat_threads.original_message_id = cm.id\n      WHERE cm.chat_channel_id = chat_channels.id\n        AND cm.deleted_at IS NULL\n        AND (cm.thread_id IS NULL OR chat_threads.id IS NOT NULL)\n      ORDER BY cm.created_at DESC, cm.id DESC\n      LIMIT 1\n    );\n")
   -> 0.0007s
-- execute("    UPDATE chat_threads\n    SET last_message_id = (\n      SELECT cm.id\n      FROM chat_messages cm\n      WHERE cm.thread_id = chat_threads.id\n        AND cm.deleted_at IS NULL\n      ORDER BY cm.created_at DESC, cm.id DESC\n      LIMIT 1\n    );\n")
   -> 0.0005s
== 20230710040640 BackfillChatChannelAndThreadLastMessageIdsPostMigrate: migrating
== 20230710040640 BackfillChatChannelAndThreadLastMessageIdsPostMigrate: migrated (0.0007s)

== 20230712011946 AddTopicIdNotificationLevelIndexToTopicUsers: migrating =====
-- add_index(:topic_users, [:topic_id, :notification_level])
   -> 0.0027s
== 20230712011946 AddTopicIdNotificationLevelIndexToTopicUsers: migrated (0.0036s)

== 20230712013248 AddCategoryIdNotificationLevelIndexToCategoryUsers: migrating
-- add_index(:category_users, [:category_id, :notification_level])
   -> 0.0028s
== 20230712013248 AddCategoryIdNotificationLevelIndexToCategoryUsers: migrated (0.0037s)

== 20230721025249 RemoveExperimentalSiteSettingForThreads: migrating ==========
-- execute("DELETE FROM site_settings WHERE name='enable_experimental_chat_threaded_discussions'")
   -> 0.0002s
== 20230721025249 RemoveExperimentalSiteSettingForThreads: migrated (0.0009s) =

== 20230722124044 AddChatSeparateSidebarModeUserOption: migrating =============
-- add_column(:user_options, :chat_separate_sidebar_mode, :integer, {:default=>0, :null=>false})
   -> 0.0012s
== 20230722124044 AddChatSeparateSidebarModeUserOption: migrated (0.0017s) ====

== 20230727015030 AddIndexTopicIdCreatedAtOnPosts: migrating ==================
-- remove_index(:posts, [:topic_id, :created_at], {:algorithm=>:concurrently, :if_exists=>true})
   -> 0.0088s
-- add_index(:posts, [:topic_id, :created_at], {:algorithm=>:concurrently})
   -> 0.0035s
== 20230727015030 AddIndexTopicIdCreatedAtOnPosts: migrated (0.0135s) =========

== 20230727015254 ChangeCategorySettingNumAutoBumpDailyDefault: migrating =====
-- change_column_default(:category_settings, :num_auto_bump_daily, 0)
   -> 0.0028s
-- execute("WITH custom_fields AS (\n  SELECT\n    category_id,\n    MAX(\n      CASE WHEN (name = 'require_topic_approval')\n      THEN NULLIF(value, '') ELSE NULL END\n    )::boolean AS require_topic_approval,\n    MAX(\n      CASE WHEN (name = 'require_reply_approval')\n      THEN NULLIF(value, '') ELSE NULL END\n    )::boolean AS require_reply_approval,\n    MAX(\n      CASE WHEN (name = 'num_auto_bump_daily')\n      THEN NULLIF(value, '') ELSE NULL END\n    )::integer AS num_auto_bump_daily,\n    NOW() AS created_at,\n    NOW() AS updated_at\n  FROM category_custom_fields\n  WHERE name IN (\n    'require_topic_approval',\n    'require_reply_approval',\n    'num_auto_bump_daily'\n  )\n  GROUP BY category_id\n)\nINSERT INTO\n  category_settings(\n    category_id,\n    require_topic_approval,\n    require_reply_approval,\n    num_auto_bump_daily,\n    created_at,\n    updated_at\n  )\nSELECT * FROM custom_fields\nON CONFLICT (category_id) DO\nUPDATE SET\n  require_topic_approval = EXCLUDED.require_topic_approval,\n  require_reply_approval = EXCLUDED.require_reply_approval,\n  num_auto_bump_daily = EXCLUDED.num_auto_bump_daily,\n  updated_at = NOW()\n")
   -> 0.0008s
-- execute("UPDATE category_settings\nSET num_auto_bump_daily = 0\nWHERE num_auto_bump_daily IS NULL;\n")
   -> 0.0004s
== 20230727015254 ChangeCategorySettingNumAutoBumpDailyDefault: migrated (0.0049s)

== 20230728055813 DeleteOrphanedDraftUploadReferences: migrating ==============
-- execute("DELETE\nFROM\n  \"upload_references\"\nWHERE\n  \"upload_references\".\"target_type\" = 'Draft' AND\n  \"upload_references\".\"target_id\" NOT IN (\n    SELECT \"drafts\".\"id\" FROM \"drafts\"\n  )\n")
   -> 0.0005s
== 20230728055813 DeleteOrphanedDraftUploadReferences: migrated (0.0010s) =====

== 20230807033021 AddGroupToWebHookEventType: migrating =======================
-- add_column(:web_hook_event_types, :group, :integer)
   -> 0.0005s
== 20230807033021 AddGroupToWebHookEventType: migrated (0.0010s) ==============

== 20230807040058 MoveWebHooksToNewEventIds: migrating ========================
-- execute("INSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 101, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 1;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 102, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 1;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 103, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 1;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 104, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 1;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 105, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 1;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 201, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 2;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 202, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 2;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 203, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 2;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 204, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 2;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 301, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 302, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 303, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 304, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 305, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 306, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 307, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 308, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 309, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 3;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 401, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 4;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 402, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 4;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 403, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 4;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 501, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 5;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 502, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 5;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 503, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 5;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 601, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 6;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 602, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 6;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 603, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 6;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 901, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 9;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 902, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 9;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1001, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 10;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1101, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 11;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1102, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 11;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1201, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 12;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1202, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 12;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1301, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 13;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1302, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 13;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1401, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 14;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1402, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 14;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1501, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 15;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1601, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 16;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1701, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 17;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1702, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 17;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1801, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 18;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1802, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 18;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1803, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 18;\n\nINSERT INTO web_hook_event_types_hooks(web_hook_event_type_id, web_hook_id)\nSELECT 1804, web_hook_id FROM web_hook_event_types_hooks WHERE web_hook_event_types_hooks.web_hook_event_type_id = 18;\n\nDELETE FROM web_hook_event_types WHERE id < 100;\n")
   -> 0.0023s
== 20230807040058 MoveWebHooksToNewEventIds: migrated (0.0031s) ===============

== 20230816211907 IncreaseSizeOfSidebarUrls: migrating ========================
-- change_column(:sidebar_urls, :value, :string, {:limit=>1000})
   -> 0.0044s
== 20230816211907 IncreaseSizeOfSidebarUrls: migrated (0.0050s) ===============

== 20230817174049 EnsureJavascriptCacheIsUniquePerTheme: migrating ============
-- remove_index(:javascript_caches, :theme_id)
   -> 0.0045s
-- add_index(:javascript_caches, :theme_id, {:unique=>true})
   -> 0.0016s
-- remove_index(:javascript_caches, :theme_field_id)
   -> 0.0037s
-- add_index(:javascript_caches, :theme_field_id, {:unique=>true})
   -> 0.0025s
== 20230817174049 EnsureJavascriptCacheIsUniquePerTheme: migrated (0.0135s) ===

== 20230823095931 AddLimitToUserSecondFactorName: migrating ===================
-- execute("UPDATE user_second_factors\nSET name = LEFT(name, 300)\nWHERE name IS NOT NULL AND LENGTH(name) > 300\n")
   -> 0.0004s
-- change_column(:user_second_factors, :name, :string, {:limit=>300})
   -> 0.0109s
== 20230823095931 AddLimitToUserSecondFactorName: migrated (0.0126s) ==========

== 20230823100627 AddLimitToUserSecurityKeyName: migrating ====================
-- execute("UPDATE user_security_keys\nSET name = LEFT(name, 300)\nWHERE name IS NOT NULL AND LENGTH(name) > 300\n")
   -> 0.0010s
-- change_column(:user_security_keys, :name, :string, {:limit=>300})
   -> 0.0162s
== 20230823100627 AddLimitToUserSecurityKeyName: migrated (0.0180s) ===========

== 20230831153649 DeleteUnusedSiteSettings: migrating =========================
-- execute("DELETE\nFROM\n  \"site_settings\"\nWHERE\n  \"name\" IN (\n    'rate_limit_new_user_create_topic',\n    'enable_system_avatars',\n    'check_for_new_features',\n    'allow_user_api_keys'\n  )\n")
   -> 0.0003s
== 20230831153649 DeleteUnusedSiteSettings: migrated (0.0008s) ================

== 20230906030920 ChangeAutoSilenceFastTypersSettingToEnumType: migrating =====
-- execute("UPDATE\n  \"site_settings\"\nSET\n  \"data_type\" = 7\nWHERE\n  \"name\" = 'auto_silence_fast_typers_max_trust_level' AND\n  \"data_type\" = 3\n")
   -> 0.0002s
== 20230906030920 ChangeAutoSilenceFastTypersSettingToEnumType: migrated (0.0005s)

== 20230907225057 CreateThemeSettingsMigrations: migrating ====================
-- create_table(:theme_settings_migrations)
   -> 0.0077s
-- add_index(:theme_settings_migrations, [:theme_id, :version], {:unique=>true})
   -> 0.0014s
-- add_index(:theme_settings_migrations, :theme_field_id, {:unique=>true})
   -> 0.0018s
== 20230907225057 CreateThemeSettingsMigrations: migrated (0.0117s) ===========

== 20230910021213 UpdateCategorySettingApprovalValues: migrating ==============
-- change_column_default(:category_settings, :require_topic_approval, false)
   -> 0.0026s
-- change_column_default(:category_settings, :require_reply_approval, false)
   -> 0.0025s
-- execute("WITH custom_fields AS (\n  SELECT\n    category_id,\n    MAX(\n      CASE WHEN (name = 'require_topic_approval')\n      THEN NULLIF(value, '') ELSE NULL END\n    )::boolean AS require_topic_approval,\n    MAX(\n      CASE WHEN (name = 'require_reply_approval')\n      THEN NULLIF(value, '') ELSE NULL END\n    )::boolean AS require_reply_approval,\n    NOW() AS created_at,\n    NOW() AS updated_at\n  FROM category_custom_fields\n  WHERE name IN (\n    'require_topic_approval',\n    'require_reply_approval'\n  )\n  GROUP BY category_id\n)\nINSERT INTO\n  category_settings(\n    category_id,\n    require_topic_approval,\n    require_reply_approval,\n    created_at,\n    updated_at\n  )\nSELECT * FROM custom_fields\nON CONFLICT (category_id) DO\nUPDATE SET\n  require_topic_approval = EXCLUDED.require_topic_approval,\n  require_reply_approval = EXCLUDED.require_reply_approval,\n  updated_at = NOW()\n")
   -> 0.0007s
-- execute("UPDATE category_settings\nSET require_topic_approval = false\nWHERE require_topic_approval IS NULL;\n")
   -> 0.0003s
-- execute("UPDATE category_settings\nSET require_reply_approval = false\nWHERE require_reply_approval IS NULL;\n")
   -> 0.0002s
== 20230910021213 UpdateCategorySettingApprovalValues: migrated (0.0072s) =====

== 20230913194832 RenameRevokeApiKeysSettings: migrating ======================
-- execute("UPDATE site_settings SET name = 'revoke_api_keys_unused_days' where name = 'revoke_api_keys_days'")
   -> 0.0003s
-- execute("UPDATE site_settings SET name = 'revoke_user_api_keys_unused_days' where name = 'expire_user_api_keys_days'")
   -> 0.0003s
== 20230913194832 RenameRevokeApiKeysSettings: migrated (0.0011s) =============

== 20230926165821 DropPostUploadsTable: migrating =============================
== 20230926165821 DropPostUploadsTable: migrated (0.0023s) ====================

== 20231004020328 MigrateLegacyNavigationMenuSiteSetting: migrating ===========
-- execute("UPDATE site_settings SET value = 'header dropdown' WHERE name = 'navigation_menu' AND value = 'legacy'")
   -> 0.0004s
== 20231004020328 MigrateLegacyNavigationMenuSiteSetting: migrated (0.0010s) ==

== 20231006160650 AddGroupFieldToDirectMessageChannels: migrating =============
-- add_column(:direct_message_channels, :group, :boolean, {:default=>false, :null=>false})
   -> 0.0006s
== 20231006160650 AddGroupFieldToDirectMessageChannels: migrated (0.0011s) ====

== 20231006161051 SetMultiusersDirectMessageChannelsAsGroup: migrating ========
-- execute("      UPDATE direct_message_channels\n      SET \"group\" = true\n      WHERE id IN (\n        SELECT direct_message_channel_id\n        FROM direct_message_users\n        GROUP BY direct_message_channel_id\n        HAVING COUNT(user_id) > 2\n      );\n")
   -> 0.0009s
== 20231006161051 SetMultiusersDirectMessageChannelsAsGroup: migrated (0.0018s)

== 20231017044708 RemoveEnableExperimentalHashtagAutocompleteSetting: migrating
-- execute("DELETE FROM site_settings\nWHERE name = 'enable_experimental_hashtag_autocomplete'\n")
   -> 0.0003s
== 20231017044708 RemoveEnableExperimentalHashtagAutocompleteSetting: migrated (0.0008s)

== 20231018225833 AddDarkModeBackgroundToCategories: migrating ================
-- add_column(:categories, :uploaded_background_dark_id, :integer, {:index=>true})
   -> 0.0010s
== 20231018225833 AddDarkModeBackgroundToCategories: migrated (0.0021s) =======

== 20231024034031 MigrateTlToGroupSettingsAnonymousPostingMinTl: migrating ====
== 20231024034031 MigrateTlToGroupSettingsAnonymousPostingMinTl: migrated (0.0011s)

== 20231103060018 FixInvalidTopicUserBookmarkedData: migrating ================
== 20231103060018 FixInvalidTopicUserBookmarkedData: migrated (0.0021s) =======

== 20231107014123 MigrateSharedDraftsMinTrustLevelToGroup: migrating ==========
== 20231107014123 MigrateSharedDraftsMinTrustLevelToGroup: migrated (0.0007s) =

== 20231107055903 MigrateMinTrustLevelForHereMentionToGroup: migrating ========
== 20231107055903 MigrateMinTrustLevelForHereMentionToGroup: migrated (0.0007s)

== 20231110214451 AddsThreadIdToChatDrafts: migrating =========================
-- add_column(:chat_drafts, :thread_id, :bigint)
   -> 0.0005s
== 20231110214451 AddsThreadIdToChatDrafts: migrated (0.0012s) ================

== 20231111201253 RenameExperimentalPasskeysSiteSetting: migrating ============
-- execute("UPDATE site_settings SET name = 'enable_passkeys' WHERE name = 'experimental_passkeys'")
   -> 0.0003s
== 20231111201253 RenameExperimentalPasskeysSiteSetting: migrated (0.0008s) ===

== 20231117182638 FillApproveUnlessAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231117182638 FillApproveUnlessAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0007s)

== 20231120190818 TriggerPostRebakeCategoryStyleQuotes: migrating =============
== 20231120190818 TriggerPostRebakeCategoryStyleQuotes: migrated (0.0013s) ====

== 20231122043756 IncreaseSizeOfTagDescriptions: migrating ====================
-- change_column(:tags, :description, :string, {:limit=>1000})
   -> 0.0092s
== 20231122043756 IncreaseSizeOfTagDescriptions: migrated (0.0102s) ===========

== 20231122152552 FillNewTopicsUnlessAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231122152552 FillNewTopicsUnlessAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0013s)

== 20231122212122 FillEmailInAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231122212122 FillEmailInAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0011s)

== 20231127165331 TriggerAutoLinkingForVideosSincePlaceholder: migrating ======
== 20231127165331 TriggerAutoLinkingForVideosSincePlaceholder: migrated (0.0011s)

== 20231205013029 FillUploadedAvatarsAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231205013029 FillUploadedAvatarsAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0009s)

== 20231206041353 FillCreateTopicAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231206041353 FillCreateTopicAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0011s)

== 20231207011238 FillEditWikiPostAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231207011238 FillEditWikiPostAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0010s)

== 20231207135641 AddUserChatThreadMembershipsOnThreadIdUserIdIndex: migrating
-- execute("DROP INDEX CONCURRENTLY IF EXISTS idx_user_chat_thread_memberships_on_thread_id_user_id\n")
   -> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY idx_user_chat_thread_memberships_on_thread_id_user_id\nON user_chat_thread_memberships (thread_id, user_id);\n")
   -> 0.0029s
== 20231207135641 AddUserChatThreadMembershipsOnThreadIdUserIdIndex: migrated (0.0049s)

== 20231212044856 FillEditPostAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231212044856 FillEditPostAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0010s)

== 20231213060822 FillFlagPostAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231213060822 FillFlagPostAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0007s)

== 20231213103248 FillDeleteAllPostsAndTopicsAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231213103248 FillDeleteAllPostsAndTopicsAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0011s)

== 20231214020814 FillUserCardBackgroundAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231214020814 FillUserCardBackgroundAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0008s)

== 20231214023728 FillInviteAllowedGroupsBasedOnDeprecatedSettings: migrating =
== 20231214023728 FillInviteAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0007s)

== 20231214031754 FillIgnoreAllowedGroupsBasedOnDeprecatedSettings: migrating =
== 20231214031754 FillIgnoreAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0009s)

== 20231214061615 FillCreateTagAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231214061615 FillCreateTagAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0005s)

== 20231214180000 AddChatMentionNotifications: migrating ======================
-- create_table(:chat_mention_notifications, {:id=>false})
   -> 0.0009s
-- add_index(:chat_mention_notifications, [:chat_mention_id])
   -> 0.0026s
-- add_index(:chat_mention_notifications, [:notification_id], {:unique=>true})
   -> 0.0016s
== 20231214180000 AddChatMentionNotifications: migrated (0.0062s) =============

== 20231214180001 UpdateRelationshipBetweenChatMentionsAndNotifications: migrating
== 20231214180001 UpdateRelationshipBetweenChatMentionsAndNotifications: migrated (0.0014s)

== 20231214180002 UpdateRelationshipBetweenChatMentionsAndNotificationsPostMigrate: migrating
== 20231214180002 UpdateRelationshipBetweenChatMentionsAndNotificationsPostMigrate: migrated (0.0013s)

== 20231218081901 FillSendEmailMessagesAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231218081901 FillSendEmailMessagesAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0014s)

== 20231222030024 FillSelfWikiAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20231222030024 FillSelfWikiAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0012s)

== 20231227160001 AddTypeAndTargetIdToChatMentions: migrating =================
-- add_column(:chat_mentions, :type, :string, {:null=>true})
   -> 0.0025s
-- add_column(:chat_mentions, :target_id, :integer, {:null=>true})
   -> 0.0007s
-- change_column_null(:chat_mentions, :user_id, true)
   -> 0.0006s
== 20231227160001 AddTypeAndTargetIdToChatMentions: migrated (0.0053s) ========

== 20231227160002 SetTypeAndTargetIdOnChatMentions: migrating =================
== 20231227160002 SetTypeAndTargetIdOnChatMentions: migrated (0.0016s) ========

== 20231227160003 AddAndRemoveIndexesOnChatMentions: migrating ================
-- remove_index(:chat_mentions, {:name=>:chat_mentions_index, :algorithm=>:concurrently, :if_exists=>true})
   -> 0.0054s
-- add_index(:chat_mentions, [:chat_message_id], {:algorithm=>:concurrently})
   -> 0.0028s
-- add_index(:chat_mentions, [:target_id], {:algorithm=>:concurrently})
   -> 0.0013s
== 20231227160003 AddAndRemoveIndexesOnChatMentions: migrated (0.0106s) =======

== 20231227160004 SetTypeAndTargetIdOnChatMentionsPostMigrate: migrating ======
== 20231227160004 SetTypeAndTargetIdOnChatMentionsPostMigrate: migrated (0.0013s)

== 20231227160005 MakeTypeOnChatMentionsNonNullable: migrating ================
-- change_column_null(:chat_mentions, :type, false)
   -> 0.0006s
== 20231227160005 MakeTypeOnChatMentionsNonNullable: migrated (0.0011s) =======

== 20240104155715 AddEmbedContentCacheToTopicEmbed: migrating =================
-- add_column(:topic_embeds, :embed_content_cache, :text)
   -> 0.0007s
== 20240104155715 AddEmbedContentCacheToTopicEmbed: migrated (0.0012s) ========

== 20240108022138 ChangeEnableAdminSidebarToGroupPostMigration: migrating =====
== 20240108022138 ChangeEnableAdminSidebarToGroupPostMigration: migrated (0.0012s)

== 20240110040813 FillSkipReviewMediaGroupsBasedOnDeprecatedSetting: migrating
== 20240110040813 FillSkipReviewMediaGroupsBasedOnDeprecatedSetting: migrated (0.0014s)

== 20240112021335 SetMaxCleanOrphanUploadsGracePeriodHours: migrating =========
== 20240112021335 SetMaxCleanOrphanUploadsGracePeriodHours: migrated (0.0010s)

== 20240112043325 FillEmbeddedMediaPostAllowedGroupsBasedOnDeprecatedSetting: migrating
== 20240112043325 FillEmbeddedMediaPostAllowedGroupsBasedOnDeprecatedSetting: migrated (0.0016s)

== 20240112073149 FillTagTopicAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20240112073149 FillTagTopicAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0014s)

== 20240116043702 CreateTopicHotScores: migrating =============================
-- create_table(:topic_hot_scores)
   -> 0.0049s
-- add_index(:topic_hot_scores, :topic_id, {:unique=>true})
   -> 0.0015s
-- add_index(:topic_hot_scores, [:score, :topic_id], {:unique=>true})
   -> 0.0012s
== 20240116043702 CreateTopicHotScores: migrated (0.0085s) ====================

== 20240116182229 MigrateLazyLoadCategoriesToGroups: migrating ================
-- execute("UPDATE site_settings\nSET name = 'lazy_load_categories_groups', data_type = 20, value = '0'\nWHERE name = 'lazy_load_categories' AND value = 't'\n")
   -> 0.0003s
-- execute("UPDATE site_settings\nSET name = 'lazy_load_categories_groups', data_type = 20, value = ''\nWHERE name = 'lazy_load_categories' AND value = 'f'\n")
   -> 0.0004s
== 20240116182229 MigrateLazyLoadCategoriesToGroups: migrated (0.0015s) =======

== 20240117090801 FillPostLinksAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20240117090801 FillPostLinksAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0009s)

== 20240117093148 FillUserApiKeyAllowedGroupsBasedOnDeprecatedSettings: migrating
== 20240117093148 FillUserApiKeyAllowedGroupsBasedOnDeprecatedSettings: migrated (0.0011s)

== 20240118120825 AddThreadsEnabledSiteSetting: migrating =====================
== 20240118120825 AddThreadsEnabledSiteSetting: migrated (0.0075s) ============

== 20240122015626 FillPollCreateAllowedGroupsBasedOnDeprecatedSetting: migrating
== 20240122015626 FillPollCreateAllowedGroupsBasedOnDeprecatedSetting: migrated (0.0012s)

== 20240122015630 FillStyleguideAdminOnlyGroups: migrating ====================
== 20240122015630 FillStyleguideAdminOnlyGroups: migrated (0.0011s) ===========

== 20240201170412 FixTagTopicAllowedGroupsSetting: migrating ==================
== 20240201170412 FixTagTopicAllowedGroupsSetting: migrated (0.0018s) =========

== 20240202032242 AddJsonValueToThemeSettings: migrating ======================
-- add_column(:theme_settings, :json_value, :jsonb)
   -> 0.0006s
== 20240202032242 AddJsonValueToThemeSettings: migrated (0.0013s) =============

== 20240202052058 DropBadgeImageColumn: migrating =============================
== 20240202052058 DropBadgeImageColumn: migrated (0.0035s) ====================

== 20240202204030 FixHereMentionAllowedGroupsSetting: migrating ===============
== 20240202204030 FixHereMentionAllowedGroupsSetting: migrated (0.0010s) ======

== 20240204204532 AddUserToPermalink: migrating ===============================
-- add_column(:permalinks, :user_id, :integer)
   -> 0.0004s
== 20240204204532 AddUserToPermalink: migrated (0.0009s) ======================

== 20240212034010 DropDeprecatedColumns: migrating ============================
== 20240212034010 DropDeprecatedColumns: migrated (0.0305s) ===================

== 20240213175713 AddStreamingToMessage: migrating ============================
-- add_column(:chat_messages, :streaming, :boolean, {:null=>false, :default=>false})
   -> 0.0011s
== 20240213175713 AddStreamingToMessage: migrated (0.0016s) ===================

== 20240214135517 FixChatChannelSlugIndex: migrating ==========================
-- remove_index(:chat_channels, :slug)
   -> 0.0033s
-- add_index(:chat_channels, :slug, {:unique=>true, :where=>"slug != ''"})
   -> 0.0024s
== 20240214135517 FixChatChannelSlugIndex: migrated (0.0064s) =================

== 20240216073624 FillProfileBackgroundAllowedGroupsBasedOnDeprecatedSetting: migrating
== 20240216073624 FillProfileBackgroundAllowedGroupsBasedOnDeprecatedSetting: migrated (0.0011s)

== 20240219012001 RemoveEnableExperimentalAdminUiGroupsSiteSettings: migrating
-- execute("DELETE FROM site_settings WHERE name = 'enable_experimental_admin_ui_groups'")
   -> 0.0003s
== 20240219012001 RemoveEnableExperimentalAdminUiGroupsSiteSettings: migrated (0.0009s)

== 20240223052820 CreateProblemCheckTrackers: migrating =======================
-- create_table(:problem_check_trackers)
   -> 0.0089s
== 20240223052820 CreateProblemCheckTrackers: migrated (0.0096s) ==============

== 20240301033753 DeleteOldBookmarkReminderSetting: migrating =================
== 20240301033753 DeleteOldBookmarkReminderSetting: migrated (0.0010s) ========

== 20240301100413 AddForceToThreads: migrating ================================
-- add_column(:chat_threads, :force, :boolean, {:null=>false, :default=>false})
   -> 0.0008s
== 20240301100413 AddForceToThreads: migrated (0.0013s) =======================

== 20240304030429 TopicIdOnIncomingEmailIndex: migrating ======================
-- remove_index(:incoming_emails, :topic_id, {:if_exists=>true})
   -> 0.0035s
-- add_index(:incoming_emails, :topic_id, {:algorithm=>:concurrently})
   -> 0.0029s
== 20240304030429 TopicIdOnIncomingEmailIndex: migrated (0.0075s) =============

== 20240306063428 AddIndexesToNotifications: migrating ========================
-- execute("DROP INDEX IF EXISTS index_notifications_user_menu_ordering\n")
   -> 0.0002s
-- execute("CREATE INDEX CONCURRENTLY index_notifications_user_menu_ordering\nON notifications (\n  user_id,\n  (high_priority AND NOT read) DESC,\n  (NOT read) DESC,\n  created_at DESC\n);\n")
   -> 0.0023s
-- execute("DROP INDEX IF EXISTS index_notifications_user_menu_ordering_deprioritized_likes\n")
   -> 0.0003s
-- execute("CREATE INDEX CONCURRENTLY index_notifications_user_menu_ordering_deprioritized_likes\nON notifications (\n  user_id,\n  (high_priority AND NOT read) DESC,\n  (NOT read AND notification_type NOT IN (5,19,25)) DESC,\n  created_at DESC\n);\n")
   -> 0.0033s
== 20240306063428 AddIndexesToNotifications: migrated (0.0070s) ===============

== 20240307231053 AddTopicsUnreadWhenClosedToUserOptions: migrating ===========
-- add_column(:user_options, :topics_unread_when_closed, :boolean, {:default=>true, :null=>false})
   -> 0.0012s
== 20240307231053 AddTopicsUnreadWhenClosedToUserOptions: migrated (0.0019s) ==


I, [2024-03-18T01:56:18.080423 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile'
Node.js heap_size_limit (2001.5) is less than 2048MB. Setting --max-old-space-size=2048.
Purging temp files
Bundling assets
#<Thread:0x00007ff2ebca4fc8 /var/www/discourse/lib/tasks/maxminddb.rake:62 run> terminated with exception (report_on_exception is true):
/var/www/discourse/lib/discourse_ip_info.rb:48:in `mmdb_download': undefined method `path' for nil:NilClass (NoMethodError)

    filename = File.basename(gz_file.path)
                                    ^^^^^
        from /var/www/discourse/lib/tasks/maxminddb.rake:67:in `block (3 levels) in <main>'
        from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `each'
        from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `block (2 levels) in <main>'
I, [2024-03-18T01:58:26.789734 #3552]  INFO -- : Writing /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
I, [2024-03-18T01:58:26.802091 #3552]  INFO -- : Writing /var/www/discourse/public/assets/service-worker-cbee332ef66ea57ab2c0f86b2fcd3b5d25b229a04c3b836147b3ca7b497e1f0c.js
I, [2024-03-18T01:58:26.807552 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js
I, [2024-03-18T01:58:26.812340 #3552]  INFO -- : Writing /var/www/discourse/public/assets/scripts/discourse-test-listen-boot-9b14a0fc65c689577e6a428dcfd680205516fe211700a71c7adb5cbcf4df2cc5.js
I, [2024-03-18T01:58:27.265673 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/ar-a5e6d8221e0c5853ea2a62a175c54e6d098486c150cf6453be91ea040c8591f9.js
I, [2024-03-18T01:58:27.468200 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/be-00eba0c19bdcded78f3a7f3f6388317d724658b52ebd85e0a3ff5f65a5e48474.js
I, [2024-03-18T01:58:27.748426 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/bg-9e244a2b8083166a53213cb4b0884bf4582a3a2a2bfd77036dc95678175f1f65.js
I, [2024-03-18T01:58:27.977356 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/bs_BA-552a3f3d8cd1f6de3b7719dfed72ed1435fcfe05ac06d92104d860cbc5b05832.js
I, [2024-03-18T01:58:28.196963 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/ca-8a4450df556437483d598e71e9d883977564fed7460fed54b682ce44a3313954.js
I, [2024-03-18T01:58:28.447192 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/cs-3376ace164d9c20dbfb8412b68388bc8141aced3f9b8d13d4febba889c89ca17.js
I, [2024-03-18T01:58:28.707526 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/da-ab402e31532d655dfb1438215f662f19d9c82f87b32c62b1cf4faadf51a06a42.js
I, [2024-03-18T01:58:29.016450 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/de-c9f9bce5f90cb3cd8d505e40df90dd86ac88e65cad187c5b180f57e61688a37c.js
I, [2024-03-18T01:58:29.277129 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/el-6fdf74265f14e76e822690d9467e01b7628388697ccbae617c52ee23c56ca9d6.js
I, [2024-03-18T01:58:29.438630 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/en-6f7c574fae7ea200176f1834334444448eabfb90d938e73e788daf75bd785faf.js
I, [2024-03-18T01:58:29.610407 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/en_GB-0dcdf1a2ab6a914a0de737d161e07bb42acd843830bba6c63e85fdc09d1af012.js
I, [2024-03-18T01:58:29.862007 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/es-f0360f0bbe813bbe8eb271e701a2afe60db254a37a8ec467093225c9e8a1ce78.js
I, [2024-03-18T01:58:30.080091 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/et-3c2ccf7bac78992cae2f375dee1a0438b19a92863b313ac53e10031b8c19336e.js
125:M 18 Mar 2024 01:58:30.089 * 100 changes in 300 seconds. Saving...
125:M 18 Mar 2024 01:58:30.092 * Background saving started by pid 3598
3598:C 18 Mar 2024 01:58:30.102 * DB saved on disk
3598:C 18 Mar 2024 01:58:30.103 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
125:M 18 Mar 2024 01:58:30.192 * Background saving terminated with success
I, [2024-03-18T01:58:30.335805 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/fa_IR-73c72ef64081ec0734971edae985938eca77928f950c856f32a347393acd1adf.js
I, [2024-03-18T01:58:30.577893 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/fi-efd692f35f52f8d7a4ccefc56bf14a74d985f4dbb5b4e7dbee958b36fc3e0e95.js
I, [2024-03-18T01:58:30.813819 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/fr-6d24926e4db49d9df13d8c8cb23f73175faf9e0a213526b7cd2dd82bc9ce38bf.js
I, [2024-03-18T01:58:31.030899 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/gl-701ceb500eef1000420b012a346d951771c6cd563b69a381d58f5739ef51a5db.js
I, [2024-03-18T01:58:31.330847 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/he-11547adf13f684a1c69b6091759c7cf194f30ee99a2786bbf42a637b6162a995.js
I, [2024-03-18T01:58:31.575791 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/hr-0cbdedef310b20ae472579023d8305a658892a69f832109232d2068e48acfcb3.js
I, [2024-03-18T01:58:31.803190 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/hu-2b1144f73f5fe6532827d60e1e730f0bbde794bd66e86d544c8c7865152a0bc7.js
I, [2024-03-18T01:58:32.027669 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/hy-0e3d49dcca69fdb1f4d9d7c952f457b8e2f6363649d9f40ef67ef519b60fd2b6.js
I, [2024-03-18T01:58:32.231716 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/id-5b48c5cc5346153a9112935ff48531f24e39c86033e1e993b8ecd7bae26c2aaa.js
I, [2024-03-18T01:58:32.459532 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/it-adb9985a156a156d445fda6fd2375c4e41af10629f6b13b31f49b53c10a4f001.js
I, [2024-03-18T01:58:32.817203 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/ja-e99ee098629623237b970bf11680712eea3134e8cf9beab0d8ced6b4a053f899.js
I, [2024-03-18T01:58:33.031178 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/ko-9c1bc757ecd52ce7ef29e9ada8bcd610a16ccb22a9906c5855b82b3b3b45f7f7.js
I, [2024-03-18T01:58:33.244015 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/lt-da8fa8d41e1e4a1c0ff20c79210eda3f7c8329564ad55cbbb29f9c33597d2233.js
I, [2024-03-18T01:58:33.465788 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/lv-34239dacfbdb474ab12660c1f6dee9dc89490d478b81e103ddefba664169ad4c.js
I, [2024-03-18T01:58:33.688321 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/nb_NO-269fcbd2cd36dd56adf6b59bd402f7fe16b11bb327f0aa226664a234e5e55ded.js
I, [2024-03-18T01:58:33.948495 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/nl-1b0332715c1dd51dc3ab0f054526fb1fee1877cc54c5ec654869368f7ee03bfb.js
I, [2024-03-18T01:58:34.199447 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/pl_PL-1a7efdb2104cd0ac0cebd4160fac0277a6c67738c326ccd7a81a6aa9b0365a66.js
I, [2024-03-18T01:58:34.434313 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/pt-e45670da20b84b643142929e97acfde3fc0951b0a7f5f3c8c26741ccd3817234.js
I, [2024-03-18T01:58:34.666000 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/pt_BR-e9c4645e193317eb46de946d997c44e65e30ce29f886909704185f80828cccbd.js
I, [2024-03-18T01:58:34.889067 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/ro-0e30d511015edbe3c2603eb55ee489cf1c01673b3b60a036cfc56d4afb9bb62c.js
I, [2024-03-18T01:58:35.188194 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/ru-ff4205570fe889029162471194e3538c6075ba49dad94488fed5d7e67f3ce6f6.js
I, [2024-03-18T01:58:35.415600 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/sk-ff3f248ad45fb17c1412ed5856ad092f9d63b3f35d57a7eb06e1cd0532374a58.js
I, [2024-03-18T01:58:35.646464 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/sl-aeffa5c7840b3d025de3ba721373031cb5c526db036b64cb14fe3ef3793da6cf.js
I, [2024-03-18T01:58:35.849146 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/sq-fc1a9946a7eb1012d774403a473905e78578333aabaadf43eb5a86e4c47cda78.js
I, [2024-03-18T01:58:36.039315 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/sr-3917580d672c59803521eb3a866228f145a87207c9ef541d269aeeb57c32986c.js
I, [2024-03-18T01:58:36.286766 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/sv-ebce4836937b0009e557769daa583d5901b18e07b3fbae2e2b946387c78c5efd.js
I, [2024-03-18T01:58:36.615754 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/sw-ef48aaaa50243d1e661812f9028e46e1dc3fd354526212199e573c6895ed7ded.js
I, [2024-03-18T01:58:36.989656 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/te-9659eb7670e82f668d5ea6052c9ff37cd177510603495a2c6922a92bc1ddf02c.js
I, [2024-03-18T01:58:37.232785 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/th-2eb67d531727c87805a382675414bae4a82f1acb22ef6167ae0b916c2ad36f66.js
I, [2024-03-18T01:58:37.473214 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/tr_TR-d631b0378e2cab8dd21cdcb763b64798f0f9beb81fa1fc1fb3379c70b9fd1c05.js
I, [2024-03-18T01:58:37.771872 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/uk-993f37f8dd9acd1d68753a3edb53083b48baa6a68e37621108a262a6ac752809.js
I, [2024-03-18T01:58:38.010140 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/ur-3049161b2bd0f297934dc1742583bb251e558516f10b3324858df0bae86e1537.js
I, [2024-03-18T01:58:38.252381 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/vi-4280b501601a2852924c1633736f54184870f5d4f15d986f1547777054b93643.js
I, [2024-03-18T01:58:38.467473 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/zh_CN-f2921a35e6778eeaf5e979b66b451025dd287ca9cce86c413eaae05d9b031f4e.js
I, [2024-03-18T01:58:38.696587 #3552]  INFO -- : Writing /var/www/discourse/public/assets/locales/zh_TW-38a6ded6d397b23c07f29cfe8ad03c9e4b78c2015b19a5ccb2f158708add5403.js
I, [2024-03-18T01:58:38.702246 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/footnote_extra-295b457b90cb18fedfdb544868c494c71842a27c0781d3042fa4fd26589204fa.js
I, [2024-03-18T01:58:38.709191 #3552]  INFO -- : Writing /var/www/discourse/public/assets/activate-account-9cb2015b7a740c93dc536067024f741b284ca1dd97e3ff19fa29e04e24dde7c5.js
I, [2024-03-18T01:58:38.709672 #3552]  INFO -- : Writing /var/www/discourse/public/assets/activate-account-3523016e5574f9a525ef6290fb8f4b48a26c4ce347b9abd5544100d6195d9c8c.map
I, [2024-03-18T01:58:38.889405 #3552]  INFO -- : Writing /var/www/discourse/public/assets/admin-3c338fde9c3e062c07d3789afb57cbbef771755a4b2f00d228a7a5f75005bed7.js
I, [2024-03-18T01:58:38.889899 #3552]  INFO -- : Writing /var/www/discourse/public/assets/admin-049ca1de4694c1fdaf64f677acbb3cd6c054196113ba9f1d9cea57c4b1d9a25a.map
I, [2024-03-18T01:58:38.901506 #3552]  INFO -- : Writing /var/www/discourse/public/assets/auto-redirect-03e5d3e9a32ee2864cfa327612eb79b3a581c27b7c9341dcb705945abadf53d8.js
I, [2024-03-18T01:58:38.901944 #3552]  INFO -- : Writing /var/www/discourse/public/assets/auto-redirect-783f6a24df430663e548fd3e8f2e37eee3a45923367ff44f6fbd7f6b9e0c3f68.map
I, [2024-03-18T01:58:38.910849 #3552]  INFO -- : Writing /var/www/discourse/public/assets/browser-detect-99f42f91bffa8ca1606d62b70bb92f981d83921e78ccdbd3d9538f07007f27ac.js
I, [2024-03-18T01:58:38.911161 #3552]  INFO -- : Writing /var/www/discourse/public/assets/browser-detect-d6593973a5e2ecaffb3cfe4e95c12f3a269ea4b4a7e92490d159a5bd841ec570.map
I, [2024-03-18T01:58:38.919504 #3552]  INFO -- : Writing /var/www/discourse/public/assets/browser-update-9070f07226d022f68c06506e046ae33f8fe725302ff53955cd3d483f2fc47ff6.js
I, [2024-03-18T01:58:38.919831 #3552]  INFO -- : Writing /var/www/discourse/public/assets/browser-update-ccac2124107451f99d1f542cf7d67a32435a9d933c8243f0579039f2cd52dc8f.map
I, [2024-03-18T01:58:38.933131 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.0f2367ced1a2cd7a0bfa.d41d8cd9.js
I, [2024-03-18T01:58:38.933526 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.0f2367ced1a2cd7a0bfa.d41d8cd9.js.map
I, [2024-03-18T01:58:39.684478 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.22bd85ca9601bf417cc8.d41d8cd9.js
I, [2024-03-18T01:58:39.686451 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.22bd85ca9601bf417cc8.d41d8cd9.js.LICENSE.txt
I, [2024-03-18T01:58:39.686717 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.22bd85ca9601bf417cc8.d41d8cd9.js.map
I, [2024-03-18T01:58:39.769433 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.34aaccce64091bcebbc3.d41d8cd9.js
I, [2024-03-18T01:58:39.769800 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.34aaccce64091bcebbc3.d41d8cd9.js.map
I, [2024-03-18T01:58:39.777683 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.3a140fe9ea124f7d68ee.d41d8cd9.js
I, [2024-03-18T01:58:39.777984 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.3a140fe9ea124f7d68ee.d41d8cd9.js.map
I, [2024-03-18T01:58:39.787382 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.3eae6d01ac1190dae2bc.d41d8cd9.js
I, [2024-03-18T01:58:39.787673 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.3eae6d01ac1190dae2bc.d41d8cd9.js.map
I, [2024-03-18T01:58:39.796782 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.467ded2e98164d782a20.d41d8cd9.js
I, [2024-03-18T01:58:39.797009 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.467ded2e98164d782a20.d41d8cd9.js.map
I, [2024-03-18T01:58:39.809607 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.48728634abba982d4eea.d41d8cd9.js
I, [2024-03-18T01:58:39.810014 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.48728634abba982d4eea.d41d8cd9.js.map
I, [2024-03-18T01:58:39.826773 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.4c25ad7e2393f9f3af04.css
I, [2024-03-18T01:58:39.831539 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.4c25ad7e2393f9f3af04.css.map
I, [2024-03-18T01:58:39.835131 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.825036fb6bfa384ce962.d41d8cd9.js
I, [2024-03-18T01:58:39.847824 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.8883c2e6339737f95aa2.d41d8cd9.js
I, [2024-03-18T01:58:39.848119 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.8883c2e6339737f95aa2.d41d8cd9.js.map
I, [2024-03-18T01:58:39.857923 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.8e62faf7d333ae639118.d41d8cd9.js
I, [2024-03-18T01:58:39.858242 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.8e62faf7d333ae639118.d41d8cd9.js.map
I, [2024-03-18T01:58:39.865654 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.9b671dbde2dccbd88fb7.css
I, [2024-03-18T01:58:39.867905 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.9b671dbde2dccbd88fb7.css.map
I, [2024-03-18T01:58:39.874272 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.9b671dbde2dccbd88fb7.d41d8cd9.js
I, [2024-03-18T01:58:39.874578 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.9b671dbde2dccbd88fb7.d41d8cd9.js.map
I, [2024-03-18T01:58:39.890113 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.d4d9aed67b3ba62c334d.d41d8cd9.js
I, [2024-03-18T01:58:39.890690 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.d4d9aed67b3ba62c334d.d41d8cd9.js.map
I, [2024-03-18T01:58:39.922288 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.eeb03a313575c789cdea.d41d8cd9.js
I, [2024-03-18T01:58:39.922727 #3552]  INFO -- : Writing /var/www/discourse/public/assets/chunk.eeb03a313575c789cdea.d41d8cd9.js.map
I, [2024-03-18T01:58:39.927336 #3552]  INFO -- : Writing /var/www/discourse/public/assets/discourse-07daaccc3e754332f981cc6510086e28c41cda9589ac33e33c8a96597fccb083.css
I, [2024-03-18T01:58:39.931892 #3552]  INFO -- : Writing /var/www/discourse/public/assets/discourse.d41d8cd98f00b204e9800998ecf8427e-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css
I, [2024-03-18T01:58:39.937631 #3552]  INFO -- : Writing /var/www/discourse/public/assets/embed-application-1896c09383b1c54200925ff073e8a02aaf7c9f1e568deff3fa7907fba28c423f.js
I, [2024-03-18T01:58:39.938145 #3552]  INFO -- : Writing /var/www/discourse/public/assets/embed-application-00e08d311d3285925aeed70aa17bb9b979372a54980d2c65d4ca76e61fb5707b.map
I, [2024-03-18T01:58:39.946716 #3552]  INFO -- : Writing /var/www/discourse/public/assets/google-tag-manager-78e83b8ae984b564b9745ad42fff40e8e544d5f805befd1f8265e859205f96b4.js
I, [2024-03-18T01:58:39.947047 #3552]  INFO -- : Writing /var/www/discourse/public/assets/google-tag-manager-28fec92fc63ed5152565c43f5342c098a1f3f3e9def1124373a0481b4abd4cab.map
I, [2024-03-18T01:58:39.953045 #3552]  INFO -- : Writing /var/www/discourse/public/assets/google-universal-analytics-v3-08add7ec997ab472fcd9f821d32ff7caf4b8b9a5de2ec18ca723a040be07a098.js
I, [2024-03-18T01:58:39.953376 #3552]  INFO -- : Writing /var/www/discourse/public/assets/google-universal-analytics-v3-0bd4423881936fcc413adb3fea0296c8dfa09ce3b774cbe1369b094d10d5f94d.map
I, [2024-03-18T01:58:39.961450 #3552]  INFO -- : Writing /var/www/discourse/public/assets/google-universal-analytics-v4-e154af4adb3c483a3aba7f9a7229b8881cdc5cf369290923d965a2ad30163ae8.js
I, [2024-03-18T01:58:39.961685 #3552]  INFO -- : Writing /var/www/discourse/public/assets/google-universal-analytics-v4-fd5a48f039d353888be5f587b5d59fcc2a9468e578468f4832e4bc84675d294a.map
I, [2024-03-18T01:58:39.968125 #3552]  INFO -- : Writing /var/www/discourse/public/assets/onpopstate-handler-1ea3e951679a33d36b6c5f2f8d98016e9908c4af9110736a24b159542c83a9b8.js
I, [2024-03-18T01:58:39.968407 #3552]  INFO -- : Writing /var/www/discourse/public/assets/onpopstate-handler-aa17feb9a185b68dbd42e87bac3109bc26045effbc9f848929392b102d8ae0ae.map
I, [2024-03-18T01:58:40.101292 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/chat-ddcde0670e1c229cedc8c04eb1245334b2a4ddf7f5a54bdb10138058c7afb003.js
I, [2024-03-18T01:58:40.106202 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/chat-a1f3f07660666eabc509899a18f247c992f62ee08d31e8cd9377a9ad10f3beb9.map
I, [2024-03-18T01:58:40.131533 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/checklist-273fb3ab5f7d346fa16c1482aedbd81035c5f677a83d7940da78abf7c1e16744.js
I, [2024-03-18T01:58:40.132479 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/checklist-d313dfa20c113a70f9a6a7356c86fdfad5996e2570302f9667c2ee2b5aed831d.map
I, [2024-03-18T01:58:40.153840 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/discourse-details-48148ec534a4c5e9614302186b345123ba1358787c41bc31cbd17231f794fe42.js
I, [2024-03-18T01:58:40.154974 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/discourse-details-dc285aa1ef01d7a4bb93ca99bdc9cdc0ff4c05ce78dd0fa7e7198da0b066ede5.map
I, [2024-03-18T01:58:40.172933 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/discourse-lazy-videos-93eefdae5b7d15a7cb3301aeba28935598be3f8484243b33146694690e2dd474.js
I, [2024-03-18T01:58:40.173389 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/discourse-lazy-videos-6832d6205141068be6c94993f8a6948a13bcf4d05bbb293f5fc2af59cc0cc172.map
I, [2024-03-18T01:58:40.195437 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/discourse-local-dates-448cb27f9c7b9389e5c1a04b9811d062bdd30a9c69bdfc034615baa076a6e48e.js
I, [2024-03-18T01:58:40.196022 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/discourse-local-dates-d39f9a61ebac4ed44df2b1a70211cd00396b4228a7fbc983f050d4ca1d1f8424.map
I, [2024-03-18T01:58:40.207358 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/discourse-narrative-bot-643f10339e287d380f81413fde738a8ad3a6e2a5ee4d7e30f2e841f92c78e5eb.js
I, [2024-03-18T01:58:40.208805 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/discourse-narrative-bot-00cdd3eabafea37d524a9c9a3c1c1e727ee729f3c5b25a1ae0e43ad85b451ffd.map
I, [2024-03-18T01:58:40.223436 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/discourse-presence-836dffda9abeade2d165054ea67f311af7b9e5ab8befba38d7b6995f891fbe88.js
I, [2024-03-18T01:58:40.224545 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/discourse-presence-60c694107859fafe4ac4e70b78f51b7eb90c0b2bf20dc08094f1462bacb74c93.map
I, [2024-03-18T01:58:40.245362 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/docker_manager_admin-f303fe8961251b1e7cef8ae8d8b5811b4b0c83694e9a8fd9a9a52b8a17f7f33b.js
I, [2024-03-18T01:58:40.245843 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/docker_manager_admin-1be63b922753aa8c941b2285d74440bcacf3ac1f8b38aed1b1f955d58c493070.map
I, [2024-03-18T01:58:40.282937 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/footnote-9e6a21e04868e13dc75adf73cfaab1be722d32b46af9a8b1894712c647ab6499.js
I, [2024-03-18T01:58:40.288093 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/footnote-38ad4ddd96d53000e5606fa3bb10d539d237aa5d1367b32cfe2e7cf976c8b0a1.map
I, [2024-03-18T01:58:40.317689 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/poll-32c8dc9991f8a0acf68044779a7967069b1170e85045056d3df464089baf55af.js
I, [2024-03-18T01:58:40.318318 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/poll-0ba97a2518814f7be654d6d7255c2bd8f58e6bc7b109294df7a622276378e02c.map
I, [2024-03-18T01:58:40.336107 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/spoiler-alert-77512c36f465902e7dbf3b8252c7cd6387edc9bf4ca804b79466212c1d1c843d.js
I, [2024-03-18T01:58:40.336863 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/spoiler-alert-c117d91598beb6e547891e4e9fb9c1d814ecb4547858e57c0f253e10f8ca0521.map
I, [2024-03-18T01:58:40.381482 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/styleguide-cd0b2046752fcee57cbf4619de9a72b53b7ba35748d66094d5dd3f86ac4198ed.js
I, [2024-03-18T01:58:40.381794 #3552]  INFO -- : Writing /var/www/discourse/public/assets/plugins/styleguide-a24459ea59b1ff165d34e0e509c77c03e4a0452c54218077fcab0f438f0de57e.map
I, [2024-03-18T01:58:40.401319 #3552]  INFO -- : Writing /var/www/discourse/public/assets/print-page-56cf61969efa7e4e490b3b2dff49ea19a32c7996a53b6060d3e9c479ad0d0e47.js
I, [2024-03-18T01:58:40.401574 #3552]  INFO -- : Writing /var/www/discourse/public/assets/print-page-b9a8366d333fa5ef54d14b5cfa40885b3aea3c8d49f7d332ccf7a42a250cdbba.map
I, [2024-03-18T01:58:40.423893 #3552]  INFO -- : Writing /var/www/discourse/public/assets/publish-955ebc11c25146ca9f2d846e9d40e875f8f7e737f62d68a77acd0d62626a5a79.js
I, [2024-03-18T01:58:40.424212 #3552]  INFO -- : Writing /var/www/discourse/public/assets/publish-999a41b17ddf0224b00fc888ea37d6cbd4629b472676926122fe5206d5ba717b.map
I, [2024-03-18T01:58:40.436127 #3552]  INFO -- : Writing /var/www/discourse/public/assets/qunit-custom-23d2cc579f152b7ddd11e425e3eff4bcc80264f5bbc0494154e099810ed938fc.css
I, [2024-03-18T01:58:40.578053 #3552]  INFO -- : Writing /var/www/discourse/public/assets/qunit-c6eb40c0f898c3b4b7440acb739e589689ec69ec6f8d7cc89d65c2646a6b275a.css
I, [2024-03-18T01:58:40.584208 #3552]  INFO -- : Writing /var/www/discourse/public/assets/scripts/discourse-boot-aa32d2b2d86a6dc385cdd26cc1a3daf031b31084d48de01bfcc15d9eff652aaf.js
I, [2024-03-18T01:58:40.588861 #3552]  INFO -- : Writing /var/www/discourse/public/assets/scripts/discourse-test-load-dynamic-js-600d633f9d3e3a49ad787e95d2de235a44db49bc5ac076c3a8be2c6b0fcc1f3c.js
I, [2024-03-18T01:58:40.593360 #3552]  INFO -- : Writing /var/www/discourse/public/assets/scripts/module-shims-8cc35eaf1ccb29371c77808ebf7443fd29e3afa328aa998e3de1844d914a0eb1.js
I, [2024-03-18T01:58:40.598820 #3552]  INFO -- : Writing /var/www/discourse/public/assets/scripts/start-app-b012dc3844eefc581e6d6d0de42cb10920aaf545a6a28137529fab0041be3ddc.js
I, [2024-03-18T01:58:40.605732 #3552]  INFO -- : Writing /var/www/discourse/public/assets/splash-screen-4ec06c1132e220f9f4d0e7b26a520b4baab051cdc2a0a847d49f470573da51b9.js
I, [2024-03-18T01:58:40.606326 #3552]  INFO -- : Writing /var/www/discourse/public/assets/splash-screen-38153d76aa3609862ff8d5d5c04e41ba7280f21051bf82999734482adb7e8d4f.map
I, [2024-03-18T01:58:40.613827 #3552]  INFO -- : Writing /var/www/discourse/public/assets/start-discourse-7c0f5f4daf3c942b7b6ecfe8e62e2e5a0f6555924859cf055314c0df3d617353.js
I, [2024-03-18T01:58:40.614251 #3552]  INFO -- : Writing /var/www/discourse/public/assets/start-discourse-5d7f503971ee51084b839dabaf96da17c03351df51736ce06fb063b64e816149.map
I, [2024-03-18T01:58:40.748229 #3552]  INFO -- : Writing /var/www/discourse/public/assets/test-i18n-f77739b12815c35252d0581cb73a15251b442581f16db03be252a392517f0b54.js
I, [2024-03-18T01:58:40.748554 #3552]  INFO -- : Writing /var/www/discourse/public/assets/test-i18n-f28093fae821903bf78e938130aa30cf37eb1c39222c8e7cbe980d04ba93ec9d.map
I, [2024-03-18T01:58:40.758973 #3552]  INFO -- : Writing /var/www/discourse/public/assets/test-site-settings-3028645a6c64f68a8c3e3503be48ad2aafb8de847a4169e84d05cec01a993593.js
I, [2024-03-18T01:58:40.759364 #3552]  INFO -- : Writing /var/www/discourse/public/assets/test-site-settings-21ce3f4673a0e219f95e27ea0d0048fe1c0fd8a16099ee44cae161d7b766a073.map
I, [2024-03-18T01:58:40.849867 #3552]  INFO -- : Writing /var/www/discourse/public/assets/vendor.47fe1949ff0285dbc995d87a6ae0d449-223fd39128ca149073c28a57e41e969bafdb0a241e1149adab6918b27e7a3265.js
I, [2024-03-18T01:58:40.850223 #3552]  INFO -- : Writing /var/www/discourse/public/assets/vendor-5ee6db20cfe18f5204c2f2fd4e23c757fee2cc609d2a9a05ada692fb1e06d174.map
I, [2024-03-18T01:58:40.861115 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.dev.js
I, [2024-03-18T01:58:40.861567 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.dev.js.map
I, [2024-03-18T01:58:40.869486 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js
I, [2024-03-18T01:58:40.870000 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js.map
I, [2024-03-18T01:58:40.884103 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.dev.js
I, [2024-03-18T01:58:40.884423 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.dev.js.map
I, [2024-03-18T01:58:40.891742 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js
I, [2024-03-18T01:58:40.892133 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js.map
I, [2024-03-18T01:58:40.905901 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.dev.js
I, [2024-03-18T01:58:40.906206 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.dev.js.map
I, [2024-03-18T01:58:40.913187 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js
I, [2024-03-18T01:58:40.913431 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js.map
I, [2024-03-18T01:58:40.927624 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.dev.js
I, [2024-03-18T01:58:40.927957 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.dev.js.map
I, [2024-03-18T01:58:40.936739 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js
I, [2024-03-18T01:58:40.937418 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js.map
I, [2024-03-18T01:58:40.955602 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.dev.js
I, [2024-03-18T01:58:40.955992 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.dev.js.map
I, [2024-03-18T01:58:40.963806 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.prod.js
I, [2024-03-18T01:58:40.964077 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.prod.js.map
I, [2024-03-18T01:58:40.972079 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js
I, [2024-03-18T01:58:40.972459 #3552]  INFO -- : Writing /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js.map
I, [2024-03-18T01:58:40.975566 #3552]  INFO -- : Writing /var/www/discourse/public/assets/favicon-24b22a63aae0cf353d72b6b728504377bfc42edc6563f202e3a1401763497249.ico
I, [2024-03-18T01:58:40.979501 #3552]  INFO -- : Writing /var/www/discourse/public/assets/logo-dev-0b53838dc1ee09248b94e3d4aa5c70d4a9897f26b8133d147e17bf8d41d3be7b.png
I, [2024-03-18T01:58:40.981956 #3552]  INFO -- : Writing /var/www/discourse/public/assets/logo-single-dev-5545f7e0d4d1d1d5ba821a6d8c1e394033558324e90acc1c6045cf382b4880c8.png
I, [2024-03-18T01:58:40.984013 #3552]  INFO -- : Writing /var/www/discourse/public/assets/logo-single-d7a0dacc998273856c42737dba8693fbdb9e5fd929d36afeb3f13844f147e865.png
I, [2024-03-18T01:58:40.985758 #3552]  INFO -- : Writing /var/www/discourse/public/assets/logo-ba2f2da6eac779d8b34d4aa977be739e4de07f7d34e970f4b8ac32682706c122.png
I, [2024-03-18T01:58:40.988216 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/README-cd3d86d8264ad01fe0966bc06caabc962948261d4dc6e7b9e8749ea67e23fd42.md
I, [2024-03-18T01:58:40.990498 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/assigned-822196daa0f5cef80e0ba05c2a1731f61aa12b1f9efc83d3d13fab4e3d4d467c.png
I, [2024-03-18T01:58:40.992893 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/chat_mention-bbf06e5b63dac6c41418517847799a61d6fc389facc46c372dc25eb9d815f6f8.png
I, [2024-03-18T01:58:40.994926 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/chat_message-1665cc2e8f27e3409776bd96d51ad1483a3f325afe206528e1d0032b9e826687.png
I, [2024-03-18T01:58:40.999394 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/check-dd4b108020453fcfb68e0dfc5d8558dd3bca63988e48a9de1ef9c6e4772300b7.png
I, [2024-03-18T01:58:41.002374 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/discourse-bdbc548a4e328f39b017bb143b679c5dfe7b060574760cd71d77971c2a9eff1f.png
I, [2024-03-18T01:58:41.004546 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/group_mentioned-d8f97cc6b3933d27d9f87beba43e4281b59ea9a7bcd4280cfb023f606abfe15f.png
I, [2024-03-18T01:58:41.008237 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/linked-07ccda5efd10981a2deb5c4e7e8b395e250b6744e77736994c70dba426b5906d.png
I, [2024-03-18T01:58:41.011604 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/mentioned-d8f97cc6b3933d27d9f87beba43e4281b59ea9a7bcd4280cfb023f606abfe15f.png
I, [2024-03-18T01:58:41.014243 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/posted-05bfde0bc18cfa3ec1864e2a828614cfbc00e19545a71860fa19eca01db240fe.png
I, [2024-03-18T01:58:41.016465 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/private_message-7884f8d7291161e2ebb4a4c7ba6f1bf13310ba6a4265294aafb1c5a20782cbc8.png
I, [2024-03-18T01:58:41.029102 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/quoted-2133a9d118a10109b6d72f96918ff6bfa1529dd808600cbd280871d44d43cc75.png
I, [2024-03-18T01:58:41.032895 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/replied-05bfde0bc18cfa3ec1864e2a828614cfbc00e19545a71860fa19eca01db240fe.png
I, [2024-03-18T01:58:41.034959 #3552]  INFO -- : Writing /var/www/discourse/public/assets/push-notifications/watching_first_post-05bfde0bc18cfa3ec1864e2a828614cfbc00e19545a71860fa19eca01db240fe.png
Compressing: break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
terser '/var/www/discourse/public/assets/_break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js' -m -c -o '/var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js' --source-map "base='/var/www/discourse/public/assets',root='/assets',url='break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js.map',includeSources=true"
gzip -f -c -9 /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js > /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js.gz

brotli -f --quality=11 /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js --output=/var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js.br


Done 'break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js' : 0.19 secs

Compressing: service-worker-cbee332ef66ea57ab2c0f86b2fcd3b5d25b229a04c3b836147b3ca7b497e1f0c.js
terser '/var/www/discourse/public/assets/_service-worker-cbee332ef66ea57ab2c0f86b2fcd3b5d25b229a04c3b836147b3ca7b497e1f0c.js' -m -c -o '/var/www/discourse/public/assets/service-worker-cbee332ef66ea57ab2c0f86b2fcd3b5d25b229a04c3b836147b3ca7b497e1f0c.js' --source-map "base='/var/www/discourse/public/assets',root='/assets',url='service-worker-cbee332ef66ea57ab2c0f86b2fcd3b5d25b229a04c3b836147b3ca7b497e1f0c.js.map',includeSources=true"
gzip -f -c -9 /var/www/discourse/public/assets/service-worker-cbee332ef66ea57ab2c0f86b2fcd3b5d25b229a04c3b836147b3ca7b497e1f0c.js > /var/www/discourse/public/assets/service-worker-cbee332ef66ea57ab2c0f86b2fcd3b5d25b229a04c3b836147b3ca7b497e1f0c.js.gz

brotli -f --quality=11 /var/www/discourse/public/assets/service-worker-cbee332ef66ea57ab2c0f86b2fcd3b5d25b229a04c3b836147b3ca7b497e1f0c.js --output=/var/www/discourse/public/assets/service-worker-cbee332ef66ea57ab2c0f86b2fcd3b5d25b229a04c3b836147b3ca7b497e1f0c.js.br


Done 'service-worker-cbee332ef66ea57ab2c0f86b2fcd3b5d25b229a04c3b836147b3ca7b497e1f0c.js' : 0.18 secs

Compressing: locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js > /var/www/discourse/public/assets/locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js --output=/var/www/discourse/public/assets/locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js.br


Done 'locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js' : 0.0 secs

Compressing: scripts/discourse-test-listen-boot-9b14a0fc65c689577e6a428dcfd680205516fe211700a71c7adb5cbcf4df2cc5.js
gzip -f -c -9 /var/www/discourse/public/assets/scripts/discourse-test-listen-boot-9b14a0fc65c689577e6a428dcfd680205516fe211700a71c7adb5cbcf4df2cc5.js > /var/www/discourse/public/assets/scripts/discourse-test-listen-boot-9b14a0fc65c689577e6a428dcfd680205516fe211700a71c7adb5cbcf4df2cc5.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/scripts/discourse-test-listen-boot-9b14a0fc65c689577e6a428dcfd680205516fe211700a71c7adb5cbcf4df2cc5.js --output=/var/www/discourse/public/assets/scripts/discourse-test-listen-boot-9b14a0fc65c689577e6a428dcfd680205516fe211700a71c7adb5cbcf4df2cc5.js.br


Done 'scripts/discourse-test-listen-boot-9b14a0fc65c689577e6a428dcfd680205516fe211700a71c7adb5cbcf4df2cc5.js' : 0.0 secs

Compressing: locales/ar-a5e6d8221e0c5853ea2a62a175c54e6d098486c150cf6453be91ea040c8591f9.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/ar-a5e6d8221e0c5853ea2a62a175c54e6d098486c150cf6453be91ea040c8591f9.js > /var/www/discourse/public/assets/locales/ar-a5e6d8221e0c5853ea2a62a175c54e6d098486c150cf6453be91ea040c8591f9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/ar-a5e6d8221e0c5853ea2a62a175c54e6d098486c150cf6453be91ea040c8591f9.js --output=/var/www/discourse/public/assets/locales/ar-a5e6d8221e0c5853ea2a62a175c54e6d098486c150cf6453be91ea040c8591f9.js.br


Done 'locales/ar-a5e6d8221e0c5853ea2a62a175c54e6d098486c150cf6453be91ea040c8591f9.js' : 0.1 secs

Compressing: locales/be-00eba0c19bdcded78f3a7f3f6388317d724658b52ebd85e0a3ff5f65a5e48474.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/be-00eba0c19bdcded78f3a7f3f6388317d724658b52ebd85e0a3ff5f65a5e48474.js > /var/www/discourse/public/assets/locales/be-00eba0c19bdcded78f3a7f3f6388317d724658b52ebd85e0a3ff5f65a5e48474.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/be-00eba0c19bdcded78f3a7f3f6388317d724658b52ebd85e0a3ff5f65a5e48474.js --output=/var/www/discourse/public/assets/locales/be-00eba0c19bdcded78f3a7f3f6388317d724658b52ebd85e0a3ff5f65a5e48474.js.br


Done 'locales/be-00eba0c19bdcded78f3a7f3f6388317d724658b52ebd85e0a3ff5f65a5e48474.js' : 0.07 secs

Compressing: locales/bg-9e244a2b8083166a53213cb4b0884bf4582a3a2a2bfd77036dc95678175f1f65.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/bg-9e244a2b8083166a53213cb4b0884bf4582a3a2a2bfd77036dc95678175f1f65.js > /var/www/discourse/public/assets/locales/bg-9e244a2b8083166a53213cb4b0884bf4582a3a2a2bfd77036dc95678175f1f65.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/bg-9e244a2b8083166a53213cb4b0884bf4582a3a2a2bfd77036dc95678175f1f65.js --output=/var/www/discourse/public/assets/locales/bg-9e244a2b8083166a53213cb4b0884bf4582a3a2a2bfd77036dc95678175f1f65.js.br


Done 'locales/bg-9e244a2b8083166a53213cb4b0884bf4582a3a2a2bfd77036dc95678175f1f65.js' : 0.09 secs

Compressing: locales/bs_BA-552a3f3d8cd1f6de3b7719dfed72ed1435fcfe05ac06d92104d860cbc5b05832.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/bs_BA-552a3f3d8cd1f6de3b7719dfed72ed1435fcfe05ac06d92104d860cbc5b05832.js > /var/www/discourse/public/assets/locales/bs_BA-552a3f3d8cd1f6de3b7719dfed72ed1435fcfe05ac06d92104d860cbc5b05832.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/bs_BA-552a3f3d8cd1f6de3b7719dfed72ed1435fcfe05ac06d92104d860cbc5b05832.js --output=/var/www/discourse/public/assets/locales/bs_BA-552a3f3d8cd1f6de3b7719dfed72ed1435fcfe05ac06d92104d860cbc5b05832.js.br


Done 'locales/bs_BA-552a3f3d8cd1f6de3b7719dfed72ed1435fcfe05ac06d92104d860cbc5b05832.js' : 0.07 secs

Compressing: locales/ca-8a4450df556437483d598e71e9d883977564fed7460fed54b682ce44a3313954.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/ca-8a4450df556437483d598e71e9d883977564fed7460fed54b682ce44a3313954.js > /var/www/discourse/public/assets/locales/ca-8a4450df556437483d598e71e9d883977564fed7460fed54b682ce44a3313954.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/ca-8a4450df556437483d598e71e9d883977564fed7460fed54b682ce44a3313954.js --output=/var/www/discourse/public/assets/locales/ca-8a4450df556437483d598e71e9d883977564fed7460fed54b682ce44a3313954.js.br


Done 'locales/ca-8a4450df556437483d598e71e9d883977564fed7460fed54b682ce44a3313954.js' : 0.07 secs

Compressing: locales/cs-3376ace164d9c20dbfb8412b68388bc8141aced3f9b8d13d4febba889c89ca17.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/cs-3376ace164d9c20dbfb8412b68388bc8141aced3f9b8d13d4febba889c89ca17.js > /var/www/discourse/public/assets/locales/cs-3376ace164d9c20dbfb8412b68388bc8141aced3f9b8d13d4febba889c89ca17.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/cs-3376ace164d9c20dbfb8412b68388bc8141aced3f9b8d13d4febba889c89ca17.js --output=/var/www/discourse/public/assets/locales/cs-3376ace164d9c20dbfb8412b68388bc8141aced3f9b8d13d4febba889c89ca17.js.br


Done 'locales/cs-3376ace164d9c20dbfb8412b68388bc8141aced3f9b8d13d4febba889c89ca17.js' : 0.07 secs

Compressing: locales/da-ab402e31532d655dfb1438215f662f19d9c82f87b32c62b1cf4faadf51a06a42.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/da-ab402e31532d655dfb1438215f662f19d9c82f87b32c62b1cf4faadf51a06a42.js > /var/www/discourse/public/assets/locales/da-ab402e31532d655dfb1438215f662f19d9c82f87b32c62b1cf4faadf51a06a42.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/da-ab402e31532d655dfb1438215f662f19d9c82f87b32c62b1cf4faadf51a06a42.js --output=/var/www/discourse/public/assets/locales/da-ab402e31532d655dfb1438215f662f19d9c82f87b32c62b1cf4faadf51a06a42.js.br


Done 'locales/da-ab402e31532d655dfb1438215f662f19d9c82f87b32c62b1cf4faadf51a06a42.js' : 0.07 secs

Compressing: locales/de-c9f9bce5f90cb3cd8d505e40df90dd86ac88e65cad187c5b180f57e61688a37c.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/de-c9f9bce5f90cb3cd8d505e40df90dd86ac88e65cad187c5b180f57e61688a37c.js > /var/www/discourse/public/assets/locales/de-c9f9bce5f90cb3cd8d505e40df90dd86ac88e65cad187c5b180f57e61688a37c.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/de-c9f9bce5f90cb3cd8d505e40df90dd86ac88e65cad187c5b180f57e61688a37c.js --output=/var/www/discourse/public/assets/locales/de-c9f9bce5f90cb3cd8d505e40df90dd86ac88e65cad187c5b180f57e61688a37c.js.br


Done 'locales/de-c9f9bce5f90cb3cd8d505e40df90dd86ac88e65cad187c5b180f57e61688a37c.js' : 0.08 secs

Compressing: locales/el-6fdf74265f14e76e822690d9467e01b7628388697ccbae617c52ee23c56ca9d6.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/el-6fdf74265f14e76e822690d9467e01b7628388697ccbae617c52ee23c56ca9d6.js > /var/www/discourse/public/assets/locales/el-6fdf74265f14e76e822690d9467e01b7628388697ccbae617c52ee23c56ca9d6.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/el-6fdf74265f14e76e822690d9467e01b7628388697ccbae617c52ee23c56ca9d6.js --output=/var/www/discourse/public/assets/locales/el-6fdf74265f14e76e822690d9467e01b7628388697ccbae617c52ee23c56ca9d6.js.br


Done 'locales/el-6fdf74265f14e76e822690d9467e01b7628388697ccbae617c52ee23c56ca9d6.js' : 0.08 secs

Compressing: locales/en-6f7c574fae7ea200176f1834334444448eabfb90d938e73e788daf75bd785faf.js
terser '/var/www/discourse/public/assets/locales/_en-6f7c574fae7ea200176f1834334444448eabfb90d938e73e788daf75bd785faf.js' -m -c -o '/var/www/discourse/public/assets/locales/en-6f7c574fae7ea200176f1834334444448eabfb90d938e73e788daf75bd785faf.js' --source-map "base='/var/www/discourse/public/assets/locales',root='/assets/locales',url='en-6f7c574fae7ea200176f1834334444448eabfb90d938e73e788daf75bd785faf.js.map',includeSources=true"
gzip -f -c -9 /var/www/discourse/public/assets/locales/en-6f7c574fae7ea200176f1834334444448eabfb90d938e73e788daf75bd785faf.js > /var/www/discourse/public/assets/locales/en-6f7c574fae7ea200176f1834334444448eabfb90d938e73e788daf75bd785faf.js.gz

brotli -f --quality=11 /var/www/discourse/public/assets/locales/en-6f7c574fae7ea200176f1834334444448eabfb90d938e73e788daf75bd785faf.js --output=/var/www/discourse/public/assets/locales/en-6f7c574fae7ea200176f1834334444448eabfb90d938e73e788daf75bd785faf.js.br


Done 'locales/en-6f7c574fae7ea200176f1834334444448eabfb90d938e73e788daf75bd785faf.js' : 2.07 secs

Compressing: locales/en_GB-0dcdf1a2ab6a914a0de737d161e07bb42acd843830bba6c63e85fdc09d1af012.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/en_GB-0dcdf1a2ab6a914a0de737d161e07bb42acd843830bba6c63e85fdc09d1af012.js > /var/www/discourse/public/assets/locales/en_GB-0dcdf1a2ab6a914a0de737d161e07bb42acd843830bba6c63e85fdc09d1af012.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/en_GB-0dcdf1a2ab6a914a0de737d161e07bb42acd843830bba6c63e85fdc09d1af012.js --output=/var/www/discourse/public/assets/locales/en_GB-0dcdf1a2ab6a914a0de737d161e07bb42acd843830bba6c63e85fdc09d1af012.js.br


Done 'locales/en_GB-0dcdf1a2ab6a914a0de737d161e07bb42acd843830bba6c63e85fdc09d1af012.js' : 0.06 secs

Compressing: locales/es-f0360f0bbe813bbe8eb271e701a2afe60db254a37a8ec467093225c9e8a1ce78.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/es-f0360f0bbe813bbe8eb271e701a2afe60db254a37a8ec467093225c9e8a1ce78.js > /var/www/discourse/public/assets/locales/es-f0360f0bbe813bbe8eb271e701a2afe60db254a37a8ec467093225c9e8a1ce78.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/es-f0360f0bbe813bbe8eb271e701a2afe60db254a37a8ec467093225c9e8a1ce78.js --output=/var/www/discourse/public/assets/locales/es-f0360f0bbe813bbe8eb271e701a2afe60db254a37a8ec467093225c9e8a1ce78.js.br


Done 'locales/es-f0360f0bbe813bbe8eb271e701a2afe60db254a37a8ec467093225c9e8a1ce78.js' : 0.07 secs

Compressing: locales/et-3c2ccf7bac78992cae2f375dee1a0438b19a92863b313ac53e10031b8c19336e.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/et-3c2ccf7bac78992cae2f375dee1a0438b19a92863b313ac53e10031b8c19336e.js > /var/www/discourse/public/assets/locales/et-3c2ccf7bac78992cae2f375dee1a0438b19a92863b313ac53e10031b8c19336e.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/et-3c2ccf7bac78992cae2f375dee1a0438b19a92863b313ac53e10031b8c19336e.js --output=/var/www/discourse/public/assets/locales/et-3c2ccf7bac78992cae2f375dee1a0438b19a92863b313ac53e10031b8c19336e.js.br


Done 'locales/et-3c2ccf7bac78992cae2f375dee1a0438b19a92863b313ac53e10031b8c19336e.js' : 0.07 secs

Compressing: locales/fa_IR-73c72ef64081ec0734971edae985938eca77928f950c856f32a347393acd1adf.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/fa_IR-73c72ef64081ec0734971edae985938eca77928f950c856f32a347393acd1adf.js > /var/www/discourse/public/assets/locales/fa_IR-73c72ef64081ec0734971edae985938eca77928f950c856f32a347393acd1adf.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/fa_IR-73c72ef64081ec0734971edae985938eca77928f950c856f32a347393acd1adf.js --output=/var/www/discourse/public/assets/locales/fa_IR-73c72ef64081ec0734971edae985938eca77928f950c856f32a347393acd1adf.js.br


Done 'locales/fa_IR-73c72ef64081ec0734971edae985938eca77928f950c856f32a347393acd1adf.js' : 0.09 secs

Compressing: locales/fi-efd692f35f52f8d7a4ccefc56bf14a74d985f4dbb5b4e7dbee958b36fc3e0e95.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/fi-efd692f35f52f8d7a4ccefc56bf14a74d985f4dbb5b4e7dbee958b36fc3e0e95.js > /var/www/discourse/public/assets/locales/fi-efd692f35f52f8d7a4ccefc56bf14a74d985f4dbb5b4e7dbee958b36fc3e0e95.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/fi-efd692f35f52f8d7a4ccefc56bf14a74d985f4dbb5b4e7dbee958b36fc3e0e95.js --output=/var/www/discourse/public/assets/locales/fi-efd692f35f52f8d7a4ccefc56bf14a74d985f4dbb5b4e7dbee958b36fc3e0e95.js.br


Done 'locales/fi-efd692f35f52f8d7a4ccefc56bf14a74d985f4dbb5b4e7dbee958b36fc3e0e95.js' : 0.08 secs

Compressing: locales/fr-6d24926e4db49d9df13d8c8cb23f73175faf9e0a213526b7cd2dd82bc9ce38bf.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/fr-6d24926e4db49d9df13d8c8cb23f73175faf9e0a213526b7cd2dd82bc9ce38bf.js > /var/www/discourse/public/assets/locales/fr-6d24926e4db49d9df13d8c8cb23f73175faf9e0a213526b7cd2dd82bc9ce38bf.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/fr-6d24926e4db49d9df13d8c8cb23f73175faf9e0a213526b7cd2dd82bc9ce38bf.js --output=/var/www/discourse/public/assets/locales/fr-6d24926e4db49d9df13d8c8cb23f73175faf9e0a213526b7cd2dd82bc9ce38bf.js.br


Done 'locales/fr-6d24926e4db49d9df13d8c8cb23f73175faf9e0a213526b7cd2dd82bc9ce38bf.js' : 0.07 secs

Compressing: locales/gl-701ceb500eef1000420b012a346d951771c6cd563b69a381d58f5739ef51a5db.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/gl-701ceb500eef1000420b012a346d951771c6cd563b69a381d58f5739ef51a5db.js > /var/www/discourse/public/assets/locales/gl-701ceb500eef1000420b012a346d951771c6cd563b69a381d58f5739ef51a5db.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/gl-701ceb500eef1000420b012a346d951771c6cd563b69a381d58f5739ef51a5db.js --output=/var/www/discourse/public/assets/locales/gl-701ceb500eef1000420b012a346d951771c6cd563b69a381d58f5739ef51a5db.js.br


Done 'locales/gl-701ceb500eef1000420b012a346d951771c6cd563b69a381d58f5739ef51a5db.js' : 0.07 secs

Compressing: locales/he-11547adf13f684a1c69b6091759c7cf194f30ee99a2786bbf42a637b6162a995.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/he-11547adf13f684a1c69b6091759c7cf194f30ee99a2786bbf42a637b6162a995.js > /var/www/discourse/public/assets/locales/he-11547adf13f684a1c69b6091759c7cf194f30ee99a2786bbf42a637b6162a995.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/he-11547adf13f684a1c69b6091759c7cf194f30ee99a2786bbf42a637b6162a995.js --output=/var/www/discourse/public/assets/locales/he-11547adf13f684a1c69b6091759c7cf194f30ee99a2786bbf42a637b6162a995.js.br


Done 'locales/he-11547adf13f684a1c69b6091759c7cf194f30ee99a2786bbf42a637b6162a995.js' : 0.1 secs

Compressing: locales/hr-0cbdedef310b20ae472579023d8305a658892a69f832109232d2068e48acfcb3.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/hr-0cbdedef310b20ae472579023d8305a658892a69f832109232d2068e48acfcb3.js > /var/www/discourse/public/assets/locales/hr-0cbdedef310b20ae472579023d8305a658892a69f832109232d2068e48acfcb3.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/hr-0cbdedef310b20ae472579023d8305a658892a69f832109232d2068e48acfcb3.js --output=/var/www/discourse/public/assets/locales/hr-0cbdedef310b20ae472579023d8305a658892a69f832109232d2068e48acfcb3.js.br


Done 'locales/hr-0cbdedef310b20ae472579023d8305a658892a69f832109232d2068e48acfcb3.js' : 0.07 secs

Compressing: locales/hu-2b1144f73f5fe6532827d60e1e730f0bbde794bd66e86d544c8c7865152a0bc7.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/hu-2b1144f73f5fe6532827d60e1e730f0bbde794bd66e86d544c8c7865152a0bc7.js > /var/www/discourse/public/assets/locales/hu-2b1144f73f5fe6532827d60e1e730f0bbde794bd66e86d544c8c7865152a0bc7.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/hu-2b1144f73f5fe6532827d60e1e730f0bbde794bd66e86d544c8c7865152a0bc7.js --output=/var/www/discourse/public/assets/locales/hu-2b1144f73f5fe6532827d60e1e730f0bbde794bd66e86d544c8c7865152a0bc7.js.br


Done 'locales/hu-2b1144f73f5fe6532827d60e1e730f0bbde794bd66e86d544c8c7865152a0bc7.js' : 0.07 secs

Compressing: locales/hy-0e3d49dcca69fdb1f4d9d7c952f457b8e2f6363649d9f40ef67ef519b60fd2b6.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/hy-0e3d49dcca69fdb1f4d9d7c952f457b8e2f6363649d9f40ef67ef519b60fd2b6.js > /var/www/discourse/public/assets/locales/hy-0e3d49dcca69fdb1f4d9d7c952f457b8e2f6363649d9f40ef67ef519b60fd2b6.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/hy-0e3d49dcca69fdb1f4d9d7c952f457b8e2f6363649d9f40ef67ef519b60fd2b6.js --output=/var/www/discourse/public/assets/locales/hy-0e3d49dcca69fdb1f4d9d7c952f457b8e2f6363649d9f40ef67ef519b60fd2b6.js.br


Done 'locales/hy-0e3d49dcca69fdb1f4d9d7c952f457b8e2f6363649d9f40ef67ef519b60fd2b6.js' : 0.08 secs

Compressing: locales/id-5b48c5cc5346153a9112935ff48531f24e39c86033e1e993b8ecd7bae26c2aaa.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/id-5b48c5cc5346153a9112935ff48531f24e39c86033e1e993b8ecd7bae26c2aaa.js > /var/www/discourse/public/assets/locales/id-5b48c5cc5346153a9112935ff48531f24e39c86033e1e993b8ecd7bae26c2aaa.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/id-5b48c5cc5346153a9112935ff48531f24e39c86033e1e993b8ecd7bae26c2aaa.js --output=/var/www/discourse/public/assets/locales/id-5b48c5cc5346153a9112935ff48531f24e39c86033e1e993b8ecd7bae26c2aaa.js.br


Done 'locales/id-5b48c5cc5346153a9112935ff48531f24e39c86033e1e993b8ecd7bae26c2aaa.js' : 0.07 secs

Compressing: locales/it-adb9985a156a156d445fda6fd2375c4e41af10629f6b13b31f49b53c10a4f001.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/it-adb9985a156a156d445fda6fd2375c4e41af10629f6b13b31f49b53c10a4f001.js > /var/www/discourse/public/assets/locales/it-adb9985a156a156d445fda6fd2375c4e41af10629f6b13b31f49b53c10a4f001.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/it-adb9985a156a156d445fda6fd2375c4e41af10629f6b13b31f49b53c10a4f001.js --output=/var/www/discourse/public/assets/locales/it-adb9985a156a156d445fda6fd2375c4e41af10629f6b13b31f49b53c10a4f001.js.br


Done 'locales/it-adb9985a156a156d445fda6fd2375c4e41af10629f6b13b31f49b53c10a4f001.js' : 0.07 secs

Compressing: locales/ja-e99ee098629623237b970bf11680712eea3134e8cf9beab0d8ced6b4a053f899.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/ja-e99ee098629623237b970bf11680712eea3134e8cf9beab0d8ced6b4a053f899.js > /var/www/discourse/public/assets/locales/ja-e99ee098629623237b970bf11680712eea3134e8cf9beab0d8ced6b4a053f899.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/ja-e99ee098629623237b970bf11680712eea3134e8cf9beab0d8ced6b4a053f899.js --output=/var/www/discourse/public/assets/locales/ja-e99ee098629623237b970bf11680712eea3134e8cf9beab0d8ced6b4a053f899.js.br


Done 'locales/ja-e99ee098629623237b970bf11680712eea3134e8cf9beab0d8ced6b4a053f899.js' : 0.07 secs

Compressing: locales/ko-9c1bc757ecd52ce7ef29e9ada8bcd610a16ccb22a9906c5855b82b3b3b45f7f7.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/ko-9c1bc757ecd52ce7ef29e9ada8bcd610a16ccb22a9906c5855b82b3b3b45f7f7.js > /var/www/discourse/public/assets/locales/ko-9c1bc757ecd52ce7ef29e9ada8bcd610a16ccb22a9906c5855b82b3b3b45f7f7.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/ko-9c1bc757ecd52ce7ef29e9ada8bcd610a16ccb22a9906c5855b82b3b3b45f7f7.js --output=/var/www/discourse/public/assets/locales/ko-9c1bc757ecd52ce7ef29e9ada8bcd610a16ccb22a9906c5855b82b3b3b45f7f7.js.br


Done 'locales/ko-9c1bc757ecd52ce7ef29e9ada8bcd610a16ccb22a9906c5855b82b3b3b45f7f7.js' : 0.07 secs

Compressing: locales/lt-da8fa8d41e1e4a1c0ff20c79210eda3f7c8329564ad55cbbb29f9c33597d2233.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/lt-da8fa8d41e1e4a1c0ff20c79210eda3f7c8329564ad55cbbb29f9c33597d2233.js > /var/www/discourse/public/assets/locales/lt-da8fa8d41e1e4a1c0ff20c79210eda3f7c8329564ad55cbbb29f9c33597d2233.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/lt-da8fa8d41e1e4a1c0ff20c79210eda3f7c8329564ad55cbbb29f9c33597d2233.js --output=/var/www/discourse/public/assets/locales/lt-da8fa8d41e1e4a1c0ff20c79210eda3f7c8329564ad55cbbb29f9c33597d2233.js.br


Done 'locales/lt-da8fa8d41e1e4a1c0ff20c79210eda3f7c8329564ad55cbbb29f9c33597d2233.js' : 0.07 secs

Compressing: locales/lv-34239dacfbdb474ab12660c1f6dee9dc89490d478b81e103ddefba664169ad4c.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/lv-34239dacfbdb474ab12660c1f6dee9dc89490d478b81e103ddefba664169ad4c.js > /var/www/discourse/public/assets/locales/lv-34239dacfbdb474ab12660c1f6dee9dc89490d478b81e103ddefba664169ad4c.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/lv-34239dacfbdb474ab12660c1f6dee9dc89490d478b81e103ddefba664169ad4c.js --output=/var/www/discourse/public/assets/locales/lv-34239dacfbdb474ab12660c1f6dee9dc89490d478b81e103ddefba664169ad4c.js.br


Done 'locales/lv-34239dacfbdb474ab12660c1f6dee9dc89490d478b81e103ddefba664169ad4c.js' : 0.07 secs

Compressing: locales/nb_NO-269fcbd2cd36dd56adf6b59bd402f7fe16b11bb327f0aa226664a234e5e55ded.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/nb_NO-269fcbd2cd36dd56adf6b59bd402f7fe16b11bb327f0aa226664a234e5e55ded.js > /var/www/discourse/public/assets/locales/nb_NO-269fcbd2cd36dd56adf6b59bd402f7fe16b11bb327f0aa226664a234e5e55ded.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/nb_NO-269fcbd2cd36dd56adf6b59bd402f7fe16b11bb327f0aa226664a234e5e55ded.js --output=/var/www/discourse/public/assets/locales/nb_NO-269fcbd2cd36dd56adf6b59bd402f7fe16b11bb327f0aa226664a234e5e55ded.js.br


Done 'locales/nb_NO-269fcbd2cd36dd56adf6b59bd402f7fe16b11bb327f0aa226664a234e5e55ded.js' : 0.08 secs

Compressing: locales/nl-1b0332715c1dd51dc3ab0f054526fb1fee1877cc54c5ec654869368f7ee03bfb.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/nl-1b0332715c1dd51dc3ab0f054526fb1fee1877cc54c5ec654869368f7ee03bfb.js > /var/www/discourse/public/assets/locales/nl-1b0332715c1dd51dc3ab0f054526fb1fee1877cc54c5ec654869368f7ee03bfb.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/nl-1b0332715c1dd51dc3ab0f054526fb1fee1877cc54c5ec654869368f7ee03bfb.js --output=/var/www/discourse/public/assets/locales/nl-1b0332715c1dd51dc3ab0f054526fb1fee1877cc54c5ec654869368f7ee03bfb.js.br


Done 'locales/nl-1b0332715c1dd51dc3ab0f054526fb1fee1877cc54c5ec654869368f7ee03bfb.js' : 0.07 secs

Compressing: locales/pl_PL-1a7efdb2104cd0ac0cebd4160fac0277a6c67738c326ccd7a81a6aa9b0365a66.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/pl_PL-1a7efdb2104cd0ac0cebd4160fac0277a6c67738c326ccd7a81a6aa9b0365a66.js > /var/www/discourse/public/assets/locales/pl_PL-1a7efdb2104cd0ac0cebd4160fac0277a6c67738c326ccd7a81a6aa9b0365a66.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/pl_PL-1a7efdb2104cd0ac0cebd4160fac0277a6c67738c326ccd7a81a6aa9b0365a66.js --output=/var/www/discourse/public/assets/locales/pl_PL-1a7efdb2104cd0ac0cebd4160fac0277a6c67738c326ccd7a81a6aa9b0365a66.js.br


Done 'locales/pl_PL-1a7efdb2104cd0ac0cebd4160fac0277a6c67738c326ccd7a81a6aa9b0365a66.js' : 0.08 secs

Compressing: locales/pt-e45670da20b84b643142929e97acfde3fc0951b0a7f5f3c8c26741ccd3817234.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/pt-e45670da20b84b643142929e97acfde3fc0951b0a7f5f3c8c26741ccd3817234.js > /var/www/discourse/public/assets/locales/pt-e45670da20b84b643142929e97acfde3fc0951b0a7f5f3c8c26741ccd3817234.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/pt-e45670da20b84b643142929e97acfde3fc0951b0a7f5f3c8c26741ccd3817234.js --output=/var/www/discourse/public/assets/locales/pt-e45670da20b84b643142929e97acfde3fc0951b0a7f5f3c8c26741ccd3817234.js.br


Done 'locales/pt-e45670da20b84b643142929e97acfde3fc0951b0a7f5f3c8c26741ccd3817234.js' : 0.07 secs

Compressing: locales/pt_BR-e9c4645e193317eb46de946d997c44e65e30ce29f886909704185f80828cccbd.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/pt_BR-e9c4645e193317eb46de946d997c44e65e30ce29f886909704185f80828cccbd.js > /var/www/discourse/public/assets/locales/pt_BR-e9c4645e193317eb46de946d997c44e65e30ce29f886909704185f80828cccbd.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/pt_BR-e9c4645e193317eb46de946d997c44e65e30ce29f886909704185f80828cccbd.js --output=/var/www/discourse/public/assets/locales/pt_BR-e9c4645e193317eb46de946d997c44e65e30ce29f886909704185f80828cccbd.js.br


Done 'locales/pt_BR-e9c4645e193317eb46de946d997c44e65e30ce29f886909704185f80828cccbd.js' : 0.08 secs

Compressing: locales/ro-0e30d511015edbe3c2603eb55ee489cf1c01673b3b60a036cfc56d4afb9bb62c.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/ro-0e30d511015edbe3c2603eb55ee489cf1c01673b3b60a036cfc56d4afb9bb62c.js > /var/www/discourse/public/assets/locales/ro-0e30d511015edbe3c2603eb55ee489cf1c01673b3b60a036cfc56d4afb9bb62c.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/ro-0e30d511015edbe3c2603eb55ee489cf1c01673b3b60a036cfc56d4afb9bb62c.js --output=/var/www/discourse/public/assets/locales/ro-0e30d511015edbe3c2603eb55ee489cf1c01673b3b60a036cfc56d4afb9bb62c.js.br


Done 'locales/ro-0e30d511015edbe3c2603eb55ee489cf1c01673b3b60a036cfc56d4afb9bb62c.js' : 0.07 secs

Compressing: locales/ru-ff4205570fe889029162471194e3538c6075ba49dad94488fed5d7e67f3ce6f6.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/ru-ff4205570fe889029162471194e3538c6075ba49dad94488fed5d7e67f3ce6f6.js > /var/www/discourse/public/assets/locales/ru-ff4205570fe889029162471194e3538c6075ba49dad94488fed5d7e67f3ce6f6.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/ru-ff4205570fe889029162471194e3538c6075ba49dad94488fed5d7e67f3ce6f6.js --output=/var/www/discourse/public/assets/locales/ru-ff4205570fe889029162471194e3538c6075ba49dad94488fed5d7e67f3ce6f6.js.br


Done 'locales/ru-ff4205570fe889029162471194e3538c6075ba49dad94488fed5d7e67f3ce6f6.js' : 0.1 secs

Compressing: locales/sk-ff3f248ad45fb17c1412ed5856ad092f9d63b3f35d57a7eb06e1cd0532374a58.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/sk-ff3f248ad45fb17c1412ed5856ad092f9d63b3f35d57a7eb06e1cd0532374a58.js > /var/www/discourse/public/assets/locales/sk-ff3f248ad45fb17c1412ed5856ad092f9d63b3f35d57a7eb06e1cd0532374a58.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/sk-ff3f248ad45fb17c1412ed5856ad092f9d63b3f35d57a7eb06e1cd0532374a58.js --output=/var/www/discourse/public/assets/locales/sk-ff3f248ad45fb17c1412ed5856ad092f9d63b3f35d57a7eb06e1cd0532374a58.js.br


Done 'locales/sk-ff3f248ad45fb17c1412ed5856ad092f9d63b3f35d57a7eb06e1cd0532374a58.js' : 0.07 secs

Compressing: locales/sl-aeffa5c7840b3d025de3ba721373031cb5c526db036b64cb14fe3ef3793da6cf.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/sl-aeffa5c7840b3d025de3ba721373031cb5c526db036b64cb14fe3ef3793da6cf.js > /var/www/discourse/public/assets/locales/sl-aeffa5c7840b3d025de3ba721373031cb5c526db036b64cb14fe3ef3793da6cf.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/sl-aeffa5c7840b3d025de3ba721373031cb5c526db036b64cb14fe3ef3793da6cf.js --output=/var/www/discourse/public/assets/locales/sl-aeffa5c7840b3d025de3ba721373031cb5c526db036b64cb14fe3ef3793da6cf.js.br


Done 'locales/sl-aeffa5c7840b3d025de3ba721373031cb5c526db036b64cb14fe3ef3793da6cf.js' : 0.07 secs

Compressing: locales/sq-fc1a9946a7eb1012d774403a473905e78578333aabaadf43eb5a86e4c47cda78.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/sq-fc1a9946a7eb1012d774403a473905e78578333aabaadf43eb5a86e4c47cda78.js > /var/www/discourse/public/assets/locales/sq-fc1a9946a7eb1012d774403a473905e78578333aabaadf43eb5a86e4c47cda78.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/sq-fc1a9946a7eb1012d774403a473905e78578333aabaadf43eb5a86e4c47cda78.js --output=/var/www/discourse/public/assets/locales/sq-fc1a9946a7eb1012d774403a473905e78578333aabaadf43eb5a86e4c47cda78.js.br


Done 'locales/sq-fc1a9946a7eb1012d774403a473905e78578333aabaadf43eb5a86e4c47cda78.js' : 0.07 secs

Compressing: locales/sr-3917580d672c59803521eb3a866228f145a87207c9ef541d269aeeb57c32986c.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/sr-3917580d672c59803521eb3a866228f145a87207c9ef541d269aeeb57c32986c.js > /var/www/discourse/public/assets/locales/sr-3917580d672c59803521eb3a866228f145a87207c9ef541d269aeeb57c32986c.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/sr-3917580d672c59803521eb3a866228f145a87207c9ef541d269aeeb57c32986c.js --output=/var/www/discourse/public/assets/locales/sr-3917580d672c59803521eb3a866228f145a87207c9ef541d269aeeb57c32986c.js.br


Done 'locales/sr-3917580d672c59803521eb3a866228f145a87207c9ef541d269aeeb57c32986c.js' : 0.07 secs

Compressing: locales/sv-ebce4836937b0009e557769daa583d5901b18e07b3fbae2e2b946387c78c5efd.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/sv-ebce4836937b0009e557769daa583d5901b18e07b3fbae2e2b946387c78c5efd.js > /var/www/discourse/public/assets/locales/sv-ebce4836937b0009e557769daa583d5901b18e07b3fbae2e2b946387c78c5efd.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/sv-ebce4836937b0009e557769daa583d5901b18e07b3fbae2e2b946387c78c5efd.js --output=/var/www/discourse/public/assets/locales/sv-ebce4836937b0009e557769daa583d5901b18e07b3fbae2e2b946387c78c5efd.js.br


Done 'locales/sv-ebce4836937b0009e557769daa583d5901b18e07b3fbae2e2b946387c78c5efd.js' : 0.07 secs

Compressing: locales/sw-ef48aaaa50243d1e661812f9028e46e1dc3fd354526212199e573c6895ed7ded.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/sw-ef48aaaa50243d1e661812f9028e46e1dc3fd354526212199e573c6895ed7ded.js > /var/www/discourse/public/assets/locales/sw-ef48aaaa50243d1e661812f9028e46e1dc3fd354526212199e573c6895ed7ded.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/sw-ef48aaaa50243d1e661812f9028e46e1dc3fd354526212199e573c6895ed7ded.js --output=/var/www/discourse/public/assets/locales/sw-ef48aaaa50243d1e661812f9028e46e1dc3fd354526212199e573c6895ed7ded.js.br


Done 'locales/sw-ef48aaaa50243d1e661812f9028e46e1dc3fd354526212199e573c6895ed7ded.js' : 0.07 secs

Compressing: locales/te-9659eb7670e82f668d5ea6052c9ff37cd177510603495a2c6922a92bc1ddf02c.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/te-9659eb7670e82f668d5ea6052c9ff37cd177510603495a2c6922a92bc1ddf02c.js > /var/www/discourse/public/assets/locales/te-9659eb7670e82f668d5ea6052c9ff37cd177510603495a2c6922a92bc1ddf02c.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/te-9659eb7670e82f668d5ea6052c9ff37cd177510603495a2c6922a92bc1ddf02c.js --output=/var/www/discourse/public/assets/locales/te-9659eb7670e82f668d5ea6052c9ff37cd177510603495a2c6922a92bc1ddf02c.js.br


Done 'locales/te-9659eb7670e82f668d5ea6052c9ff37cd177510603495a2c6922a92bc1ddf02c.js' : 0.12 secs

Compressing: locales/th-2eb67d531727c87805a382675414bae4a82f1acb22ef6167ae0b916c2ad36f66.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/th-2eb67d531727c87805a382675414bae4a82f1acb22ef6167ae0b916c2ad36f66.js > /var/www/discourse/public/assets/locales/th-2eb67d531727c87805a382675414bae4a82f1acb22ef6167ae0b916c2ad36f66.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/th-2eb67d531727c87805a382675414bae4a82f1acb22ef6167ae0b916c2ad36f66.js --output=/var/www/discourse/public/assets/locales/th-2eb67d531727c87805a382675414bae4a82f1acb22ef6167ae0b916c2ad36f66.js.br


Done 'locales/th-2eb67d531727c87805a382675414bae4a82f1acb22ef6167ae0b916c2ad36f66.js' : 0.09 secs

Compressing: locales/tr_TR-d631b0378e2cab8dd21cdcb763b64798f0f9beb81fa1fc1fb3379c70b9fd1c05.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/tr_TR-d631b0378e2cab8dd21cdcb763b64798f0f9beb81fa1fc1fb3379c70b9fd1c05.js > /var/www/discourse/public/assets/locales/tr_TR-d631b0378e2cab8dd21cdcb763b64798f0f9beb81fa1fc1fb3379c70b9fd1c05.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/tr_TR-d631b0378e2cab8dd21cdcb763b64798f0f9beb81fa1fc1fb3379c70b9fd1c05.js --output=/var/www/discourse/public/assets/locales/tr_TR-d631b0378e2cab8dd21cdcb763b64798f0f9beb81fa1fc1fb3379c70b9fd1c05.js.br


Done 'locales/tr_TR-d631b0378e2cab8dd21cdcb763b64798f0f9beb81fa1fc1fb3379c70b9fd1c05.js' : 0.07 secs

Compressing: locales/uk-993f37f8dd9acd1d68753a3edb53083b48baa6a68e37621108a262a6ac752809.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/uk-993f37f8dd9acd1d68753a3edb53083b48baa6a68e37621108a262a6ac752809.js > /var/www/discourse/public/assets/locales/uk-993f37f8dd9acd1d68753a3edb53083b48baa6a68e37621108a262a6ac752809.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/uk-993f37f8dd9acd1d68753a3edb53083b48baa6a68e37621108a262a6ac752809.js --output=/var/www/discourse/public/assets/locales/uk-993f37f8dd9acd1d68753a3edb53083b48baa6a68e37621108a262a6ac752809.js.br


Done 'locales/uk-993f37f8dd9acd1d68753a3edb53083b48baa6a68e37621108a262a6ac752809.js' : 0.1 secs

Compressing: locales/ur-3049161b2bd0f297934dc1742583bb251e558516f10b3324858df0bae86e1537.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/ur-3049161b2bd0f297934dc1742583bb251e558516f10b3324858df0bae86e1537.js > /var/www/discourse/public/assets/locales/ur-3049161b2bd0f297934dc1742583bb251e558516f10b3324858df0bae86e1537.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/ur-3049161b2bd0f297934dc1742583bb251e558516f10b3324858df0bae86e1537.js --output=/var/www/discourse/public/assets/locales/ur-3049161b2bd0f297934dc1742583bb251e558516f10b3324858df0bae86e1537.js.br


Done 'locales/ur-3049161b2bd0f297934dc1742583bb251e558516f10b3324858df0bae86e1537.js' : 0.08 secs

Compressing: locales/vi-4280b501601a2852924c1633736f54184870f5d4f15d986f1547777054b93643.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/vi-4280b501601a2852924c1633736f54184870f5d4f15d986f1547777054b93643.js > /var/www/discourse/public/assets/locales/vi-4280b501601a2852924c1633736f54184870f5d4f15d986f1547777054b93643.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/vi-4280b501601a2852924c1633736f54184870f5d4f15d986f1547777054b93643.js --output=/var/www/discourse/public/assets/locales/vi-4280b501601a2852924c1633736f54184870f5d4f15d986f1547777054b93643.js.br


Done 'locales/vi-4280b501601a2852924c1633736f54184870f5d4f15d986f1547777054b93643.js' : 0.07 secs

Compressing: locales/zh_CN-f2921a35e6778eeaf5e979b66b451025dd287ca9cce86c413eaae05d9b031f4e.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/zh_CN-f2921a35e6778eeaf5e979b66b451025dd287ca9cce86c413eaae05d9b031f4e.js > /var/www/discourse/public/assets/locales/zh_CN-f2921a35e6778eeaf5e979b66b451025dd287ca9cce86c413eaae05d9b031f4e.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/zh_CN-f2921a35e6778eeaf5e979b66b451025dd287ca9cce86c413eaae05d9b031f4e.js --output=/var/www/discourse/public/assets/locales/zh_CN-f2921a35e6778eeaf5e979b66b451025dd287ca9cce86c413eaae05d9b031f4e.js.br


Done 'locales/zh_CN-f2921a35e6778eeaf5e979b66b451025dd287ca9cce86c413eaae05d9b031f4e.js' : 0.07 secs

Compressing: locales/zh_TW-38a6ded6d397b23c07f29cfe8ad03c9e4b78c2015b19a5ccb2f158708add5403.js
gzip -f -c -9 /var/www/discourse/public/assets/locales/zh_TW-38a6ded6d397b23c07f29cfe8ad03c9e4b78c2015b19a5ccb2f158708add5403.js > /var/www/discourse/public/assets/locales/zh_TW-38a6ded6d397b23c07f29cfe8ad03c9e4b78c2015b19a5ccb2f158708add5403.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/locales/zh_TW-38a6ded6d397b23c07f29cfe8ad03c9e4b78c2015b19a5ccb2f158708add5403.js --output=/var/www/discourse/public/assets/locales/zh_TW-38a6ded6d397b23c07f29cfe8ad03c9e4b78c2015b19a5ccb2f158708add5403.js.br


Done 'locales/zh_TW-38a6ded6d397b23c07f29cfe8ad03c9e4b78c2015b19a5ccb2f158708add5403.js' : 0.07 secs

Compressing: plugins/footnote_extra-295b457b90cb18fedfdb544868c494c71842a27c0781d3042fa4fd26589204fa.js
terser '/var/www/discourse/public/assets/plugins/_footnote_extra-295b457b90cb18fedfdb544868c494c71842a27c0781d3042fa4fd26589204fa.js' -m -c -o '/var/www/discourse/public/assets/plugins/footnote_extra-295b457b90cb18fedfdb544868c494c71842a27c0781d3042fa4fd26589204fa.js' --source-map "base='/var/www/discourse/public/assets/plugins',root='/assets/plugins',url='footnote_extra-295b457b90cb18fedfdb544868c494c71842a27c0781d3042fa4fd26589204fa.js.map',includeSources=true"
gzip -f -c -9 /var/www/discourse/public/assets/plugins/footnote_extra-295b457b90cb18fedfdb544868c494c71842a27c0781d3042fa4fd26589204fa.js > /var/www/discourse/public/assets/plugins/footnote_extra-295b457b90cb18fedfdb544868c494c71842a27c0781d3042fa4fd26589204fa.js.gz

brotli -f --quality=11 /var/www/discourse/public/assets/plugins/footnote_extra-295b457b90cb18fedfdb544868c494c71842a27c0781d3042fa4fd26589204fa.js --output=/var/www/discourse/public/assets/plugins/footnote_extra-295b457b90cb18fedfdb544868c494c71842a27c0781d3042fa4fd26589204fa.js.br


Done 'plugins/footnote_extra-295b457b90cb18fedfdb544868c494c71842a27c0781d3042fa4fd26589204fa.js' : 0.28 secs

Compressing: activate-account-9cb2015b7a740c93dc536067024f741b284ca1dd97e3ff19fa29e04e24dde7c5.js
gzip -f -c -9 /var/www/discourse/public/assets/activate-account-9cb2015b7a740c93dc536067024f741b284ca1dd97e3ff19fa29e04e24dde7c5.js > /var/www/discourse/public/assets/activate-account-9cb2015b7a740c93dc536067024f741b284ca1dd97e3ff19fa29e04e24dde7c5.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/activate-account-9cb2015b7a740c93dc536067024f741b284ca1dd97e3ff19fa29e04e24dde7c5.js --output=/var/www/discourse/public/assets/activate-account-9cb2015b7a740c93dc536067024f741b284ca1dd97e3ff19fa29e04e24dde7c5.js.br


Done 'activate-account-9cb2015b7a740c93dc536067024f741b284ca1dd97e3ff19fa29e04e24dde7c5.js' : 0.01 secs

Compressing: admin-3c338fde9c3e062c07d3789afb57cbbef771755a4b2f00d228a7a5f75005bed7.js
gzip -f -c -9 /var/www/discourse/public/assets/admin-3c338fde9c3e062c07d3789afb57cbbef771755a4b2f00d228a7a5f75005bed7.js > /var/www/discourse/public/assets/admin-3c338fde9c3e062c07d3789afb57cbbef771755a4b2f00d228a7a5f75005bed7.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/admin-3c338fde9c3e062c07d3789afb57cbbef771755a4b2f00d228a7a5f75005bed7.js --output=/var/www/discourse/public/assets/admin-3c338fde9c3e062c07d3789afb57cbbef771755a4b2f00d228a7a5f75005bed7.js.br


Done 'admin-3c338fde9c3e062c07d3789afb57cbbef771755a4b2f00d228a7a5f75005bed7.js' : 0.09 secs

Compressing: auto-redirect-03e5d3e9a32ee2864cfa327612eb79b3a581c27b7c9341dcb705945abadf53d8.js
gzip -f -c -9 /var/www/discourse/public/assets/auto-redirect-03e5d3e9a32ee2864cfa327612eb79b3a581c27b7c9341dcb705945abadf53d8.js > /var/www/discourse/public/assets/auto-redirect-03e5d3e9a32ee2864cfa327612eb79b3a581c27b7c9341dcb705945abadf53d8.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/auto-redirect-03e5d3e9a32ee2864cfa327612eb79b3a581c27b7c9341dcb705945abadf53d8.js --output=/var/www/discourse/public/assets/auto-redirect-03e5d3e9a32ee2864cfa327612eb79b3a581c27b7c9341dcb705945abadf53d8.js.br


Done 'auto-redirect-03e5d3e9a32ee2864cfa327612eb79b3a581c27b7c9341dcb705945abadf53d8.js' : 0.01 secs

Compressing: browser-detect-99f42f91bffa8ca1606d62b70bb92f981d83921e78ccdbd3d9538f07007f27ac.js
gzip -f -c -9 /var/www/discourse/public/assets/browser-detect-99f42f91bffa8ca1606d62b70bb92f981d83921e78ccdbd3d9538f07007f27ac.js > /var/www/discourse/public/assets/browser-detect-99f42f91bffa8ca1606d62b70bb92f981d83921e78ccdbd3d9538f07007f27ac.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/browser-detect-99f42f91bffa8ca1606d62b70bb92f981d83921e78ccdbd3d9538f07007f27ac.js --output=/var/www/discourse/public/assets/browser-detect-99f42f91bffa8ca1606d62b70bb92f981d83921e78ccdbd3d9538f07007f27ac.js.br


Done 'browser-detect-99f42f91bffa8ca1606d62b70bb92f981d83921e78ccdbd3d9538f07007f27ac.js' : 0.01 secs

Compressing: browser-update-9070f07226d022f68c06506e046ae33f8fe725302ff53955cd3d483f2fc47ff6.js
gzip -f -c -9 /var/www/discourse/public/assets/browser-update-9070f07226d022f68c06506e046ae33f8fe725302ff53955cd3d483f2fc47ff6.js > /var/www/discourse/public/assets/browser-update-9070f07226d022f68c06506e046ae33f8fe725302ff53955cd3d483f2fc47ff6.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/browser-update-9070f07226d022f68c06506e046ae33f8fe725302ff53955cd3d483f2fc47ff6.js --output=/var/www/discourse/public/assets/browser-update-9070f07226d022f68c06506e046ae33f8fe725302ff53955cd3d483f2fc47ff6.js.br


Done 'browser-update-9070f07226d022f68c06506e046ae33f8fe725302ff53955cd3d483f2fc47ff6.js' : 0.0 secs

Compressing: chunk.0f2367ced1a2cd7a0bfa.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.0f2367ced1a2cd7a0bfa.d41d8cd9.js > /var/www/discourse/public/assets/chunk.0f2367ced1a2cd7a0bfa.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.0f2367ced1a2cd7a0bfa.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.0f2367ced1a2cd7a0bfa.d41d8cd9.js.br


Done 'chunk.0f2367ced1a2cd7a0bfa.d41d8cd9.js' : 0.01 secs

Compressing: chunk.22bd85ca9601bf417cc8.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.22bd85ca9601bf417cc8.d41d8cd9.js > /var/www/discourse/public/assets/chunk.22bd85ca9601bf417cc8.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.22bd85ca9601bf417cc8.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.22bd85ca9601bf417cc8.d41d8cd9.js.br


Done 'chunk.22bd85ca9601bf417cc8.d41d8cd9.js' : 0.43 secs

Compressing: chunk.34aaccce64091bcebbc3.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.34aaccce64091bcebbc3.d41d8cd9.js > /var/www/discourse/public/assets/chunk.34aaccce64091bcebbc3.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.34aaccce64091bcebbc3.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.34aaccce64091bcebbc3.d41d8cd9.js.br


Done 'chunk.34aaccce64091bcebbc3.d41d8cd9.js' : 0.05 secs

Compressing: chunk.3a140fe9ea124f7d68ee.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.3a140fe9ea124f7d68ee.d41d8cd9.js > /var/www/discourse/public/assets/chunk.3a140fe9ea124f7d68ee.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.3a140fe9ea124f7d68ee.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.3a140fe9ea124f7d68ee.d41d8cd9.js.br


Done 'chunk.3a140fe9ea124f7d68ee.d41d8cd9.js' : 0.01 secs

Compressing: chunk.3eae6d01ac1190dae2bc.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.3eae6d01ac1190dae2bc.d41d8cd9.js > /var/www/discourse/public/assets/chunk.3eae6d01ac1190dae2bc.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.3eae6d01ac1190dae2bc.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.3eae6d01ac1190dae2bc.d41d8cd9.js.br


Done 'chunk.3eae6d01ac1190dae2bc.d41d8cd9.js' : 0.0 secs

Compressing: chunk.467ded2e98164d782a20.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.467ded2e98164d782a20.d41d8cd9.js > /var/www/discourse/public/assets/chunk.467ded2e98164d782a20.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.467ded2e98164d782a20.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.467ded2e98164d782a20.d41d8cd9.js.br


Done 'chunk.467ded2e98164d782a20.d41d8cd9.js' : 0.01 secs

Compressing: chunk.48728634abba982d4eea.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.48728634abba982d4eea.d41d8cd9.js > /var/www/discourse/public/assets/chunk.48728634abba982d4eea.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.48728634abba982d4eea.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.48728634abba982d4eea.d41d8cd9.js.br


Done 'chunk.48728634abba982d4eea.d41d8cd9.js' : 0.01 secs

Compressing: chunk.825036fb6bfa384ce962.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.825036fb6bfa384ce962.d41d8cd9.js > /var/www/discourse/public/assets/chunk.825036fb6bfa384ce962.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.825036fb6bfa384ce962.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.825036fb6bfa384ce962.d41d8cd9.js.br


Done 'chunk.825036fb6bfa384ce962.d41d8cd9.js' : 0.01 secs

Compressing: chunk.8883c2e6339737f95aa2.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.8883c2e6339737f95aa2.d41d8cd9.js > /var/www/discourse/public/assets/chunk.8883c2e6339737f95aa2.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.8883c2e6339737f95aa2.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.8883c2e6339737f95aa2.d41d8cd9.js.br


Done 'chunk.8883c2e6339737f95aa2.d41d8cd9.js' : 0.01 secs

Compressing: chunk.8e62faf7d333ae639118.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.8e62faf7d333ae639118.d41d8cd9.js > /var/www/discourse/public/assets/chunk.8e62faf7d333ae639118.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.8e62faf7d333ae639118.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.8e62faf7d333ae639118.d41d8cd9.js.br


Done 'chunk.8e62faf7d333ae639118.d41d8cd9.js' : 0.01 secs

Compressing: chunk.9b671dbde2dccbd88fb7.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.9b671dbde2dccbd88fb7.d41d8cd9.js > /var/www/discourse/public/assets/chunk.9b671dbde2dccbd88fb7.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.9b671dbde2dccbd88fb7.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.9b671dbde2dccbd88fb7.d41d8cd9.js.br


Done 'chunk.9b671dbde2dccbd88fb7.d41d8cd9.js' : 0.0 secs

Compressing: chunk.d4d9aed67b3ba62c334d.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.d4d9aed67b3ba62c334d.d41d8cd9.js > /var/www/discourse/public/assets/chunk.d4d9aed67b3ba62c334d.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.d4d9aed67b3ba62c334d.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.d4d9aed67b3ba62c334d.d41d8cd9.js.br


Done 'chunk.d4d9aed67b3ba62c334d.d41d8cd9.js' : 0.01 secs

Compressing: chunk.eeb03a313575c789cdea.d41d8cd9.js
gzip -f -c -9 /var/www/discourse/public/assets/chunk.eeb03a313575c789cdea.d41d8cd9.js > /var/www/discourse/public/assets/chunk.eeb03a313575c789cdea.d41d8cd9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/chunk.eeb03a313575c789cdea.d41d8cd9.js --output=/var/www/discourse/public/assets/chunk.eeb03a313575c789cdea.d41d8cd9.js.br


Done 'chunk.eeb03a313575c789cdea.d41d8cd9.js' : 0.02 secs

Compressing: embed-application-1896c09383b1c54200925ff073e8a02aaf7c9f1e568deff3fa7907fba28c423f.js
gzip -f -c -9 /var/www/discourse/public/assets/embed-application-1896c09383b1c54200925ff073e8a02aaf7c9f1e568deff3fa7907fba28c423f.js > /var/www/discourse/public/assets/embed-application-1896c09383b1c54200925ff073e8a02aaf7c9f1e568deff3fa7907fba28c423f.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/embed-application-1896c09383b1c54200925ff073e8a02aaf7c9f1e568deff3fa7907fba28c423f.js --output=/var/www/discourse/public/assets/embed-application-1896c09383b1c54200925ff073e8a02aaf7c9f1e568deff3fa7907fba28c423f.js.br


Done 'embed-application-1896c09383b1c54200925ff073e8a02aaf7c9f1e568deff3fa7907fba28c423f.js' : 0.01 secs

Compressing: google-tag-manager-78e83b8ae984b564b9745ad42fff40e8e544d5f805befd1f8265e859205f96b4.js
gzip -f -c -9 /var/www/discourse/public/assets/google-tag-manager-78e83b8ae984b564b9745ad42fff40e8e544d5f805befd1f8265e859205f96b4.js > /var/www/discourse/public/assets/google-tag-manager-78e83b8ae984b564b9745ad42fff40e8e544d5f805befd1f8265e859205f96b4.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/google-tag-manager-78e83b8ae984b564b9745ad42fff40e8e544d5f805befd1f8265e859205f96b4.js --output=/var/www/discourse/public/assets/google-tag-manager-78e83b8ae984b564b9745ad42fff40e8e544d5f805befd1f8265e859205f96b4.js.br


Done 'google-tag-manager-78e83b8ae984b564b9745ad42fff40e8e544d5f805befd1f8265e859205f96b4.js' : 0.0 secs

Compressing: google-universal-analytics-v3-08add7ec997ab472fcd9f821d32ff7caf4b8b9a5de2ec18ca723a040be07a098.js
gzip -f -c -9 /var/www/discourse/public/assets/google-universal-analytics-v3-08add7ec997ab472fcd9f821d32ff7caf4b8b9a5de2ec18ca723a040be07a098.js > /var/www/discourse/public/assets/google-universal-analytics-v3-08add7ec997ab472fcd9f821d32ff7caf4b8b9a5de2ec18ca723a040be07a098.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/google-universal-analytics-v3-08add7ec997ab472fcd9f821d32ff7caf4b8b9a5de2ec18ca723a040be07a098.js --output=/var/www/discourse/public/assets/google-universal-analytics-v3-08add7ec997ab472fcd9f821d32ff7caf4b8b9a5de2ec18ca723a040be07a098.js.br


Done 'google-universal-analytics-v3-08add7ec997ab472fcd9f821d32ff7caf4b8b9a5de2ec18ca723a040be07a098.js' : 0.01 secs

Compressing: google-universal-analytics-v4-e154af4adb3c483a3aba7f9a7229b8881cdc5cf369290923d965a2ad30163ae8.js
gzip -f -c -9 /var/www/discourse/public/assets/google-universal-analytics-v4-e154af4adb3c483a3aba7f9a7229b8881cdc5cf369290923d965a2ad30163ae8.js > /var/www/discourse/public/assets/google-universal-analytics-v4-e154af4adb3c483a3aba7f9a7229b8881cdc5cf369290923d965a2ad30163ae8.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/google-universal-analytics-v4-e154af4adb3c483a3aba7f9a7229b8881cdc5cf369290923d965a2ad30163ae8.js --output=/var/www/discourse/public/assets/google-universal-analytics-v4-e154af4adb3c483a3aba7f9a7229b8881cdc5cf369290923d965a2ad30163ae8.js.br


Done 'google-universal-analytics-v4-e154af4adb3c483a3aba7f9a7229b8881cdc5cf369290923d965a2ad30163ae8.js' : 0.0 secs

Compressing: onpopstate-handler-1ea3e951679a33d36b6c5f2f8d98016e9908c4af9110736a24b159542c83a9b8.js
gzip -f -c -9 /var/www/discourse/public/assets/onpopstate-handler-1ea3e951679a33d36b6c5f2f8d98016e9908c4af9110736a24b159542c83a9b8.js > /var/www/discourse/public/assets/onpopstate-handler-1ea3e951679a33d36b6c5f2f8d98016e9908c4af9110736a24b159542c83a9b8.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/onpopstate-handler-1ea3e951679a33d36b6c5f2f8d98016e9908c4af9110736a24b159542c83a9b8.js --output=/var/www/discourse/public/assets/onpopstate-handler-1ea3e951679a33d36b6c5f2f8d98016e9908c4af9110736a24b159542c83a9b8.js.br


Done 'onpopstate-handler-1ea3e951679a33d36b6c5f2f8d98016e9908c4af9110736a24b159542c83a9b8.js' : 0.0 secs

Compressing: plugins/chat-ddcde0670e1c229cedc8c04eb1245334b2a4ddf7f5a54bdb10138058c7afb003.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/chat-ddcde0670e1c229cedc8c04eb1245334b2a4ddf7f5a54bdb10138058c7afb003.js > /var/www/discourse/public/assets/plugins/chat-ddcde0670e1c229cedc8c04eb1245334b2a4ddf7f5a54bdb10138058c7afb003.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/chat-ddcde0670e1c229cedc8c04eb1245334b2a4ddf7f5a54bdb10138058c7afb003.js --output=/var/www/discourse/public/assets/plugins/chat-ddcde0670e1c229cedc8c04eb1245334b2a4ddf7f5a54bdb10138058c7afb003.js.br


Done 'plugins/chat-ddcde0670e1c229cedc8c04eb1245334b2a4ddf7f5a54bdb10138058c7afb003.js' : 0.06 secs

Compressing: plugins/checklist-273fb3ab5f7d346fa16c1482aedbd81035c5f677a83d7940da78abf7c1e16744.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/checklist-273fb3ab5f7d346fa16c1482aedbd81035c5f677a83d7940da78abf7c1e16744.js > /var/www/discourse/public/assets/plugins/checklist-273fb3ab5f7d346fa16c1482aedbd81035c5f677a83d7940da78abf7c1e16744.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/checklist-273fb3ab5f7d346fa16c1482aedbd81035c5f677a83d7940da78abf7c1e16744.js --output=/var/www/discourse/public/assets/plugins/checklist-273fb3ab5f7d346fa16c1482aedbd81035c5f677a83d7940da78abf7c1e16744.js.br


Done 'plugins/checklist-273fb3ab5f7d346fa16c1482aedbd81035c5f677a83d7940da78abf7c1e16744.js' : 0.01 secs

Compressing: plugins/discourse-details-48148ec534a4c5e9614302186b345123ba1358787c41bc31cbd17231f794fe42.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/discourse-details-48148ec534a4c5e9614302186b345123ba1358787c41bc31cbd17231f794fe42.js > /var/www/discourse/public/assets/plugins/discourse-details-48148ec534a4c5e9614302186b345123ba1358787c41bc31cbd17231f794fe42.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/discourse-details-48148ec534a4c5e9614302186b345123ba1358787c41bc31cbd17231f794fe42.js --output=/var/www/discourse/public/assets/plugins/discourse-details-48148ec534a4c5e9614302186b345123ba1358787c41bc31cbd17231f794fe42.js.br


Done 'plugins/discourse-details-48148ec534a4c5e9614302186b345123ba1358787c41bc31cbd17231f794fe42.js' : 0.0 secs

Compressing: plugins/discourse-lazy-videos-93eefdae5b7d15a7cb3301aeba28935598be3f8484243b33146694690e2dd474.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/discourse-lazy-videos-93eefdae5b7d15a7cb3301aeba28935598be3f8484243b33146694690e2dd474.js > /var/www/discourse/public/assets/plugins/discourse-lazy-videos-93eefdae5b7d15a7cb3301aeba28935598be3f8484243b33146694690e2dd474.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/discourse-lazy-videos-93eefdae5b7d15a7cb3301aeba28935598be3f8484243b33146694690e2dd474.js --output=/var/www/discourse/public/assets/plugins/discourse-lazy-videos-93eefdae5b7d15a7cb3301aeba28935598be3f8484243b33146694690e2dd474.js.br


Done 'plugins/discourse-lazy-videos-93eefdae5b7d15a7cb3301aeba28935598be3f8484243b33146694690e2dd474.js' : 0.01 secs

Compressing: plugins/discourse-local-dates-448cb27f9c7b9389e5c1a04b9811d062bdd30a9c69bdfc034615baa076a6e48e.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/discourse-local-dates-448cb27f9c7b9389e5c1a04b9811d062bdd30a9c69bdfc034615baa076a6e48e.js > /var/www/discourse/public/assets/plugins/discourse-local-dates-448cb27f9c7b9389e5c1a04b9811d062bdd30a9c69bdfc034615baa076a6e48e.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/discourse-local-dates-448cb27f9c7b9389e5c1a04b9811d062bdd30a9c69bdfc034615baa076a6e48e.js --output=/var/www/discourse/public/assets/plugins/discourse-local-dates-448cb27f9c7b9389e5c1a04b9811d062bdd30a9c69bdfc034615baa076a6e48e.js.br


Done 'plugins/discourse-local-dates-448cb27f9c7b9389e5c1a04b9811d062bdd30a9c69bdfc034615baa076a6e48e.js' : 0.01 secs

Compressing: plugins/discourse-narrative-bot-643f10339e287d380f81413fde738a8ad3a6e2a5ee4d7e30f2e841f92c78e5eb.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/discourse-narrative-bot-643f10339e287d380f81413fde738a8ad3a6e2a5ee4d7e30f2e841f92c78e5eb.js > /var/www/discourse/public/assets/plugins/discourse-narrative-bot-643f10339e287d380f81413fde738a8ad3a6e2a5ee4d7e30f2e841f92c78e5eb.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/discourse-narrative-bot-643f10339e287d380f81413fde738a8ad3a6e2a5ee4d7e30f2e841f92c78e5eb.js --output=/var/www/discourse/public/assets/plugins/discourse-narrative-bot-643f10339e287d380f81413fde738a8ad3a6e2a5ee4d7e30f2e841f92c78e5eb.js.br


Done 'plugins/discourse-narrative-bot-643f10339e287d380f81413fde738a8ad3a6e2a5ee4d7e30f2e841f92c78e5eb.js' : 0.01 secs

Compressing: plugins/discourse-presence-836dffda9abeade2d165054ea67f311af7b9e5ab8befba38d7b6995f891fbe88.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/discourse-presence-836dffda9abeade2d165054ea67f311af7b9e5ab8befba38d7b6995f891fbe88.js > /var/www/discourse/public/assets/plugins/discourse-presence-836dffda9abeade2d165054ea67f311af7b9e5ab8befba38d7b6995f891fbe88.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/discourse-presence-836dffda9abeade2d165054ea67f311af7b9e5ab8befba38d7b6995f891fbe88.js --output=/var/www/discourse/public/assets/plugins/discourse-presence-836dffda9abeade2d165054ea67f311af7b9e5ab8befba38d7b6995f891fbe88.js.br


Done 'plugins/discourse-presence-836dffda9abeade2d165054ea67f311af7b9e5ab8befba38d7b6995f891fbe88.js' : 0.01 secs

Compressing: plugins/docker_manager_admin-f303fe8961251b1e7cef8ae8d8b5811b4b0c83694e9a8fd9a9a52b8a17f7f33b.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/docker_manager_admin-f303fe8961251b1e7cef8ae8d8b5811b4b0c83694e9a8fd9a9a52b8a17f7f33b.js > /var/www/discourse/public/assets/plugins/docker_manager_admin-f303fe8961251b1e7cef8ae8d8b5811b4b0c83694e9a8fd9a9a52b8a17f7f33b.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/docker_manager_admin-f303fe8961251b1e7cef8ae8d8b5811b4b0c83694e9a8fd9a9a52b8a17f7f33b.js --output=/var/www/discourse/public/assets/plugins/docker_manager_admin-f303fe8961251b1e7cef8ae8d8b5811b4b0c83694e9a8fd9a9a52b8a17f7f33b.js.br


Done 'plugins/docker_manager_admin-f303fe8961251b1e7cef8ae8d8b5811b4b0c83694e9a8fd9a9a52b8a17f7f33b.js' : 0.01 secs

Compressing: plugins/footnote-9e6a21e04868e13dc75adf73cfaab1be722d32b46af9a8b1894712c647ab6499.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/footnote-9e6a21e04868e13dc75adf73cfaab1be722d32b46af9a8b1894712c647ab6499.js > /var/www/discourse/public/assets/plugins/footnote-9e6a21e04868e13dc75adf73cfaab1be722d32b46af9a8b1894712c647ab6499.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/footnote-9e6a21e04868e13dc75adf73cfaab1be722d32b46af9a8b1894712c647ab6499.js --output=/var/www/discourse/public/assets/plugins/footnote-9e6a21e04868e13dc75adf73cfaab1be722d32b46af9a8b1894712c647ab6499.js.br


Done 'plugins/footnote-9e6a21e04868e13dc75adf73cfaab1be722d32b46af9a8b1894712c647ab6499.js' : 0.01 secs

Compressing: plugins/poll-32c8dc9991f8a0acf68044779a7967069b1170e85045056d3df464089baf55af.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/poll-32c8dc9991f8a0acf68044779a7967069b1170e85045056d3df464089baf55af.js > /var/www/discourse/public/assets/plugins/poll-32c8dc9991f8a0acf68044779a7967069b1170e85045056d3df464089baf55af.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/poll-32c8dc9991f8a0acf68044779a7967069b1170e85045056d3df464089baf55af.js --output=/var/www/discourse/public/assets/plugins/poll-32c8dc9991f8a0acf68044779a7967069b1170e85045056d3df464089baf55af.js.br


Done 'plugins/poll-32c8dc9991f8a0acf68044779a7967069b1170e85045056d3df464089baf55af.js' : 0.01 secs

Compressing: plugins/spoiler-alert-77512c36f465902e7dbf3b8252c7cd6387edc9bf4ca804b79466212c1d1c843d.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/spoiler-alert-77512c36f465902e7dbf3b8252c7cd6387edc9bf4ca804b79466212c1d1c843d.js > /var/www/discourse/public/assets/plugins/spoiler-alert-77512c36f465902e7dbf3b8252c7cd6387edc9bf4ca804b79466212c1d1c843d.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/spoiler-alert-77512c36f465902e7dbf3b8252c7cd6387edc9bf4ca804b79466212c1d1c843d.js --output=/var/www/discourse/public/assets/plugins/spoiler-alert-77512c36f465902e7dbf3b8252c7cd6387edc9bf4ca804b79466212c1d1c843d.js.br


Done 'plugins/spoiler-alert-77512c36f465902e7dbf3b8252c7cd6387edc9bf4ca804b79466212c1d1c843d.js' : 0.0 secs

Compressing: plugins/styleguide-cd0b2046752fcee57cbf4619de9a72b53b7ba35748d66094d5dd3f86ac4198ed.js
gzip -f -c -9 /var/www/discourse/public/assets/plugins/styleguide-cd0b2046752fcee57cbf4619de9a72b53b7ba35748d66094d5dd3f86ac4198ed.js > /var/www/discourse/public/assets/plugins/styleguide-cd0b2046752fcee57cbf4619de9a72b53b7ba35748d66094d5dd3f86ac4198ed.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/plugins/styleguide-cd0b2046752fcee57cbf4619de9a72b53b7ba35748d66094d5dd3f86ac4198ed.js --output=/var/www/discourse/public/assets/plugins/styleguide-cd0b2046752fcee57cbf4619de9a72b53b7ba35748d66094d5dd3f86ac4198ed.js.br


Done 'plugins/styleguide-cd0b2046752fcee57cbf4619de9a72b53b7ba35748d66094d5dd3f86ac4198ed.js' : 0.02 secs

Compressing: print-page-56cf61969efa7e4e490b3b2dff49ea19a32c7996a53b6060d3e9c479ad0d0e47.js
gzip -f -c -9 /var/www/discourse/public/assets/print-page-56cf61969efa7e4e490b3b2dff49ea19a32c7996a53b6060d3e9c479ad0d0e47.js > /var/www/discourse/public/assets/print-page-56cf61969efa7e4e490b3b2dff49ea19a32c7996a53b6060d3e9c479ad0d0e47.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/print-page-56cf61969efa7e4e490b3b2dff49ea19a32c7996a53b6060d3e9c479ad0d0e47.js --output=/var/www/discourse/public/assets/print-page-56cf61969efa7e4e490b3b2dff49ea19a32c7996a53b6060d3e9c479ad0d0e47.js.br


Done 'print-page-56cf61969efa7e4e490b3b2dff49ea19a32c7996a53b6060d3e9c479ad0d0e47.js' : 0.01 secs

Compressing: publish-955ebc11c25146ca9f2d846e9d40e875f8f7e737f62d68a77acd0d62626a5a79.js
gzip -f -c -9 /var/www/discourse/public/assets/publish-955ebc11c25146ca9f2d846e9d40e875f8f7e737f62d68a77acd0d62626a5a79.js > /var/www/discourse/public/assets/publish-955ebc11c25146ca9f2d846e9d40e875f8f7e737f62d68a77acd0d62626a5a79.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/publish-955ebc11c25146ca9f2d846e9d40e875f8f7e737f62d68a77acd0d62626a5a79.js --output=/var/www/discourse/public/assets/publish-955ebc11c25146ca9f2d846e9d40e875f8f7e737f62d68a77acd0d62626a5a79.js.br


Done 'publish-955ebc11c25146ca9f2d846e9d40e875f8f7e737f62d68a77acd0d62626a5a79.js' : 0.01 secs

Compressing: scripts/discourse-boot-aa32d2b2d86a6dc385cdd26cc1a3daf031b31084d48de01bfcc15d9eff652aaf.js
gzip -f -c -9 /var/www/discourse/public/assets/scripts/discourse-boot-aa32d2b2d86a6dc385cdd26cc1a3daf031b31084d48de01bfcc15d9eff652aaf.js > /var/www/discourse/public/assets/scripts/discourse-boot-aa32d2b2d86a6dc385cdd26cc1a3daf031b31084d48de01bfcc15d9eff652aaf.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/scripts/discourse-boot-aa32d2b2d86a6dc385cdd26cc1a3daf031b31084d48de01bfcc15d9eff652aaf.js --output=/var/www/discourse/public/assets/scripts/discourse-boot-aa32d2b2d86a6dc385cdd26cc1a3daf031b31084d48de01bfcc15d9eff652aaf.js.br


Done 'scripts/discourse-boot-aa32d2b2d86a6dc385cdd26cc1a3daf031b31084d48de01bfcc15d9eff652aaf.js' : 0.01 secs

Compressing: scripts/discourse-test-load-dynamic-js-600d633f9d3e3a49ad787e95d2de235a44db49bc5ac076c3a8be2c6b0fcc1f3c.js
gzip -f -c -9 /var/www/discourse/public/assets/scripts/discourse-test-load-dynamic-js-600d633f9d3e3a49ad787e95d2de235a44db49bc5ac076c3a8be2c6b0fcc1f3c.js > /var/www/discourse/public/assets/scripts/discourse-test-load-dynamic-js-600d633f9d3e3a49ad787e95d2de235a44db49bc5ac076c3a8be2c6b0fcc1f3c.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/scripts/discourse-test-load-dynamic-js-600d633f9d3e3a49ad787e95d2de235a44db49bc5ac076c3a8be2c6b0fcc1f3c.js --output=/var/www/discourse/public/assets/scripts/discourse-test-load-dynamic-js-600d633f9d3e3a49ad787e95d2de235a44db49bc5ac076c3a8be2c6b0fcc1f3c.js.br


Done 'scripts/discourse-test-load-dynamic-js-600d633f9d3e3a49ad787e95d2de235a44db49bc5ac076c3a8be2c6b0fcc1f3c.js' : 0.0 secs

Compressing: scripts/module-shims-8cc35eaf1ccb29371c77808ebf7443fd29e3afa328aa998e3de1844d914a0eb1.js
gzip -f -c -9 /var/www/discourse/public/assets/scripts/module-shims-8cc35eaf1ccb29371c77808ebf7443fd29e3afa328aa998e3de1844d914a0eb1.js > /var/www/discourse/public/assets/scripts/module-shims-8cc35eaf1ccb29371c77808ebf7443fd29e3afa328aa998e3de1844d914a0eb1.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/scripts/module-shims-8cc35eaf1ccb29371c77808ebf7443fd29e3afa328aa998e3de1844d914a0eb1.js --output=/var/www/discourse/public/assets/scripts/module-shims-8cc35eaf1ccb29371c77808ebf7443fd29e3afa328aa998e3de1844d914a0eb1.js.br


Done 'scripts/module-shims-8cc35eaf1ccb29371c77808ebf7443fd29e3afa328aa998e3de1844d914a0eb1.js' : 0.01 secs

Compressing: scripts/start-app-b012dc3844eefc581e6d6d0de42cb10920aaf545a6a28137529fab0041be3ddc.js
gzip -f -c -9 /var/www/discourse/public/assets/scripts/start-app-b012dc3844eefc581e6d6d0de42cb10920aaf545a6a28137529fab0041be3ddc.js > /var/www/discourse/public/assets/scripts/start-app-b012dc3844eefc581e6d6d0de42cb10920aaf545a6a28137529fab0041be3ddc.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/scripts/start-app-b012dc3844eefc581e6d6d0de42cb10920aaf545a6a28137529fab0041be3ddc.js --output=/var/www/discourse/public/assets/scripts/start-app-b012dc3844eefc581e6d6d0de42cb10920aaf545a6a28137529fab0041be3ddc.js.br


Done 'scripts/start-app-b012dc3844eefc581e6d6d0de42cb10920aaf545a6a28137529fab0041be3ddc.js' : 0.0 secs

Compressing: splash-screen-4ec06c1132e220f9f4d0e7b26a520b4baab051cdc2a0a847d49f470573da51b9.js
gzip -f -c -9 /var/www/discourse/public/assets/splash-screen-4ec06c1132e220f9f4d0e7b26a520b4baab051cdc2a0a847d49f470573da51b9.js > /var/www/discourse/public/assets/splash-screen-4ec06c1132e220f9f4d0e7b26a520b4baab051cdc2a0a847d49f470573da51b9.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/splash-screen-4ec06c1132e220f9f4d0e7b26a520b4baab051cdc2a0a847d49f470573da51b9.js --output=/var/www/discourse/public/assets/splash-screen-4ec06c1132e220f9f4d0e7b26a520b4baab051cdc2a0a847d49f470573da51b9.js.br


Done 'splash-screen-4ec06c1132e220f9f4d0e7b26a520b4baab051cdc2a0a847d49f470573da51b9.js' : 0.0 secs

Compressing: start-discourse-7c0f5f4daf3c942b7b6ecfe8e62e2e5a0f6555924859cf055314c0df3d617353.js
gzip -f -c -9 /var/www/discourse/public/assets/start-discourse-7c0f5f4daf3c942b7b6ecfe8e62e2e5a0f6555924859cf055314c0df3d617353.js > /var/www/discourse/public/assets/start-discourse-7c0f5f4daf3c942b7b6ecfe8e62e2e5a0f6555924859cf055314c0df3d617353.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/start-discourse-7c0f5f4daf3c942b7b6ecfe8e62e2e5a0f6555924859cf055314c0df3d617353.js --output=/var/www/discourse/public/assets/start-discourse-7c0f5f4daf3c942b7b6ecfe8e62e2e5a0f6555924859cf055314c0df3d617353.js.br


Done 'start-discourse-7c0f5f4daf3c942b7b6ecfe8e62e2e5a0f6555924859cf055314c0df3d617353.js' : 0.01 secs

Compressing: test-i18n-f77739b12815c35252d0581cb73a15251b442581f16db03be252a392517f0b54.js
gzip -f -c -9 /var/www/discourse/public/assets/test-i18n-f77739b12815c35252d0581cb73a15251b442581f16db03be252a392517f0b54.js > /var/www/discourse/public/assets/test-i18n-f77739b12815c35252d0581cb73a15251b442581f16db03be252a392517f0b54.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/test-i18n-f77739b12815c35252d0581cb73a15251b442581f16db03be252a392517f0b54.js --output=/var/www/discourse/public/assets/test-i18n-f77739b12815c35252d0581cb73a15251b442581f16db03be252a392517f0b54.js.br


Done 'test-i18n-f77739b12815c35252d0581cb73a15251b442581f16db03be252a392517f0b54.js' : 0.08 secs

Compressing: test-site-settings-3028645a6c64f68a8c3e3503be48ad2aafb8de847a4169e84d05cec01a993593.js
gzip -f -c -9 /var/www/discourse/public/assets/test-site-settings-3028645a6c64f68a8c3e3503be48ad2aafb8de847a4169e84d05cec01a993593.js > /var/www/discourse/public/assets/test-site-settings-3028645a6c64f68a8c3e3503be48ad2aafb8de847a4169e84d05cec01a993593.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/test-site-settings-3028645a6c64f68a8c3e3503be48ad2aafb8de847a4169e84d05cec01a993593.js --output=/var/www/discourse/public/assets/test-site-settings-3028645a6c64f68a8c3e3503be48ad2aafb8de847a4169e84d05cec01a993593.js.br


Done 'test-site-settings-3028645a6c64f68a8c3e3503be48ad2aafb8de847a4169e84d05cec01a993593.js' : 0.01 secs

Compressing: vendor.47fe1949ff0285dbc995d87a6ae0d449-223fd39128ca149073c28a57e41e969bafdb0a241e1149adab6918b27e7a3265.js
gzip -f -c -9 /var/www/discourse/public/assets/vendor.47fe1949ff0285dbc995d87a6ae0d449-223fd39128ca149073c28a57e41e969bafdb0a241e1149adab6918b27e7a3265.js > /var/www/discourse/public/assets/vendor.47fe1949ff0285dbc995d87a6ae0d449-223fd39128ca149073c28a57e41e969bafdb0a241e1149adab6918b27e7a3265.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/vendor.47fe1949ff0285dbc995d87a6ae0d449-223fd39128ca149073c28a57e41e969bafdb0a241e1149adab6918b27e7a3265.js --output=/var/www/discourse/public/assets/vendor.47fe1949ff0285dbc995d87a6ae0d449-223fd39128ca149073c28a57e41e969bafdb0a241e1149adab6918b27e7a3265.js.br


Done 'vendor.47fe1949ff0285dbc995d87a6ae0d449-223fd39128ca149073c28a57e41e969bafdb0a241e1149adab6918b27e7a3265.js' : 0.06 secs

Compressing: workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.dev.js
gzip -f -c -9 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.dev.js > /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.dev.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.dev.js --output=/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.dev.js.br


Done 'workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.dev.js' : 0.01 secs

Compressing: workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js
gzip -f -c -9 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js > /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js --output=/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js.br


Done 'workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js' : 0.0 secs

Compressing: workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.dev.js
gzip -f -c -9 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.dev.js > /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.dev.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.dev.js --output=/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.dev.js.br


Done 'workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.dev.js' : 0.01 secs

Compressing: workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js
gzip -f -c -9 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js > /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js --output=/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js.br


Done 'workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js' : 0.01 secs

Compressing: workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.dev.js
gzip -f -c -9 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.dev.js > /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.dev.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.dev.js --output=/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.dev.js.br


Done 'workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.dev.js' : 0.01 secs

Compressing: workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js
gzip -f -c -9 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js > /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js --output=/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js.br


Done 'workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js' : 0.0 secs

Compressing: workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.dev.js
gzip -f -c -9 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.dev.js > /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.dev.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.dev.js --output=/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.dev.js.br


Done 'workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.dev.js' : 0.01 secs

Compressing: workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js
gzip -f -c -9 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js > /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js --output=/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js.br


Done 'workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js' : 0.01 secs

Compressing: workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.dev.js
gzip -f -c -9 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.dev.js > /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.dev.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.dev.js --output=/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.dev.js.br


Done 'workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.dev.js' : 0.01 secs

Compressing: workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.prod.js
gzip -f -c -9 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.prod.js > /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.prod.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.prod.js --output=/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.prod.js.br


Done 'workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.prod.js' : 0.01 secs

Compressing: workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js
gzip -f -c -9 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js > /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js.gz

brotli -f --quality=6 /var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js --output=/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js.br


Done 'workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js' : 0.01 secs

Done 'Done compressing all JS files' : 7.46 secs

Start compiling CSS: 2024-03-18 01:58:49 UTC
-------------
Compiling CSS for default 2024-03-18 01:58:49 UTC
precompile target: desktop
precompile target: mobile
precompile target: admin
precompile target: wizard
precompile target: desktop_rtl
precompile target: mobile_rtl
precompile target: admin_rtl
precompile target: wizard_rtl
precompile target: chat
precompile target: checklist
precompile target: discourse-details
precompile target: discourse-lazy-videos
precompile target: discourse-local-dates
precompile target: discourse-narrative-bot
precompile target: discourse-presence
precompile target: docker_manager
precompile target: footnote
precompile target: poll
precompile target: spoiler-alert
precompile target: chat_mobile
precompile target: chat_desktop
precompile target: poll_desktop
precompile target: chat_rtl
precompile target: checklist_rtl
precompile target: discourse-details_rtl
precompile target: discourse-lazy-videos_rtl
precompile target: discourse-local-dates_rtl
precompile target: discourse-narrative-bot_rtl
precompile target: discourse-presence_rtl
precompile target: docker_manager_rtl
precompile target: footnote_rtl
precompile target: poll_rtl
precompile target: spoiler-alert_rtl
precompile target: chat_mobile_rtl
precompile target: chat_desktop_rtl
precompile target: poll_desktop_rtl
precompile target: desktop_theme Default
precompile target: mobile_theme Default
precompile target: color_definitions Default (Dark)
precompile target: color_definitions Default (WCAG Light)
precompile target: color_definitions Default (WCAG Dark)
precompile target: color_definitions Default (Dracula)
precompile target: color_definitions Default (Solarized Light)
precompile target: color_definitions Default (Solarized Dark)
precompile target: color_definitions Default (Base)
Done compiling CSS: 2024-03-18 01:58:54 UTC
/var/www/discourse/lib/discourse_ip_info.rb:48:in `mmdb_download': undefined method `path' for nil:NilClass (NoMethodError)

    filename = File.basename(gz_file.path)
                                    ^^^^^
        from /var/www/discourse/lib/tasks/maxminddb.rake:67:in `block (3 levels) in <main>'
        from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `each'
        from /var/www/discourse/lib/tasks/maxminddb.rake:65:in `block (2 levels) in <main>'
I, [2024-03-18T01:58:54.232635 #1]  INFO -- : yarn run v1.22.19
$ /var/www/discourse/node_modules/.bin/ember build
Building
Environment: development
WARNING: ember-test-selectors: You are using an unsupported ember-cli-babel version. data-test properties are not automatically stripped from your JS code.
building...
...[ConfigLoader]
...[Babel: @embroider/macros > applyPatches]
...[Babel: discourse-widget-hbs > applyPatches]
...[Babel: ember-source > applyPatches]
...[ember.js]
...[Babel: @glimmer/component > applyPatches]
...[Babel: pretty-text > applyPatches]
...[Babel: discourse-common > applyPatches]
...[Babel: @ember/render-modifiers > applyPatches]
...[Babel: @ember/test-helpers > applyPatches]
...[Babel: @ember/test-waiters > applyPatches]
...[Babel: ember-buffered-proxy > applyPatches]
...[Babel: ember-load-initializers > applyPatches]
...[Babel: float-kit > applyPatches]
...[Babel: select-kit > applyPatches]
...[@embroider/compat/app]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[SourceMapConcat]
...[Babel: admin > applyPatches]
...[Babel: admin > applyPatches]
...[SourceMapConcat]
...[TerserWriter]
...[SourceMapConcat]
...[Babel: discourse > applyPatches]
...[TerserWriter]
...[Babel: discourse-plugins > applyPatches]
...[SourceMapConcat]
...[Babel: discourse-plugins > applyPatches]
...[SourceMapConcat]
...[Babel: discourse-plugins > applyPatches]
...[SourceMapConcat]
...[TerserWriter]
...[TerserWriter]
cleaning up
cleaning up...
Built project successfully. Stored in "dist/".
File sizes:
 - dist/assets/activate-account.js: 600 B (343 B gzipped)
 - dist/assets/admin.js: 1.11 MB (166.7 kB gzipped)
 - dist/assets/auto-redirect.js: 175 B (157 B gzipped)
 - dist/assets/browser-detect.js: 425 B (300 B gzipped)
 - dist/assets/browser-update.js: 1.51 kB (862 B gzipped)
 - dist/assets/chunk.0f2367ced1a2cd7a0bfa.d41d8cd9.js: 21.3 kB (8.22 kB gzipped)
 - dist/assets/chunk.22bd85ca9601bf417cc8.d41d8cd9.js: 4.53 MB (1.02 MB gzipped)
 - dist/assets/chunk.34aaccce64091bcebbc3.d41d8cd9.js: 447.97 kB (119.69 kB gzipped)
 - dist/assets/chunk.3a140fe9ea124f7d68ee.d41d8cd9.js: 6.67 kB (2.52 kB gzipped)
 - dist/assets/chunk.3eae6d01ac1190dae2bc.d41d8cd9.js: 211 B (187 B gzipped)
 - dist/assets/chunk.467ded2e98164d782a20.d41d8cd9.js: 6.54 kB (2.66 kB gzipped)
 - dist/assets/chunk.48728634abba982d4eea.d41d8cd9.js: 42.94 kB (14.29 kB gzipped)
 - dist/assets/chunk.4c25ad7e2393f9f3af04.css: 70.35 kB (12.39 kB gzipped)
 - dist/assets/chunk.825036fb6bfa384ce962.d41d8cd9.js: 146 B (135 B gzipped)
 - dist/assets/chunk.8883c2e6339737f95aa2.d41d8cd9.js: 57.28 kB (17.44 kB gzipped)
 - dist/assets/chunk.8e62faf7d333ae639118.d41d8cd9.js: 4.06 kB (1.82 kB gzipped)
 - dist/assets/chunk.9b671dbde2dccbd88fb7.css: 20.97 kB (4.87 kB gzipped)
 - dist/assets/chunk.9b671dbde2dccbd88fb7.d41d8cd9.js: 211 B (188 B gzipped)
 - dist/assets/chunk.d4d9aed67b3ba62c334d.d41d8cd9.js: 64 kB (12 kB gzipped)
 - dist/assets/chunk.eeb03a313575c789cdea.d41d8cd9.js: 126.16 kB (50.71 kB gzipped)
 - dist/assets/discourse.css: 171 B (157 B gzipped)
 - dist/assets/discourse.d41d8cd98f00b204e9800998ecf8427e.css: 0 B
 - dist/assets/embed-application.js: 1.19 kB (579 B gzipped)
 - dist/assets/google-tag-manager.js: 526 B (357 B gzipped)
 - dist/assets/google-universal-analytics-v3.js: 654 B (404 B gzipped)
 - dist/assets/google-universal-analytics-v4.js: 461 B (298 B gzipped)
 - dist/assets/onpopstate-handler.js: 157 B (143 B gzipped)
 - dist/assets/plugins/chat.js: 960.31 kB (149.74 kB gzipped)
 - dist/assets/plugins/checklist.js: 3.66 kB (1.71 kB gzipped)
 - dist/assets/plugins/discourse-details.js: 1.25 kB (614 B gzipped)
 - dist/assets/plugins/discourse-lazy-videos.js: 6.7 kB (2.37 kB gzipped)
 - dist/assets/plugins/discourse-local-dates.js: 33.28 kB (8.95 kB gzipped)
 - dist/assets/plugins/discourse-narrative-bot.js: 1.7 kB (788 B gzipped)
 - dist/assets/plugins/discourse-presence.js: 11.25 kB (2.66 kB gzipped)
 - dist/assets/plugins/docker_manager_admin.js: 38.28 kB (7.45 kB gzipped)
 - dist/assets/plugins/footnote.js: 2.6 kB (1.17 kB gzipped)
 - dist/assets/plugins/poll.js: 63.59 kB (16.39 kB gzipped)
 - dist/assets/plugins/spoiler-alert.js: 3.24 kB (1.38 kB gzipped)
 - dist/assets/plugins/styleguide.js: 153.89 kB (21.4 kB gzipped)
 - dist/assets/print-page.js: 111 B (124 B gzipped)
 - dist/assets/publish.js: 294 B (213 B gzipped)
 - dist/assets/qunit-custom.css: 2.56 kB (746 B gzipped)
 - dist/assets/qunit.css: 886 kB (126.31 kB gzipped)
 - dist/assets/scripts/discourse-boot.js: 866 B (511 B gzipped)
 - dist/assets/scripts/discourse-test-listen-boot.js: 122 B (106 B gzipped)
 - dist/assets/scripts/discourse-test-load-dynamic-js.js: 1.14 kB (599 B gzipped)
 - dist/assets/scripts/module-shims.js: 771 B (326 B gzipped)
 - dist/assets/scripts/start-app.js: 220 B (177 B gzipped)
 - dist/assets/splash-screen.js: 1.17 kB (551 B gzipped)
 - dist/assets/start-discourse.js: 518 B (345 B gzipped)
 - dist/assets/test-i18n.js: 575.99 kB (136.52 kB gzipped)
 - dist/assets/test-site-settings.js: 11.93 kB (4.54 kB gzipped)
 - dist/assets/vendor.47fe1949ff0285dbc995d87a6ae0d449.js: 450.35 kB (126.53 kB gzipped)
 - dist/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.dev.js: 6.93 kB (1.79 kB gzipped)
 - dist/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js: 603 B (354 B gzipped)
 - dist/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.dev.js: 37.73 kB (8.89 kB gzipped)
 - dist/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js: 3.13 kB (1.46 kB gzipped)
 - dist/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.dev.js: 32.82 kB (8.82 kB gzipped)
 - dist/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js: 6.37 kB (2.51 kB gzipped)
 - dist/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.dev.js: 33.29 kB (7.73 kB gzipped)
 - dist/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js: 3.5 kB (1.47 kB gzipped)
 - dist/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.dev.js: 52.47 kB (10.13 kB gzipped)
 - dist/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-strategies.prod.js: 6.88 kB (2.29 kB gzipped)
 - dist/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js: 1.36 kB (749 B gzipped)
 - dist/javascripts/@json-editor/json-editor/2.10.0/jsoneditor.js: 523.75 kB (99.29 kB gzipped)
 - dist/javascripts/ace.js/1.4.13/ace.js: 371.81 kB (101.02 kB gzipped)
 - dist/javascripts/ace.js/1.4.13/ext-searchbox.js: 11.91 kB (3.57 kB gzipped)
 - dist/javascripts/ace.js/1.4.13/mode-html.js: 60.88 kB (18.24 kB gzipped)
 - dist/javascripts/ace.js/1.4.13/mode-scss.js: 24.03 kB (7.98 kB gzipped)
 - dist/javascripts/ace.js/1.4.13/mode-sql.js: 4.84 kB (1.86 kB gzipped)
 - dist/javascripts/ace.js/1.4.13/mode-yaml.js: 5.09 kB (1.77 kB gzipped)
 - dist/javascripts/ace.js/1.4.13/theme-chaos.js: 3.18 kB (1.04 kB gzipped)
 - dist/javascripts/ace.js/1.4.13/theme-chrome.js: 3.04 kB (1.06 kB gzipped)
 - dist/javascripts/ace.js/1.4.13/worker-html.js: 208.1 kB (47.44 kB gzipped)
 - dist/javascripts/ace/ace.js: 370.75 kB (100.77 kB gzipped)
 - dist/javascripts/ace/ext-searchbox.js: 11.91 kB (3.57 kB gzipped)
 - dist/javascripts/ace/mode-html.js: 60.88 kB (18.24 kB gzipped)
 - dist/javascripts/ace/mode-scss.js: 24.03 kB (7.98 kB gzipped)
 - dist/javascripts/ace/mode-sql.js: 2.21 kB (1.01 kB gzipped)
 - dist/javascripts/ace/mode-yaml.js: 5.09 kB (1.77 kB gzipped)
 - dist/javascripts/ace/theme-chrome.js: 3.04 kB (1.06 kB gzipped)
 - dist/javascripts/ace/worker-html.js: 208.1 kB (47.44 kB gzipped)
 - dist/javascripts/chart.js/3.5.1/chart.min.js: 188.37 kB (65.2 kB gzipped)
 - dist/javascripts/chartjs-plugin-datalabels/2.2.0/chartjs-plugin-datalabels.min.js: 12.94 kB (5.24 kB gzipped)
 - dist/javascripts/count.js: 1.44 kB (636 B gzipped)
 - dist/javascripts/diffhtml/1.0.0-beta.30/diffhtml.min.js: 22.41 kB (8.53 kB gzipped)
 - dist/javascripts/embed-topics.js: 1.34 kB (630 B gzipped)
 - dist/javascripts/embed.js: 2.47 kB (1.01 kB gzipped)
 - dist/javascripts/magnific-popup/1.1.0/jquery.magnific-popup.min.js: 20.22 kB (7.35 kB gzipped)
 - dist/javascripts/media-optimization-worker.js: 5.01 kB (1.75 kB gzipped)
 - dist/javascripts/pikaday/1.8.2/pikaday.js: 42.54 kB (9.66 kB gzipped)
 - dist/javascripts/squoosh/mozjpeg_enc.js: 39.03 kB (10.74 kB gzipped)
 - dist/javascripts/squoosh/squoosh_resize.js: 4.53 kB (1.29 kB gzipped)
Done in 119.23s.
Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps

I, [2024-03-18T01:58:54.269006 #1]  INFO -- : Terminating async processes
I, [2024-03-18T01:58:54.271074 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 56
2024-03-18 01:58:54.271 UTC [56] LOG:  received fast shutdown request
I, [2024-03-18T01:58:54.274543 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 125
125:signal-handler (1710727134) Received SIGTERM scheduling shutdown...
2024-03-18 01:58:54.275 UTC [56] LOG:  aborting any active transactions
2024-03-18 01:58:54.283 UTC [56] LOG:  background worker "logical replication launcher" (PID 65) exited with exit code 1
125:M 18 Mar 2024 01:58:54.364 # User requested shutdown...
125:M 18 Mar 2024 01:58:54.364 * Saving the final RDB snapshot before exiting.
125:M 18 Mar 2024 01:58:54.370 * DB saved on disk
125:M 18 Mar 2024 01:58:54.370 # Redis is now ready to exit, bye bye...
2024-03-18 01:58:54.438 UTC [60] LOG:  shutting down
2024-03-18 01:58:54.475 UTC [56] LOG:  database system is shut down


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 3420 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
31d707e300ce368d90e60a8a2b244e4baede8bc3fcf2c1b5b7c94f970570bfe1
root@server:/var/discourse# nano /etc/sysctl.conf
root@server:/var/discourse#