From aa1c3dcfd5f3ae6af422047813ae981348f44c9e Mon Sep 17 00:00:00 2001 From: Rishi Sharma <rishi.sharma@epfl.ch> Date: Sat, 25 Dec 2021 14:43:21 +0100 Subject: [PATCH] Add celeba, total_bytes --- eval/config_celeba.ini | 33 + eval/main.ipynb | 2382 ++++++++++++++++- setup.cfg | 1 + .../communication/Communication.py | 1 + src/decentralizepy/communication/TCP.py | 3 + src/decentralizepy/datasets/Celeba.py | 337 +++ src/decentralizepy/datasets/Dataset.py | 8 +- src/decentralizepy/datasets/Femnist.py | 21 +- src/decentralizepy/node/Node.py | 12 +- 9 files changed, 2788 insertions(+), 10 deletions(-) create mode 100644 eval/config_celeba.ini create mode 100644 src/decentralizepy/datasets/Celeba.py diff --git a/eval/config_celeba.ini b/eval/config_celeba.ini new file mode 100644 index 0000000..61d1b26 --- /dev/null +++ b/eval/config_celeba.ini @@ -0,0 +1,33 @@ +[DATASET] +dataset_package = decentralizepy.datasets.Celeba +dataset_class = Celeba +model_class = CNN +n_procs = 96 +images_dir = /home/risharma/leaf/data/celeba/data/raw/img_align_celeba +train_dir = /home/risharma/leaf/data/celeba/per_user_data/train +test_dir = /home/risharma/leaf/data/celeba/data/test +; python list of fractions below +sizes = + +[OPTIMIZER_PARAMS] +optimizer_package = torch.optim +optimizer_class = Adam +lr = 0.001 + +[TRAIN_PARAMS] +training_package = decentralizepy.training.GradientAccumulator +training_class = GradientAccumulator +epochs_per_round = 5 +batch_size = 512 +shuffle = True +loss_package = torch.nn +loss_class = CrossEntropyLoss + +[COMMUNICATION] +comm_package = decentralizepy.communication.TCP +comm_class = TCP +addresses_filepath = ip_addr_6Machines.json + +[SHARING] +sharing_package = decentralizepy.sharing.PartialModel +sharing_class = PartialModel diff --git a/eval/main.ipynb b/eval/main.ipynb index d5ad1b7..2f23eea 100644 --- a/eval/main.ipynb +++ b/eval/main.ipynb @@ -447,6 +447,2386 @@ "mp.spawn(fn = f, nprocs = 2, args = [0, 2, \"ip_addr.json\", l])\n" ] }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created File: 3020.json\n", + "Created File: 6675.json\n", + "Created File: 6725.json\n", + "Created File: 2263.json\n", + "Created File: 1321.json\n", + "Created File: 8721.json\n", + "Created File: 8722.json\n", + "Created File: 8822.json\n", + "Created File: 1448.json\n", + "Created File: 6568.json\n", + "Created File: 7439.json\n", + "Created File: 4905.json\n", + "Created File: 4153.json\n", + "Created File: 8860.json\n", + "Created File: 3941.json\n", + "Created File: 4147.json\n", + "Created File: 6398.json\n", + "Created File: 4030.json\n", + "Created File: 1050.json\n", + "Created File: 7261.json\n", + "Created File: 4602.json\n", + "Created File: 8910.json\n", + "Created File: 7165.json\n", + "Created File: 3508.json\n", + "Created File: 5620.json\n", + "Created File: 6648.json\n", + "Created File: 9790.json\n", + "Created File: 8630.json\n", + "Created File: 9713.json\n", + "Created File: 3751.json\n", + "Created File: 3312.json\n", + "Created File: 4773.json\n", + "Created File: 4582.json\n", + "Created File: 9798.json\n", + "Created File: 2897.json\n", + "Created File: 2859.json\n", + "Created File: 562.json\n", + "Created File: 6334.json\n", + "Created File: 3055.json\n", + "Created File: 7932.json\n", + "Created File: 1218.json\n", + "Created File: 5157.json\n", + "Created File: 1151.json\n", + "Created File: 6300.json\n", + "Created File: 8916.json\n", + "Created File: 5768.json\n", + "Created File: 9821.json\n", + "Created File: 8560.json\n", + "Created File: 9984.json\n", + "Created File: 2831.json\n", + "Created File: 5193.json\n", + "Created File: 5457.json\n", + "Created File: 4647.json\n", + "Created File: 2861.json\n", + "Created File: 6135.json\n", + "Created File: 6429.json\n", + "Created File: 4860.json\n", + "Created File: 2837.json\n", + "Created File: 7206.json\n", + "Created File: 3325.json\n", + "Created File: 8962.json\n", + "Created File: 4395.json\n", + "Created File: 4601.json\n", + "Created File: 8826.json\n", + "Created File: 1370.json\n", + "Created File: 7760.json\n", + "Created File: 6152.json\n", + "Created File: 3410.json\n", + "Created File: 4094.json\n", + "Created File: 4458.json\n", + "Created File: 6555.json\n", + "Created File: 8787.json\n", + "Created File: 5326.json\n", + "Created File: 5138.json\n", + "Created File: 5173.json\n", + "Created File: 9946.json\n", + "Created File: 2547.json\n", + "Created File: 5386.json\n", + "Created File: 4715.json\n", + "Created File: 10083.json\n", + "Created File: 3027.json\n", + "Created File: 78.json\n", + "Created File: 6128.json\n", + "Created File: 5512.json\n", + "Created File: 5093.json\n", + "Created File: 2334.json\n", + "Created File: 6422.json\n", + "Created File: 6346.json\n", + "Created File: 4312.json\n", + "Created File: 1346.json\n", + "Created File: 5131.json\n", + "Created File: 2374.json\n", + "Created File: 5340.json\n", + "Created File: 9965.json\n", + "Created File: 5310.json\n", + "Created File: 7245.json\n", + "Created File: 3278.json\n", + "Created File: 6415.json\n", + "Created File: 3614.json\n", + "Created File: 801.json\n", + "Created File: 5495.json\n", + "Created File: 318.json\n", + "Created File: 6705.json\n", + "Created File: 3398.json\n", + "Created File: 8641.json\n", + "Created File: 7233.json\n", + "Created File: 9341.json\n", + "Created File: 1994.json\n", + "Created File: 6137.json\n", + "Created File: 6191.json\n", + "Created File: 5007.json\n", + "Created File: 10025.json\n", + "Created File: 2055.json\n", + "Created File: 4410.json\n", + "Created File: 8148.json\n", + "Created File: 5008.json\n", + "Created File: 5042.json\n", + "Created File: 4262.json\n", + "Created File: 3034.json\n", + "Created File: 2193.json\n", + "Created File: 4076.json\n", + "Created File: 1181.json\n", + "Created File: 5128.json\n", + "Created File: 7768.json\n", + "Created File: 844.json\n", + "Created File: 8677.json\n", + "Created File: 8386.json\n", + "Created File: 10175.json\n", + "Created File: 7186.json\n", + "Created File: 3864.json\n", + "Created File: 10032.json\n", + "Created File: 1903.json\n", + "Created File: 3037.json\n", + "Created File: 3397.json\n", + "Created File: 4863.json\n", + "Created File: 4539.json\n", + "Created File: 9010.json\n", + "Created File: 4472.json\n", + "Created File: 5688.json\n", + "Created File: 1625.json\n", + "Created File: 6165.json\n", + "Created File: 7680.json\n", + "Created File: 8469.json\n", + "Created File: 6936.json\n", + "Created File: 8341.json\n", + "Created File: 1034.json\n", + "Created File: 6267.json\n", + "Created File: 4435.json\n", + "Created File: 8831.json\n", + "Created File: 22.json\n", + "Created File: 2960.json\n", + "Created File: 1059.json\n", + "Created File: 3040.json\n", + "Created File: 7192.json\n", + "Created File: 5563.json\n", + "Created File: 8788.json\n", + "Created File: 3329.json\n", + "Created File: 6411.json\n", + "Created File: 5151.json\n", + "Created File: 5321.json\n", + "Created File: 4328.json\n", + "Created File: 7516.json\n", + "Created File: 2899.json\n", + "Created File: 8586.json\n", + "Created File: 8933.json\n", + "Created File: 1435.json\n", + "Created File: 8803.json\n", + "Created File: 3436.json\n", + "Created File: 7222.json\n", + "Created File: 1221.json\n", + "Created File: 4691.json\n", + "Created File: 2332.json\n", + "Created File: 2125.json\n", + "Created File: 1755.json\n", + "Created File: 8850.json\n", + "Created File: 6232.json\n", + "Created File: 6127.json\n", + "Created File: 3203.json\n", + "Created File: 5092.json\n", + "Created File: 4110.json\n", + "Created File: 2524.json\n", + "Created File: 8672.json\n", + "Created File: 7519.json\n", + "Created File: 2309.json\n", + "Created File: 3059.json\n", + "Created File: 10073.json\n", + "Created File: 7237.json\n", + "Created File: 8706.json\n", + "Created File: 5471.json\n", + "Created File: 5252.json\n", + "Created File: 7335.json\n", + "Created File: 7450.json\n", + "Created File: 1188.json\n", + "Created File: 5794.json\n", + "Created File: 2758.json\n", + "Created File: 6046.json\n", + "Created File: 1927.json\n", + "Created File: 2014.json\n", + "Created File: 2880.json\n", + "Created File: 3930.json\n", + "Created File: 10070.json\n", + "Created File: 6316.json\n", + "Created File: 7611.json\n", + "Created File: 2445.json\n", + "Created File: 7087.json\n", + "Created File: 3080.json\n", + "Created File: 5418.json\n", + "Created File: 1175.json\n", + "Created File: 7596.json\n", + "Created File: 2791.json\n", + "Created File: 3029.json\n", + "Created File: 5147.json\n", + "Created File: 8482.json\n", + "Created File: 1524.json\n", + "Created File: 8875.json\n", + "Created File: 9401.json\n", + "Created File: 1033.json\n", + "Created File: 2083.json\n", + "Created File: 4991.json\n", + "Created File: 2914.json\n", + "Created File: 3248.json\n", + "Created File: 4625.json\n", + "Created File: 6864.json\n", + "Created File: 1272.json\n", + "Created File: 10156.json\n", + "Created File: 8547.json\n", + "Created File: 659.json\n", + "Created File: 1031.json\n", + "Created File: 4447.json\n", + "Created File: 4911.json\n", + "Created File: 9179.json\n", + "Created File: 661.json\n", + "Created File: 8627.json\n", + "Created File: 8072.json\n", + "Created File: 1373.json\n", + "Created File: 2863.json\n", + "Created File: 1468.json\n", + "Created File: 9056.json\n", + "Created File: 8498.json\n", + "Created File: 9020.json\n", + "Created File: 8355.json\n", + "Created File: 7126.json\n", + "Created File: 2433.json\n", + "Created File: 7228.json\n", + "Created File: 6802.json\n", + "Created File: 6708.json\n", + "Created File: 3014.json\n", + "Created File: 4138.json\n", + "Created File: 9246.json\n", + "Created File: 7399.json\n", + "Created File: 6320.json\n", + "Created File: 5350.json\n", + "Created File: 9758.json\n", + "Created File: 6355.json\n", + "Created File: 8471.json\n", + "Created File: 6036.json\n", + "Created File: 2937.json\n", + "Created File: 7001.json\n", + "Created File: 7367.json\n", + "Created File: 492.json\n", + "Created File: 4242.json\n", + "Created File: 4157.json\n", + "Created File: 5715.json\n", + "Created File: 7488.json\n", + "Created File: 6343.json\n", + "Created File: 6536.json\n", + "Created File: 9986.json\n", + "Created File: 5246.json\n", + "Created File: 3449.json\n", + "Created File: 9843.json\n", + "Created File: 2533.json\n", + "Created File: 6100.json\n", + "Created File: 7613.json\n", + "Created File: 4310.json\n", + "Created File: 3304.json\n", + "Created File: 1985.json\n", + "Created File: 9987.json\n", + "Created File: 47.json\n", + "Created File: 2983.json\n", + "Created File: 9722.json\n", + "Created File: 7315.json\n", + "Created File: 3782.json\n", + "Created File: 9918.json\n", + "Created File: 1569.json\n", + "Created File: 5035.json\n", + "Created File: 5101.json\n", + "Created File: 5567.json\n", + "Created File: 6181.json\n", + "Created File: 8966.json\n", + "Created File: 3377.json\n", + "Created File: 1580.json\n", + "Created File: 10134.json\n", + "Created File: 1003.json\n", + "Created File: 7286.json\n", + "Created File: 6567.json\n", + "Created File: 1726.json\n", + "Created File: 992.json\n", + "Created File: 1809.json\n", + "Created File: 8693.json\n", + "Created File: 4561.json\n", + "Created File: 6385.json\n", + "Created File: 4168.json\n", + "Created File: 4149.json\n", + "Created File: 2070.json\n", + "Created File: 4165.json\n", + "Created File: 9701.json\n", + "Created File: 4162.json\n", + "Created File: 3620.json\n", + "Created File: 7764.json\n", + "Created File: 9014.json\n", + "Created File: 7178.json\n", + "Created File: 6043.json\n", + "Created File: 2236.json\n", + "Created File: 1544.json\n", + "Created File: 1744.json\n", + "Created File: 5613.json\n", + "Created File: 8485.json\n", + "Created File: 8578.json\n", + "Created File: 4516.json\n", + "Created File: 6995.json\n", + "Created File: 4126.json\n", + "Created File: 8774.json\n", + "Created File: 8164.json\n", + "Created File: 8638.json\n", + "Created File: 2599.json\n", + "Created File: 5158.json\n", + "Created File: 3670.json\n", + "Created File: 2221.json\n", + "Created File: 8868.json\n", + "Created File: 4190.json\n", + "Created File: 2054.json\n", + "Created File: 4070.json\n", + "Created File: 6823.json\n", + "Created File: 5549.json\n", + "Created File: 334.json\n", + "Created File: 5569.json\n", + "Created File: 5086.json\n", + "Created File: 1574.json\n", + "Created File: 2243.json\n", + "Created File: 7358.json\n", + "Created File: 4068.json\n", + "Created File: 2429.json\n", + "Created File: 6134.json\n", + "Created File: 4114.json\n", + "Created File: 6614.json\n", + "Created File: 6325.json\n", + "Created File: 3808.json\n", + "Created File: 2078.json\n", + "Created File: 7424.json\n", + "Created File: 2523.json\n", + "Created File: 8685.json\n", + "Created File: 5223.json\n", + "Created File: 409.json\n", + "Created File: 3185.json\n", + "Created File: 5581.json\n", + "Created File: 2972.json\n", + "Created File: 2072.json\n", + "Created File: 4172.json\n", + "Created File: 9123.json\n", + "Created File: 6546.json\n", + "Created File: 3912.json\n", + "Created File: 8951.json\n", + "Created File: 2819.json\n", + "Created File: 510.json\n", + "Created File: 6583.json\n", + "Created File: 2314.json\n", + "Created File: 8747.json\n", + "Created File: 7569.json\n", + "Created File: 3024.json\n", + "Created File: 5198.json\n", + "Created File: 9669.json\n", + "Created File: 7156.json\n", + "Created File: 5126.json\n", + "Created File: 6314.json\n", + "Created File: 8945.json\n", + "Created File: 4946.json\n", + "Created File: 8098.json\n", + "Created File: 8528.json\n", + "Created File: 7571.json\n", + "Created File: 1314.json\n", + "Created File: 8942.json\n", + "Created File: 9719.json\n", + "Created File: 2240.json\n", + "Created File: 9011.json\n", + "Created File: 7548.json\n", + "Created File: 2155.json\n", + "Created File: 9158.json\n", + "Created File: 1912.json\n", + "Created File: 481.json\n", + "Created File: 4255.json\n", + "Created File: 8704.json\n", + "Created File: 9944.json\n", + "Created File: 4825.json\n", + "Created File: 2957.json\n", + "Created File: 3768.json\n", + "Created File: 4884.json\n", + "Created File: 248.json\n", + "Created File: 1999.json\n", + "Created File: 8643.json\n", + "Created File: 3140.json\n", + "Created File: 2136.json\n", + "Created File: 7409.json\n", + "Created File: 1499.json\n", + "Created File: 9610.json\n", + "Created File: 5148.json\n", + "Created File: 7845.json\n", + "Created File: 2026.json\n", + "Created File: 1588.json\n", + "Created File: 4571.json\n", + "Created File: 4290.json\n", + "Created File: 2101.json\n", + "Created File: 5507.json\n", + "Created File: 9850.json\n", + "Created File: 147.json\n", + "Created File: 8208.json\n", + "Created File: 7271.json\n", + "Created File: 6809.json\n", + "Created File: 6483.json\n", + "Created File: 10003.json\n", + "Created File: 5124.json\n", + "Created File: 5427.json\n", + "Created File: 69.json\n", + "Created File: 3928.json\n", + "Created File: 1601.json\n", + "Created File: 4808.json\n", + "Created File: 8667.json\n", + "Created File: 4473.json\n", + "Created File: 3198.json\n", + "Created File: 2612.json\n", + "Created File: 6677.json\n", + "Created File: 5250.json\n", + "Created File: 6301.json\n", + "Created File: 5702.json\n", + "Created File: 8501.json\n", + "Created File: 5452.json\n", + "Created File: 4828.json\n", + "Created File: 9116.json\n", + "Created File: 4028.json\n", + "Created File: 3845.json\n", + "Created File: 2790.json\n", + "Created File: 1689.json\n", + "Created File: 1986.json\n", + "Created File: 8563.json\n", + "Created File: 467.json\n", + "Created File: 1302.json\n", + "Created File: 4438.json\n", + "Created File: 1784.json\n", + "Created File: 7755.json\n", + "Created File: 5178.json\n", + "Created File: 4252.json\n", + "Created File: 10080.json\n", + "Created File: 10085.json\n", + "Created File: 3875.json\n", + "Created File: 4944.json\n", + "Created File: 9152.json\n", + "Created File: 5202.json\n", + "Created File: 6185.json\n", + "Created File: 1885.json\n", + "Created File: 8521.json\n", + "Created File: 8500.json\n", + "Created File: 8379.json\n", + "Created File: 6688.json\n", + "Created File: 8275.json\n", + "Created File: 981.json\n", + "Created File: 8702.json\n", + "Created File: 6997.json\n", + "Created File: 7607.json\n", + "Created File: 9166.json\n", + "Created File: 2020.json\n", + "Created File: 1660.json\n", + "Created File: 9807.json\n", + "Created File: 6633.json\n", + "Created File: 1651.json\n", + "Created File: 5551.json\n", + "Created File: 2792.json\n", + "Created File: 6365.json\n", + "Created File: 4446.json\n", + "Created File: 3501.json\n", + "Created File: 1537.json\n", + "Created File: 2507.json\n", + "Created File: 6200.json\n", + "Created File: 6412.json\n", + "Created File: 988.json\n", + "Created File: 1713.json\n", + "Created File: 496.json\n", + "Created File: 9864.json\n", + "Created File: 6081.json\n", + "Created File: 8825.json\n", + "Created File: 6565.json\n", + "Created File: 4955.json\n", + "Created File: 8709.json\n", + "Created File: 4865.json\n", + "Created File: 8810.json\n", + "Created File: 7449.json\n", + "Created File: 199.json\n", + "Created File: 7475.json\n", + "Created File: 2969.json\n", + "Created File: 4288.json\n", + "Created File: 8786.json\n", + "Created File: 5273.json\n", + "Created File: 8195.json\n", + "Created File: 6166.json\n", + "Created File: 9810.json\n", + "Created File: 2095.json\n", + "Created File: 4141.json\n", + "Created File: 1224.json\n", + "Created File: 2124.json\n", + "Created File: 3051.json\n", + "Created File: 7095.json\n", + "Created File: 8847.json\n", + "Created File: 7923.json\n", + "Created File: 1614.json\n", + "Created File: 5953.json\n", + "Created File: 7867.json\n", + "Created File: 9128.json\n", + "Created File: 8943.json\n", + "Created File: 7673.json\n", + "Created File: 8807.json\n", + "Created File: 5133.json\n", + "Created File: 8420.json\n", + "Created File: 9031.json\n", + "Created File: 3882.json\n", + "Created File: 3681.json\n", + "Created File: 9874.json\n", + "Created File: 3714.json\n", + "Created File: 4537.json\n", + "Created File: 3407.json\n", + "Created File: 3404.json\n", + "Created File: 6024.json\n", + "Created File: 4874.json\n", + "Created File: 6920.json\n", + "Created File: 918.json\n", + "Created File: 3383.json\n", + "Created File: 4987.json\n", + "Created File: 1341.json\n", + "Created File: 3270.json\n", + "Created File: 5028.json\n", + "Created File: 8727.json\n", + "Created File: 4819.json\n", + "Created File: 9698.json\n", + "Created File: 1916.json\n", + "Created File: 4923.json\n", + "Created File: 2030.json\n", + "Created File: 4805.json\n", + "Created File: 2820.json\n", + "Created File: 3084.json\n", + "Created File: 6291.json\n", + "Created File: 94.json\n", + "Created File: 2160.json\n", + "Created File: 1589.json\n", + "Created File: 4543.json\n", + "Created File: 1664.json\n", + "Created File: 5382.json\n", + "Created File: 4421.json\n", + "Created File: 2602.json\n", + "Created File: 5370.json\n", + "Created File: 397.json\n", + "Created File: 6703.json\n", + "Created File: 4119.json\n", + "Created File: 1037.json\n", + "Created File: 5799.json\n", + "Created File: 4801.json\n", + "Created File: 4244.json\n", + "Created File: 1731.json\n", + "Created File: 5638.json\n", + "Created File: 6628.json\n", + "Created File: 4014.json\n", + "Created File: 8385.json\n", + "Created File: 8558.json\n", + "Created File: 3696.json\n", + "Created File: 2195.json\n", + "Created File: 6637.json\n", + "Created File: 3432.json\n", + "Created File: 9818.json\n", + "Created File: 9794.json\n", + "Created File: 1335.json\n", + "Created File: 8440.json\n", + "Created File: 6988.json\n", + "Created File: 3496.json\n", + "Created File: 5096.json\n", + "Created File: 7524.json\n", + "Created File: 8365.json\n", + "Created File: 4316.json\n", + "Created File: 4031.json\n", + "Created File: 8928.json\n", + "Created File: 7309.json\n", + "Created File: 2120.json\n", + "Created File: 1686.json\n", + "Created File: 565.json\n", + "Created File: 7282.json\n", + "Created File: 977.json\n", + "Created File: 3113.json\n", + "Created File: 2884.json\n", + "Created File: 3098.json\n", + "Created File: 449.json\n", + "Created File: 4816.json\n", + "Created File: 6680.json\n", + "Created File: 5132.json\n", + "Created File: 7074.json\n", + "Created File: 991.json\n", + "Created File: 114.json\n", + "Created File: 6596.json\n", + "Created File: 4671.json\n", + "Created File: 3546.json\n", + "Created File: 4747.json\n", + "Created File: 6190.json\n", + "Created File: 9808.json\n", + "Created File: 3661.json\n", + "Created File: 447.json\n", + "Created File: 3338.json\n", + "Created File: 3129.json\n", + "Created File: 4061.json\n", + "Created File: 5073.json\n", + "Created File: 973.json\n", + "Created File: 2261.json\n", + "Created File: 1140.json\n", + "Created File: 9682.json\n", + "Created File: 6059.json\n", + "Created File: 6502.json\n", + "Created File: 4577.json\n", + "Created File: 7533.json\n", + "Created File: 2201.json\n", + "Created File: 7083.json\n", + "Created File: 7408.json\n", + "Created File: 1018.json\n", + "Created File: 5609.json\n", + "Created File: 5341.json\n", + "Created File: 9213.json\n", + "Created File: 2084.json\n", + "Created File: 8419.json\n", + "Created File: 1090.json\n", + "Created File: 1061.json\n", + "Created File: 4419.json\n", + "Created File: 9768.json\n", + "Created File: 5293.json\n", + "Created File: 5391.json\n", + "Created File: 9878.json\n", + "Created File: 305.json\n", + "Created File: 10159.json\n", + "Created File: 8861.json\n", + "Created File: 2562.json\n", + "Created File: 21.json\n", + "Created File: 6683.json\n", + "Created File: 2063.json\n", + "Created File: 8121.json\n", + "Created File: 1264.json\n", + "Created File: 7317.json\n", + "Created File: 8609.json\n", + "Created File: 4315.json\n", + "Created File: 614.json\n", + "Created File: 1051.json\n", + "Created File: 3386.json\n", + "Created File: 8514.json\n", + "Created File: 4814.json\n", + "Created File: 6696.json\n", + "Created File: 6262.json\n", + "Created File: 2516.json\n", + "Created File: 7567.json\n", + "Created File: 1014.json\n", + "Created File: 6702.json\n", + "Created File: 3134.json\n", + "Created File: 5473.json\n", + "Created File: 4308.json\n", + "Created File: 1394.json\n", + "Created File: 735.json\n", + "Created File: 8936.json\n", + "Created File: 10062.json\n", + "Created File: 1209.json\n", + "Created File: 9935.json\n", + "Created File: 9155.json\n", + "Created File: 2926.json\n", + "Created File: 2311.json\n", + "Created File: 2509.json\n", + "Created File: 1714.json\n", + "Created File: 10167.json\n", + "Created File: 4974.json\n", + "Created File: 4027.json\n", + "Created File: 4177.json\n", + "Created File: 3118.json\n", + "Created File: 6994.json\n", + "Created File: 8313.json\n", + "Created File: 1711.json\n", + "Created File: 6318.json\n", + "Created File: 6811.json\n", + "Created File: 958.json\n", + "Created File: 1984.json\n", + "Created File: 2472.json\n", + "Created File: 2883.json\n", + "Created File: 2573.json\n", + "Created File: 8644.json\n", + "Created File: 4723.json\n", + "Created File: 8944.json\n", + "Created File: 5672.json\n", + "Created File: 894.json\n", + "Created File: 5238.json\n", + "Created File: 5897.json\n", + "Created File: 4055.json\n", + "Created File: 5928.json\n", + "Created File: 8011.json\n", + "Created File: 6182.json\n", + "Created File: 4719.json\n", + "Created File: 1011.json\n", + "Created File: 8771.json\n", + "Created File: 1154.json\n", + "Created File: 8494.json\n", + "Created File: 4125.json\n", + "Created File: 1854.json\n", + "Created File: 4453.json\n", + "Created File: 8495.json\n", + "Created File: 2373.json\n", + "Created File: 5491.json\n", + "Created File: 6877.json\n", + "Created File: 4487.json\n", + "Created File: 6986.json\n", + "Created File: 10016.json\n", + "Created File: 4744.json\n", + "Created File: 3619.json\n", + "Created File: 7346.json\n", + "Created File: 1581.json\n", + "Created File: 4436.json\n", + "Created File: 8736.json\n", + "Created File: 3725.json\n", + "Created File: 8954.json\n", + "Created File: 3697.json\n", + "Created File: 1700.json\n", + "Created File: 2249.json\n", + "Created File: 3915.json\n", + "Created File: 9927.json\n", + "Created File: 7392.json\n", + "Created File: 1603.json\n", + "Created File: 10174.json\n", + "Created File: 1054.json\n", + "Created File: 6219.json\n", + "Created File: 4853.json\n", + "Created File: 1604.json\n", + "Created File: 1990.json\n", + "Created File: 5185.json\n", + "Created File: 4462.json\n", + "Created File: 9006.json\n", + "Created File: 3896.json\n", + "Created File: 1899.json\n", + "Created File: 7362.json\n", + "Created File: 3699.json\n", + "Created File: 4731.json\n", + "Created File: 7460.json\n", + "Created File: 861.json\n", + "Created File: 9176.json\n", + "Created File: 6404.json\n", + "Created File: 6207.json\n", + "Created File: 1496.json\n", + "Created File: 6335.json\n", + "Created File: 3962.json\n", + "Created File: 6296.json\n", + "Created File: 8529.json\n", + "Created File: 6311.json\n", + "Created File: 8963.json\n", + "Created File: 6202.json\n", + "Created File: 5578.json\n", + "Created File: 4959.json\n", + "Created File: 6025.json\n", + "Created File: 9983.json\n", + "Created File: 1944.json\n", + "Created File: 4286.json\n", + "Created File: 1194.json\n", + "Created File: 6662.json\n", + "Created File: 403.json\n", + "Created File: 8288.json\n", + "Created File: 1454.json\n", + "Created File: 4580.json\n", + "Created File: 8882.json\n", + "Created File: 9091.json\n", + "Created File: 4183.json\n", + "Created File: 1488.json\n", + "Created File: 1882.json\n", + "Created File: 4558.json\n", + "Created File: 2443.json\n", + "Created File: 7725.json\n", + "Created File: 4336.json\n", + "Created File: 7143.json\n", + "Created File: 5262.json\n", + "Created File: 8446.json\n", + "Created File: 8032.json\n", + "Created File: 5570.json\n", + "Created File: 1204.json\n", + "Created File: 1410.json\n", + "Created File: 1582.json\n", + "Created File: 2079.json\n", + "Created File: 1393.json\n", + "Created File: 5298.json\n", + "Created File: 10077.json\n", + "Created File: 301.json\n", + "Created File: 5732.json\n", + "Created File: 6082.json\n", + "Created File: 534.json\n", + "Created File: 6141.json\n", + "Created File: 8457.json\n", + "Created File: 6806.json\n", + "Created File: 9288.json\n", + "Created File: 122.json\n", + "Created File: 9168.json\n", + "Created File: 2550.json\n", + "Created File: 9362.json\n", + "Created File: 1395.json\n", + "Created File: 4392.json\n", + "Created File: 8723.json\n", + "Created File: 4721.json\n", + "Created File: 5729.json\n", + "Created File: 10086.json\n", + "Created File: 2111.json\n", + "Created File: 8799.json\n", + "Created File: 1032.json\n", + "Created File: 8834.json\n", + "Created File: 10127.json\n", + "Created File: 3641.json\n", + "Created File: 4334.json\n", + "Created File: 5747.json\n", + "Created File: 8412.json\n", + "Created File: 8798.json\n", + "Created File: 6741.json\n", + "Created File: 1793.json\n", + "Created File: 6308.json\n", + "Created File: 1113.json\n", + "Created File: 9047.json\n", + "Created File: 1591.json\n", + "Created File: 6417.json\n", + "Created File: 5113.json\n", + "Created File: 4914.json\n", + "Created File: 1471.json\n", + "Created File: 8448.json\n", + "Created File: 5210.json\n", + "Created File: 7158.json\n", + "Created File: 6474.json\n", + "Created File: 2411.json\n", + "Created File: 9742.json\n", + "Created File: 6387.json\n", + "Created File: 353.json\n", + "Created File: 2318.json\n", + "Created File: 6679.json\n", + "Created File: 2156.json\n", + "Created File: 5199.json\n", + "Created File: 9711.json\n", + "Created File: 8715.json\n", + "Created File: 10102.json\n", + "Created File: 5472.json\n", + "Created File: 6177.json\n", + "Created File: 6452.json\n", + "Created File: 6921.json\n", + "Created File: 6454.json\n", + "Created File: 1590.json\n", + "Created File: 9533.json\n", + "Created File: 8496.json\n", + "Created File: 1725.json\n", + "Created File: 6547.json\n", + "Created File: 9929.json\n", + "Created File: 5329.json\n", + "Created File: 10028.json\n", + "Created File: 8286.json\n", + "Created File: 1587.json\n", + "Created File: 171.json\n", + "Created File: 3623.json\n", + "Created File: 1303.json\n", + "Created File: 2153.json\n", + "Created File: 5494.json\n", + "Created File: 3857.json\n", + "Created File: 6645.json\n", + "Created File: 8876.json\n", + "Created File: 1908.json\n", + "Created File: 3305.json\n", + "Created File: 4151.json\n", + "Created File: 4521.json\n", + "Created File: 404.json\n", + "Created File: 4609.json\n", + "Created File: 349.json\n", + "Created File: 8931.json\n", + "Created File: 8659.json\n", + "Created File: 5416.json\n", + "Created File: 1631.json\n", + "Created File: 5780.json\n", + "Created File: 9041.json\n", + "Created File: 4549.json\n", + "Created File: 1279.json\n", + "Created File: 2194.json\n", + "Created File: 9137.json\n", + "Created File: 3188.json\n", + "Created File: 6351.json\n", + "Created File: 9024.json\n", + "Created File: 2087.json\n", + "Created File: 6714.json\n", + "Created File: 4724.json\n", + "Created File: 7265.json\n", + "Created File: 10000.json\n", + "Created File: 3043.json\n", + "Created File: 1962.json\n", + "Created File: 9812.json\n", + "Created File: 9028.json\n", + "Created File: 4610.json\n", + "Created File: 2117.json\n", + "Created File: 9950.json\n", + "Created File: 8470.json\n", + "Created File: 8511.json\n", + "Created File: 9923.json\n", + "Created File: 5986.json\n", + "Created File: 7145.json\n", + "Created File: 3504.json\n", + "Created File: 5139.json\n", + "Created File: 8045.json\n", + "Created File: 4423.json\n", + "Created File: 4323.json\n", + "Created File: 986.json\n", + "Created File: 4706.json\n", + "Created File: 5450.json\n", + "Created File: 1258.json\n", + "Created File: 2182.json\n", + "Created File: 951.json\n", + "Created File: 6371.json\n", + "Created File: 3167.json\n", + "Created File: 4988.json\n", + "Created File: 6424.json\n", + "Created File: 8856.json\n", + "Created File: 4276.json\n", + "Created File: 5375.json\n", + "Created File: 8480.json\n", + "Created File: 4975.json\n", + "Created File: 23.json\n", + "Created File: 4978.json\n", + "Created File: 7796.json\n", + "Created File: 1289.json\n", + "Created File: 4077.json\n", + "Created File: 5748.json\n", + "Created File: 4225.json\n", + "Created File: 9198.json\n", + "Created File: 6857.json\n", + "Created File: 9687.json\n", + "Created File: 1245.json\n", + "Created File: 9086.json\n", + "Created File: 4465.json\n", + "Created File: 9206.json\n", + "Created File: 7209.json\n", + "Created File: 9276.json\n", + "Created File: 8746.json\n", + "Created File: 8597.json\n", + "Created File: 7307.json\n", + "Created File: 8028.json\n", + "Created File: 7070.json\n", + "Created File: 2288.json\n", + "Created File: 4908.json\n", + "Created File: 5451.json\n", + "Created File: 4652.json\n", + "Created File: 4017.json\n", + "Created File: 9685.json\n", + "Created File: 9087.json\n", + "Created File: 6284.json\n", + "Created File: 4518.json\n", + "Created File: 7707.json\n", + "Created File: 6789.json\n", + "Created File: 7573.json\n", + "Created File: 8742.json\n", + "Created File: 4527.json\n", + "Created File: 4693.json\n", + "Created File: 7193.json\n", + "Created File: 871.json\n", + "Created File: 3862.json\n", + "Created File: 2996.json\n", + "Created File: 6340.json\n", + "Created File: 7541.json\n", + "Created File: 4953.json\n", + "Created File: 1420.json\n", + "Created File: 5426.json\n", + "Created File: 6359.json\n", + "Created File: 5431.json\n", + "Created File: 8960.json\n", + "Created File: 4221.json\n", + "Created File: 31.json\n", + "Created File: 5040.json\n", + "Created File: 9570.json\n", + "Created File: 5144.json\n", + "Created File: 7275.json\n", + "Created File: 1371.json\n", + "Created File: 1035.json\n", + "Created File: 9731.json\n", + "Created File: 1840.json\n", + "Created File: 3231.json\n", + "Created File: 8518.json\n", + "Created File: 6691.json\n", + "Created File: 6012.json\n", + "Created File: 8642.json\n", + "Created File: 7641.json\n", + "Created File: 1934.json\n", + "Created File: 8887.json\n", + "Created File: 1043.json\n", + "Created File: 5161.json\n", + "Created File: 4238.json\n", + "Created File: 4136.json\n", + "Created File: 5190.json\n", + "Created File: 4562.json\n", + "Created File: 9729.json\n", + "Created File: 5488.json\n", + "Created File: 3469.json\n", + "Created File: 9456.json\n", + "Created File: 8972.json\n", + "Created File: 433.json\n", + "Created File: 6194.json\n", + "Created File: 1535.json\n", + "Created File: 1761.json\n", + "Created File: 291.json\n", + "Created File: 1815.json\n", + "Created File: 6458.json\n", + "Created File: 3847.json\n", + "Created File: 9962.json\n", + "Created File: 1886.json\n", + "Created File: 10021.json\n", + "Created File: 10163.json\n", + "Created File: 6241.json\n", + "Created File: 5018.json\n", + "Created File: 7124.json\n", + "Created File: 5153.json\n", + "Created File: 1648.json\n", + "Created File: 5529.json\n", + "Created File: 1089.json\n", + "Created File: 2122.json\n", + "Created File: 2924.json\n", + "Created File: 6288.json\n", + "Created File: 6286.json\n", + "Created File: 6159.json\n", + "Created File: 2987.json\n", + "Created File: 9039.json\n", + "Created File: 7138.json\n", + "Created File: 5960.json\n", + "Created File: 1639.json\n", + "Created File: 8971.json\n", + "Created File: 5313.json\n", + "Created File: 2006.json\n", + "Created File: 5489.json\n", + "Created File: 7246.json\n", + "Created File: 7203.json\n", + "Created File: 9192.json\n", + "Created File: 8460.json\n", + "Created File: 9073.json\n", + "Created File: 4306.json\n", + "Created File: 8733.json\n", + "Created File: 5582.json\n", + "Created File: 7407.json\n", + "Created File: 3294.json\n", + "Created File: 2579.json\n", + "Created File: 6058.json\n", + "Created File: 5061.json\n", + "Created File: 7552.json\n", + "Created File: 4821.json\n", + "Created File: 3400.json\n", + "Created File: 4573.json\n", + "Created File: 7881.json\n", + "Created File: 1998.json\n", + "Created File: 9256.json\n", + "Created File: 3207.json\n", + "Created File: 3895.json\n", + "Created File: 10093.json\n", + "Created File: 8427.json\n", + "Created File: 1164.json\n", + "Created File: 3960.json\n", + "Created File: 1228.json\n", + "Created File: 4717.json\n", + "Created File: 8679.json\n", + "Created File: 7429.json\n", + "Created File: 3438.json\n", + "Created File: 5041.json\n", + "Created File: 5140.json\n", + "Created File: 2238.json\n", + "Created File: 1628.json\n", + "Created File: 6876.json\n", + "Created File: 8562.json\n", + "Created File: 2134.json\n", + "Created File: 5239.json\n", + "Created File: 8663.json\n", + "Created File: 85.json\n", + "Created File: 8726.json\n", + "Created File: 6280.json\n", + "Created File: 5176.json\n", + "Created File: 6704.json\n", + "Created File: 2451.json\n", + "Created File: 8853.json\n", + "Created File: 1455.json\n", + "Created File: 5224.json\n", + "Created File: 7180.json\n", + "Created File: 4998.json\n", + "Created File: 1519.json\n", + "Created File: 9090.json\n", + "Created File: 8424.json\n", + "Created File: 6746.json\n", + "Created File: 6172.json\n", + "Created File: 5221.json\n", + "Created File: 2973.json\n", + "Created File: 4080.json\n", + "Created File: 6947.json\n", + "Created File: 7348.json\n", + "Created File: 2168.json\n", + "Created File: 2910.json\n", + "Created File: 1634.json\n", + "Created File: 2588.json\n", + "Created File: 5191.json\n", + "Created File: 5226.json\n", + "Created File: 6005.json\n", + "Created File: 997.json\n", + "Created File: 9646.json\n", + "Created File: 9979.json\n", + "Created File: 1318.json\n", + "Created File: 4263.json\n", + "Created File: 8987.json\n", + "Created File: 5187.json\n", + "Created File: 235.json\n", + "Created File: 4560.json\n", + "Created File: 395.json\n", + "Created File: 6420.json\n", + "Created File: 3149.json\n", + "Created File: 5182.json\n", + "Created File: 1560.json\n", + "Created File: 5784.json\n", + "Created File: 9769.json\n", + "Created File: 5342.json\n", + "Created File: 4666.json\n", + "Created File: 8380.json\n", + "Created File: 1977.json\n", + "Created File: 4143.json\n", + "Created File: 10050.json\n", + "Created File: 6322.json\n", + "Created File: 142.json\n", + "Created File: 9098.json\n", + "Created File: 5469.json\n", + "Created File: 6369.json\n", + "Created File: 3181.json\n", + "Created File: 6803.json\n", + "Created File: 6188.json\n", + "Created File: 6914.json\n", + "Created File: 6718.json\n", + "Created File: 3035.json\n", + "Created File: 4593.json\n", + "Created File: 5485.json\n", + "Created File: 545.json\n", + "Created File: 6999.json\n", + "Created File: 9194.json\n", + "Created File: 8656.json\n", + "Created File: 4824.json\n", + "Created File: 5883.json\n", + "Created File: 1210.json\n", + "Created File: 4849.json\n", + "Created File: 8393.json\n", + "Created File: 82.json\n", + "Created File: 4891.json\n", + "Created File: 5242.json\n", + "Created File: 1884.json\n", + "Created File: 3332.json\n", + "Created File: 1027.json\n", + "Created File: 7119.json\n", + "Created File: 8818.json\n", + "Created File: 7294.json\n", + "Created File: 7120.json\n", + "Created File: 1287.json\n", + "Created File: 9023.json\n", + "Created File: 8989.json\n", + "Created File: 10014.json\n", + "Created File: 4496.json\n", + "Created File: 1508.json\n", + "Created File: 975.json\n", + "Created File: 3600.json\n", + "Created File: 3727.json\n", + "Created File: 7651.json\n", + "Created File: 9187.json\n", + "Created File: 8904.json\n", + "Created File: 4986.json\n", + "Created File: 1531.json\n", + "Created File: 1578.json\n", + "Created File: 220.json\n", + "Created File: 6290.json\n", + "Created File: 1359.json\n", + "Created File: 2349.json\n", + "Created File: 4794.json\n", + "Created File: 6136.json\n", + "Created File: 665.json\n", + "Created File: 1489.json\n", + "Created File: 5543.json\n", + "Created File: 3168.json\n", + "Created File: 8785.json\n", + "Created File: 5145.json\n", + "Created File: 6443.json\n", + "Created File: 4832.json\n", + "Created File: 6236.json\n", + "Created File: 4996.json\n", + "Created File: 1297.json\n", + "Created File: 5750.json\n", + "Created File: 5640.json\n", + "Created File: 5146.json\n", + "Created File: 10033.json\n", + "Created File: 1749.json\n", + "Created File: 10096.json\n", + "Created File: 2882.json\n", + "Created File: 5247.json\n", + "Created File: 1092.json\n", + "Created File: 2870.json\n", + "Created File: 4135.json\n", + "Created File: 1246.json\n", + "Created File: 4916.json\n", + "Created File: 4374.json\n", + "Created File: 5001.json\n", + "Created File: 5896.json\n", + "Created File: 3184.json\n", + "Created File: 4146.json\n", + "Created File: 7510.json\n", + "Created File: 4554.json\n", + "Created File: 4920.json\n", + "Created File: 6958.json\n", + "Created File: 7238.json\n", + "Created File: 394.json\n", + "Created File: 1914.json\n", + "Created File: 2065.json\n", + "Created File: 6574.json\n", + "Created File: 6952.json\n", + "Created File: 1361.json\n", + "Created File: 8692.json\n", + "Created File: 9119.json\n", + "Created File: 1422.json\n", + "Created File: 4150.json\n", + "Created File: 10055.json\n", + "Created File: 2296.json\n", + "Created File: 6642.json\n", + "Created File: 2529.json\n", + "Created File: 3854.json\n", + "Created File: 4798.json\n", + "Created File: 1470.json\n", + "Created File: 9739.json\n", + "Created File: 4054.json\n", + "Created File: 8376.json\n", + "Created File: 5240.json\n", + "Created File: 4861.json\n", + "Created File: 8968.json\n", + "Created File: 4346.json\n", + "Created File: 4782.json\n", + "Created File: 2174.json\n", + "Created File: 8712.json\n", + "Created File: 66.json\n", + "Created File: 4960.json\n", + "Created File: 3524.json\n", + "Created File: 2073.json\n", + "Created File: 9184.json\n", + "Created File: 2570.json\n", + "Created File: 7423.json\n", + "Created File: 1384.json\n", + "Created File: 6180.json\n", + "Created File: 8499.json\n", + "Created File: 365.json\n", + "Created File: 516.json\n", + "Created File: 6576.json\n", + "Created File: 5510.json\n", + "Created File: 4197.json\n", + "Created File: 8572.json\n", + "Created File: 6110.json\n", + "Created File: 5243.json\n", + "Created File: 4720.json\n", + "Created File: 3846.json\n", + "Created File: 7187.json\n", + "Created File: 6844.json\n", + "Created File: 2613.json\n", + "Created File: 3090.json\n", + "Created File: 6494.json\n", + "Created File: 5459.json\n", + "Created File: 9302.json\n", + "Created File: 6088.json\n", + "Created File: 3521.json\n", + "Created File: 6624.json\n", + "Created File: 7174.json\n", + "Created File: 56.json\n", + "Created File: 4643.json\n", + "Created File: 2061.json\n", + "Created File: 4699.json\n", + "Created File: 10157.json\n", + "Created File: 1281.json\n", + "Created File: 5901.json\n", + "Created File: 9210.json\n", + "Created File: 1377.json\n", + "Created File: 6195.json\n", + "Created File: 4722.json\n", + "Created File: 6163.json\n", + "Created File: 9848.json\n", + "Created File: 371.json\n", + "Created File: 6090.json\n", + "Created File: 8878.json\n", + "Created File: 5354.json\n", + "Created File: 9841.json\n", + "Created File: 5539.json\n", + "Created File: 1991.json\n", + "Created File: 10008.json\n", + "Created File: 4309.json\n", + "Created File: 4261.json\n", + "Created File: 3272.json\n", + "Created File: 10173.json\n", + "Created File: 2295.json\n", + "Created File: 5204.json\n", + "Created File: 9065.json\n", + "Created File: 6112.json\n", + "Created File: 5165.json\n", + "Created File: 2867.json\n", + "Created File: 1646.json\n", + "Created File: 5024.json\n", + "Created File: 4314.json\n", + "Created File: 3706.json\n", + "Created File: 1811.json\n", + "Created File: 1187.json\n", + "Created File: 468.json\n", + "Created File: 8504.json\n", + "Created File: 3929.json\n", + "Created File: 4174.json\n", + "Created File: 7086.json\n", + "Created File: 6562.json\n", + "Created File: 8779.json\n", + "Created File: 8979.json\n", + "Created File: 2898.json\n", + "Created File: 8023.json\n", + "Created File: 9275.json\n", + "Created File: 9054.json\n", + "Created File: 3465.json\n", + "Created File: 4493.json\n", + "Created File: 6080.json\n", + "Created File: 1538.json\n", + "Created File: 5905.json\n", + "Created File: 4697.json\n", + "Created File: 8965.json\n", + "Created File: 10160.json\n", + "Created File: 4943.json\n", + "Created File: 2464.json\n", + "Created File: 8278.json\n", + "Created File: 10143.json\n", + "Created File: 5537.json\n", + "Created File: 7081.json\n", + "Created File: 2537.json\n", + "Created File: 1812.json\n", + "Created File: 4112.json\n", + "Created File: 9945.json\n", + "Created File: 9079.json\n", + "Created File: 3135.json\n", + "Created File: 1895.json\n", + "Created File: 567.json\n", + "Created File: 8739.json\n", + "Created File: 4650.json\n", + "Created File: 2467.json\n", + "Created File: 5264.json\n", + "Created File: 1951.json\n", + "Created File: 8546.json\n", + "Created File: 6230.json\n", + "Created File: 1443.json\n", + "Created File: 1559.json\n", + "Created File: 4265.json\n", + "Created File: 6282.json\n", + "Created File: 2353.json\n", + "Created File: 4311.json\n", + "Created File: 494.json\n", + "Created File: 7901.json\n", + "Created File: 6225.json\n", + "Created File: 4051.json\n", + "Created File: 1440.json\n", + "Created File: 5566.json\n", + "Created File: 3678.json\n", + "Created File: 10036.json\n", + "Created File: 192.json\n", + "Created File: 4448.json\n", + "Created File: 7071.json\n", + "Created File: 5020.json\n", + "Created File: 1306.json\n", + "Created File: 1336.json\n", + "Created File: 3811.json\n", + "Created File: 3017.json\n", + "Created File: 1467.json\n", + "Created File: 1261.json\n", + "Created File: 4612.json\n", + "Created File: 25.json\n", + "Created File: 9921.json\n", + "Created File: 5704.json\n", + "Created File: 4664.json\n", + "Created File: 9144.json\n", + "Created File: 7371.json\n", + "Created File: 3166.json\n", + "Created File: 7256.json\n", + "Created File: 539.json\n", + "Created File: 4099.json\n", + "Created File: 4450.json\n", + "Created File: 5046.json\n", + "Created File: 1633.json\n", + "Created File: 3880.json\n", + "Created File: 3701.json\n", + "Created File: 95.json\n", + "Created File: 3788.json\n", + "Created File: 4532.json\n", + "Created File: 4164.json\n", + "Created File: 2520.json\n", + "Created File: 6928.json\n", + "Created File: 6955.json\n", + "Created File: 6339.json\n", + "Created File: 4962.json\n", + "Created File: 5922.json\n", + "Created File: 6894.json\n", + "Created File: 2303.json\n", + "Created File: 6199.json\n", + "Created File: 978.json\n", + "Created File: 10001.json\n", + "Created File: 8648.json\n", + "Created File: 5365.json\n", + "Created File: 6751.json\n", + "Created File: 1513.json\n", + "Created File: 6447.json\n", + "Created File: 1946.json\n", + "Created File: 3562.json\n", + "Created File: 5705.json\n", + "Created File: 2231.json\n", + "Created File: 10010.json\n", + "Created File: 1929.json\n", + "Created File: 5189.json\n", + "Created File: 3625.json\n", + "Created File: 4166.json\n", + "Created File: 6792.json\n", + "Created File: 4357.json\n", + "Created File: 4999.json\n", + "Created File: 6327.json\n", + "Created File: 4355.json\n", + "Created File: 2425.json\n", + "Created File: 4213.json\n", + "Created File: 4087.json\n", + "Created File: 1675.json\n", + "Created File: 4372.json\n", + "Created File: 7786.json\n", + "Created File: 6989.json\n", + "Created File: 8682.json\n", + "Created File: 6556.json\n", + "Created File: 6155.json\n", + "Created File: 5287.json\n", + "Created File: 8939.json\n", + "Created File: 1066.json\n", + "Created File: 5428.json\n", + "Created File: 8374.json\n", + "Created File: 676.json\n", + "Created File: 8820.json\n", + "Created File: 6438.json\n", + "Created File: 1498.json\n", + "Created File: 5509.json\n", + "Created File: 9910.json\n", + "Created File: 1088.json\n", + "Created File: 2805.json\n", + "Created File: 2847.json\n", + "Created File: 5482.json\n", + "Created File: 2219.json\n", + "Created File: 8614.json\n", + "Created File: 7506.json\n", + "Created File: 5423.json\n", + "Created File: 8372.json\n", + "Created File: 3989.json\n", + "Created File: 1568.json\n", + "Created File: 8757.json\n", + "Created File: 9789.json\n", + "Created File: 343.json\n", + "Created File: 4137.json\n", + "Created File: 7336.json\n", + "Created File: 3826.json\n", + "Created File: 5504.json\n", + "Created File: 1807.json\n", + "Created File: 209.json\n", + "Created File: 3835.json\n", + "Created File: 1348.json\n", + "Created File: 4992.json\n", + "Created File: 7354.json\n", + "Created File: 2325.json\n", + "Created File: 3195.json\n", + "Created File: 3111.json\n", + "Created File: 5088.json\n", + "Created File: 6087.json\n", + "Created File: 3157.json\n", + "Created File: 3280.json\n", + "Created File: 1875.json\n", + "Created File: 1170.json\n", + "Created File: 9705.json\n", + "Created File: 7195.json\n", + "Created File: 5207.json\n", + "Created File: 4209.json\n", + "Created File: 2167.json\n", + "Created File: 7133.json\n", + "Created File: 8390.json\n", + "Created File: 1291.json\n", + "Created File: 4236.json\n", + "Created File: 1062.json\n", + "Created File: 6657.json\n", + "Created File: 1337.json\n", + "Created File: 10095.json\n", + "Created File: 2762.json\n", + "Created File: 3182.json\n", + "Created File: 4686.json\n", + "Created File: 8636.json\n", + "Created File: 9245.json\n", + "Created File: 7406.json\n", + "Created File: 5966.json\n", + "Created File: 3760.json\n", + "Created File: 8632.json\n", + "Created File: 3186.json\n", + "Created File: 1135.json\n", + "Created File: 4431.json\n", + "Created File: 4547.json\n", + "Created File: 6066.json\n", + "Created File: 6461.json\n", + "Created File: 5361.json\n", + "Created File: 2279.json\n", + "Created File: 6440.json\n", + "Created File: 4303.json\n", + "Created File: 5433.json\n", + "Created File: 2270.json\n", + "Created File: 7142.json\n", + "Created File: 6886.json\n", + "Created File: 9697.json\n", + "Created File: 4258.json\n", + "Created File: 8406.json\n", + "Created File: 8918.json\n", + "Created File: 9102.json\n", + "Created File: 1565.json\n", + "Created File: 5447.json\n", + "Created File: 5122.json\n", + "Created File: 3980.json\n", + "Created File: 2779.json\n", + "Created File: 10111.json\n", + "Created File: 2610.json\n", + "Created File: 1382.json\n", + "Created File: 2574.json\n", + "Created File: 1993.json\n", + "Created File: 6299.json\n", + "Created File: 6603.json\n", + "Created File: 9135.json\n", + "Created File: 4712.json\n", + "Created File: 2844.json\n", + "Created File: 4245.json\n", + "Created File: 8930.json\n", + "Created File: 5320.json\n", + "Created File: 9886.json\n", + "Created File: 2239.json\n", + "Created File: 4048.json\n", + "Created File: 8842.json\n", + "Created File: 5449.json\n", + "Created File: 1723.json\n", + "Created File: 3500.json\n", + "Created File: 4936.json\n", + "Created File: 8664.json\n", + "Created File: 10132.json\n", + "Created File: 2813.json\n", + "Created File: 1270.json\n", + "Created File: 1472.json\n", + "Created File: 5611.json\n", + "Created File: 8761.json\n", + "Created File: 8833.json\n", + "Created File: 8151.json\n", + "Created File: 4945.json\n", + "Created File: 632.json\n", + "Created File: 1862.json\n", + "Created File: 7361.json\n", + "Created File: 234.json\n", + "Created File: 7066.json\n", + "Created File: 4219.json\n", + "Created File: 417.json\n", + "Created File: 719.json\n", + "Created File: 1607.json\n", + "Created File: 2335.json\n", + "Created File: 5902.json\n", + "Created File: 10149.json\n", + "Created File: 3119.json\n", + "Created File: 3477.json\n", + "Created File: 1517.json\n", + "Created File: 9277.json\n", + "Created File: 5840.json\n", + "Created File: 2938.json\n", + "Created File: 9151.json\n", + "Created File: 3010.json\n", + "Created File: 9138.json\n", + "Created File: 4256.json\n", + "Created File: 5911.json\n", + "Created File: 2909.json\n", + "Created File: 3994.json\n", + "Created File: 6344.json\n", + "Created File: 4648.json\n", + "Created File: 1180.json\n", + "Created File: 5410.json\n", + "Created File: 1153.json\n", + "Created File: 6532.json\n", + "Created File: 10047.json\n", + "Created File: 5815.json\n", + "Created File: 3795.json\n", + "Created File: 8392.json\n", + "Created File: 2908.json\n", + "Created File: 5532.json\n", + "Created File: 1293.json\n", + "Created File: 8896.json\n", + "Created File: 2114.json\n", + "Created File: 6439.json\n", + "Created File: 8443.json\n", + "Created File: 1324.json\n", + "Created File: 8984.json\n", + "Created File: 2086.json\n", + "Created File: 7418.json\n", + "Created File: 5444.json\n", + "Created File: 5843.json\n", + "Created File: 6727.json\n", + "Created File: 10144.json\n", + "Created File: 4154.json\n", + "Created File: 6364.json\n", + "Created File: 8748.json\n", + "Created File: 6956.json\n", + "Created File: 8428.json\n", + "Created File: 4566.json\n", + "Created File: 6922.json\n", + "Created File: 10042.json\n", + "Created File: 1301.json\n", + "Created File: 5094.json\n", + "Created File: 5982.json\n", + "Created File: 9718.json\n", + "Created File: 2046.json\n", + "Created File: 8520.json\n", + "Created File: 9297.json\n", + "Created File: 4740.json\n", + "Created File: 38.json\n", + "Created File: 6031.json\n", + "Created File: 4836.json\n", + "Created File: 3328.json\n", + "Created File: 5770.json\n", + "Created File: 3317.json\n", + "Created File: 5100.json\n", + "Created File: 6858.json\n", + "Created File: 10108.json\n", + "Created File: 7384.json\n", + "Created File: 9680.json\n", + "Created File: 17.json\n", + "Created File: 9917.json\n", + "Created File: 5025.json\n", + "Created File: 3315.json\n", + "Created File: 295.json\n", + "Created File: 3901.json\n", + "Created File: 1722.json\n", + "Created File: 9211.json\n", + "Created File: 160.json\n", + "Created File: 7114.json\n", + "Created File: 8646.json\n", + "Created File: 9733.json\n", + "Created File: 4934.json\n", + "Created File: 5159.json\n", + "Created File: 1330.json\n", + "Created File: 3478.json\n", + "Created File: 7243.json\n", + "Created File: 9755.json\n", + "Created File: 4251.json\n", + "Created File: 650.json\n", + "Created File: 2307.json\n", + "Created File: 10087.json\n", + "Created File: 6256.json\n", + "Created File: 2301.json\n", + "Created File: 5545.json\n", + "Created File: 6658.json\n", + "Created File: 5827.json\n", + "Created File: 4326.json\n", + "Created File: 3886.json\n", + "Created File: 7443.json\n", + "Created File: 6283.json\n", + "Created File: 4478.json\n", + "Created File: 9761.json\n", + "Created File: 1810.json\n", + "Created File: 1362.json\n", + "Created File: 2984.json\n", + "Created File: 7002.json\n", + "Created File: 6119.json\n", + "Created File: 5805.json\n", + "Created File: 2348.json\n", + "Created File: 2419.json\n", + "Created File: 303.json\n", + "Created File: 6198.json\n", + "Created File: 6305.json\n", + "Created File: 6421.json\n", + "Created File: 7075.json\n", + "Created File: 3212.json\n", + "Created File: 8974.json\n", + "Created File: 2331.json\n", + "Created File: 6650.json\n", + "Created File: 7866.json\n", + "Created File: 1996.json\n", + "Created File: 2484.json\n", + "Created File: 5656.json\n", + "Created File: 5125.json\n", + "Created File: 6407.json\n", + "Created File: 5941.json\n", + "Created File: 8506.json\n", + "Created File: 6353.json\n", + "Created File: 6042.json\n", + "Created File: 6403.json\n", + "Created File: 7467.json\n", + "Created File: 8515.json\n", + "Created File: 5291.json\n", + "Created File: 7349.json\n", + "Created File: 9026.json\n", + "Created File: 1698.json\n", + "Created File: 2921.json\n", + "Created File: 6337.json\n", + "Created File: 4834.json\n", + "Created File: 1852.json\n", + "Created File: 6548.json\n", + "Created File: 2158.json\n", + "Created File: 5346.json\n", + "Created File: 2955.json\n", + "Created File: 2761.json\n", + "Created File: 2572.json\n", + "Created File: 1817.json\n", + "Created File: 6142.json\n", + "Created File: 3708.json\n", + "Created File: 5135.json\n", + "Created File: 873.json\n", + "Created File: 4981.json\n", + "Created File: 2393.json\n", + "Created File: 4414.json\n", + "Created File: 3755.json\n", + "Created File: 5200.json\n", + "Created File: 6846.json\n", + "Created File: 6002.json\n", + "Created File: 4669.json\n", + "Created File: 7422.json\n", + "Created File: 8728.json\n", + "Created File: 5281.json\n", + "Created File: 8570.json\n", + "Created File: 5272.json\n", + "Created File: 5311.json\n", + "Created File: 6292.json\n", + "Created File: 9689.json\n", + "Created File: 4474.json\n", + "Created File: 3330.json\n", + "Created File: 6472.json\n", + "Created File: 1936.json\n", + "Created File: 6394.json\n", + "Created File: 6162.json\n", + "Created File: 6231.json\n", + "Created File: 8957.json\n", + "Created File: 7240.json\n", + "Created File: 8777.json\n", + "Created File: 1490.json\n", + "Created File: 3858.json\n", + "Created File: 9714.json\n", + "Created File: 1715.json\n", + "Created File: 3413.json\n", + "Created File: 1873.json\n", + "Created File: 8940.json\n", + "Created File: 7094.json\n", + "Created File: 6676.json\n", + "Created File: 4139.json\n", + "Created File: 6719.json\n", + "Created File: 5585.json\n", + "Created File: 4692.json\n", + "Created File: 6400.json\n", + "Created File: 7004.json\n", + "Created File: 7127.json\n", + "Created File: 2002.json\n", + "Created File: 7921.json\n", + "Created File: 2242.json\n", + "Created File: 4941.json\n", + "Created File: 6726.json\n", + "Created File: 1481.json\n", + "Created File: 1201.json\n", + "Created File: 4352.json\n", + "Created File: 6973.json\n", + "Created File: 2180.json\n", + "Created File: 8776.json\n", + "Created File: 8468.json\n", + "Created File: 2643.json\n", + "Created File: 8564.json\n", + "Created File: 8549.json\n", + "Created File: 9926.json\n", + "Created File: 8710.json\n", + "Created File: 4373.json\n", + "Created File: 8845.json\n", + "Created File: 8880.json\n", + "Created File: 1008.json\n", + "Created File: 4910.json\n", + "Created File: 3664.json\n", + "Created File: 742.json\n", + "Created File: 6524.json\n", + "Created File: 2316.json\n", + "Created File: 649.json\n", + "Created File: 5552.json\n", + "Created File: 1351.json\n", + "Created File: 9678.json\n", + "Created File: 9730.json\n", + "Created File: 6824.json\n", + "Created File: 10071.json\n", + "Created File: 6009.json\n", + "Created File: 3984.json\n", + "Created File: 3859.json\n", + "Created File: 1585.json\n", + "Created File: 5369.json\n", + "Created File: 7302.json\n", + "Created File: 3542.json\n", + "Created File: 2017.json\n", + "Created File: 1550.json\n", + "Created File: 7910.json\n", + "Created File: 6079.json\n", + "Created File: 5474.json\n", + "Created File: 4795.json\n", + "Created File: 8932.json\n", + "Created File: 5084.json\n", + "Created File: 8967.json\n", + "Created File: 8430.json\n", + "Created File: 8513.json\n", + "Created File: 9013.json\n", + "Created File: 4620.json\n", + "Created File: 2580.json\n", + "Created File: 5180.json\n", + "Created File: 4598.json\n", + "Created File: 1967.json\n", + "Created File: 3356.json\n", + "Created File: 7716.json\n", + "Created File: 7331.json\n", + "Created File: 9027.json\n", + "Created File: 1844.json\n", + "Created File: 9315.json\n", + "Created File: 4887.json\n", + "Created File: 2398.json\n", + "Created File: 5253.json\n", + "Created File: 5407.json\n", + "Created File: 10130.json\n", + "Created File: 10060.json\n", + "Created File: 3957.json\n", + "Created File: 2067.json\n", + "Created File: 8985.json\n", + "Created File: 6298.json\n", + "Created File: 8551.json\n", + "Created File: 5325.json\n", + "Created File: 7244.json\n", + "Created File: 9830.json\n", + "Created File: 4702.json\n", + "Created File: 7151.json\n", + "Created File: 4931.json\n", + "Created File: 1611.json\n", + "Created File: 1474.json\n", + "Created File: 9712.json\n", + "Created File: 7067.json\n", + "Created File: 9542.json\n", + "Created File: 993.json\n", + "Created File: 5519.json\n", + "Created File: 1805.json\n", + "Created File: 5283.json\n", + "Created File: 2534.json\n", + "Created File: 273.json\n", + "Created File: 2337.json\n", + "Created File: 2793.json\n", + "Created File: 7826.json\n", + "Created File: 4696.json\n", + "Created File: 4600.json\n", + "Created File: 7396.json\n", + "Created File: 1657.json\n", + "Created File: 7850.json\n", + "Created File: 6164.json\n", + "Created File: 5774.json\n", + "Created File: 9700.json\n", + "Created File: 6814.json\n", + "Created File: 9150.json\n", + "Created File: 9057.json\n", + "Created File: 5029.json\n", + "Created File: 5225.json\n", + "Created File: 4976.json\n", + "Created File: 5303.json\n", + "Created File: 6631.json\n", + "Created File: 4637.json\n", + "Created File: 3052.json\n", + "Created File: 1149.json\n", + "Created File: 2471.json\n", + "Created File: 6214.json\n", + "Created File: 7072.json\n", + "Created File: 4407.json\n", + "Created File: 4670.json\n", + "Created File: 1874.json\n", + "Created File: 8789.json\n", + "Created File: 3214.json\n", + "Created File: 3485.json\n", + "Created File: 14.json\n", + "Created File: 3056.json\n", + "Created File: 6151.json\n", + "Created File: 3762.json\n", + "Created File: 6161.json\n", + "Created File: 1103.json\n", + "Created File: 7824.json\n", + "Created File: 8657.json\n", + "Created File: 8618.json\n", + "Created File: 5318.json\n", + "Created File: 6183.json\n", + "Created File: 6368.json\n", + "Created File: 4321.json\n", + "Created File: 1877.json\n", + "Created File: 2253.json\n", + "Created File: 4049.json\n", + "Created File: 1842.json\n", + "Created File: 9924.json\n", + "Created File: 987.json\n", + "Created File: 1044.json\n", + "Created File: 3263.json\n", + "Created File: 5338.json\n", + "Created File: 6672.json\n", + "Created File: 2463.json\n", + "Created File: 6370.json\n", + "Created File: 5694.json\n", + "Created File: 8602.json\n", + "Created File: 4811.json\n", + "Created File: 8241.json\n", + "Created File: 32.json\n", + "Created File: 8817.json\n", + "Created File: 6147.json\n", + "Created File: 1447.json\n", + "Created File: 9672.json\n", + "Created File: 5301.json\n", + "Created File: 1128.json\n", + "Created File: 5829.json\n", + "Created File: 3117.json\n", + "Created File: 1888.json\n", + "Created File: 2406.json\n", + "Created File: 4388.json\n", + "Created File: 3648.json\n", + "Created File: 7226.json\n", + "Created File: 8796.json\n", + "Created File: 2034.json\n", + "Created File: 10015.json\n", + "Created File: 1642.json\n", + "Created File: 4551.json\n", + "Created File: 1691.json\n", + "Created File: 4741.json\n", + "Created File: 8245.json\n", + "Created File: 6492.json\n", + "Created File: 10089.json\n", + "Created File: 3853.json\n", + "Created File: 1120.json\n", + "Created File: 6187.json\n", + "Created File: 4555.json\n", + "Created File: 2496.json\n", + "Created File: 5625.json\n", + "Created File: 5414.json\n", + "Created File: 5536.json\n", + "Created File: 2110.json\n", + "Created File: 7153.json\n", + "Created File: 3148.json\n", + "Created File: 3067.json\n", + "Created File: 5833.json\n", + "Created File: 2150.json\n", + "Created File: 2981.json\n", + "Created File: 5254.json\n", + "Created File: 1250.json\n", + "Created File: 6077.json\n", + "Created File: 5866.json\n", + "Created File: 6427.json\n", + "Created File: 3745.json\n", + "Created File: 6482.json\n", + "Created File: 3145.json\n", + "Created File: 5222.json\n", + "Created File: 985.json\n", + "Created File: 6361.json\n", + "Created File: 9040.json\n", + "Created File: 9017.json\n", + "Created File: 4951.json\n", + "Created File: 6367.json\n", + "Created File: 5464.json\n", + "Created File: 8454.json\n", + "Created File: 4924.json\n", + "Created File: 1025.json\n", + "Created File: 6330.json\n", + "Created File: 5078.json\n", + "Created File: 289.json\n", + "Created File: 6665.json\n", + "Created File: 3986.json\n", + "Created File: 1356.json\n", + "Created File: 7883.json\n", + "Created File: 3981.json\n", + "Created File: 6145.json\n", + "Created File: 3719.json\n", + "Created File: 3255.json\n", + "Created File: 953.json\n", + "Created File: 5775.json\n", + "Created File: 4879.json\n", + "Created File: 6023.json\n", + "Created File: 2225.json\n", + "Created File: 2019.json\n", + "Created File: 3127.json\n", + "Created File: 8717.json\n", + "Created File: 5353.json\n", + "Created File: 2518.json\n", + "Created File: 5027.json\n", + "Created File: 1947.json\n", + "Created File: 1549.json\n", + "Created File: 8832.json\n", + "Created File: 8909.json\n", + "Created File: 4628.json\n", + "Created File: 2250.json\n", + "Created File: 9797.json\n", + "Created File: 3575.json\n", + "Created File: 495.json\n", + "Created File: 5344.json\n", + "Created File: 2245.json\n", + "Created File: 6893.json\n", + "Created File: 5530.json\n", + "Created File: 7743.json\n", + "Created File: 8626.json\n", + "Created File: 4302.json\n", + "Created File: 2202.json\n", + "Created File: 5888.json\n", + "Created File: 8654.json\n", + "Created File: 9183.json\n", + "Created File: 5787.json\n", + "Created File: 2965.json\n", + "Created File: 6324.json\n", + "Created File: 5951.json\n", + "Created File: 4161.json\n", + "Created File: 9601.json\n", + "Created File: 5676.json\n", + "Created File: 5050.json\n", + "Created File: 6585.json\n", + "Created File: 8707.json\n", + "Created File: 6860.json\n", + "Created File: 679.json\n", + "Created File: 1288.json\n", + "Created File: 9162.json\n", + "Created File: 2611.json\n", + "Created File: 4636.json\n", + "Created File: 3817.json\n", + "Created File: 1629.json\n", + "Created File: 7369.json\n", + "Created File: 2952.json\n", + "Created File: 4204.json\n", + "Created File: 8749.json\n", + "Created File: 5786.json\n", + "Created File: 8127.json\n", + "Created File: 5169.json\n", + "Created File: 2044.json\n", + "Created File: 8519.json\n", + "Created File: 2546.json\n", + "Created File: 4424.json\n", + "Created File: 9693.json\n", + "Created File: 1392.json\n", + "Created File: 8566.json\n", + "Created File: 5946.json\n", + "Created File: 6397.json\n", + "Created File: 7131.json\n", + "Created File: 4498.json\n", + "Created File: 6745.json\n", + "Created File: 6065.json\n", + "Created File: 5508.json\n", + "Created File: 3475.json\n", + "Created File: 5987.json\n", + "Created File: 1368.json\n", + "Created File: 8708.json\n", + "Created File: 9290.json\n", + "Created File: 5120.json\n", + "Created File: 5274.json\n", + "Created File: 8912.json\n", + "Created File: 4852.json\n", + "Created File: 1757.json\n", + "Created File: 7260.json\n", + "Created File: 6878.json\n", + "Created File: 2173.json\n", + "Created File: 4701.json\n", + "Created File: 7353.json\n", + "Created File: 7378.json\n", + "Created File: 5696.json\n", + "Created File: 6044.json\n", + "Created File: 1641.json\n", + "Created File: 3490.json\n", + "Created File: 4292.json\n", + "Created File: 2235.json\n", + "Created File: 1696.json\n", + "Created File: 6399.json\n", + "Created File: 4257.json\n", + "Created File: 5394.json\n", + "Created File: 1956.json\n", + "Created File: 2461.json\n", + "Created File: 5679.json\n", + "Created File: 7159.json\n", + "Created File: 5765.json\n", + "Created File: 1389.json\n", + "Created File: 7318.json\n", + "Created File: 2246.json\n", + "Created File: 1743.json\n", + "Created File: 8827.json\n", + "Created File: 5663.json\n", + "Created File: 1415.json\n", + "Created File: 4220.json\n", + "Created File: 2097.json\n", + "Created File: 8089.json\n", + "Created File: 8431.json\n", + "Created File: 2141.json\n", + "Created File: 7719.json\n", + "Created File: 8947.json\n", + "Created File: 3336.json\n", + "Created File: 3047.json\n", + "Created File: 1624.json\n", + "Created File: 2066.json\n", + "Created File: 499.json\n", + "Created File: 1439.json\n", + "Created File: 348.json\n", + "Created File: 10006.json\n", + "Created File: 7513.json\n", + "Created File: 1469.json\n", + "Created File: 6266.json\n", + "Created File: 6851.json\n", + "Created File: 6076.json\n", + "Created File: 5263.json\n", + "Created File: 3421.json\n", + "Created File: 4872.json\n", + "Created File: 1770.json\n", + "Created File: 5479.json\n", + "Created File: 6418.json\n", + "Created File: 1213.json\n", + "Created File: 553.json\n", + "Created File: 9737.json\n", + "Created File: 9114.json\n", + "Created File: 6074.json\n", + "Created File: 8812.json\n", + "Created File: 3705.json\n", + "Created File: 1493.json\n", + "Created File: 8415.json\n", + "Created File: 6184.json\n", + "Created File: 1673.json\n", + "Created File: 4514.json\n", + "Created File: 6235.json\n", + "Created File: 8701.json\n", + "Created File: 4418.json\n", + "Created File: 3357.json\n", + "Created File: 8905.json\n", + "Created File: 5228.json\n", + "Created File: 7427.json\n", + "Created File: 7386.json\n", + "Created File: 5876.json\n", + "Created File: 7003.json\n", + "Created File: 9149.json\n", + "Created File: 9240.json\n", + "Created File: 2772.json\n", + "Created File: 2879.json\n", + "Created File: 2522.json\n", + "Created File: 5235.json\n", + "Created File: 4583.json\n", + "Created File: 4338.json\n", + "Created File: 1997.json\n", + "Created File: 7360.json\n", + "Created File: 800.json\n", + "Created File: 5234.json\n", + "Created File: 8854.json\n", + "Created File: 6682.json\n", + "Created File: 6563.json\n", + "Created File: 9084.json\n", + "Created File: 15.json\n", + "Created File: 4950.json\n", + "Created File: 5276.json\n", + "Created File: 3238.json\n", + "Created File: 6430.json\n", + "Created File: 3556.json\n", + "Created File: 2808.json\n", + "Created File: 3211.json\n", + "Created File: 1423.json\n", + "Created File: 4035.json\n", + "Created File: 7397.json\n", + "Created File: 2860.json\n", + "Created File: 5760.json\n", + "Created File: 5181.json\n", + "Created File: 7756.json\n", + "Created File: 3316.json\n", + "Created File: 8926.json\n", + "Created File: 1223.json\n", + "Created File: 8112.json\n", + "Created File: 6736.json\n", + "Created File: 8964.json\n", + "Created File: 3364.json\n", + "Created File: 8898.json\n", + "Created File: 1839.json\n", + "Created File: 3993.json\n", + "Created File: 1960.json\n", + "Created File: 8625.json\n", + "Created File: 3130.json\n", + "Created File: 4913.json\n", + "Created File: 1672.json\n", + "Created File: 7200.json\n", + "Created File: 7438.json\n", + "Created File: 284.json\n", + "Created File: 4437.json\n", + "Created File: 4439.json\n", + "Created File: 8956.json\n", + "Created File: 3911.json\n", + "Created File: 8611.json\n", + "Created File: 8793.json\n", + "Created File: 1446.json\n", + "Created File: 10135.json\n", + "Created File: 4268.json\n", + "Created File: 10023.json\n", + "Created File: 8676.json\n", + "Created File: 7154.json\n", + "Created File: 7338.json\n", + "Created File: 971.json\n", + "Created File: 3205.json\n", + "Created File: 9840.json\n", + "Created File: 5635.json\n", + "Created File: 3028.json\n", + "Created File: 8189.json\n", + "Created File: 1566.json\n", + "Created File: 9165.json\n", + "Created File: 9728.json\n", + "Created File: 3033.json\n", + "Created File: 1136.json\n", + "Created File: 1411.json\n", + "Created File: 8914.json\n", + "Created File: 6695.json\n", + "Created File: 2887.json\n", + "Created File: 7924.json\n", + "Created File: 2416.json\n", + "Created File: 3431.json\n", + "Created File: 1708.json\n", + "Created File: 5071.json\n", + "Created File: 3569.json\n", + "Created File: 5142.json\n", + "Created File: 2190.json\n", + "Created File: 8891.json\n", + "Created File: 1198.json\n", + "Created File: 6543.json\n", + "Created File: 3587.json\n", + "Created File: 5260.json\n", + "Created File: 3491.json\n", + "Created File: 4483.json\n", + "Created File: 3081.json\n", + "Created File: 8867.json\n", + "Created File: 6363.json\n", + "Created File: 65.json\n", + "Created File: 2119.json\n", + "Created File: 4899.json\n", + "Created File: 1275.json\n", + "Created File: 4293.json\n", + "Created File: 2130.json\n", + "Created File: 1305.json\n", + "Created File: 3376.json\n", + "Created File: 4433.json\n", + "Created File: 5921.json\n", + "Created File: 6992.json\n", + "Created File: 3480.json\n", + "Created File: 5170.json\n", + "Created File: 10117.json\n", + "Created File: 3959.json\n", + "Created File: 8660.json\n", + "Created File: 1326.json\n", + "Created File: 2823.json\n", + "Created File: 924.json\n", + "Created File: 6263.json\n", + "Created File: 3643.json\n", + "Created File: 6143.json\n", + "Created File: 8395.json\n", + "Created File: 8705.json\n", + "Created File: 8879.json\n", + "Created File: 7013.json\n", + "Created File: 1649.json\n", + "Created File: 2843.json\n", + "Created File: 6681.json\n", + "Created File: 4672.json\n", + "Created File: 5328.json\n", + "Created File: 3522.json\n", + "Created File: 8858.json\n", + "Created File: 4973.json\n", + "Created File: 6204.json\n", + "Created File: 5544.json\n", + "Created File: 1383.json\n", + "Created File: 9178.json\n", + "Created File: 3022.json\n", + "Created File: 4210.json\n", + "Created File: 5703.json\n", + "Created File: 4393.json\n", + "Created File: 5879.json\n", + "Created File: 4163.json\n", + "Created File: 3440.json\n", + "Created File: 5938.json\n", + "Created File: 4687.json\n", + "Created File: 1938.json\n", + "Created File: 4876.json\n", + "Created File: 9001.json\n", + "Created File: 9915.json\n", + "Created File: 6558.json\n", + "Created File: 2603.json\n", + "Created File: 3175.json\n", + "Created File: 10029.json\n", + "Created File: 7320.json\n", + "Created File: 3324.json\n", + "Created File: 10044.json\n", + "Created File: 5195.json\n", + "Created File: 1322.json\n", + "Created File: 2846.json\n", + "Created File: 10090.json\n", + "Created File: 7395.json\n", + "Created File: 3279.json\n", + "Created File: 4460.json\n", + "Created File: 4972.json\n", + "Created File: 5932.json\n", + "Created File: 3730.json\n", + "Created File: 7499.json\n", + "Created File: 1137.json\n", + "Created File: 6449.json\n", + "Created File: 2810.json\n", + "Created File: 7201.json\n", + "Created File: 600.json\n", + "Created File: 2483.json\n", + "Created File: 2930.json\n", + "Created File: 6354.json\n", + "Created File: 2011.json\n", + "Created File: 5706.json\n", + "Created File: 8783.json\n", + "Created File: 3389.json\n", + "Created File: 4304.json\n", + "Created File: 6108.json\n", + "Created File: 10082.json\n", + "Created File: 10176.json\n", + "Created File: 5446.json\n", + "Created File: 4710.json\n", + "Created File: 363.json\n", + "Created File: 9902.json\n", + "Created File: 2892.json\n", + "Created File: 7350.json\n", + "Created File: 6987.json\n", + "Created File: 59.json\n", + "Created File: 5256.json\n", + "Created File: 1023.json\n", + "Created File: 5334.json\n", + "Created File: 5218.json\n", + "Created File: 2031.json\n", + "Created File: 7632.json\n", + "Created File: 8621.json\n", + "Created File: 313.json\n", + "Created File: 4441.json\n", + "Created File: 9967.json\n", + "Created File: 8247.json\n", + "Created File: 7073.json\n", + "Created File: 9177.json\n", + "Created File: 5903.json\n", + "Created File: 487.json\n", + "Created File: 2015.json\n", + "Created File: 1542.json\n", + "Created File: 5072.json\n", + "Created File: 9106.json\n", + "Created File: 4889.json\n", + "Created File: 1231.json\n", + "Created File: 2259.json\n", + "Created File: 6575.json\n", + "Created File: 5127.json\n", + "Created File: 4102.json\n", + "Created File: 1339.json\n", + "Created File: 10059.json\n", + "Created File: 4511.json\n", + "Created File: 6386.json\n", + "Created File: 4842.json\n", + "Created File: 4247.json\n", + "Created File: 5520.json\n", + "Created File: 5047.json\n", + "Created File: 5415.json\n", + "Created File: 9720.json\n", + "Created File: 8770.json\n", + "Created File: 4181.json\n", + "Created File: 8946.json\n", + "Created File: 2945.json\n", + "Created File: 9787.json\n", + "Created File: 9156.json\n", + "Created File: 1871.json\n", + "Created File: 7426.json\n", + "Created File: 3227.json\n" + ] + } + ], + "source": [ + "from decentralizepy.datasets.Celeba import Celeba\n", + "\n", + "f = Celeba(0,0,None)\n", + "\n", + "f.file_per_user('/home/risharma/leaf/data/celeba/data/train','/home/risharma/leaf/data/celeba/per_user_data/train')\n" + ] + }, { "cell_type": "code", "execution_count": null, @@ -1344,7 +3724,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.9" }, "orig_nbformat": 4 }, diff --git a/setup.cfg b/setup.cfg index 3faa1f3..fa12457 100644 --- a/setup.cfg +++ b/setup.cfg @@ -40,6 +40,7 @@ install_requires = zmq jsonlines pillow + pickle smallworld localconfig include_package_data = True diff --git a/src/decentralizepy/communication/Communication.py b/src/decentralizepy/communication/Communication.py index 4991d73..a854898 100644 --- a/src/decentralizepy/communication/Communication.py +++ b/src/decentralizepy/communication/Communication.py @@ -9,6 +9,7 @@ class Communication: self.machine_id = machine_id self.mapping = mapping self.uid = mapping.get_uid(rank, machine_id) + self.total_bytes = 0 def encrypt(self, data): raise NotImplementedError diff --git a/src/decentralizepy/communication/TCP.py b/src/decentralizepy/communication/TCP.py index ee24ae8..ade6104 100644 --- a/src/decentralizepy/communication/TCP.py +++ b/src/decentralizepy/communication/TCP.py @@ -108,9 +108,12 @@ class TCP(Communication): def send(self, uid, data): to_send = self.encrypt(data) + data_size = len(to_send) + self.total_bytes += data_size id = str(uid).encode() self.peer_sockets[id].send(to_send) logging.debug("{} sent the message to {}.".format(self.uid, uid)) + logging.info("Sent this round: {}".format(data_size)) def disconnect_neighbors(self): if not self.sent_disconnections: diff --git a/src/decentralizepy/datasets/Celeba.py b/src/decentralizepy/datasets/Celeba.py new file mode 100644 index 0000000..687d58f --- /dev/null +++ b/src/decentralizepy/datasets/Celeba.py @@ -0,0 +1,337 @@ +import json +import logging +import os +from collections import defaultdict + +import matplotlib.pyplot as plt +import numpy as np +import torch +import torch.nn.functional as F +from PIL import Image +from torch import nn +from torch.utils.data import DataLoader + +import decentralizepy.utils as utils +from decentralizepy.datasets.Data import Data +from decentralizepy.datasets.Dataset import Dataset +from decentralizepy.datasets.Partitioner import DataPartitioner +from decentralizepy.models.Model import Model + +IMAGE_DIM = 84 +CHANNELS = 3 +NUM_CLASSES = 2 + + +class Celeba(Dataset): + """ + Class for the Celeba dataset + """ + + def __read_file__(self, file_path): + with open(file_path, "r") as inf: + client_data = json.load(inf) + return ( + client_data["users"], + client_data["num_samples"], + client_data["user_data"], + ) + + def __read_dir__(self, data_dir): + """ + Function to read all the FEMNIST data files in the directory + Parameters + ---------- + data_dir : str + Path to the folder containing the data files + Returns + ------- + 3-tuple + A tuple containing list of clients, number of samples per client, + and the data items per client + """ + clients = [] + num_samples = [] + data = defaultdict(lambda: None) + + files = os.listdir(data_dir) + files = [f for f in files if f.endswith(".json")] + for f in files: + file_path = os.path.join(data_dir, f) + u, n, d = self.__read_file__(file_path) + clients.extend(u) + num_samples.extend(n) + data.update(d) + return clients, num_samples, data + + def file_per_user(self, dir, write_dir): + clients, num_samples, train_data = self.__read_dir__(dir) + for index, client in enumerate(clients): + my_data = dict() + my_data["users"] = [client] + my_data["num_samples"] = num_samples[index] + my_samples = {"x": train_data[client]["x"], "y": train_data[client]["y"]} + my_data["user_data"] = {client: my_samples} + with open(os.path.join(write_dir, client + ".json"), "w") as of: + json.dump(my_data, of) + print("Created File: ", client + ".json") + + def load_trainset(self): + logging.info("Loading training set.") + files = os.listdir(self.train_dir) + files = [f for f in files if f.endswith(".json")] + files.sort() + c_len = len(files) + + # clients, num_samples, train_data = self.__read_dir__(self.train_dir) + + if self.sizes == None: # Equal distribution of data among processes + e = c_len // self.n_procs + frac = e / c_len + self.sizes = [frac] * self.n_procs + self.sizes[-1] += 1.0 - frac * self.n_procs + logging.debug("Size fractions: {}".format(self.sizes)) + + self.uid = self.mapping.get_uid(self.rank, self.machine_id) + my_clients = DataPartitioner(files, self.sizes).use(self.uid) + my_train_data = {"x": [], "y": []} + self.clients = [] + self.num_samples = [] + logging.debug("Clients Length: %d", c_len) + logging.debug("My_clients_len: %d", my_clients.__len__()) + for i in range(my_clients.__len__()): + cur_file = my_clients.__getitem__(i) + + clients, _, train_data = self.__read_file__( + os.path.join(self.train_dir, cur_file) + ) + for cur_client in clients: + self.clients.append(cur_client) + my_train_data["x"].extend(self.process_x(train_data[cur_client]["x"])) + my_train_data["y"].extend(train_data[cur_client]["y"]) + self.num_samples.append(len(train_data[cur_client]["y"])) + self.train_x = ( + np.array(my_train_data["x"], dtype=np.dtype("float32")) + .reshape(-1, IMAGE_DIM, IMAGE_DIM, CHANNELS) + .transpose(0, 3, 1, 2) # Channel first: torch + ) + self.train_y = np.array(my_train_data["y"], dtype=np.dtype("int64")).reshape(-1) + logging.debug("train_x.shape: %s", str(self.train_x.shape)) + logging.debug("train_y.shape: %s", str(self.train_y.shape)) + assert self.train_x.shape[0] == self.train_y.shape[0] + assert self.train_x.shape[0] > 0 + + def load_testset(self): + logging.info("Loading testing set.") + _, _, d = self.__read_dir__(self.test_dir) + test_x = [] + test_y = [] + for test_data in d.values(): + test_x.extend(self.process_x(test_data["x"])) + test_y.extend(test_data["y"]) + self.test_x = ( + np.array(test_x, dtype=np.dtype("float32")) + .reshape(-1, IMAGE_DIM, IMAGE_DIM, CHANNELS) + .transpose(0, 3, 1, 2) + ) + self.test_y = np.array(test_y, dtype=np.dtype("int64")).reshape(-1) + logging.debug("test_x.shape: %s", str(self.test_x.shape)) + logging.debug("test_y.shape: %s", str(self.test_y.shape)) + assert self.test_x.shape[0] == self.test_y.shape[0] + assert self.test_x.shape[0] > 0 + + def __init__( + self, + rank, + machine_id, + mapping, + n_procs="", + train_dir="", + test_dir="", + images_dir="", + sizes="", + test_batch_size=128, + ): + """ + Constructor which reads the data files, instantiates and partitions the dataset + Parameters + ---------- + rank : int + Rank of the current process (to get the partition). Default value is assigned 0 + n_procs : int, optional + The number of processes among which to divide the data. Default value is assigned 1 + train_dir : str, optional + Path to the training data files. Required to instantiate the training set + The training set is partitioned according to n_procs and sizes + test_dir : str. optional + Path to the testing data files Required to instantiate the testing set + sizes : list(int), optional + A list of fractions specifying how much data to alot each process. Sum of fractions should be 1.0 + By default, each process gets an equal amount. + """ + super().__init__( + rank, + machine_id, + mapping, + n_procs, + train_dir, + test_dir, + sizes, + test_batch_size, + ) + self.IMAGES_DIR = utils.conditional_value(images_dir, "", None) + assert self.IMAGES_DIR != None + + if self.__training__: + self.load_trainset() + + if self.__testing__: + self.load_testset() + + # TODO: Add Validation + + def process_x(self, raw_x_batch): + x_batch = [self._load_image(i) for i in raw_x_batch] + x_batch = np.array(x_batch) + return x_batch + + def _load_image(self, img_name): + img = Image.open(os.path.join(self.IMAGES_DIR, img_name[:-4] + ".png")) + img = img.resize((IMAGE_DIM, IMAGE_DIM)).convert("RGB") + return np.array(img) + + def get_client_ids(self): + """ + Function to retrieve all the clients of the current process + Returns + ------- + list(str) + A list of strings of the client ids. + """ + return self.clients + + def get_client_id(self, i): + """ + Function to get the client id of the ith sample + Parameters + ---------- + i : int + Index of the sample + Returns + ------- + str + Client ID + Raises + ------ + IndexError + If the sample index is out of bounds + """ + lb = 0 + for j in range(len(self.clients)): + if i < lb + self.num_samples[j]: + return self.clients[j] + + raise IndexError("i is out of bounds!") + + def get_trainset(self, batch_size=1, shuffle=False): + """ + Function to get the training set + Parameters + ---------- + batch_size : int, optional + Batch size for learning + Returns + ------- + torch.utils.Dataset(decentralizepy.datasets.Data) + Raises + ------ + RuntimeError + If the training set was not initialized + """ + if self.__training__: + return DataLoader( + Data(self.train_x, self.train_y), batch_size=batch_size, shuffle=shuffle + ) + raise RuntimeError("Training set not initialized!") + + def get_testset(self): + """ + Function to get the test set + Returns + ------- + torch.utils.Dataset(decentralizepy.datasets.Data) + Raises + ------ + RuntimeError + If the test set was not initialized + """ + if self.__testing__: + return DataLoader( + Data(self.test_x, self.test_y), batch_size=self.test_batch_size + ) + raise RuntimeError("Test set not initialized!") + + def imshow(self, img): + npimg = img.numpy() + plt.imshow(np.transpose(npimg, (1, 2, 0))) + plt.show() + + def test(self, model, loss): + testloader = self.get_testset() + + logging.debug("Test Loader instantiated.") + + correct_pred = [0 for _ in range(NUM_CLASSES)] + total_pred = [0 for _ in range(NUM_CLASSES)] + + total_correct = 0 + total_predicted = 0 + + with torch.no_grad(): + loss_val = 0.0 + count = 0 + for elems, labels in testloader: + outputs = model(elems) + loss_val += loss(outputs, labels).item() + count += 1 + _, predictions = torch.max(outputs, 1) + for label, prediction in zip(labels, predictions): + logging.debug("{} predicted as {}".format(label, prediction)) + if label == prediction: + correct_pred[label] += 1 + total_correct += 1 + total_pred[label] += 1 + total_predicted += 1 + + logging.debug("Predicted on the test set") + + for key, value in enumerate(correct_pred): + if total_pred[key] != 0: + accuracy = 100 * float(value) / total_pred[key] + else: + accuracy = 100.0 + logging.debug("Accuracy for class {} is: {:.1f} %".format(key, accuracy)) + + accuracy = 100 * float(total_correct) / total_predicted + loss_val = loss_val / count + logging.info("Overall accuracy is: {:.1f} %".format(accuracy)) + return accuracy, loss_val + + +class CNN(Model): + def __init__(self): + super().__init__() + self.conv1 = nn.Conv2d(CHANNELS, 32, 3, padding="same") + self.pool = nn.MaxPool2d(2, 2) + self.conv2 = nn.Conv2d(32, 32, 3, padding="same") + self.conv3 = nn.Conv2d(32, 32, 3, padding="same") + self.conv4 = nn.Conv2d(32, 32, 3, padding="same") + self.fc1 = nn.Linear(5 * 5 * 32, NUM_CLASSES) + + def forward(self, x): + x = F.relu(self.pool(self.conv1(x))) + x = F.relu(self.pool(self.conv2(x))) + x = F.relu(self.pool(self.conv3(x))) + x = F.relu(self.pool(self.conv4(x))) + x = torch.flatten(x, 1) + x = self.fc1(x) + return x diff --git a/src/decentralizepy/datasets/Dataset.py b/src/decentralizepy/datasets/Dataset.py index 7a8e4a3..033165c 100644 --- a/src/decentralizepy/datasets/Dataset.py +++ b/src/decentralizepy/datasets/Dataset.py @@ -9,7 +9,9 @@ class Dataset: def __init__( self, - rank="", + rank, + machine_id, + mapping, n_procs="", train_dir="", test_dir="", @@ -33,7 +35,9 @@ class Dataset: A list of fractions specifying how much data to alot each process. Sum of fractions should be 1.0 By default, each process gets an equal amount. """ - self.rank = utils.conditional_value(rank, "", 0) + self.rank = rank + self.machine_id = machine_id + self.mapping = mapping self.n_procs = utils.conditional_value(n_procs, "", 1) self.train_dir = utils.conditional_value(train_dir, "", None) self.test_dir = utils.conditional_value(test_dir, "", None) diff --git a/src/decentralizepy/datasets/Femnist.py b/src/decentralizepy/datasets/Femnist.py index ad60c30..3bdf6cd 100644 --- a/src/decentralizepy/datasets/Femnist.py +++ b/src/decentralizepy/datasets/Femnist.py @@ -120,10 +120,10 @@ class Femnist(Dataset): def load_testset(self): logging.info("Loading testing set.") - _, _, test_data = self.__read_dir__(self.test_dir) + _, _, d = self.__read_dir__(self.test_dir) test_x = [] test_y = [] - for test_data in test_data.values(): + for test_data in d.values(): for x in test_data["x"]: test_x.append(x) for y in test_data["y"]: @@ -141,7 +141,9 @@ class Femnist(Dataset): def __init__( self, - rank=0, + rank, + machine_id, + mapping, n_procs="", train_dir="", test_dir="", @@ -152,7 +154,7 @@ class Femnist(Dataset): Constructor which reads the data files, instantiates and partitions the dataset Parameters ---------- - rank : int, optional + rank : int Rank of the current process (to get the partition). Default value is assigned 0 n_procs : int, optional The number of processes among which to divide the data. Default value is assigned 1 @@ -165,7 +167,16 @@ class Femnist(Dataset): A list of fractions specifying how much data to alot each process. Sum of fractions should be 1.0 By default, each process gets an equal amount. """ - super().__init__(rank, n_procs, train_dir, test_dir, sizes, test_batch_size) + super().__init__( + rank, + machine_id, + mapping, + n_procs, + train_dir, + test_dir, + sizes, + test_batch_size, + ) if self.__training__: self.load_trainset() diff --git a/src/decentralizepy/node/Node.py b/src/decentralizepy/node/Node.py index d6897b4..40fe8b5 100644 --- a/src/decentralizepy/node/Node.py +++ b/src/decentralizepy/node/Node.py @@ -100,7 +100,9 @@ class Node: dataset_params = utils.remove_keys( dataset_configs, ["dataset_package", "dataset_class", "model_class"] ) - self.dataset = dataset_class(rank, **dataset_params) + self.dataset = dataset_class( + self.rank, self.machine_id, self.mapping, **dataset_params + ) logging.info("Dataset instantiation complete.") @@ -193,9 +195,15 @@ class Node: ) as inf: results_dict = json.load(inf) else: - results_dict = {"train_loss": {}, "test_loss": {}, "test_acc": {}} + results_dict = { + "train_loss": {}, + "test_loss": {}, + "test_acc": {}, + "total_bytes": {}, + } results_dict["train_loss"][iteration + 1] = loss_after_sharing + results_dict["total_bytes"][iteration + 1] = self.communication.total_bytes self.save_plot( results_dict["train_loss"], -- GitLab