import gzip import csv import tempfile import random from pathlib import Path # We fucked up and used an unorder iterator to iterate on directories. # Not reproducible... # So here is the order of directories used during the generation of the RASTA dataset. # This abomination allows us to reproduce the generation of the RASTA dataset... ORDER_REPRO_RASTA = [ (2010, 0, 3), (2010, 0, 41), (2010, 0, 42), (2010, 0, 39), (2010, 0, 11), (2010, 0, 43), (2010, 0, 0), (2010, 0, 1), (2010, 0, 12), (2010, 0, 9), (2010, 0, 6), (2010, 0, 2), (2010, 1, 3), (2010, 1, 22), (2010, 1, 0), (2010, 1, 1), (2010, 1, 2), (2010, 2, 0), (2010, 2, 1), (2010, 3, 3), (2010, 3, 7), (2010, 3, 0), (2010, 4, 3), (2010, 4, 13), (2010, 4, 14), (2010, 4, 0), (2010, 4, 10), (2010, 5, 0), (2010, 5, 1), (2010, 5, 2), (2010, 6, 0), (2010, 6, 1), (2011, 0, 3), (2011, 0, 4), (2011, 0, 25), (2011, 0, 33), (2011, 0, 37), (2011, 0, 26), (2011, 0, 28), (2011, 0, 13), (2011, 0, 14), (2011, 0, 24), (2011, 0, 7), (2011, 0, 15), (2011, 0, 8), (2011, 0, 18), (2011, 0, 27), (2011, 0, 22), (2011, 0, 29), (2011, 0, 34), (2011, 0, 35), (2011, 0, 21), (2011, 0, 41), (2011, 0, 16), (2011, 0, 42), (2011, 0, 44), (2011, 0, 39), (2011, 0, 11), (2011, 0, 45), (2011, 0, 32), (2011, 0, 38), (2011, 0, 48), (2011, 0, 43), (2011, 0, 23), (2011, 0, 31), (2011, 0, 40), (2011, 0, 0), (2011, 0, 1), (2011, 0, 20), (2011, 0, 17), (2011, 0, 30), (2011, 0, 12), (2011, 0, 9), (2011, 0, 6), (2011, 0, 10), (2011, 0, 19), (2011, 0, 5), (2011, 0, 36), (2011, 0, 2), (2011, 1, 3), (2011, 1, 4), (2011, 1, 25), (2011, 1, 33), (2011, 1, 37), (2011, 1, 26), (2011, 1, 28), (2011, 1, 13), (2011, 1, 14), (2011, 1, 24), (2011, 1, 7), (2011, 1, 15), (2011, 1, 8), (2011, 1, 18), (2011, 1, 27), (2011, 1, 22), (2011, 1, 29), (2011, 1, 34), (2011, 1, 35), (2011, 1, 21), (2011, 1, 16), (2011, 1, 42), (2011, 1, 11), (2011, 1, 45), (2011, 1, 32), (2011, 1, 43), (2011, 1, 23), (2011, 1, 31), (2011, 1, 40), (2011, 1, 0), (2011, 1, 1), (2011, 1, 20), (2011, 1, 17), (2011, 1, 30), (2011, 1, 12), (2011, 1, 9), (2011, 1, 6), (2011, 1, 10), (2011, 1, 19), (2011, 1, 5), (2011, 1, 36), (2011, 1, 2), (2011, 2, 3), (2011, 2, 4), (2011, 2, 25), (2011, 2, 26), (2011, 2, 28), (2011, 2, 13), (2011, 2, 14), (2011, 2, 24), (2011, 2, 7), (2011, 2, 15), (2011, 2, 8), (2011, 2, 18), (2011, 2, 22), (2011, 2, 35), (2011, 2, 21), (2011, 2, 16), (2011, 2, 11), (2011, 2, 32), (2011, 2, 23), (2011, 2, 31), (2011, 2, 40), (2011, 2, 0), (2011, 2, 1), (2011, 2, 20), (2011, 2, 17), (2011, 2, 12), (2011, 2, 9), (2011, 2, 10), (2011, 2, 19), (2011, 2, 5), (2011, 2, 2), (2011, 3, 3), (2011, 3, 4), (2011, 3, 13), (2011, 3, 14), (2011, 3, 24), (2011, 3, 7), (2011, 3, 15), (2011, 3, 8), (2011, 3, 18), (2011, 3, 22), (2011, 3, 34), (2011, 3, 21), (2011, 3, 16), (2011, 3, 11), (2011, 3, 31), (2011, 3, 0), (2011, 3, 1), (2011, 3, 20), (2011, 3, 17), (2011, 3, 30), (2011, 3, 12), (2011, 3, 6), (2011, 3, 10), (2011, 3, 19), (2011, 3, 5), (2011, 3, 2), (2011, 4, 3), (2011, 4, 4), (2011, 4, 25), (2011, 4, 33), (2011, 4, 26), (2011, 4, 13), (2011, 4, 14), (2011, 4, 7), (2011, 4, 15), (2011, 4, 8), (2011, 4, 18), (2011, 4, 27), (2011, 4, 29), (2011, 4, 21), (2011, 4, 44), (2011, 4, 11), (2011, 4, 23), (2011, 4, 0), (2011, 4, 1), (2011, 4, 20), (2011, 4, 17), (2011, 4, 12), (2011, 4, 6), (2011, 4, 10), (2011, 4, 19), (2011, 4, 2), (2011, 5, 3), (2011, 5, 4), (2011, 5, 24), (2011, 5, 8), (2011, 5, 16), (2011, 5, 11), (2011, 5, 0), (2011, 5, 1), (2011, 5, 20), (2011, 5, 12), (2011, 5, 6), (2011, 5, 10), (2011, 5, 5), (2011, 5, 2), (2011, 6, 3), (2011, 6, 4), (2011, 6, 13), (2011, 6, 22), (2011, 6, 0), (2011, 6, 1), (2011, 6, 20), (2011, 6, 17), (2011, 6, 9), (2011, 6, 6), (2011, 6, 5), (2011, 6, 2), (2011, 7, 0), (2011, 7, 1), (2012, 0, 3), (2012, 0, 4), (2012, 0, 25), (2012, 0, 33), (2012, 0, 37), (2012, 0, 26), (2012, 0, 28), (2012, 0, 13), (2012, 0, 14), (2012, 0, 24), (2012, 0, 7), (2012, 0, 15), (2012, 0, 8), (2012, 0, 18), (2012, 0, 27), (2012, 0, 22), (2012, 0, 29), (2012, 0, 34), (2012, 0, 35), (2012, 0, 21), (2012, 0, 41), (2012, 0, 16), (2012, 0, 42), (2012, 0, 46), (2012, 0, 44), (2012, 0, 39), (2012, 0, 11), (2012, 0, 45), (2012, 0, 32), (2012, 0, 38), (2012, 0, 48), (2012, 0, 43), (2012, 0, 23), (2012, 0, 31), (2012, 0, 40), (2012, 0, 0), (2012, 0, 1), (2012, 0, 20), (2012, 0, 17), (2012, 0, 30), (2012, 0, 12), (2012, 0, 9), (2012, 0, 6), (2012, 0, 10), (2012, 0, 19), (2012, 0, 5), (2012, 0, 36), (2012, 0, 2), (2012, 1, 3), (2012, 1, 4), (2012, 1, 25), (2012, 1, 33), (2012, 1, 37), (2012, 1, 26), (2012, 1, 28), (2012, 1, 13), (2012, 1, 14), (2012, 1, 24), (2012, 1, 7), (2012, 1, 15), (2012, 1, 8), (2012, 1, 18), (2012, 1, 27), (2012, 1, 22), (2012, 1, 29), (2012, 1, 34), (2012, 1, 35), (2012, 1, 21), (2012, 1, 41), (2012, 1, 16), (2012, 1, 42), (2012, 1, 44), (2012, 1, 39), (2012, 1, 11), (2012, 1, 32), (2012, 1, 38), (2012, 1, 43), (2012, 1, 23), (2012, 1, 31), (2012, 1, 40), (2012, 1, 0), (2012, 1, 1), (2012, 1, 20), (2012, 1, 17), (2012, 1, 30), (2012, 1, 12), (2012, 1, 9), (2012, 1, 6), (2012, 1, 10), (2012, 1, 19), (2012, 1, 5), (2012, 1, 36), (2012, 1, 2), (2012, 2, 3), (2012, 2, 4), (2012, 2, 25), (2012, 2, 33), (2012, 2, 37), (2012, 2, 26), (2012, 2, 28), (2012, 2, 13), (2012, 2, 14), (2012, 2, 24), (2012, 2, 7), (2012, 2, 15), (2012, 2, 8), (2012, 2, 18), (2012, 2, 27), (2012, 2, 22), (2012, 2, 29), (2012, 2, 34), (2012, 2, 35), (2012, 2, 21), (2012, 2, 41), (2012, 2, 16), (2012, 2, 42), (2012, 2, 39), (2012, 2, 11), (2012, 2, 32), (2012, 2, 38), (2012, 2, 23), (2012, 2, 31), (2012, 2, 0), (2012, 2, 1), (2012, 2, 20), (2012, 2, 17), (2012, 2, 30), (2012, 2, 12), (2012, 2, 9), (2012, 2, 6), (2012, 2, 10), (2012, 2, 19), (2012, 2, 5), (2012, 2, 36), (2012, 2, 2), (2012, 3, 3), (2012, 3, 4), (2012, 3, 25), (2012, 3, 33), (2012, 3, 37), (2012, 3, 26), (2012, 3, 28), (2012, 3, 13), (2012, 3, 14), (2012, 3, 24), (2012, 3, 7), (2012, 3, 15), (2012, 3, 8), (2012, 3, 18), (2012, 3, 27), (2012, 3, 22), (2012, 3, 29), (2012, 3, 34), (2012, 3, 35), (2012, 3, 21), (2012, 3, 16), (2012, 3, 11), (2012, 3, 32), (2012, 3, 23), (2012, 3, 31), (2012, 3, 0), (2012, 3, 1), (2012, 3, 20), (2012, 3, 17), (2012, 3, 30), (2012, 3, 12), (2012, 3, 9), (2012, 3, 6), (2012, 3, 10), (2012, 3, 19), (2012, 3, 5), (2012, 3, 36), (2012, 3, 2), (2012, 4, 3), (2012, 4, 4), (2012, 4, 25), (2012, 4, 33), (2012, 4, 37), (2012, 4, 26), (2012, 4, 28), (2012, 4, 13), (2012, 4, 14), (2012, 4, 24), (2012, 4, 7), (2012, 4, 15), (2012, 4, 8), (2012, 4, 18), (2012, 4, 27), (2012, 4, 22), (2012, 4, 29), (2012, 4, 34), (2012, 4, 35), (2012, 4, 21), (2012, 4, 16), (2012, 4, 11), (2012, 4, 32), (2012, 4, 23), (2012, 4, 31), (2012, 4, 0), (2012, 4, 1), (2012, 4, 20), (2012, 4, 17), (2012, 4, 30), (2012, 4, 12), (2012, 4, 9), (2012, 4, 6), (2012, 4, 10), (2012, 4, 19), (2012, 4, 5), (2012, 4, 36), (2012, 4, 2), (2012, 5, 3), (2012, 5, 4), (2012, 5, 25), (2012, 5, 33), (2012, 5, 37), (2012, 5, 26), (2012, 5, 28), (2012, 5, 13), (2012, 5, 14), (2012, 5, 24), (2012, 5, 7), (2012, 5, 15), (2012, 5, 8), (2012, 5, 18), (2012, 5, 27), (2012, 5, 22), (2012, 5, 29), (2012, 5, 34), (2012, 5, 35), (2012, 5, 21), (2012, 5, 16), (2012, 5, 11), (2012, 5, 32), (2012, 5, 23), (2012, 5, 31), (2012, 5, 0), (2012, 5, 1), (2012, 5, 20), (2012, 5, 17), (2012, 5, 30), (2012, 5, 12), (2012, 5, 9), (2012, 5, 6), (2012, 5, 10), (2012, 5, 19), (2012, 5, 5), (2012, 5, 2), (2012, 6, 3), (2012, 6, 4), (2012, 6, 25), (2012, 6, 33), (2012, 6, 26), (2012, 6, 28), (2012, 6, 13), (2012, 6, 14), (2012, 6, 24), (2012, 6, 7), (2012, 6, 15), (2012, 6, 8), (2012, 6, 18), (2012, 6, 27), (2012, 6, 22), (2012, 6, 29), (2012, 6, 34), (2012, 6, 35), (2012, 6, 21), (2012, 6, 16), (2012, 6, 11), (2012, 6, 32), (2012, 6, 23), (2012, 6, 31), (2012, 6, 0), (2012, 6, 1), (2012, 6, 20), (2012, 6, 17), (2012, 6, 30), (2012, 6, 12), (2012, 6, 9), (2012, 6, 6), (2012, 6, 10), (2012, 6, 19), (2012, 6, 5), (2012, 6, 36), (2012, 6, 2), (2012, 7, 3), (2012, 7, 4), (2012, 7, 25), (2012, 7, 33), (2012, 7, 26), (2012, 7, 28), (2012, 7, 13), (2012, 7, 14), (2012, 7, 24), (2012, 7, 7), (2012, 7, 15), (2012, 7, 8), (2012, 7, 18), (2012, 7, 27), (2012, 7, 22), (2012, 7, 29), (2012, 7, 34), (2012, 7, 21), (2012, 7, 16), (2012, 7, 11), (2012, 7, 32), (2012, 7, 23), (2012, 7, 31), (2012, 7, 0), (2012, 7, 1), (2012, 7, 20), (2012, 7, 17), (2012, 7, 30), (2012, 7, 12), (2012, 7, 9), (2012, 7, 6), (2012, 7, 10), (2012, 7, 19), (2012, 7, 5), (2012, 7, 2), (2012, 8, 3), (2012, 8, 4), (2012, 8, 25), (2012, 8, 26), (2012, 8, 13), (2012, 8, 14), (2012, 8, 24), (2012, 8, 7), (2012, 8, 15), (2012, 8, 8), (2012, 8, 18), (2012, 8, 27), (2012, 8, 22), (2012, 8, 29), (2012, 8, 21), (2012, 8, 16), (2012, 8, 11), (2012, 8, 23), (2012, 8, 0), (2012, 8, 1), (2012, 8, 20), (2012, 8, 17), (2012, 8, 30), (2012, 8, 12), (2012, 8, 9), (2012, 8, 6), (2012, 8, 10), (2012, 8, 19), (2012, 8, 5), (2012, 8, 2), (2012, 9, 0), (2013, 0, 3), (2013, 0, 4), (2013, 0, 25), (2013, 0, 33), (2013, 0, 37), (2013, 0, 26), (2013, 0, 28), (2013, 0, 13), (2013, 0, 14), (2013, 0, 24), (2013, 0, 7), (2013, 0, 15), (2013, 0, 8), (2013, 0, 18), (2013, 0, 27), (2013, 0, 22), (2013, 0, 29), (2013, 0, 34), (2013, 0, 35), (2013, 0, 21), (2013, 0, 41), (2013, 0, 16), (2013, 0, 42), (2013, 0, 46), (2013, 0, 44), (2013, 0, 39), (2013, 0, 11), (2013, 0, 45), (2013, 0, 32), (2013, 0, 38), (2013, 0, 48), (2013, 0, 43), (2013, 0, 23), (2013, 0, 31), (2013, 0, 40), (2013, 0, 0), (2013, 0, 1), (2013, 0, 20), (2013, 0, 17), (2013, 0, 30), (2013, 0, 12), (2013, 0, 9), (2013, 0, 6), (2013, 0, 10), (2013, 0, 19), (2013, 0, 5), (2013, 0, 36), (2013, 0, 2), (2013, 0, 47), (2013, 1, 3), (2013, 1, 4), (2013, 1, 25), (2013, 1, 33), (2013, 1, 37), (2013, 1, 26), (2013, 1, 28), (2013, 1, 13), (2013, 1, 14), (2013, 1, 24), (2013, 1, 7), (2013, 1, 15), (2013, 1, 8), (2013, 1, 18), (2013, 1, 27), (2013, 1, 22), (2013, 1, 29), (2013, 1, 34), (2013, 1, 35), (2013, 1, 21), (2013, 1, 41), (2013, 1, 16), (2013, 1, 42), (2013, 1, 44), (2013, 1, 39), (2013, 1, 11), (2013, 1, 45), (2013, 1, 32), (2013, 1, 38), (2013, 1, 48), (2013, 1, 43), (2013, 1, 23), (2013, 1, 50), (2013, 1, 31), (2013, 1, 40), (2013, 1, 0), (2013, 1, 1), (2013, 1, 20), (2013, 1, 17), (2013, 1, 30), (2013, 1, 12), (2013, 1, 9), (2013, 1, 6), (2013, 1, 10), (2013, 1, 19), (2013, 1, 5), (2013, 1, 36), (2013, 1, 2), (2013, 2, 3), (2013, 2, 4), (2013, 2, 25), (2013, 2, 33), (2013, 2, 37), (2013, 2, 26), (2013, 2, 28), (2013, 2, 13), (2013, 2, 14), (2013, 2, 24), (2013, 2, 7), (2013, 2, 15), (2013, 2, 8), (2013, 2, 18), (2013, 2, 27), (2013, 2, 22), (2013, 2, 29), (2013, 2, 34), (2013, 2, 35), (2013, 2, 21), (2013, 2, 41), (2013, 2, 16), (2013, 2, 42), (2013, 2, 39), (2013, 2, 11), (2013, 2, 32), (2013, 2, 38), (2013, 2, 23), (2013, 2, 31), (2013, 2, 40), (2013, 2, 0), (2013, 2, 1), (2013, 2, 20), (2013, 2, 17), (2013, 2, 30), (2013, 2, 12), (2013, 2, 9), (2013, 2, 6), (2013, 2, 10), (2013, 2, 19), (2013, 2, 5), (2013, 2, 36), (2013, 2, 2), (2013, 3, 3), (2013, 3, 4), (2013, 3, 25), (2013, 3, 33), (2013, 3, 37), (2013, 3, 26), (2013, 3, 28), (2013, 3, 13), (2013, 3, 14), (2013, 3, 24), (2013, 3, 7), (2013, 3, 15), (2013, 3, 8), (2013, 3, 18), (2013, 3, 27), (2013, 3, 22), (2013, 3, 29), (2013, 3, 34), (2013, 3, 35), (2013, 3, 21), (2013, 3, 16), (2013, 3, 39), (2013, 3, 11), (2013, 3, 32), (2013, 3, 38), (2013, 3, 23), (2013, 3, 31), (2013, 3, 0), (2013, 3, 1), (2013, 3, 20), (2013, 3, 17), (2013, 3, 30), (2013, 3, 12), (2013, 3, 9), (2013, 3, 6), (2013, 3, 10), (2013, 3, 19), (2013, 3, 5), (2013, 3, 36), (2013, 3, 2), (2013, 4, 3), (2013, 4, 4), (2013, 4, 25), (2013, 4, 33), (2013, 4, 37), (2013, 4, 26), (2013, 4, 28), (2013, 4, 13), (2013, 4, 14), (2013, 4, 24), (2013, 4, 7), (2013, 4, 15), (2013, 4, 8), (2013, 4, 18), (2013, 4, 27), (2013, 4, 22), (2013, 4, 29), (2013, 4, 34), (2013, 4, 35), (2013, 4, 21), (2013, 4, 16), (2013, 4, 42), (2013, 4, 39), (2013, 4, 11), (2013, 4, 32), (2013, 4, 38), (2013, 4, 23), (2013, 4, 31), (2013, 4, 0), (2013, 4, 1), (2013, 4, 20), (2013, 4, 17), (2013, 4, 30), (2013, 4, 12), (2013, 4, 9), (2013, 4, 6), (2013, 4, 10), (2013, 4, 19), (2013, 4, 5), (2013, 4, 36), (2013, 4, 2), (2013, 5, 3), (2013, 5, 4), (2013, 5, 25), (2013, 5, 33), (2013, 5, 37), (2013, 5, 26), (2013, 5, 28), (2013, 5, 13), (2013, 5, 14), (2013, 5, 24), (2013, 5, 7), (2013, 5, 15), (2013, 5, 8), (2013, 5, 18), (2013, 5, 27), (2013, 5, 22), (2013, 5, 29), (2013, 5, 34), (2013, 5, 35), (2013, 5, 21), (2013, 5, 41), (2013, 5, 16), (2013, 5, 11), (2013, 5, 32), (2013, 5, 38), (2013, 5, 23), (2013, 5, 31), (2013, 5, 0), (2013, 5, 1), (2013, 5, 20), (2013, 5, 17), (2013, 5, 30), (2013, 5, 12), (2013, 5, 9), (2013, 5, 6), (2013, 5, 10), (2013, 5, 19), (2013, 5, 5), (2013, 5, 36), (2013, 5, 2), (2013, 6, 3), (2013, 6, 4), (2013, 6, 25), (2013, 6, 33), (2013, 6, 37), (2013, 6, 26), (2013, 6, 28), (2013, 6, 13), (2013, 6, 14), (2013, 6, 24), (2013, 6, 7), (2013, 6, 15), (2013, 6, 8), (2013, 6, 18), (2013, 6, 27), (2013, 6, 22), (2013, 6, 29), (2013, 6, 34), (2013, 6, 35), (2013, 6, 21), (2013, 6, 16), (2013, 6, 11), (2013, 6, 32), (2013, 6, 38), (2013, 6, 23), (2013, 6, 31), (2013, 6, 0), (2013, 6, 1), (2013, 6, 20), (2013, 6, 17), (2013, 6, 30), (2013, 6, 12), (2013, 6, 9), (2013, 6, 6), (2013, 6, 10), (2013, 6, 19), (2013, 6, 5), (2013, 6, 36), (2013, 6, 2), (2013, 7, 3), (2013, 7, 4), (2013, 7, 25), (2013, 7, 33), (2013, 7, 37), (2013, 7, 26), (2013, 7, 28), (2013, 7, 13), (2013, 7, 14), (2013, 7, 24), (2013, 7, 7), (2013, 7, 15), (2013, 7, 8), (2013, 7, 18), (2013, 7, 27), (2013, 7, 22), (2013, 7, 29), (2013, 7, 34), (2013, 7, 35), (2013, 7, 21), (2013, 7, 16), (2013, 7, 11), (2013, 7, 32), (2013, 7, 23), (2013, 7, 31), (2013, 7, 0), (2013, 7, 1), (2013, 7, 20), (2013, 7, 17), (2013, 7, 30), (2013, 7, 12), (2013, 7, 9), (2013, 7, 6), (2013, 7, 10), (2013, 7, 19), (2013, 7, 5), (2013, 7, 36), (2013, 7, 2), (2013, 8, 3), (2013, 8, 4), (2013, 8, 25), (2013, 8, 33), (2013, 8, 26), (2013, 8, 28), (2013, 8, 13), (2013, 8, 14), (2013, 8, 24), (2013, 8, 7), (2013, 8, 15), (2013, 8, 8), (2013, 8, 18), (2013, 8, 27), (2013, 8, 22), (2013, 8, 29), (2013, 8, 34), (2013, 8, 35), (2013, 8, 21), (2013, 8, 16), (2013, 8, 11), (2013, 8, 32), (2013, 8, 23), (2013, 8, 31), (2013, 8, 0), (2013, 8, 1), (2013, 8, 20), (2013, 8, 17), (2013, 8, 30), (2013, 8, 12), (2013, 8, 9), (2013, 8, 6), (2013, 8, 10), (2013, 8, 19), (2013, 8, 5), (2013, 8, 36), (2013, 8, 2), (2013, 9, 3), (2013, 9, 4), (2013, 9, 25), (2013, 9, 26), (2013, 9, 28), (2013, 9, 13), (2013, 9, 14), (2013, 9, 24), (2013, 9, 7), (2013, 9, 15), (2013, 9, 8), (2013, 9, 18), (2013, 9, 27), (2013, 9, 22), (2013, 9, 29), (2013, 9, 34), (2013, 9, 21), (2013, 9, 16), (2013, 9, 11), (2013, 9, 32), (2013, 9, 23), (2013, 9, 31), (2013, 9, 0), (2013, 9, 1), (2013, 9, 20), (2013, 9, 17), (2013, 9, 30), (2013, 9, 12), (2013, 9, 9), (2013, 9, 6), (2013, 9, 10), (2013, 9, 19), (2013, 9, 5), (2013, 9, 2), (2014, 0, 3), (2014, 0, 4), (2014, 0, 25), (2014, 0, 33), (2014, 0, 37), (2014, 0, 26), (2014, 0, 28), (2014, 0, 13), (2014, 0, 14), (2014, 0, 24), (2014, 0, 7), (2014, 0, 15), (2014, 0, 8), (2014, 0, 18), (2014, 0, 27), (2014, 0, 22), (2014, 0, 29), (2014, 0, 34), (2014, 0, 35), (2014, 0, 21), (2014, 0, 41), (2014, 0, 16), (2014, 0, 42), (2014, 0, 44), (2014, 0, 39), (2014, 0, 11), (2014, 0, 45), (2014, 0, 49), (2014, 0, 32), (2014, 0, 38), (2014, 0, 43), (2014, 0, 23), (2014, 0, 31), (2014, 0, 40), (2014, 0, 0), (2014, 0, 1), (2014, 0, 20), (2014, 0, 17), (2014, 0, 30), (2014, 0, 12), (2014, 0, 9), (2014, 0, 6), (2014, 0, 10), (2014, 0, 19), (2014, 0, 5), (2014, 0, 36), (2014, 0, 2), (2014, 1, 3), (2014, 1, 4), (2014, 1, 25), (2014, 1, 33), (2014, 1, 37), (2014, 1, 26), (2014, 1, 28), (2014, 1, 13), (2014, 1, 14), (2014, 1, 24), (2014, 1, 7), (2014, 1, 15), (2014, 1, 8), (2014, 1, 18), (2014, 1, 27), (2014, 1, 22), (2014, 1, 29), (2014, 1, 34), (2014, 1, 35), (2014, 1, 21), (2014, 1, 41), (2014, 1, 16), (2014, 1, 42), (2014, 1, 44), (2014, 1, 39), (2014, 1, 11), (2014, 1, 45), (2014, 1, 32), (2014, 1, 38), (2014, 1, 23), (2014, 1, 31), (2014, 1, 40), (2014, 1, 0), (2014, 1, 1), (2014, 1, 20), (2014, 1, 17), (2014, 1, 30), (2014, 1, 12), (2014, 1, 9), (2014, 1, 6), (2014, 1, 10), (2014, 1, 19), (2014, 1, 5), (2014, 1, 36), (2014, 1, 2), (2014, 2, 3), (2014, 2, 4), (2014, 2, 25), (2014, 2, 33), (2014, 2, 37), (2014, 2, 26), (2014, 2, 28), (2014, 2, 13), (2014, 2, 14), (2014, 2, 24), (2014, 2, 7), (2014, 2, 15), (2014, 2, 8), (2014, 2, 18), (2014, 2, 27), (2014, 2, 22), (2014, 2, 29), (2014, 2, 34), (2014, 2, 35), (2014, 2, 21), (2014, 2, 41), (2014, 2, 16), (2014, 2, 44), (2014, 2, 39), (2014, 2, 11), (2014, 2, 32), (2014, 2, 38), (2014, 2, 43), (2014, 2, 23), (2014, 2, 31), (2014, 2, 40), (2014, 2, 0), (2014, 2, 1), (2014, 2, 20), (2014, 2, 17), (2014, 2, 30), (2014, 2, 12), (2014, 2, 9), (2014, 2, 6), (2014, 2, 10), (2014, 2, 19), (2014, 2, 5), (2014, 2, 36), (2014, 2, 2), (2014, 3, 3), (2014, 3, 4), (2014, 3, 25), (2014, 3, 33), (2014, 3, 37), (2014, 3, 26), (2014, 3, 28), (2014, 3, 13), (2014, 3, 14), (2014, 3, 24), (2014, 3, 7), (2014, 3, 15), (2014, 3, 8), (2014, 3, 18), (2014, 3, 27), (2014, 3, 22), (2014, 3, 29), (2014, 3, 34), (2014, 3, 35), (2014, 3, 21), (2014, 3, 16), (2014, 3, 39), (2014, 3, 11), (2014, 3, 32), (2014, 3, 38), (2014, 3, 23), (2014, 3, 31), (2014, 3, 40), (2014, 3, 0), (2014, 3, 1), (2014, 3, 20), (2014, 3, 17), (2014, 3, 30), (2014, 3, 12), (2014, 3, 9), (2014, 3, 6), (2014, 3, 10), (2014, 3, 19), (2014, 3, 5), (2014, 3, 36), (2014, 3, 2), (2014, 4, 53), (2014, 4, 3), (2014, 4, 4), (2014, 4, 25), (2014, 4, 33), (2014, 4, 37), (2014, 4, 26), (2014, 4, 28), (2014, 4, 13), (2014, 4, 14), (2014, 4, 24), (2014, 4, 7), (2014, 4, 15), (2014, 4, 8), (2014, 4, 18), (2014, 4, 27), (2014, 4, 22), (2014, 4, 29), (2014, 4, 34), (2014, 4, 35), (2014, 4, 21), (2014, 4, 41), (2014, 4, 16), (2014, 4, 42), (2014, 4, 39), (2014, 4, 11), (2014, 4, 32), (2014, 4, 38), (2014, 4, 23), (2014, 4, 31), (2014, 4, 0), (2014, 4, 1), (2014, 4, 20), (2014, 4, 17), (2014, 4, 30), (2014, 4, 12), (2014, 4, 9), (2014, 4, 6), (2014, 4, 10), (2014, 4, 19), (2014, 4, 5), (2014, 4, 36), (2014, 4, 2), (2014, 4, 47), (2014, 5, 3), (2014, 5, 4), (2014, 5, 25), (2014, 5, 33), (2014, 5, 37), (2014, 5, 26), (2014, 5, 28), (2014, 5, 13), (2014, 5, 14), (2014, 5, 24), (2014, 5, 7), (2014, 5, 15), (2014, 5, 8), (2014, 5, 18), (2014, 5, 27), (2014, 5, 22), (2014, 5, 29), (2014, 5, 34), (2014, 5, 35), (2014, 5, 21), (2014, 5, 16), (2014, 5, 39), (2014, 5, 11), (2014, 5, 32), (2014, 5, 38), (2014, 5, 23), (2014, 5, 31), (2014, 5, 0), (2014, 5, 1), (2014, 5, 20), (2014, 5, 17), (2014, 5, 30), (2014, 5, 12), (2014, 5, 9), (2014, 5, 6), (2014, 5, 10), (2014, 5, 19), (2014, 5, 5), (2014, 5, 36), (2014, 5, 2), (2014, 6, 3), (2014, 6, 4), (2014, 6, 25), (2014, 6, 33), (2014, 6, 26), (2014, 6, 28), (2014, 6, 13), (2014, 6, 14), (2014, 6, 24), (2014, 6, 7), (2014, 6, 15), (2014, 6, 8), (2014, 6, 18), (2014, 6, 27), (2014, 6, 22), (2014, 6, 29), (2014, 6, 34), (2014, 6, 35), (2014, 6, 21), (2014, 6, 16), (2014, 6, 42), (2014, 6, 11), (2014, 6, 32), (2014, 6, 38), (2014, 6, 23), (2014, 6, 31), (2014, 6, 40), (2014, 6, 0), (2014, 6, 1), (2014, 6, 20), (2014, 6, 17), (2014, 6, 30), (2014, 6, 12), (2014, 6, 9), (2014, 6, 6), (2014, 6, 10), (2014, 6, 19), (2014, 6, 5), (2014, 6, 36), (2014, 6, 2), (2014, 7, 3), (2014, 7, 4), (2014, 7, 25), (2014, 7, 33), (2014, 7, 37), (2014, 7, 26), (2014, 7, 28), (2014, 7, 13), (2014, 7, 14), (2014, 7, 24), (2014, 7, 7), (2014, 7, 15), (2014, 7, 8), (2014, 7, 18), (2014, 7, 27), (2014, 7, 22), (2014, 7, 29), (2014, 7, 34), (2014, 7, 35), (2014, 7, 21), (2014, 7, 16), (2014, 7, 39), (2014, 7, 11), (2014, 7, 32), (2014, 7, 23), (2014, 7, 31), (2014, 7, 0), (2014, 7, 1), (2014, 7, 20), (2014, 7, 17), (2014, 7, 30), (2014, 7, 12), (2014, 7, 9), (2014, 7, 6), (2014, 7, 10), (2014, 7, 19), (2014, 7, 5), (2014, 7, 36), (2014, 7, 2), (2014, 7, 47), (2014, 8, 3), (2014, 8, 4), (2014, 8, 25), (2014, 8, 33), (2014, 8, 26), (2014, 8, 28), (2014, 8, 13), (2014, 8, 14), (2014, 8, 24), (2014, 8, 7), (2014, 8, 15), (2014, 8, 8), (2014, 8, 18), (2014, 8, 27), (2014, 8, 22), (2014, 8, 29), (2014, 8, 34), (2014, 8, 35), (2014, 8, 21), (2014, 8, 16), (2014, 8, 11), (2014, 8, 32), (2014, 8, 23), (2014, 8, 31), (2014, 8, 0), (2014, 8, 1), (2014, 8, 20), (2014, 8, 17), (2014, 8, 30), (2014, 8, 12), (2014, 8, 9), (2014, 8, 6), (2014, 8, 10), (2014, 8, 19), (2014, 8, 5), (2014, 8, 36), (2014, 8, 2), (2014, 9, 3), (2014, 9, 4), (2014, 9, 25), (2014, 9, 26), (2014, 9, 28), (2014, 9, 13), (2014, 9, 14), (2014, 9, 24), (2014, 9, 7), (2014, 9, 15), (2014, 9, 8), (2014, 9, 18), (2014, 9, 27), (2014, 9, 22), (2014, 9, 29), (2014, 9, 21), (2014, 9, 16), (2014, 9, 11), (2014, 9, 32), (2014, 9, 23), (2014, 9, 31), (2014, 9, 0), (2014, 9, 1), (2014, 9, 20), (2014, 9, 17), (2014, 9, 30), (2014, 9, 12), (2014, 9, 9), (2014, 9, 6), (2014, 9, 10), (2014, 9, 19), (2014, 9, 5), (2014, 9, 2), (2015, 0, 3), (2015, 0, 4), (2015, 0, 25), (2015, 0, 33), (2015, 0, 37), (2015, 0, 26), (2015, 0, 28), (2015, 0, 13), (2015, 0, 14), (2015, 0, 24), (2015, 0, 7), (2015, 0, 15), (2015, 0, 8), (2015, 0, 18), (2015, 0, 27), (2015, 0, 22), (2015, 0, 29), (2015, 0, 34), (2015, 0, 35), (2015, 0, 21), (2015, 0, 41), (2015, 0, 16), (2015, 0, 42), (2015, 0, 44), (2015, 0, 39), (2015, 0, 11), (2015, 0, 45), (2015, 0, 49), (2015, 0, 32), (2015, 0, 38), (2015, 0, 48), (2015, 0, 43), (2015, 0, 23), (2015, 0, 31), (2015, 0, 40), (2015, 0, 0), (2015, 0, 1), (2015, 0, 20), (2015, 0, 17), (2015, 0, 30), (2015, 0, 12), (2015, 0, 9), (2015, 0, 6), (2015, 0, 10), (2015, 0, 19), (2015, 0, 5), (2015, 0, 36), (2015, 0, 2), (2015, 1, 3), (2015, 1, 4), (2015, 1, 25), (2015, 1, 33), (2015, 1, 37), (2015, 1, 26), (2015, 1, 28), (2015, 1, 13), (2015, 1, 14), (2015, 1, 24), (2015, 1, 7), (2015, 1, 15), (2015, 1, 8), (2015, 1, 18), (2015, 1, 27), (2015, 1, 22), (2015, 1, 29), (2015, 1, 34), (2015, 1, 35), (2015, 1, 21), (2015, 1, 41), (2015, 1, 16), (2015, 1, 42), (2015, 1, 39), (2015, 1, 11), (2015, 1, 32), (2015, 1, 38), (2015, 1, 43), (2015, 1, 23), (2015, 1, 31), (2015, 1, 40), (2015, 1, 0), (2015, 1, 1), (2015, 1, 20), (2015, 1, 17), (2015, 1, 30), (2015, 1, 12), (2015, 1, 9), (2015, 1, 6), (2015, 1, 10), (2015, 1, 19), (2015, 1, 5), (2015, 1, 36), (2015, 1, 2), (2015, 2, 3), (2015, 2, 4), (2015, 2, 25), (2015, 2, 33), (2015, 2, 37), (2015, 2, 26), (2015, 2, 28), (2015, 2, 13), (2015, 2, 14), (2015, 2, 24), (2015, 2, 7), (2015, 2, 15), (2015, 2, 8), (2015, 2, 18), (2015, 2, 27), (2015, 2, 22), (2015, 2, 29), (2015, 2, 34), (2015, 2, 35), (2015, 2, 21), (2015, 2, 41), (2015, 2, 16), (2015, 2, 44), (2015, 2, 39), (2015, 2, 11), (2015, 2, 32), (2015, 2, 38), (2015, 2, 43), (2015, 2, 23), (2015, 2, 31), (2015, 2, 40), (2015, 2, 0), (2015, 2, 1), (2015, 2, 20), (2015, 2, 17), (2015, 2, 30), (2015, 2, 12), (2015, 2, 9), (2015, 2, 6), (2015, 2, 10), (2015, 2, 19), (2015, 2, 5), (2015, 2, 36), (2015, 2, 2), (2015, 3, 3), (2015, 3, 4), (2015, 3, 25), (2015, 3, 33), (2015, 3, 37), (2015, 3, 26), (2015, 3, 28), (2015, 3, 13), (2015, 3, 14), (2015, 3, 24), (2015, 3, 7), (2015, 3, 15), (2015, 3, 8), (2015, 3, 18), (2015, 3, 27), (2015, 3, 22), (2015, 3, 29), (2015, 3, 34), (2015, 3, 35), (2015, 3, 21), (2015, 3, 41), (2015, 3, 16), (2015, 3, 42), (2015, 3, 39), (2015, 3, 11), (2015, 3, 32), (2015, 3, 38), (2015, 3, 23), (2015, 3, 31), (2015, 3, 40), (2015, 3, 0), (2015, 3, 1), (2015, 3, 20), (2015, 3, 17), (2015, 3, 30), (2015, 3, 12), (2015, 3, 9), (2015, 3, 6), (2015, 3, 10), (2015, 3, 19), (2015, 3, 5), (2015, 3, 36), (2015, 3, 2), (2015, 4, 3), (2015, 4, 4), (2015, 4, 25), (2015, 4, 33), (2015, 4, 37), (2015, 4, 26), (2015, 4, 28), (2015, 4, 13), (2015, 4, 14), (2015, 4, 24), (2015, 4, 7), (2015, 4, 15), (2015, 4, 8), (2015, 4, 18), (2015, 4, 27), (2015, 4, 22), (2015, 4, 29), (2015, 4, 34), (2015, 4, 35), (2015, 4, 21), (2015, 4, 41), (2015, 4, 16), (2015, 4, 42), (2015, 4, 46), (2015, 4, 44), (2015, 4, 39), (2015, 4, 11), (2015, 4, 32), (2015, 4, 38), (2015, 4, 43), (2015, 4, 23), (2015, 4, 31), (2015, 4, 40), (2015, 4, 0), (2015, 4, 1), (2015, 4, 20), (2015, 4, 17), (2015, 4, 30), (2015, 4, 12), (2015, 4, 9), (2015, 4, 6), (2015, 4, 10), (2015, 4, 19), (2015, 4, 5), (2015, 4, 36), (2015, 4, 2), (2015, 5, 3), (2015, 5, 4), (2015, 5, 25), (2015, 5, 33), (2015, 5, 37), (2015, 5, 26), (2015, 5, 28), (2015, 5, 13), (2015, 5, 14), (2015, 5, 24), (2015, 5, 7), (2015, 5, 15), (2015, 5, 8), (2015, 5, 18), (2015, 5, 27), (2015, 5, 22), (2015, 5, 29), (2015, 5, 34), (2015, 5, 35), (2015, 5, 21), (2015, 5, 41), (2015, 5, 16), (2015, 5, 39), (2015, 5, 11), (2015, 5, 32), (2015, 5, 38), (2015, 5, 23), (2015, 5, 31), (2015, 5, 40), (2015, 5, 0), (2015, 5, 1), (2015, 5, 20), (2015, 5, 17), (2015, 5, 30), (2015, 5, 12), (2015, 5, 9), (2015, 5, 6), (2015, 5, 10), (2015, 5, 19), (2015, 5, 5), (2015, 5, 36), (2015, 5, 2), (2015, 6, 3), (2015, 6, 4), (2015, 6, 25), (2015, 6, 33), (2015, 6, 26), (2015, 6, 28), (2015, 6, 13), (2015, 6, 14), (2015, 6, 24), (2015, 6, 7), (2015, 6, 15), (2015, 6, 8), (2015, 6, 18), (2015, 6, 27), (2015, 6, 22), (2015, 6, 29), (2015, 6, 34), (2015, 6, 35), (2015, 6, 21), (2015, 6, 16), (2015, 6, 42), (2015, 6, 39), (2015, 6, 11), (2015, 6, 32), (2015, 6, 38), (2015, 6, 23), (2015, 6, 31), (2015, 6, 40), (2015, 6, 0), (2015, 6, 1), (2015, 6, 20), (2015, 6, 17), (2015, 6, 30), (2015, 6, 12), (2015, 6, 9), (2015, 6, 6), (2015, 6, 10), (2015, 6, 19), (2015, 6, 5), (2015, 6, 36), (2015, 6, 2), (2015, 7, 3), (2015, 7, 4), (2015, 7, 25), (2015, 7, 33), (2015, 7, 26), (2015, 7, 28), (2015, 7, 13), (2015, 7, 14), (2015, 7, 24), (2015, 7, 7), (2015, 7, 15), (2015, 7, 8), (2015, 7, 18), (2015, 7, 27), (2015, 7, 22), (2015, 7, 29), (2015, 7, 34), (2015, 7, 35), (2015, 7, 21), (2015, 7, 41), (2015, 7, 16), (2015, 7, 11), (2015, 7, 45), (2015, 7, 32), (2015, 7, 38), (2015, 7, 23), (2015, 7, 31), (2015, 7, 0), (2015, 7, 1), (2015, 7, 20), (2015, 7, 17), (2015, 7, 30), (2015, 7, 12), (2015, 7, 9), (2015, 7, 6), (2015, 7, 10), (2015, 7, 19), (2015, 7, 5), (2015, 7, 36), (2015, 7, 2), (2015, 8, 3), (2015, 8, 4), (2015, 8, 25), (2015, 8, 33), (2015, 8, 26), (2015, 8, 28), (2015, 8, 13), (2015, 8, 14), (2015, 8, 24), (2015, 8, 7), (2015, 8, 15), (2015, 8, 8), (2015, 8, 18), (2015, 8, 27), (2015, 8, 22), (2015, 8, 29), (2015, 8, 34), (2015, 8, 35), (2015, 8, 21), (2015, 8, 16), (2015, 8, 11), (2015, 8, 32), (2015, 8, 23), (2015, 8, 31), (2015, 8, 40), (2015, 8, 0), (2015, 8, 1), (2015, 8, 20), (2015, 8, 17), (2015, 8, 30), (2015, 8, 12), (2015, 8, 9), (2015, 8, 6), (2015, 8, 10), (2015, 8, 19), (2015, 8, 5), (2015, 8, 2), (2015, 9, 3), (2015, 9, 4), (2015, 9, 25), (2015, 9, 26), (2015, 9, 28), (2015, 9, 13), (2015, 9, 14), (2015, 9, 24), (2015, 9, 7), (2015, 9, 15), (2015, 9, 8), (2015, 9, 18), (2015, 9, 27), (2015, 9, 22), (2015, 9, 29), (2015, 9, 21), (2015, 9, 16), (2015, 9, 11), (2015, 9, 32), (2015, 9, 23), (2015, 9, 0), (2015, 9, 1), (2015, 9, 20), (2015, 9, 17), (2015, 9, 12), (2015, 9, 9), (2015, 9, 6), (2015, 9, 10), (2015, 9, 19), (2015, 9, 5), (2015, 9, 2), (2016, 0, 3), (2016, 0, 4), (2016, 0, 25), (2016, 0, 33), (2016, 0, 37), (2016, 0, 26), (2016, 0, 28), (2016, 0, 13), (2016, 0, 14), (2016, 0, 24), (2016, 0, 7), (2016, 0, 15), (2016, 0, 8), (2016, 0, 18), (2016, 0, 27), (2016, 0, 22), (2016, 0, 29), (2016, 0, 34), (2016, 0, 35), (2016, 0, 21), (2016, 0, 41), (2016, 0, 16), (2016, 0, 42), (2016, 0, 44), (2016, 0, 39), (2016, 0, 11), (2016, 0, 45), (2016, 0, 49), (2016, 0, 32), (2016, 0, 38), (2016, 0, 48), (2016, 0, 43), (2016, 0, 23), (2016, 0, 31), (2016, 0, 40), (2016, 0, 0), (2016, 0, 1), (2016, 0, 20), (2016, 0, 17), (2016, 0, 30), (2016, 0, 12), (2016, 0, 9), (2016, 0, 6), (2016, 0, 10), (2016, 0, 19), (2016, 0, 5), (2016, 0, 36), (2016, 0, 2), (2016, 1, 3), (2016, 1, 4), (2016, 1, 25), (2016, 1, 33), (2016, 1, 37), (2016, 1, 26), (2016, 1, 28), (2016, 1, 13), (2016, 1, 14), (2016, 1, 24), (2016, 1, 7), (2016, 1, 15), (2016, 1, 8), (2016, 1, 18), (2016, 1, 27), (2016, 1, 22), (2016, 1, 29), (2016, 1, 34), (2016, 1, 35), (2016, 1, 21), (2016, 1, 41), (2016, 1, 16), (2016, 1, 51), (2016, 1, 42), (2016, 1, 46), (2016, 1, 44), (2016, 1, 39), (2016, 1, 11), (2016, 1, 45), (2016, 1, 32), (2016, 1, 38), (2016, 1, 43), (2016, 1, 23), (2016, 1, 31), (2016, 1, 40), (2016, 1, 0), (2016, 1, 1), (2016, 1, 20), (2016, 1, 17), (2016, 1, 30), (2016, 1, 12), (2016, 1, 9), (2016, 1, 6), (2016, 1, 10), (2016, 1, 19), (2016, 1, 5), (2016, 1, 36), (2016, 1, 2), (2016, 1, 47), (2016, 2, 3), (2016, 2, 4), (2016, 2, 25), (2016, 2, 33), (2016, 2, 37), (2016, 2, 26), (2016, 2, 28), (2016, 2, 13), (2016, 2, 14), (2016, 2, 24), (2016, 2, 7), (2016, 2, 15), (2016, 2, 8), (2016, 2, 18), (2016, 2, 27), (2016, 2, 22), (2016, 2, 29), (2016, 2, 34), (2016, 2, 35), (2016, 2, 21), (2016, 2, 41), (2016, 2, 16), (2016, 2, 42), (2016, 2, 39), (2016, 2, 11), (2016, 2, 32), (2016, 2, 38), (2016, 2, 43), (2016, 2, 23), (2016, 2, 31), (2016, 2, 40), (2016, 2, 0), (2016, 2, 1), (2016, 2, 20), (2016, 2, 17), (2016, 2, 30), (2016, 2, 12), (2016, 2, 9), (2016, 2, 6), (2016, 2, 10), (2016, 2, 19), (2016, 2, 5), (2016, 2, 36), (2016, 2, 2), (2016, 3, 3), (2016, 3, 4), (2016, 3, 25), (2016, 3, 33), (2016, 3, 37), (2016, 3, 26), (2016, 3, 28), (2016, 3, 13), (2016, 3, 14), (2016, 3, 24), (2016, 3, 7), (2016, 3, 15), (2016, 3, 8), (2016, 3, 18), (2016, 3, 27), (2016, 3, 22), (2016, 3, 29), (2016, 3, 34), (2016, 3, 35), (2016, 3, 21), (2016, 3, 41), (2016, 3, 16), (2016, 3, 42), (2016, 3, 44), (2016, 3, 39), (2016, 3, 11), (2016, 3, 32), (2016, 3, 38), (2016, 3, 23), (2016, 3, 31), (2016, 3, 40), (2016, 3, 0), (2016, 3, 1), (2016, 3, 20), (2016, 3, 17), (2016, 3, 30), (2016, 3, 12), (2016, 3, 9), (2016, 3, 6), (2016, 3, 10), (2016, 3, 19), (2016, 3, 5), (2016, 3, 36), (2016, 3, 2), (2016, 3, 47), (2016, 4, 3), (2016, 4, 4), (2016, 4, 25), (2016, 4, 33), (2016, 4, 37), (2016, 4, 26), (2016, 4, 28), (2016, 4, 13), (2016, 4, 14), (2016, 4, 24), (2016, 4, 7), (2016, 4, 15), (2016, 4, 8), (2016, 4, 18), (2016, 4, 27), (2016, 4, 22), (2016, 4, 29), (2016, 4, 34), (2016, 4, 35), (2016, 4, 21), (2016, 4, 41), (2016, 4, 16), (2016, 4, 39), (2016, 4, 11), (2016, 4, 32), (2016, 4, 38), (2016, 4, 43), (2016, 4, 23), (2016, 4, 31), (2016, 4, 40), (2016, 4, 0), (2016, 4, 1), (2016, 4, 20), (2016, 4, 17), (2016, 4, 30), (2016, 4, 12), (2016, 4, 9), (2016, 4, 6), (2016, 4, 10), (2016, 4, 19), (2016, 4, 5), (2016, 4, 36), (2016, 4, 2), (2016, 4, 47), (2016, 5, 3), (2016, 5, 4), (2016, 5, 25), (2016, 5, 33), (2016, 5, 37), (2016, 5, 26), (2016, 5, 28), (2016, 5, 13), (2016, 5, 14), (2016, 5, 24), (2016, 5, 7), (2016, 5, 15), (2016, 5, 8), (2016, 5, 18), (2016, 5, 27), (2016, 5, 22), (2016, 5, 29), (2016, 5, 34), (2016, 5, 35), (2016, 5, 21), (2016, 5, 41), (2016, 5, 16), (2016, 5, 46), (2016, 5, 39), (2016, 5, 11), (2016, 5, 32), (2016, 5, 38), (2016, 5, 43), (2016, 5, 23), (2016, 5, 31), (2016, 5, 40), (2016, 5, 0), (2016, 5, 1), (2016, 5, 20), (2016, 5, 17), (2016, 5, 30), (2016, 5, 12), (2016, 5, 9), (2016, 5, 6), (2016, 5, 10), (2016, 5, 19), (2016, 5, 5), (2016, 5, 36), (2016, 5, 2), (2016, 6, 3), (2016, 6, 4), (2016, 6, 25), (2016, 6, 33), (2016, 6, 37), (2016, 6, 26), (2016, 6, 28), (2016, 6, 13), (2016, 6, 14), (2016, 6, 24), (2016, 6, 7), (2016, 6, 15), (2016, 6, 8), (2016, 6, 18), (2016, 6, 27), (2016, 6, 22), (2016, 6, 29), (2016, 6, 34), (2016, 6, 35), (2016, 6, 21), (2016, 6, 41), (2016, 6, 16), (2016, 6, 42), (2016, 6, 44), (2016, 6, 39), (2016, 6, 11), (2016, 6, 32), (2016, 6, 38), (2016, 6, 43), (2016, 6, 23), (2016, 6, 31), (2016, 6, 40), (2016, 6, 0), (2016, 6, 1), (2016, 6, 20), (2016, 6, 17), (2016, 6, 30), (2016, 6, 12), (2016, 6, 9), (2016, 6, 6), (2016, 6, 10), (2016, 6, 19), (2016, 6, 5), (2016, 6, 36), (2016, 6, 2), (2016, 7, 3), (2016, 7, 4), (2016, 7, 25), (2016, 7, 33), (2016, 7, 37), (2016, 7, 26), (2016, 7, 28), (2016, 7, 13), (2016, 7, 14), (2016, 7, 24), (2016, 7, 7), (2016, 7, 15), (2016, 7, 8), (2016, 7, 18), (2016, 7, 27), (2016, 7, 22), (2016, 7, 29), (2016, 7, 34), (2016, 7, 35), (2016, 7, 21), (2016, 7, 16), (2016, 7, 42), (2016, 7, 39), (2016, 7, 11), (2016, 7, 32), (2016, 7, 43), (2016, 7, 23), (2016, 7, 31), (2016, 7, 0), (2016, 7, 1), (2016, 7, 20), (2016, 7, 17), (2016, 7, 30), (2016, 7, 12), (2016, 7, 9), (2016, 7, 6), (2016, 7, 10), (2016, 7, 19), (2016, 7, 5), (2016, 7, 36), (2016, 7, 2), (2016, 8, 3), (2016, 8, 4), (2016, 8, 25), (2016, 8, 33), (2016, 8, 26), (2016, 8, 28), (2016, 8, 13), (2016, 8, 14), (2016, 8, 24), (2016, 8, 7), (2016, 8, 15), (2016, 8, 8), (2016, 8, 18), (2016, 8, 27), (2016, 8, 22), (2016, 8, 29), (2016, 8, 34), (2016, 8, 35), (2016, 8, 21), (2016, 8, 16), (2016, 8, 11), (2016, 8, 32), (2016, 8, 38), (2016, 8, 23), (2016, 8, 31), (2016, 8, 40), (2016, 8, 0), (2016, 8, 1), (2016, 8, 20), (2016, 8, 17), (2016, 8, 30), (2016, 8, 12), (2016, 8, 9), (2016, 8, 6), (2016, 8, 10), (2016, 8, 19), (2016, 8, 5), (2016, 8, 36), (2016, 8, 2), (2016, 9, 3), (2016, 9, 4), (2016, 9, 25), (2016, 9, 33), (2016, 9, 26), (2016, 9, 28), (2016, 9, 13), (2016, 9, 14), (2016, 9, 24), (2016, 9, 7), (2016, 9, 15), (2016, 9, 8), (2016, 9, 18), (2016, 9, 27), (2016, 9, 22), (2016, 9, 29), (2016, 9, 21), (2016, 9, 16), (2016, 9, 11), (2016, 9, 32), (2016, 9, 23), (2016, 9, 31), (2016, 9, 0), (2016, 9, 1), (2016, 9, 20), (2016, 9, 17), (2016, 9, 30), (2016, 9, 12), (2016, 9, 9), (2016, 9, 6), (2016, 9, 10), (2016, 9, 19), (2016, 9, 5), (2016, 9, 2), (2017, 0, 52), (2017, 0, 3), (2017, 0, 4), (2017, 0, 25), (2017, 0, 33), (2017, 0, 37), (2017, 0, 26), (2017, 0, 28), (2017, 0, 13), (2017, 0, 14), (2017, 0, 24), (2017, 0, 7), (2017, 0, 15), (2017, 0, 8), (2017, 0, 18), (2017, 0, 27), (2017, 0, 22), (2017, 0, 29), (2017, 0, 34), (2017, 0, 35), (2017, 0, 21), (2017, 0, 41), (2017, 0, 16), (2017, 0, 51), (2017, 0, 42), (2017, 0, 46), (2017, 0, 44), (2017, 0, 39), (2017, 0, 11), (2017, 0, 45), (2017, 0, 32), (2017, 0, 38), (2017, 0, 48), (2017, 0, 43), (2017, 0, 23), (2017, 0, 31), (2017, 0, 40), (2017, 0, 0), (2017, 0, 1), (2017, 0, 20), (2017, 0, 17), (2017, 0, 30), (2017, 0, 12), (2017, 0, 9), (2017, 0, 6), (2017, 0, 10), (2017, 0, 19), (2017, 0, 5), (2017, 0, 36), (2017, 0, 2), (2017, 1, 3), (2017, 1, 4), (2017, 1, 25), (2017, 1, 33), (2017, 1, 37), (2017, 1, 26), (2017, 1, 28), (2017, 1, 13), (2017, 1, 14), (2017, 1, 24), (2017, 1, 7), (2017, 1, 15), (2017, 1, 8), (2017, 1, 18), (2017, 1, 27), (2017, 1, 22), (2017, 1, 29), (2017, 1, 34), (2017, 1, 35), (2017, 1, 21), (2017, 1, 41), (2017, 1, 16), (2017, 1, 42), (2017, 1, 46), (2017, 1, 44), (2017, 1, 39), (2017, 1, 11), (2017, 1, 45), (2017, 1, 49), (2017, 1, 32), (2017, 1, 38), (2017, 1, 48), (2017, 1, 43), (2017, 1, 23), (2017, 1, 50), (2017, 1, 31), (2017, 1, 40), (2017, 1, 0), (2017, 1, 1), (2017, 1, 20), (2017, 1, 55), (2017, 1, 17), (2017, 1, 30), (2017, 1, 12), (2017, 1, 9), (2017, 1, 6), (2017, 1, 10), (2017, 1, 19), (2017, 1, 5), (2017, 1, 36), (2017, 1, 2), (2017, 1, 47), (2017, 2, 3), (2017, 2, 4), (2017, 2, 25), (2017, 2, 33), (2017, 2, 37), (2017, 2, 26), (2017, 2, 28), (2017, 2, 13), (2017, 2, 14), (2017, 2, 24), (2017, 2, 7), (2017, 2, 15), (2017, 2, 8), (2017, 2, 18), (2017, 2, 27), (2017, 2, 22), (2017, 2, 29), (2017, 2, 34), (2017, 2, 35), (2017, 2, 21), (2017, 2, 41), (2017, 2, 16), (2017, 2, 51), (2017, 2, 42), (2017, 2, 46), (2017, 2, 44), (2017, 2, 39), (2017, 2, 11), (2017, 2, 45), (2017, 2, 32), (2017, 2, 38), (2017, 2, 43), (2017, 2, 23), (2017, 2, 31), (2017, 2, 40), (2017, 2, 0), (2017, 2, 1), (2017, 2, 20), (2017, 2, 17), (2017, 2, 30), (2017, 2, 12), (2017, 2, 9), (2017, 2, 6), (2017, 2, 10), (2017, 2, 19), (2017, 2, 5), (2017, 2, 36), (2017, 2, 2), (2017, 2, 47), (2017, 3, 3), (2017, 3, 4), (2017, 3, 25), (2017, 3, 33), (2017, 3, 37), (2017, 3, 26), (2017, 3, 28), (2017, 3, 13), (2017, 3, 14), (2017, 3, 24), (2017, 3, 7), (2017, 3, 15), (2017, 3, 8), (2017, 3, 18), (2017, 3, 27), (2017, 3, 22), (2017, 3, 29), (2017, 3, 34), (2017, 3, 35), (2017, 3, 21), (2017, 3, 41), (2017, 3, 16), (2017, 3, 51), (2017, 3, 42), (2017, 3, 46), (2017, 3, 44), (2017, 3, 39), (2017, 3, 11), (2017, 3, 45), (2017, 3, 49), (2017, 3, 32), (2017, 3, 38), (2017, 3, 43), (2017, 3, 23), (2017, 3, 50), (2017, 3, 31), (2017, 3, 40), (2017, 3, 0), (2017, 3, 1), (2017, 3, 20), (2017, 3, 17), (2017, 3, 30), (2017, 3, 12), (2017, 3, 9), (2017, 3, 6), (2017, 3, 10), (2017, 3, 19), (2017, 3, 5), (2017, 3, 36), (2017, 3, 2), (2017, 4, 3), (2017, 4, 4), (2017, 4, 25), (2017, 4, 33), (2017, 4, 37), (2017, 4, 26), (2017, 4, 28), (2017, 4, 13), (2017, 4, 14), (2017, 4, 24), (2017, 4, 7), (2017, 4, 15), (2017, 4, 8), (2017, 4, 18), (2017, 4, 27), (2017, 4, 22), (2017, 4, 29), (2017, 4, 34), (2017, 4, 35), (2017, 4, 21), (2017, 4, 41), (2017, 4, 16), (2017, 4, 42), (2017, 4, 39), (2017, 4, 11), (2017, 4, 45), (2017, 4, 32), (2017, 4, 38), (2017, 4, 48), (2017, 4, 23), (2017, 4, 31), (2017, 4, 40), (2017, 4, 0), (2017, 4, 1), (2017, 4, 20), (2017, 4, 17), (2017, 4, 30), (2017, 4, 12), (2017, 4, 9), (2017, 4, 6), (2017, 4, 10), (2017, 4, 19), (2017, 4, 5), (2017, 4, 36), (2017, 4, 2), (2017, 5, 3), (2017, 5, 4), (2017, 5, 25), (2017, 5, 33), (2017, 5, 37), (2017, 5, 26), (2017, 5, 28), (2017, 5, 13), (2017, 5, 14), (2017, 5, 24), (2017, 5, 7), (2017, 5, 15), (2017, 5, 8), (2017, 5, 18), (2017, 5, 27), (2017, 5, 22), (2017, 5, 29), (2017, 5, 34), (2017, 5, 35), (2017, 5, 21), (2017, 5, 16), (2017, 5, 42), (2017, 5, 44), (2017, 5, 39), (2017, 5, 11), (2017, 5, 45), (2017, 5, 32), (2017, 5, 38), (2017, 5, 23), (2017, 5, 31), (2017, 5, 40), (2017, 5, 0), (2017, 5, 1), (2017, 5, 20), (2017, 5, 17), (2017, 5, 30), (2017, 5, 12), (2017, 5, 9), (2017, 5, 6), (2017, 5, 10), (2017, 5, 19), (2017, 5, 5), (2017, 5, 36), (2017, 5, 2), (2017, 6, 3), (2017, 6, 4), (2017, 6, 25), (2017, 6, 33), (2017, 6, 37), (2017, 6, 26), (2017, 6, 28), (2017, 6, 13), (2017, 6, 14), (2017, 6, 24), (2017, 6, 7), (2017, 6, 15), (2017, 6, 8), (2017, 6, 18), (2017, 6, 27), (2017, 6, 22), (2017, 6, 29), (2017, 6, 34), (2017, 6, 35), (2017, 6, 21), (2017, 6, 41), (2017, 6, 16), (2017, 6, 44), (2017, 6, 39), (2017, 6, 11), (2017, 6, 45), (2017, 6, 32), (2017, 6, 38), (2017, 6, 43), (2017, 6, 23), (2017, 6, 50), (2017, 6, 31), (2017, 6, 40), (2017, 6, 0), (2017, 6, 1), (2017, 6, 20), (2017, 6, 17), (2017, 6, 30), (2017, 6, 12), (2017, 6, 9), (2017, 6, 6), (2017, 6, 10), (2017, 6, 19), (2017, 6, 5), (2017, 6, 2), (2017, 7, 3), (2017, 7, 4), (2017, 7, 25), (2017, 7, 33), (2017, 7, 26), (2017, 7, 28), (2017, 7, 13), (2017, 7, 14), (2017, 7, 24), (2017, 7, 7), (2017, 7, 15), (2017, 7, 8), (2017, 7, 18), (2017, 7, 27), (2017, 7, 22), (2017, 7, 29), (2017, 7, 34), (2017, 7, 21), (2017, 7, 16), (2017, 7, 42), (2017, 7, 39), (2017, 7, 11), (2017, 7, 32), (2017, 7, 38), (2017, 7, 23), (2017, 7, 31), (2017, 7, 40), (2017, 7, 0), (2017, 7, 1), (2017, 7, 20), (2017, 7, 17), (2017, 7, 30), (2017, 7, 12), (2017, 7, 9), (2017, 7, 6), (2017, 7, 10), (2017, 7, 19), (2017, 7, 5), (2017, 7, 36), (2017, 7, 2), (2017, 8, 3), (2017, 8, 4), (2017, 8, 25), (2017, 8, 26), (2017, 8, 28), (2017, 8, 13), (2017, 8, 14), (2017, 8, 24), (2017, 8, 7), (2017, 8, 15), (2017, 8, 8), (2017, 8, 18), (2017, 8, 27), (2017, 8, 22), (2017, 8, 29), (2017, 8, 21), (2017, 8, 16), (2017, 8, 39), (2017, 8, 11), (2017, 8, 32), (2017, 8, 43), (2017, 8, 23), (2017, 8, 31), (2017, 8, 0), (2017, 8, 1), (2017, 8, 20), (2017, 8, 17), (2017, 8, 30), (2017, 8, 12), (2017, 8, 9), (2017, 8, 6), (2017, 8, 10), (2017, 8, 19), (2017, 8, 5), (2017, 8, 2), (2017, 9, 3), (2017, 9, 4), (2017, 9, 33), (2017, 9, 26), (2017, 9, 28), (2017, 9, 13), (2017, 9, 14), (2017, 9, 7), (2017, 9, 15), (2017, 9, 8), (2017, 9, 18), (2017, 9, 27), (2017, 9, 22), (2017, 9, 21), (2017, 9, 16), (2017, 9, 11), (2017, 9, 38), (2017, 9, 23), (2017, 9, 0), (2017, 9, 1), (2017, 9, 20), (2017, 9, 17), (2017, 9, 30), (2017, 9, 12), (2017, 9, 9), (2017, 9, 6), (2017, 9, 10), (2017, 9, 19), (2017, 9, 5), (2017, 9, 2), (2018, 0, 3), (2018, 0, 4), (2018, 0, 25), (2018, 0, 33), (2018, 0, 37), (2018, 0, 26), (2018, 0, 28), (2018, 0, 13), (2018, 0, 14), (2018, 0, 24), (2018, 0, 7), (2018, 0, 15), (2018, 0, 8), (2018, 0, 18), (2018, 0, 27), (2018, 0, 22), (2018, 0, 29), (2018, 0, 34), (2018, 0, 35), (2018, 0, 21), (2018, 0, 41), (2018, 0, 16), (2018, 0, 42), (2018, 0, 44), (2018, 0, 39), (2018, 0, 11), (2018, 0, 32), (2018, 0, 38), (2018, 0, 48), (2018, 0, 23), (2018, 0, 31), (2018, 0, 40), (2018, 0, 0), (2018, 0, 1), (2018, 0, 20), (2018, 0, 17), (2018, 0, 30), (2018, 0, 12), (2018, 0, 9), (2018, 0, 6), (2018, 0, 10), (2018, 0, 19), (2018, 0, 5), (2018, 0, 36), (2018, 0, 2), (2018, 1, 3), (2018, 1, 4), (2018, 1, 25), (2018, 1, 33), (2018, 1, 37), (2018, 1, 26), (2018, 1, 28), (2018, 1, 13), (2018, 1, 14), (2018, 1, 24), (2018, 1, 7), (2018, 1, 15), (2018, 1, 8), (2018, 1, 18), (2018, 1, 27), (2018, 1, 22), (2018, 1, 29), (2018, 1, 34), (2018, 1, 35), (2018, 1, 21), (2018, 1, 41), (2018, 1, 16), (2018, 1, 42), (2018, 1, 46), (2018, 1, 44), (2018, 1, 39), (2018, 1, 11), (2018, 1, 32), (2018, 1, 38), (2018, 1, 23), (2018, 1, 31), (2018, 1, 40), (2018, 1, 0), (2018, 1, 1), (2018, 1, 20), (2018, 1, 17), (2018, 1, 30), (2018, 1, 12), (2018, 1, 9), (2018, 1, 6), (2018, 1, 10), (2018, 1, 19), (2018, 1, 5), (2018, 1, 36), (2018, 1, 2), (2018, 1, 47), (2018, 2, 3), (2018, 2, 4), (2018, 2, 25), (2018, 2, 33), (2018, 2, 37), (2018, 2, 26), (2018, 2, 28), (2018, 2, 13), (2018, 2, 14), (2018, 2, 24), (2018, 2, 7), (2018, 2, 15), (2018, 2, 8), (2018, 2, 18), (2018, 2, 27), (2018, 2, 22), (2018, 2, 29), (2018, 2, 34), (2018, 2, 35), (2018, 2, 21), (2018, 2, 41), (2018, 2, 16), (2018, 2, 42), (2018, 2, 46), (2018, 2, 44), (2018, 2, 39), (2018, 2, 11), (2018, 2, 45), (2018, 2, 32), (2018, 2, 38), (2018, 2, 43), (2018, 2, 23), (2018, 2, 31), (2018, 2, 40), (2018, 2, 0), (2018, 2, 1), (2018, 2, 20), (2018, 2, 17), (2018, 2, 30), (2018, 2, 12), (2018, 2, 9), (2018, 2, 6), (2018, 2, 10), (2018, 2, 19), (2018, 2, 5), (2018, 2, 36), (2018, 2, 2), (2018, 2, 47), (2018, 3, 3), (2018, 3, 4), (2018, 3, 25), (2018, 3, 33), (2018, 3, 37), (2018, 3, 26), (2018, 3, 28), (2018, 3, 13), (2018, 3, 14), (2018, 3, 24), (2018, 3, 7), (2018, 3, 15), (2018, 3, 8), (2018, 3, 18), (2018, 3, 27), (2018, 3, 22), (2018, 3, 29), (2018, 3, 34), (2018, 3, 35), (2018, 3, 21), (2018, 3, 41), (2018, 3, 16), (2018, 3, 42), (2018, 3, 44), (2018, 3, 39), (2018, 3, 11), (2018, 3, 45), (2018, 3, 32), (2018, 3, 38), (2018, 3, 48), (2018, 3, 43), (2018, 3, 23), (2018, 3, 31), (2018, 3, 40), (2018, 3, 0), (2018, 3, 1), (2018, 3, 20), (2018, 3, 17), (2018, 3, 30), (2018, 3, 12), (2018, 3, 9), (2018, 3, 6), (2018, 3, 10), (2018, 3, 19), (2018, 3, 5), (2018, 3, 36), (2018, 3, 2), (2018, 4, 53), (2018, 4, 3), (2018, 4, 4), (2018, 4, 25), (2018, 4, 33), (2018, 4, 37), (2018, 4, 26), (2018, 4, 28), (2018, 4, 13), (2018, 4, 14), (2018, 4, 24), (2018, 4, 7), (2018, 4, 15), (2018, 4, 8), (2018, 4, 18), (2018, 4, 27), (2018, 4, 22), (2018, 4, 29), (2018, 4, 34), (2018, 4, 35), (2018, 4, 21), (2018, 4, 41), (2018, 4, 16), (2018, 4, 51), (2018, 4, 42), (2018, 4, 46), (2018, 4, 44), (2018, 4, 39), (2018, 4, 11), (2018, 4, 45), (2018, 4, 32), (2018, 4, 38), (2018, 4, 43), (2018, 4, 23), (2018, 4, 50), (2018, 4, 31), (2018, 4, 40), (2018, 4, 0), (2018, 4, 1), (2018, 4, 20), (2018, 4, 17), (2018, 4, 30), (2018, 4, 12), (2018, 4, 9), (2018, 4, 6), (2018, 4, 10), (2018, 4, 19), (2018, 4, 5), (2018, 4, 36), (2018, 4, 2), (2018, 5, 52), (2018, 5, 3), (2018, 5, 4), (2018, 5, 25), (2018, 5, 33), (2018, 5, 37), (2018, 5, 26), (2018, 5, 28), (2018, 5, 13), (2018, 5, 14), (2018, 5, 24), (2018, 5, 7), (2018, 5, 15), (2018, 5, 8), (2018, 5, 18), (2018, 5, 27), (2018, 5, 22), (2018, 5, 29), (2018, 5, 34), (2018, 5, 35), (2018, 5, 21), (2018, 5, 41), (2018, 5, 16), (2018, 5, 42), (2018, 5, 46), (2018, 5, 44), (2018, 5, 39), (2018, 5, 11), (2018, 5, 45), (2018, 5, 49), (2018, 5, 32), (2018, 5, 38), (2018, 5, 23), (2018, 5, 31), (2018, 5, 0), (2018, 5, 1), (2018, 5, 20), (2018, 5, 17), (2018, 5, 30), (2018, 5, 12), (2018, 5, 9), (2018, 5, 6), (2018, 5, 10), (2018, 5, 19), (2018, 5, 5), (2018, 5, 36), (2018, 5, 2), (2018, 6, 3), (2018, 6, 4), (2018, 6, 25), (2018, 6, 33), (2018, 6, 37), (2018, 6, 26), (2018, 6, 28), (2018, 6, 13), (2018, 6, 14), (2018, 6, 24), (2018, 6, 7), (2018, 6, 15), (2018, 6, 8), (2018, 6, 18), (2018, 6, 27), (2018, 6, 22), (2018, 6, 29), (2018, 6, 34), (2018, 6, 35), (2018, 6, 21), (2018, 6, 41), (2018, 6, 16), (2018, 6, 42), (2018, 6, 46), (2018, 6, 39), (2018, 6, 11), (2018, 6, 45), (2018, 6, 32), (2018, 6, 38), (2018, 6, 23), (2018, 6, 31), (2018, 6, 0), (2018, 6, 1), (2018, 6, 20), (2018, 6, 17), (2018, 6, 30), (2018, 6, 12), (2018, 6, 9), (2018, 6, 6), (2018, 6, 10), (2018, 6, 19), (2018, 6, 5), (2018, 6, 36), (2018, 6, 2), (2018, 6, 47), (2018, 7, 3), (2018, 7, 4), (2018, 7, 25), (2018, 7, 33), (2018, 7, 37), (2018, 7, 26), (2018, 7, 28), (2018, 7, 13), (2018, 7, 14), (2018, 7, 24), (2018, 7, 7), (2018, 7, 15), (2018, 7, 8), (2018, 7, 18), (2018, 7, 27), (2018, 7, 22), (2018, 7, 29), (2018, 7, 34), (2018, 7, 21), (2018, 7, 41), (2018, 7, 16), (2018, 7, 39), (2018, 7, 11), (2018, 7, 45), (2018, 7, 32), (2018, 7, 23), (2018, 7, 31), (2018, 7, 0), (2018, 7, 1), (2018, 7, 20), (2018, 7, 17), (2018, 7, 30), (2018, 7, 12), (2018, 7, 9), (2018, 7, 6), (2018, 7, 10), (2018, 7, 19), (2018, 7, 5), (2018, 7, 2), (2018, 8, 3), (2018, 8, 4), (2018, 8, 25), (2018, 8, 33), (2018, 8, 37), (2018, 8, 26), (2018, 8, 28), (2018, 8, 13), (2018, 8, 14), (2018, 8, 24), (2018, 8, 7), (2018, 8, 15), (2018, 8, 8), (2018, 8, 18), (2018, 8, 27), (2018, 8, 22), (2018, 8, 29), (2018, 8, 34), (2018, 8, 35), (2018, 8, 21), (2018, 8, 41), (2018, 8, 16), (2018, 8, 42), (2018, 8, 44), (2018, 8, 11), (2018, 8, 32), (2018, 8, 43), (2018, 8, 23), (2018, 8, 31), (2018, 8, 0), (2018, 8, 1), (2018, 8, 20), (2018, 8, 17), (2018, 8, 30), (2018, 8, 12), (2018, 8, 9), (2018, 8, 6), (2018, 8, 10), (2018, 8, 19), (2018, 8, 5), (2018, 8, 36), (2018, 8, 2), (2018, 9, 3), (2018, 9, 4), (2018, 9, 25), (2018, 9, 37), (2018, 9, 26), (2018, 9, 28), (2018, 9, 13), (2018, 9, 14), (2018, 9, 24), (2018, 9, 7), (2018, 9, 15), (2018, 9, 8), (2018, 9, 18), (2018, 9, 27), (2018, 9, 22), (2018, 9, 29), (2018, 9, 34), (2018, 9, 21), (2018, 9, 16), (2018, 9, 11), (2018, 9, 32), (2018, 9, 23), (2018, 9, 0), (2018, 9, 1), (2018, 9, 20), (2018, 9, 17), (2018, 9, 30), (2018, 9, 12), (2018, 9, 9), (2018, 9, 6), (2018, 9, 10), (2018, 9, 19), (2018, 9, 5), (2018, 9, 36), (2018, 9, 2), (2019, 0, 3), (2019, 0, 4), (2019, 0, 25), (2019, 0, 33), (2019, 0, 37), (2019, 0, 26), (2019, 0, 28), (2019, 0, 13), (2019, 0, 14), (2019, 0, 24), (2019, 0, 7), (2019, 0, 15), (2019, 0, 8), (2019, 0, 18), (2019, 0, 27), (2019, 0, 22), (2019, 0, 29), (2019, 0, 34), (2019, 0, 35), (2019, 0, 21), (2019, 0, 41), (2019, 0, 16), (2019, 0, 51), (2019, 0, 42), (2019, 0, 46), (2019, 0, 44), (2019, 0, 39), (2019, 0, 11), (2019, 0, 45), (2019, 0, 49), (2019, 0, 32), (2019, 0, 38), (2019, 0, 48), (2019, 0, 43), (2019, 0, 23), (2019, 0, 50), (2019, 0, 31), (2019, 0, 40), (2019, 0, 0), (2019, 0, 1), (2019, 0, 20), (2019, 0, 17), (2019, 0, 30), (2019, 0, 12), (2019, 0, 9), (2019, 0, 6), (2019, 0, 10), (2019, 0, 19), (2019, 0, 5), (2019, 0, 36), (2019, 0, 2), (2019, 0, 47), (2019, 1, 3), (2019, 1, 4), (2019, 1, 25), (2019, 1, 33), (2019, 1, 37), (2019, 1, 26), (2019, 1, 28), (2019, 1, 13), (2019, 1, 14), (2019, 1, 24), (2019, 1, 7), (2019, 1, 15), (2019, 1, 8), (2019, 1, 18), (2019, 1, 27), (2019, 1, 22), (2019, 1, 29), (2019, 1, 34), (2019, 1, 35), (2019, 1, 21), (2019, 1, 41), (2019, 1, 16), (2019, 1, 42), (2019, 1, 44), (2019, 1, 39), (2019, 1, 11), (2019, 1, 45), (2019, 1, 49), (2019, 1, 32), (2019, 1, 38), (2019, 1, 43), (2019, 1, 23), (2019, 1, 31), (2019, 1, 40), (2019, 1, 0), (2019, 1, 1), (2019, 1, 20), (2019, 1, 17), (2019, 1, 30), (2019, 1, 12), (2019, 1, 9), (2019, 1, 6), (2019, 1, 10), (2019, 1, 19), (2019, 1, 5), (2019, 1, 36), (2019, 1, 2), (2019, 1, 47), (2019, 2, 3), (2019, 2, 4), (2019, 2, 25), (2019, 2, 33), (2019, 2, 37), (2019, 2, 26), (2019, 2, 28), (2019, 2, 13), (2019, 2, 14), (2019, 2, 24), (2019, 2, 7), (2019, 2, 15), (2019, 2, 8), (2019, 2, 18), (2019, 2, 27), (2019, 2, 22), (2019, 2, 29), (2019, 2, 34), (2019, 2, 35), (2019, 2, 21), (2019, 2, 41), (2019, 2, 16), (2019, 2, 51), (2019, 2, 42), (2019, 2, 46), (2019, 2, 44), (2019, 2, 39), (2019, 2, 11), (2019, 2, 45), (2019, 2, 49), (2019, 2, 32), (2019, 2, 38), (2019, 2, 48), (2019, 2, 43), (2019, 2, 23), (2019, 2, 31), (2019, 2, 40), (2019, 2, 0), (2019, 2, 1), (2019, 2, 20), (2019, 2, 17), (2019, 2, 30), (2019, 2, 12), (2019, 2, 9), (2019, 2, 6), (2019, 2, 10), (2019, 2, 19), (2019, 2, 5), (2019, 2, 36), (2019, 2, 2), (2019, 2, 47), (2019, 3, 3), (2019, 3, 4), (2019, 3, 25), (2019, 3, 33), (2019, 3, 37), (2019, 3, 26), (2019, 3, 28), (2019, 3, 13), (2019, 3, 14), (2019, 3, 24), (2019, 3, 7), (2019, 3, 15), (2019, 3, 8), (2019, 3, 18), (2019, 3, 27), (2019, 3, 22), (2019, 3, 29), (2019, 3, 34), (2019, 3, 35), (2019, 3, 21), (2019, 3, 41), (2019, 3, 16), (2019, 3, 42), (2019, 3, 39), (2019, 3, 11), (2019, 3, 32), (2019, 3, 38), (2019, 3, 43), (2019, 3, 23), (2019, 3, 31), (2019, 3, 40), (2019, 3, 0), (2019, 3, 1), (2019, 3, 20), (2019, 3, 17), (2019, 3, 30), (2019, 3, 12), (2019, 3, 9), (2019, 3, 6), (2019, 3, 10), (2019, 3, 19), (2019, 3, 5), (2019, 3, 36), (2019, 3, 2), (2019, 4, 3), (2019, 4, 4), (2019, 4, 25), (2019, 4, 33), (2019, 4, 37), (2019, 4, 26), (2019, 4, 28), (2019, 4, 13), (2019, 4, 14), (2019, 4, 24), (2019, 4, 7), (2019, 4, 15), (2019, 4, 8), (2019, 4, 18), (2019, 4, 27), (2019, 4, 22), (2019, 4, 29), (2019, 4, 34), (2019, 4, 35), (2019, 4, 21), (2019, 4, 16), (2019, 4, 42), (2019, 4, 44), (2019, 4, 39), (2019, 4, 11), (2019, 4, 32), (2019, 4, 38), (2019, 4, 43), (2019, 4, 23), (2019, 4, 31), (2019, 4, 40), (2019, 4, 0), (2019, 4, 1), (2019, 4, 20), (2019, 4, 17), (2019, 4, 30), (2019, 4, 12), (2019, 4, 9), (2019, 4, 6), (2019, 4, 10), (2019, 4, 19), (2019, 4, 5), (2019, 4, 36), (2019, 4, 2), (2019, 5, 3), (2019, 5, 4), (2019, 5, 25), (2019, 5, 33), (2019, 5, 37), (2019, 5, 26), (2019, 5, 28), (2019, 5, 13), (2019, 5, 14), (2019, 5, 24), (2019, 5, 7), (2019, 5, 15), (2019, 5, 8), (2019, 5, 18), (2019, 5, 27), (2019, 5, 22), (2019, 5, 29), (2019, 5, 34), (2019, 5, 35), (2019, 5, 21), (2019, 5, 41), (2019, 5, 16), (2019, 5, 44), (2019, 5, 11), (2019, 5, 45), (2019, 5, 32), (2019, 5, 38), (2019, 5, 23), (2019, 5, 31), (2019, 5, 40), (2019, 5, 0), (2019, 5, 1), (2019, 5, 20), (2019, 5, 17), (2019, 5, 30), (2019, 5, 12), (2019, 5, 9), (2019, 5, 6), (2019, 5, 10), (2019, 5, 19), (2019, 5, 5), (2019, 5, 36), (2019, 5, 2), (2019, 6, 3), (2019, 6, 4), (2019, 6, 25), (2019, 6, 33), (2019, 6, 37), (2019, 6, 26), (2019, 6, 28), (2019, 6, 13), (2019, 6, 14), (2019, 6, 24), (2019, 6, 7), (2019, 6, 15), (2019, 6, 8), (2019, 6, 18), (2019, 6, 27), (2019, 6, 22), (2019, 6, 29), (2019, 6, 34), (2019, 6, 35), (2019, 6, 21), (2019, 6, 41), (2019, 6, 16), (2019, 6, 42), (2019, 6, 44), (2019, 6, 39), (2019, 6, 11), (2019, 6, 32), (2019, 6, 38), (2019, 6, 23), (2019, 6, 31), (2019, 6, 40), (2019, 6, 0), (2019, 6, 1), (2019, 6, 20), (2019, 6, 17), (2019, 6, 30), (2019, 6, 12), (2019, 6, 9), (2019, 6, 6), (2019, 6, 10), (2019, 6, 19), (2019, 6, 5), (2019, 6, 36), (2019, 6, 2), (2019, 7, 3), (2019, 7, 4), (2019, 7, 25), (2019, 7, 33), (2019, 7, 37), (2019, 7, 26), (2019, 7, 28), (2019, 7, 13), (2019, 7, 14), (2019, 7, 24), (2019, 7, 7), (2019, 7, 15), (2019, 7, 8), (2019, 7, 18), (2019, 7, 27), (2019, 7, 22), (2019, 7, 29), (2019, 7, 34), (2019, 7, 35), (2019, 7, 21), (2019, 7, 41), (2019, 7, 16), (2019, 7, 42), (2019, 7, 46), (2019, 7, 11), (2019, 7, 45), (2019, 7, 32), (2019, 7, 38), (2019, 7, 43), (2019, 7, 23), (2019, 7, 31), (2019, 7, 40), (2019, 7, 0), (2019, 7, 1), (2019, 7, 20), (2019, 7, 17), (2019, 7, 30), (2019, 7, 12), (2019, 7, 9), (2019, 7, 6), (2019, 7, 10), (2019, 7, 19), (2019, 7, 5), (2019, 7, 36), (2019, 7, 2), (2019, 8, 3), (2019, 8, 4), (2019, 8, 25), (2019, 8, 33), (2019, 8, 37), (2019, 8, 26), (2019, 8, 28), (2019, 8, 13), (2019, 8, 14), (2019, 8, 24), (2019, 8, 7), (2019, 8, 15), (2019, 8, 8), (2019, 8, 18), (2019, 8, 27), (2019, 8, 22), (2019, 8, 29), (2019, 8, 34), (2019, 8, 35), (2019, 8, 21), (2019, 8, 41), (2019, 8, 16), (2019, 8, 39), (2019, 8, 11), (2019, 8, 32), (2019, 8, 38), (2019, 8, 23), (2019, 8, 31), (2019, 8, 40), (2019, 8, 0), (2019, 8, 1), (2019, 8, 20), (2019, 8, 17), (2019, 8, 30), (2019, 8, 12), (2019, 8, 9), (2019, 8, 6), (2019, 8, 10), (2019, 8, 19), (2019, 8, 5), (2019, 8, 2), (2019, 9, 3), (2019, 9, 4), (2019, 9, 33), (2019, 9, 26), (2019, 9, 13), (2019, 9, 14), (2019, 9, 24), (2019, 9, 7), (2019, 9, 15), (2019, 9, 8), (2019, 9, 18), (2019, 9, 27), (2019, 9, 22), (2019, 9, 29), (2019, 9, 34), (2019, 9, 21), (2019, 9, 16), (2019, 9, 39), (2019, 9, 11), (2019, 9, 32), (2019, 9, 38), (2019, 9, 23), (2019, 9, 40), (2019, 9, 0), (2019, 9, 1), (2019, 9, 20), (2019, 9, 17), (2019, 9, 30), (2019, 9, 12), (2019, 9, 9), (2019, 9, 6), (2019, 9, 10), (2019, 9, 19), (2019, 9, 5), (2019, 9, 2), (2020, 0, 3), (2020, 0, 4), (2020, 0, 25), (2020, 0, 33), (2020, 0, 37), (2020, 0, 26), (2020, 0, 28), (2020, 0, 13), (2020, 0, 14), (2020, 0, 24), (2020, 0, 7), (2020, 0, 15), (2020, 0, 8), (2020, 0, 18), (2020, 0, 27), (2020, 0, 22), (2020, 0, 29), (2020, 0, 34), (2020, 0, 35), (2020, 0, 21), (2020, 0, 41), (2020, 0, 16), (2020, 0, 42), (2020, 0, 44), (2020, 0, 39), (2020, 0, 11), (2020, 0, 45), (2020, 0, 32), (2020, 0, 38), (2020, 0, 48), (2020, 0, 43), (2020, 0, 23), (2020, 0, 31), (2020, 0, 40), (2020, 0, 0), (2020, 0, 1), (2020, 0, 20), (2020, 0, 17), (2020, 0, 30), (2020, 0, 12), (2020, 0, 9), (2020, 0, 6), (2020, 0, 10), (2020, 0, 19), (2020, 0, 5), (2020, 0, 36), (2020, 0, 2), (2020, 1, 3), (2020, 1, 4), (2020, 1, 25), (2020, 1, 33), (2020, 1, 37), (2020, 1, 26), (2020, 1, 28), (2020, 1, 13), (2020, 1, 14), (2020, 1, 24), (2020, 1, 7), (2020, 1, 15), (2020, 1, 8), (2020, 1, 18), (2020, 1, 27), (2020, 1, 22), (2020, 1, 29), (2020, 1, 34), (2020, 1, 35), (2020, 1, 21), (2020, 1, 41), (2020, 1, 16), (2020, 1, 46), (2020, 1, 39), (2020, 1, 11), (2020, 1, 32), (2020, 1, 38), (2020, 1, 43), (2020, 1, 23), (2020, 1, 31), (2020, 1, 40), (2020, 1, 0), (2020, 1, 1), (2020, 1, 20), (2020, 1, 17), (2020, 1, 30), (2020, 1, 12), (2020, 1, 9), (2020, 1, 6), (2020, 1, 10), (2020, 1, 19), (2020, 1, 5), (2020, 1, 36), (2020, 1, 2), (2020, 1, 47), (2020, 2, 3), (2020, 2, 4), (2020, 2, 25), (2020, 2, 33), (2020, 2, 26), (2020, 2, 28), (2020, 2, 13), (2020, 2, 14), (2020, 2, 24), (2020, 2, 7), (2020, 2, 15), (2020, 2, 8), (2020, 2, 18), (2020, 2, 27), (2020, 2, 22), (2020, 2, 29), (2020, 2, 34), (2020, 2, 35), (2020, 2, 21), (2020, 2, 16), (2020, 2, 11), (2020, 2, 32), (2020, 2, 38), (2020, 2, 43), (2020, 2, 23), (2020, 2, 31), (2020, 2, 0), (2020, 2, 1), (2020, 2, 20), (2020, 2, 17), (2020, 2, 30), (2020, 2, 12), (2020, 2, 9), (2020, 2, 6), (2020, 2, 10), (2020, 2, 19), (2020, 2, 5), (2020, 2, 36), (2020, 2, 2), (2020, 3, 3), (2020, 3, 4), (2020, 3, 25), (2020, 3, 33), (2020, 3, 37), (2020, 3, 26), (2020, 3, 28), (2020, 3, 13), (2020, 3, 14), (2020, 3, 24), (2020, 3, 7), (2020, 3, 15), (2020, 3, 8), (2020, 3, 18), (2020, 3, 27), (2020, 3, 22), (2020, 3, 29), (2020, 3, 34), (2020, 3, 21), (2020, 3, 41), (2020, 3, 16), (2020, 3, 42), (2020, 3, 39), (2020, 3, 11), (2020, 3, 32), (2020, 3, 38), (2020, 3, 23), (2020, 3, 31), (2020, 3, 0), (2020, 3, 1), (2020, 3, 20), (2020, 3, 17), (2020, 3, 30), (2020, 3, 12), (2020, 3, 9), (2020, 3, 6), (2020, 3, 10), (2020, 3, 19), (2020, 3, 5), (2020, 3, 36), (2020, 3, 2), (2020, 4, 3), (2020, 4, 4), (2020, 4, 25), (2020, 4, 33), (2020, 4, 37), (2020, 4, 26), (2020, 4, 28), (2020, 4, 13), (2020, 4, 14), (2020, 4, 24), (2020, 4, 7), (2020, 4, 15), (2020, 4, 8), (2020, 4, 18), (2020, 4, 27), (2020, 4, 22), (2020, 4, 29), (2020, 4, 34), (2020, 4, 35), (2020, 4, 21), (2020, 4, 16), (2020, 4, 11), (2020, 4, 32), (2020, 4, 38), (2020, 4, 48), (2020, 4, 23), (2020, 4, 31), (2020, 4, 0), (2020, 4, 1), (2020, 4, 20), (2020, 4, 17), (2020, 4, 30), (2020, 4, 12), (2020, 4, 9), (2020, 4, 6), (2020, 4, 10), (2020, 4, 19), (2020, 4, 5), (2020, 4, 2), (2020, 5, 3), (2020, 5, 4), (2020, 5, 25), (2020, 5, 33), (2020, 5, 37), (2020, 5, 26), (2020, 5, 28), (2020, 5, 13), (2020, 5, 14), (2020, 5, 24), (2020, 5, 7), (2020, 5, 15), (2020, 5, 8), (2020, 5, 18), (2020, 5, 27), (2020, 5, 22), (2020, 5, 29), (2020, 5, 34), (2020, 5, 35), (2020, 5, 21), (2020, 5, 41), (2020, 5, 16), (2020, 5, 42), (2020, 5, 39), (2020, 5, 11), (2020, 5, 45), (2020, 5, 32), (2020, 5, 43), (2020, 5, 23), (2020, 5, 31), (2020, 5, 0), (2020, 5, 1), (2020, 5, 20), (2020, 5, 17), (2020, 5, 30), (2020, 5, 12), (2020, 5, 9), (2020, 5, 6), (2020, 5, 10), (2020, 5, 19), (2020, 5, 5), (2020, 5, 36), (2020, 5, 2), (2020, 6, 3), (2020, 6, 4), (2020, 6, 25), (2020, 6, 33), (2020, 6, 26), (2020, 6, 28), (2020, 6, 13), (2020, 6, 14), (2020, 6, 24), (2020, 6, 7), (2020, 6, 15), (2020, 6, 8), (2020, 6, 18), (2020, 6, 27), (2020, 6, 22), (2020, 6, 29), (2020, 6, 34), (2020, 6, 35), (2020, 6, 21), (2020, 6, 16), (2020, 6, 42), (2020, 6, 11), (2020, 6, 32), (2020, 6, 38), (2020, 6, 48), (2020, 6, 43), (2020, 6, 23), (2020, 6, 31), (2020, 6, 0), (2020, 6, 1), (2020, 6, 20), (2020, 6, 17), (2020, 6, 30), (2020, 6, 12), (2020, 6, 9), (2020, 6, 6), (2020, 6, 10), (2020, 6, 19), (2020, 6, 5), (2020, 6, 36), (2020, 6, 2), (2020, 7, 3), (2020, 7, 4), (2020, 7, 25), (2020, 7, 33), (2020, 7, 37), (2020, 7, 26), (2020, 7, 28), (2020, 7, 13), (2020, 7, 14), (2020, 7, 24), (2020, 7, 7), (2020, 7, 15), (2020, 7, 8), (2020, 7, 18), (2020, 7, 27), (2020, 7, 22), (2020, 7, 29), (2020, 7, 35), (2020, 7, 21), (2020, 7, 16), (2020, 7, 39), (2020, 7, 11), (2020, 7, 32), (2020, 7, 38), (2020, 7, 23), (2020, 7, 31), (2020, 7, 40), (2020, 7, 0), (2020, 7, 1), (2020, 7, 20), (2020, 7, 17), (2020, 7, 30), (2020, 7, 12), (2020, 7, 9), (2020, 7, 6), (2020, 7, 10), (2020, 7, 19), (2020, 7, 5), (2020, 7, 2), (2020, 8, 3), (2020, 8, 4), (2020, 8, 25), (2020, 8, 26), (2020, 8, 28), (2020, 8, 13), (2020, 8, 14), (2020, 8, 24), (2020, 8, 7), (2020, 8, 15), (2020, 8, 8), (2020, 8, 18), (2020, 8, 27), (2020, 8, 22), (2020, 8, 29), (2020, 8, 34), (2020, 8, 35), (2020, 8, 21), (2020, 8, 41), (2020, 8, 16), (2020, 8, 39), (2020, 8, 11), (2020, 8, 32), (2020, 8, 38), (2020, 8, 23), (2020, 8, 31), (2020, 8, 0), (2020, 8, 1), (2020, 8, 20), (2020, 8, 17), (2020, 8, 30), (2020, 8, 12), (2020, 8, 9), (2020, 8, 6), (2020, 8, 10), (2020, 8, 19), (2020, 8, 5), (2020, 8, 36), (2020, 8, 2), (2020, 9, 3), (2020, 9, 4), (2020, 9, 25), (2020, 9, 33), (2020, 9, 28), (2020, 9, 13), (2020, 9, 14), (2020, 9, 24), (2020, 9, 7), (2020, 9, 15), (2020, 9, 8), (2020, 9, 18), (2020, 9, 27), (2020, 9, 22), (2020, 9, 29), (2020, 9, 34), (2020, 9, 21), (2020, 9, 16), (2020, 9, 11), (2020, 9, 38), (2020, 9, 23), (2020, 9, 0), (2020, 9, 1), (2020, 9, 20), (2020, 9, 17), (2020, 9, 30), (2020, 9, 12), (2020, 9, 9), (2020, 9, 6), (2020, 9, 10), (2020, 9, 19), (2020, 9, 5), (2020, 9, 2), (2021, 0, 3), (2021, 0, 4), (2021, 0, 25), (2021, 0, 33), (2021, 0, 37), (2021, 0, 26), (2021, 0, 28), (2021, 0, 13), (2021, 0, 14), (2021, 0, 24), (2021, 0, 7), (2021, 0, 15), (2021, 0, 8), (2021, 0, 18), (2021, 0, 27), (2021, 0, 22), (2021, 0, 29), (2021, 0, 34), (2021, 0, 35), (2021, 0, 21), (2021, 0, 41), (2021, 0, 16), (2021, 0, 42), (2021, 0, 44), (2021, 0, 39), (2021, 0, 11), (2021, 0, 45), (2021, 0, 32), (2021, 0, 38), (2021, 0, 43), (2021, 0, 23), (2021, 0, 31), (2021, 0, 40), (2021, 0, 0), (2021, 0, 1), (2021, 0, 20), (2021, 0, 17), (2021, 0, 30), (2021, 0, 12), (2021, 0, 9), (2021, 0, 6), (2021, 0, 10), (2021, 0, 19), (2021, 0, 5), (2021, 0, 36), (2021, 0, 2), (2021, 1, 3), (2021, 1, 4), (2021, 1, 25), (2021, 1, 33), (2021, 1, 37), (2021, 1, 26), (2021, 1, 28), (2021, 1, 13), (2021, 1, 14), (2021, 1, 24), (2021, 1, 7), (2021, 1, 15), (2021, 1, 8), (2021, 1, 18), (2021, 1, 27), (2021, 1, 22), (2021, 1, 29), (2021, 1, 34), (2021, 1, 35), (2021, 1, 21), (2021, 1, 41), (2021, 1, 16), (2021, 1, 39), (2021, 1, 11), (2021, 1, 32), (2021, 1, 38), (2021, 1, 23), (2021, 1, 31), (2021, 1, 40), (2021, 1, 0), (2021, 1, 1), (2021, 1, 20), (2021, 1, 17), (2021, 1, 30), (2021, 1, 12), (2021, 1, 9), (2021, 1, 6), (2021, 1, 10), (2021, 1, 19), (2021, 1, 5), (2021, 1, 36), (2021, 1, 2), (2021, 1, 47), (2021, 2, 3), (2021, 2, 4), (2021, 2, 25), (2021, 2, 33), (2021, 2, 37), (2021, 2, 26), (2021, 2, 28), (2021, 2, 13), (2021, 2, 14), (2021, 2, 24), (2021, 2, 7), (2021, 2, 15), (2021, 2, 8), (2021, 2, 18), (2021, 2, 27), (2021, 2, 22), (2021, 2, 29), (2021, 2, 34), (2021, 2, 35), (2021, 2, 21), (2021, 2, 16), (2021, 2, 39), (2021, 2, 11), (2021, 2, 32), (2021, 2, 38), (2021, 2, 23), (2021, 2, 31), (2021, 2, 40), (2021, 2, 0), (2021, 2, 1), (2021, 2, 20), (2021, 2, 17), (2021, 2, 30), (2021, 2, 12), (2021, 2, 9), (2021, 2, 6), (2021, 2, 10), (2021, 2, 19), (2021, 2, 5), (2021, 2, 36), (2021, 2, 2), (2021, 3, 3), (2021, 3, 4), (2021, 3, 25), (2021, 3, 33), (2021, 3, 37), (2021, 3, 26), (2021, 3, 28), (2021, 3, 13), (2021, 3, 14), (2021, 3, 24), (2021, 3, 7), (2021, 3, 15), (2021, 3, 8), (2021, 3, 18), (2021, 3, 27), (2021, 3, 22), (2021, 3, 29), (2021, 3, 34), (2021, 3, 35), (2021, 3, 21), (2021, 3, 16), (2021, 3, 11), (2021, 3, 32), (2021, 3, 38), (2021, 3, 23), (2021, 3, 31), (2021, 3, 40), (2021, 3, 0), (2021, 3, 1), (2021, 3, 20), (2021, 3, 17), (2021, 3, 12), (2021, 3, 9), (2021, 3, 6), (2021, 3, 10), (2021, 3, 19), (2021, 3, 5), (2021, 3, 36), (2021, 3, 2), (2021, 4, 3), (2021, 4, 4), (2021, 4, 25), (2021, 4, 33), (2021, 4, 37), (2021, 4, 26), (2021, 4, 28), (2021, 4, 13), (2021, 4, 14), (2021, 4, 24), (2021, 4, 7), (2021, 4, 15), (2021, 4, 8), (2021, 4, 18), (2021, 4, 27), (2021, 4, 22), (2021, 4, 29), (2021, 4, 34), (2021, 4, 35), (2021, 4, 21), (2021, 4, 16), (2021, 4, 11), (2021, 4, 23), (2021, 4, 0), (2021, 4, 1), (2021, 4, 20), (2021, 4, 17), (2021, 4, 30), (2021, 4, 12), (2021, 4, 9), (2021, 4, 6), (2021, 4, 10), (2021, 4, 19), (2021, 4, 5), (2021, 4, 2), (2021, 5, 3), (2021, 5, 4), (2021, 5, 25), (2021, 5, 33), (2021, 5, 37), (2021, 5, 26), (2021, 5, 13), (2021, 5, 14), (2021, 5, 24), (2021, 5, 7), (2021, 5, 15), (2021, 5, 8), (2021, 5, 18), (2021, 5, 27), (2021, 5, 22), (2021, 5, 29), (2021, 5, 34), (2021, 5, 35), (2021, 5, 21), (2021, 5, 16), (2021, 5, 42), (2021, 5, 11), (2021, 5, 32), (2021, 5, 43), (2021, 5, 23), (2021, 5, 31), (2021, 5, 40), (2021, 5, 0), (2021, 5, 1), (2021, 5, 20), (2021, 5, 17), (2021, 5, 12), (2021, 5, 9), (2021, 5, 6), (2021, 5, 10), (2021, 5, 19), (2021, 5, 5), (2021, 5, 36), (2021, 5, 2), (2021, 6, 3), (2021, 6, 4), (2021, 6, 25), (2021, 6, 33), (2021, 6, 37), (2021, 6, 26), (2021, 6, 28), (2021, 6, 13), (2021, 6, 14), (2021, 6, 24), (2021, 6, 7), (2021, 6, 15), (2021, 6, 8), (2021, 6, 18), (2021, 6, 27), (2021, 6, 22), (2021, 6, 29), (2021, 6, 34), (2021, 6, 35), (2021, 6, 21), (2021, 6, 16), (2021, 6, 11), (2021, 6, 32), (2021, 6, 38), (2021, 6, 23), (2021, 6, 31), (2021, 6, 0), (2021, 6, 1), (2021, 6, 20), (2021, 6, 17), (2021, 6, 30), (2021, 6, 12), (2021, 6, 9), (2021, 6, 6), (2021, 6, 10), (2021, 6, 19), (2021, 6, 5), (2021, 6, 36), (2021, 6, 2), (2021, 7, 3), (2021, 7, 4), (2021, 7, 25), (2021, 7, 26), (2021, 7, 13), (2021, 7, 14), (2021, 7, 24), (2021, 7, 7), (2021, 7, 15), (2021, 7, 8), (2021, 7, 18), (2021, 7, 22), (2021, 7, 29), (2021, 7, 35), (2021, 7, 21), (2021, 7, 16), (2021, 7, 11), (2021, 7, 23), (2021, 7, 0), (2021, 7, 1), (2021, 7, 20), (2021, 7, 17), (2021, 7, 30), (2021, 7, 12), (2021, 7, 9), (2021, 7, 6), (2021, 7, 10), (2021, 7, 19), (2021, 7, 5), (2021, 7, 2), (2021, 8, 3), (2021, 8, 4), (2021, 8, 25), (2021, 8, 26), (2021, 8, 13), (2021, 8, 14), (2021, 8, 24), (2021, 8, 7), (2021, 8, 15), (2021, 8, 8), (2021, 8, 18), (2021, 8, 27), (2021, 8, 22), (2021, 8, 21), (2021, 8, 16), (2021, 8, 11), (2021, 8, 23), (2021, 8, 31), (2021, 8, 0), (2021, 8, 1), (2021, 8, 20), (2021, 8, 17), (2021, 8, 30), (2021, 8, 12), (2021, 8, 9), (2021, 8, 6), (2021, 8, 10), (2021, 8, 19), (2021, 8, 5), (2021, 8, 2), (2021, 9, 3), (2021, 9, 4), (2021, 9, 33), (2021, 9, 37), (2021, 9, 26), (2021, 9, 13), (2021, 9, 14), (2021, 9, 24), (2021, 9, 7), (2021, 9, 15), (2021, 9, 8), (2021, 9, 18), (2021, 9, 22), (2021, 9, 29), (2021, 9, 34), (2021, 9, 35), (2021, 9, 21), (2021, 9, 16), (2021, 9, 11), (2021, 9, 32), (2021, 9, 23), (2021, 9, 31), (2021, 9, 0), (2021, 9, 1), (2021, 9, 20), (2021, 9, 17), (2021, 9, 30), (2021, 9, 12), (2021, 9, 9), (2021, 9, 6), (2021, 9, 10), (2021, 9, 19), (2021, 9, 5), (2021, 9, 36), (2021, 9, 2), (2022, 0, 3), (2022, 0, 4), (2022, 0, 25), (2022, 0, 33), (2022, 0, 37), (2022, 0, 26), (2022, 0, 28), (2022, 0, 13), (2022, 0, 14), (2022, 0, 24), (2022, 0, 7), (2022, 0, 15), (2022, 0, 8), (2022, 0, 18), (2022, 0, 27), (2022, 0, 22), (2022, 0, 29), (2022, 0, 34), (2022, 0, 35), (2022, 0, 21), (2022, 0, 41), (2022, 0, 16), (2022, 0, 42), (2022, 0, 44), (2022, 0, 39), (2022, 0, 11), (2022, 0, 32), (2022, 0, 38), (2022, 0, 43), (2022, 0, 23), (2022, 0, 31), (2022, 0, 40), (2022, 0, 0), (2022, 0, 1), (2022, 0, 20), (2022, 0, 17), (2022, 0, 30), (2022, 0, 12), (2022, 0, 9), (2022, 0, 6), (2022, 0, 10), (2022, 0, 19), (2022, 0, 5), (2022, 0, 36), (2022, 0, 2), (2022, 1, 3), (2022, 1, 4), (2022, 1, 25), (2022, 1, 33), (2022, 1, 37), (2022, 1, 26), (2022, 1, 28), (2022, 1, 13), (2022, 1, 14), (2022, 1, 24), (2022, 1, 7), (2022, 1, 15), (2022, 1, 8), (2022, 1, 18), (2022, 1, 27), (2022, 1, 22), (2022, 1, 29), (2022, 1, 34), (2022, 1, 35), (2022, 1, 21), (2022, 1, 41), (2022, 1, 16), (2022, 1, 42), (2022, 1, 39), (2022, 1, 11), (2022, 1, 32), (2022, 1, 38), (2022, 1, 48), (2022, 1, 54), (2022, 1, 43), (2022, 1, 23), (2022, 1, 31), (2022, 1, 40), (2022, 1, 0), (2022, 1, 1), (2022, 1, 20), (2022, 1, 17), (2022, 1, 30), (2022, 1, 12), (2022, 1, 9), (2022, 1, 6), (2022, 1, 10), (2022, 1, 19), (2022, 1, 5), (2022, 1, 36), (2022, 1, 2), (2022, 2, 3), (2022, 2, 4), (2022, 2, 25), (2022, 2, 33), (2022, 2, 37), (2022, 2, 26), (2022, 2, 28), (2022, 2, 13), (2022, 2, 14), (2022, 2, 24), (2022, 2, 7), (2022, 2, 15), (2022, 2, 8), (2022, 2, 18), (2022, 2, 27), (2022, 2, 22), (2022, 2, 29), (2022, 2, 34), (2022, 2, 35), (2022, 2, 21), (2022, 2, 41), (2022, 2, 16), (2022, 2, 11), (2022, 2, 32), (2022, 2, 43), (2022, 2, 23), (2022, 2, 31), (2022, 2, 40), (2022, 2, 0), (2022, 2, 1), (2022, 2, 20), (2022, 2, 17), (2022, 2, 30), (2022, 2, 12), (2022, 2, 9), (2022, 2, 6), (2022, 2, 10), (2022, 2, 19), (2022, 2, 5), (2022, 2, 36), (2022, 2, 2), (2022, 3, 3), (2022, 3, 4), (2022, 3, 25), (2022, 3, 33), (2022, 3, 37), (2022, 3, 26), (2022, 3, 28), (2022, 3, 13), (2022, 3, 14), (2022, 3, 24), (2022, 3, 7), (2022, 3, 15), (2022, 3, 8), (2022, 3, 18), (2022, 3, 27), (2022, 3, 22), (2022, 3, 29), (2022, 3, 34), (2022, 3, 35), (2022, 3, 21), (2022, 3, 16), (2022, 3, 11), (2022, 3, 32), (2022, 3, 38), (2022, 3, 23), (2022, 3, 31), (2022, 3, 0), (2022, 3, 1), (2022, 3, 20), (2022, 3, 17), (2022, 3, 30), (2022, 3, 12), (2022, 3, 9), (2022, 3, 6), (2022, 3, 10), (2022, 3, 19), (2022, 3, 5), (2022, 3, 36), (2022, 3, 2), (2022, 4, 3), (2022, 4, 4), (2022, 4, 25), (2022, 4, 33), (2022, 4, 37), (2022, 4, 26), (2022, 4, 28), (2022, 4, 13), (2022, 4, 14), (2022, 4, 24), (2022, 4, 7), (2022, 4, 15), (2022, 4, 8), (2022, 4, 18), (2022, 4, 27), (2022, 4, 22), (2022, 4, 29), (2022, 4, 34), (2022, 4, 35), (2022, 4, 21), (2022, 4, 41), (2022, 4, 16), (2022, 4, 44), (2022, 4, 39), (2022, 4, 11), (2022, 4, 32), (2022, 4, 23), (2022, 4, 31), (2022, 4, 0), (2022, 4, 1), (2022, 4, 20), (2022, 4, 17), (2022, 4, 30), (2022, 4, 12), (2022, 4, 9), (2022, 4, 6), (2022, 4, 10), (2022, 4, 19), (2022, 4, 5), (2022, 4, 36), (2022, 4, 2), (2022, 5, 3), (2022, 5, 4), (2022, 5, 25), (2022, 5, 33), (2022, 5, 37), (2022, 5, 26), (2022, 5, 28), (2022, 5, 13), (2022, 5, 14), (2022, 5, 24), (2022, 5, 7), (2022, 5, 15), (2022, 5, 8), (2022, 5, 18), (2022, 5, 27), (2022, 5, 22), (2022, 5, 29), (2022, 5, 34), (2022, 5, 35), (2022, 5, 21), (2022, 5, 16), (2022, 5, 46), (2022, 5, 11), (2022, 5, 49), (2022, 5, 32), (2022, 5, 38), (2022, 5, 43), (2022, 5, 23), (2022, 5, 31), (2022, 5, 0), (2022, 5, 1), (2022, 5, 20), (2022, 5, 17), (2022, 5, 30), (2022, 5, 12), (2022, 5, 9), (2022, 5, 6), (2022, 5, 10), (2022, 5, 19), (2022, 5, 5), (2022, 5, 36), (2022, 5, 2), (2022, 6, 3), (2022, 6, 4), (2022, 6, 25), (2022, 6, 33), (2022, 6, 26), (2022, 6, 28), (2022, 6, 13), (2022, 6, 14), (2022, 6, 24), (2022, 6, 7), (2022, 6, 15), (2022, 6, 8), (2022, 6, 18), (2022, 6, 27), (2022, 6, 22), (2022, 6, 29), (2022, 6, 35), (2022, 6, 21), (2022, 6, 16), (2022, 6, 11), (2022, 6, 32), (2022, 6, 23), (2022, 6, 31), (2022, 6, 40), (2022, 6, 0), (2022, 6, 1), (2022, 6, 20), (2022, 6, 17), (2022, 6, 30), (2022, 6, 12), (2022, 6, 9), (2022, 6, 6), (2022, 6, 10), (2022, 6, 19), (2022, 6, 5), (2022, 6, 36), (2022, 6, 2), (2022, 7, 3), (2022, 7, 4), (2022, 7, 25), (2022, 7, 33), (2022, 7, 37), (2022, 7, 26), (2022, 7, 28), (2022, 7, 13), (2022, 7, 14), (2022, 7, 24), (2022, 7, 7), (2022, 7, 15), (2022, 7, 8), (2022, 7, 18), (2022, 7, 27), (2022, 7, 22), (2022, 7, 29), (2022, 7, 34), (2022, 7, 35), (2022, 7, 21), (2022, 7, 16), (2022, 7, 44), (2022, 7, 39), (2022, 7, 11), (2022, 7, 32), (2022, 7, 23), (2022, 7, 31), (2022, 7, 0), (2022, 7, 1), (2022, 7, 20), (2022, 7, 17), (2022, 7, 30), (2022, 7, 12), (2022, 7, 9), (2022, 7, 6), (2022, 7, 10), (2022, 7, 19), (2022, 7, 5), (2022, 7, 2), (2022, 8, 3), (2022, 8, 4), (2022, 8, 25), (2022, 8, 33), (2022, 8, 26), (2022, 8, 28), (2022, 8, 13), (2022, 8, 14), (2022, 8, 24), (2022, 8, 7), (2022, 8, 15), (2022, 8, 8), (2022, 8, 18), (2022, 8, 27), (2022, 8, 22), (2022, 8, 21), (2022, 8, 16), (2022, 8, 11), (2022, 8, 32), (2022, 8, 38), (2022, 8, 23), (2022, 8, 31), (2022, 8, 0), (2022, 8, 1), (2022, 8, 20), (2022, 8, 17), (2022, 8, 12), (2022, 8, 9), (2022, 8, 6), (2022, 8, 10), (2022, 8, 19), (2022, 8, 5), (2022, 8, 2), (2022, 9, 3), (2022, 9, 4), (2022, 9, 13), (2022, 9, 14), (2022, 9, 7), (2022, 9, 15), (2022, 9, 8), (2022, 9, 16), (2022, 9, 11), (2022, 9, 0), (2022, 9, 1), (2022, 9, 20), (2022, 9, 17), (2022, 9, 12), (2022, 9, 9), (2022, 9, 6), (2022, 9, 10), (2022, 9, 5), (2022, 9, 2), (2023, 0, 3), (2023, 0, 4), (2023, 0, 8), (2023, 0, 39), (2023, 0, 38), (2023, 0, 40), (2023, 0, 0), (2023, 0, 1), (2023, 0, 6), (2023, 0, 2), (2023, 1, 3), (2023, 1, 4), (2023, 1, 28), (2023, 1, 7), (2023, 1, 16), (2023, 1, 11), (2023, 1, 0), (2023, 1, 1), (2023, 1, 19), (2023, 1, 5), (2023, 1, 2), (2023, 2, 3), (2023, 2, 4), (2023, 2, 7), (2023, 2, 8), (2023, 2, 22), (2023, 2, 21), (2023, 2, 16), (2023, 2, 0), (2023, 2, 1), (2023, 2, 6), (2023, 2, 10), (2023, 2, 5), (2023, 2, 2), (2023, 3, 3), (2023, 3, 4), (2023, 3, 25), (2023, 3, 13), (2023, 3, 14), (2023, 3, 7), (2023, 3, 8), (2023, 3, 22), (2023, 3, 21), (2023, 3, 16), (2023, 3, 11), (2023, 3, 0), (2023, 3, 1), (2023, 3, 12), (2023, 3, 9), (2023, 3, 6), (2023, 3, 10), (2023, 3, 19), (2023, 3, 5), (2023, 3, 2), (2023, 4, 3), (2023, 4, 4), (2023, 4, 13), (2023, 4, 24), (2023, 4, 7), (2023, 4, 15), (2023, 4, 8), (2023, 4, 11), (2023, 4, 23), (2023, 4, 0), (2023, 4, 1), (2023, 4, 30), (2023, 4, 9), (2023, 4, 6), (2023, 4, 5), (2023, 4, 2), (2023, 5, 3), (2023, 5, 4), (2023, 5, 13), (2023, 5, 14), (2023, 5, 7), (2023, 5, 15), (2023, 5, 8), (2023, 5, 18), (2023, 5, 22), (2023, 5, 11), (2023, 5, 0), (2023, 5, 1), (2023, 5, 12), (2023, 5, 9), (2023, 5, 6), (2023, 5, 10), (2023, 5, 5), (2023, 5, 2), (2023, 6, 3), (2023, 6, 4), (2023, 6, 14), (2023, 6, 7), (2023, 6, 8), (2023, 6, 11), (2023, 6, 0), (2023, 6, 1), (2023, 6, 12), (2023, 6, 9), (2023, 6, 6), (2023, 6, 10), (2023, 6, 5), (2023, 6, 2), (2023, 7, 3), (2023, 7, 4), (2023, 7, 13), (2023, 7, 7), (2023, 7, 11), (2023, 7, 0), (2023, 7, 1), (2023, 7, 17), (2023, 7, 12), (2023, 7, 9), (2023, 7, 6), (2023, 7, 10), (2023, 7, 5), (2023, 7, 2), (2023, 8, 3), (2023, 8, 4), (2023, 8, 13), (2023, 8, 7), (2023, 8, 8), (2023, 8, 18), (2023, 8, 11), (2023, 8, 0), (2023, 8, 1), (2023, 8, 12), (2023, 8, 9), (2023, 8, 6), (2023, 8, 5), (2023, 8, 36), (2023, 8, 2), (2023, 9, 3), (2023, 9, 4), (2023, 9, 7), (2023, 9, 8), (2023, 9, 11), (2023, 9, 0), (2023, 9, 1), (2023, 9, 12), (2023, 9, 9), (2023, 9, 6), (2023, 9, 10), (2023, 9, 5), (2023, 9, 2), ] ORDER_REPRO_RASTA_DICT: dict[int, dict[int, list[int]]] = {} for y, s, vt in ORDER_REPRO_RASTA: if y not in ORDER_REPRO_RASTA_DICT: ORDER_REPRO_RASTA_DICT[y] = {} if s not in ORDER_REPRO_RASTA_DICT[y]: ORDER_REPRO_RASTA_DICT[y][s] = [] ORDER_REPRO_RASTA_DICT[y][s].append(vt) def REPRO_RASTA_ORDER(path: Path) -> int: """Return a numerical value to order a (year, decile, vt) uplet as used when sampling the RASTA dataset. (Path.iterdir is not reproducible 😬) """ year = int(path.parent.parent.name) decile = int(path.parent.name) vt = int(path.name) l = ORDER_REPRO_RASTA_DICT.get(year, {}).get(decile, []) if vt not in l: return 10000 + vt else: return l.index(vt) def fix_sizes( latest_csv_gz: Path, year_and_sdk_csv_gz: Path, year_and_sdk_fixed_size_csv_gz: Path ): """Generate a new csv.gz at year_and_sdk_fixed_size_csv_gz from latest.csv.gz and year_and_sdk.csv.gz to get an apk size as precize as possible. """ sizes = {} with gzip.open(latest_csv_gz, mode="rt", encoding="utf-8") as file: reader = csv.DictReader(file) for row in reader: sizes[row["sha256"]] = row["apk_size"] with gzip.open( # type: ignore[assignment] year_and_sdk_csv_gz, mode="rt", encoding="utf-8" ) as f_in, gzip.open( year_and_sdk_fixed_size_csv_gz, mode="wt", encoding="utf-8" ) as f_out: reader = csv.DictReader(f_in) writer = csv.DictWriter( f_out, fieldnames=[ "sha256", "first_seen_year", "size", "vt_detection", "min_sdk", "max_sdk", "target_sdk", ], ) writer.writeheader() missing = 0 for row in reader: if row["sha256"] in sizes: size: str = sizes[row["sha256"]] else: missing += 1 # print(f"{row['sha256']} not found in latest.csv.gz, estimate it") size = str(int(row["size_mb"]) * 1024 * 1024) # todo: 1024 or 1000? new_row = { "sha256": row["sha256"], "first_seen_year": row["first_seen_year"], "size": size, "vt_detection": row["vt_detection"], "min_sdk": row["min_sdk"], "max_sdk": row["max_sdk"], "target_sdk": row["target_sdk"], } writer.writerow(new_row) def compute_buckets( year_and_sdk_fixed_size_csv_gz: Path, exclution: float, nb_bucket: int ) -> list[tuple[int, int]]: """Compute the apk size decile""" sizes: list[int] = [] with gzip.open(year_and_sdk_fixed_size_csv_gz, mode="rt", encoding="utf-8") as file: reader = csv.DictReader(file) for row in reader: sizes.append(int(row["size"])) sizes.sort() N = len(sizes) buckets = [] for i in range(nb_bucket): min_i_per = exclution + ((1.0 - exclution * 2) / nb_bucket) * i max_i_per = exclution + ((1.0 - exclution * 2) / nb_bucket) * (i + 1) min_i = int(N * min_i_per) max_i = int(N * max_i_per) - 1 # print(f"{min_i_per=}, {max_i_per=}") # print(f"{min_i=}, {max_i=}") # print(f"{sample[min_i]} - {sample[max_i]}") buckets.append((sizes[min_i], sizes[max_i])) return buckets def create_file_buckets( buckets_path: Path, year_and_sdk_fixed_size_csv_gz: Path, exclution: float, nb_bucket: int, ): buckets = compute_buckets( year_and_sdk_fixed_size_csv_gz, exclution=exclution, nb_bucket=nb_bucket ) with gzip.open( # type: ignore[assignment] year_and_sdk_fixed_size_csv_gz, mode="rt", encoding="utf-8" ) as file: reader = csv.DictReader(file) for row in reader: buck = None for i, (m, M) in enumerate(buckets): if m <= int(row["size"]) < M: buck = i if buck is None: buck = 100 # print( # f"Error for {row['sha256']}, size {row['size']} not in bucket, default to last bucket {buck}" # ) path = ( buckets_path / row["first_seen_year"] / str(buck) / row["vt_detection"] ) path.mkdir(parents=True, exist_ok=True) with (path / "sha256s").open("a") as f: f.write(f"{row['sha256']}\n") def gen_dataset( latest_csv_gz: Path, year_and_sdk_csv_gz: Path, path_dataset: Path, nb_sub_dataset: int = 10, nb_apk_by_bucket_by_subset: int = 50, proportion_malware: float = 0.07, vt_threshold: int = 5, nb_bucket: int = 10, exclution: float = 0.01, min_year: int = 2010, max_year: int = 2023, random_seed: int = 1234567890, ): random.seed(random_seed) year_and_sdk_fixed_size_csv_gz = ( year_and_sdk_csv_gz.parent / "year_and_sdk_fixed_size.csv.gz" ) path_dataset.mkdir(exist_ok=True) if not year_and_sdk_fixed_size_csv_gz.exists(): fix_sizes(latest_csv_gz, year_and_sdk_csv_gz, year_and_sdk_fixed_size_csv_gz) nb_malware_by_bucket_by_subset = int( nb_apk_by_bucket_by_subset * proportion_malware ) nb_goodware_by_bucket_by_subset = ( nb_apk_by_bucket_by_subset - nb_malware_by_bucket_by_subset ) with tempfile.TemporaryDirectory() as tmpdirname_s: tmpdirname = Path(tmpdirname_s) buckets_path = tmpdirname / "buckets" create_file_buckets( buckets_path, year_and_sdk_fixed_size_csv_gz, exclution=exclution, nb_bucket=nb_bucket, ) for year_i in range(min_year, max_year + 1): year = str(year_i) for size_buck in range(nb_bucket): # GOODWARE (vt_detection = "0") path_goodware = buckets_path / year / str(size_buck) / "0" / "sha256s" if path_goodware.exists(): with path_goodware.open("r") as file: goodware = file.readlines() else: goodware = [] nb_goodware = min( len(goodware), nb_sub_dataset * nb_goodware_by_bucket_by_subset ) sampled_goodware = random.sample(goodware, nb_goodware) for j in range(nb_sub_dataset): i_min = j * nb_goodware_by_bucket_by_subset i_max = min( len(sampled_goodware), (j + 1) * nb_goodware_by_bucket_by_subset ) data_set_sampled_goodwares = sampled_goodware[i_min:i_max] with (path_dataset / f"set{j}").open("a") as file: for line in data_set_sampled_goodwares: file.write(line) sampled_goodware.clear() # MALWARE ((vt_detection > 5) path_buck = buckets_path / year / str(size_buck) malware = [] if path_buck.exists(): dir_list = list(path_buck.iterdir()) dir_list.sort(key=REPRO_RASTA_ORDER) for path_vt in dir_list: if int(path_vt.name) < vt_threshold: continue with (path_vt / "sha256s").open("r") as file: malware.extend(file.readlines()) nb_malware = min( len(malware), nb_sub_dataset * nb_malware_by_bucket_by_subset ) sampled_malware = random.sample(malware, nb_malware) for j in range(nb_sub_dataset): i_min = j * nb_malware_by_bucket_by_subset i_max = min( len(sampled_malware), (j + 1) * nb_malware_by_bucket_by_subset ) data_set_sampled_malwares = sampled_malware[i_min:i_max] with (path_dataset / f"set{j}").open("a") as file: for line in data_set_sampled_malwares: file.write(line) sampled_malware.clear()