You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.6 MiB
2.6 MiB
In [217]:
import sys sys.path.insert(0, "/wd/lut_reproduce/src/")
In [4]:
from PIL import Image import numpy as np def PSNR(y_true, y_pred, shave_border=4): target_data = np.array(y_true, dtype=np.float32) ref_data = np.array(y_pred, dtype=np.float32) diff = ref_data - target_data if shave_border > 0: diff = diff[shave_border:-shave_border, shave_border:-shave_border] rmse = np.sqrt(np.mean(np.power(diff, 2))) return 20 * np.log10(255. / rmse) def _rgb2ycbcr(img, maxVal=255): O = np.array([[16], [128], [128]]) T = np.array([[0.256788235294118, 0.504129411764706, 0.097905882352941], [-0.148223529411765, -0.290992156862745, 0.439215686274510], [0.439215686274510, -0.367788235294118, -0.071427450980392]]) if maxVal == 1: O = O / 255.0 t = np.reshape(img, (img.shape[0] * img.shape[1], img.shape[2])) t = np.dot(t, np.transpose(T)) t[:, 0] += O[0] t[:, 1] += O[1] t[:, 2] += O[2] ycbcr = np.reshape(t, [img.shape[0], img.shape[1], img.shape[2]]) return ycbcr image = np.array(Image.open("./data/Set14/HR/monarch.png")) np.random.seed(2) noise = np.random.randint(-5,5,size=image.shape) def with_noise(image, noise): return (image + noise).clip(0,255).astype(np.uint8) a = _rgb2ycbcr(image)[:,:,0] b = _rgb2ycbcr(with_noise(image, noise))[:,:,0] image = np.array(Image.open("./data/Set14/HR/monarch.png").convert("YCbCr").getchannel(0)) c = image d = with_noise(image, noise[:,:,0]) image = np.array(Image.open("./data/Set14/HR/monarch.png")) y = _rgb2ycbcr(image)[:,:,0] e = y f = with_noise(y, noise[:,:,0]) noise_before_rgb2y = PSNR(a, b) noise_after_pil_rgb2y = PSNR(c, d) noise_after_mutlut_rgb2y = PSNR(e, f) # 43.49568901720914, 38.837762584624734, 38.445220463904704 noise_before_rgb2y, noise_after_pil_rgb2y, noise_after_mutlut_rgb2y
Out[4]:
(43.49568901720914, 38.837762584624734, 38.445220463904704)
In [219]:
217728*2*2, 3*1*126*192*2*2
Out[219]:
(870912, 290304)
In [220]:
torch.arange(start=0, end=256, step=16)
--------------------------------------------------------------------------- NameError Traceback (most recent call last) /wd/lut_reproduce/explore.ipynb Cell 4 line 1 ----> <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#W3sdnNjb2RlLXJlbW90ZQ%3D%3D?line=0'>1</a> torch.arange(start=0, end=256, step=16) NameError: name 'torch' is not defined
In [ ]:
import torch import torch.nn.functional as F n = 4 a = (torch.arange(n**2) + torch.arange(start=0, end=16**2, step=16)).view(1,1,n,n).type(torch.float32) def bit_plane_slicing(x, bit_mask='11110000'): m = int(bit_mask, 2) masks = [m, 255-m] images = [] for mask in masks: images.append((x.type(torch.LongTensor) & mask).type(torch.FloatTensor).to(x.device)) return images bit_plane_slicing(a)
Out[ ]:
[tensor([[[[ 0., 16., 32., 48.], [ 64., 80., 96., 112.], [128., 144., 160., 176.], [192., 208., 224., 240.]]]]), tensor([[[[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [12., 13., 14., 15.]]]])]
In [ ]:
lsb = a % 16 msb = a - lsb msb, lsb
Out[ ]:
(tensor([[[[ 0., 16., 32., 48.], [ 64., 80., 96., 112.], [128., 144., 160., 176.], [192., 208., 224., 240.]]]]), tensor([[[[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [12., 13., 14., 15.]]]]))
In [ ]:
# sys.path.insert(0, "/wd/luts/src/") import numpy as np from models import SaveCheckpoint from models.sdylut import SDYLutR90x2 from pathlib import Path path1s = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s1_s.npy") path1d = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s1_d.npy") path1y = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s1_y.npy") path2s = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s2_s.npy") path2d = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s2_d.npy") path2y = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s2_y.npy") lut1s = np.load(path1s).reshape(17,17,17,17,1,1).astype(np.int8) lut1s = np.flip(lut1s, axis=[0,2]).copy() lut1d = np.load(path1d).reshape(17,17,17,17,1,1).astype(np.int8) lut1d = np.flip(lut1d, axis=[0,2]).copy() lut1y = np.load(path1y).reshape(17,17,17,17,1,1).astype(np.int8) lut1y = np.flip(lut1y, axis=[0,2]).copy() lut2s = np.load(path2s).reshape(17,17,17,17,4,4).astype(np.int8) lut2s = np.flip(lut2s, axis=[0,2]).copy() lut2d = np.load(path2d).reshape(17,17,17,17,4,4).astype(np.int8) lut2d = np.flip(lut2d, axis=[0,2]).copy() lut2y = np.load(path2y).reshape(17,17,17,17,4,4).astype(np.int8) lut2y = np.flip(lut2y, axis=[0,2]).copy() m = SDYLutR90x2.init_from_numpy(stage1_S=lut1s, stage1_D=lut1d, stage1_Y=lut1y, stage2_S=lut2s, stage2_D=lut2d, stage2_Y=lut2y) SaveCheckpoint(model=m, path=f"./models/MuLUT_ft_x4_4bit_int8.pt") m
Out[ ]:
SDYLutR90x2 stage1_S size: torch.Size([17, 17, 17, 17, 1, 1]) stage1_D size: torch.Size([17, 17, 17, 17, 1, 1]) stage1_Y size: torch.Size([17, 17, 17, 17, 1, 1]) stage2_S size: torch.Size([17, 17, 17, 17, 4, 4]) stage2_D size: torch.Size([17, 17, 17, 17, 4, 4]) stage2_Y size: torch.Size([17, 17, 17, 17, 4, 4])
In [ ]:
from einops import rearrange f, a = plt.subplots(1,1, figsize=(9*5, 9*5)) gg = lut1s.reshape(17**4, 1, 1) gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17) a.imshow(gg)
Out[ ]:
<matplotlib.image.AxesImage at 0x7fec35dbd300>
In [ ]:
from models import LoadCheckpoint # m = LoadCheckpoint("./models/SDYNetx2_DIV2K/checkpoints/SDYLutx2_0.pth") m = LoadCheckpoint("./models/HDBHNet_RGB_DIV2K_x4/checkpoints/HDBHNet_15000.pth") m.stage1_S
Out[ ]:
UpscaleBlock( (embed): Linear(in_features=4, out_features=64, bias=True) (linear_projections): ModuleList( (0): Linear(in_features=64, out_features=64, bias=True) (1): Linear(in_features=128, out_features=64, bias=True) (2): Linear(in_features=192, out_features=64, bias=True) (3): Linear(in_features=256, out_features=64, bias=True) ) (project_channels): Linear(in_features=320, out_features=16, bias=True) )
In [ ]:
from common.lut import transfer_2x2_input_SxS_output transfer_2x2_input_SxS_output?
Signature: transfer_2x2_input_SxS_output( block, quantization_interval=16, batch_size=1024, max_value=255, ) Docstring: <no docstring> File: /wd/lut_reproduce/src/common/lut.py Type: function
In [ ]:
lut = transfer_2x2_input_SxS_output(m.stage1_S, quantization_interval=1, max_value=15)
UpscaleBlock 83521/83521
In [ ]:
import torch values1d = torch.arange(0, 256, 16, dtype=torch.uint8) values1d = torch.cat([values1d, torch.tensor([256])]) values = torch.cartesian_prod(*([values1d]*4)).view(-1, 1, 4)
In [ ]:
values[32000]
Out[ ]:
tensor([[ 96, 128, 192, 96]])
In [ ]:
from einops import rearrange import numpy as np import matplotlib.pyplot as plt f, a = plt.subplots(1,1, figsize=(9*5, 9*5)) gg = lut[:,:,:,:,2,0].reshape(17**4, 1, 1) gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17) a.imshow(gg)
Out[ ]:
<matplotlib.image.AxesImage at 0x7fc2a7bd1030>
In [ ]:
import numpy as np import matplotlib.pyplot as plt
In [ ]:
from models import LoadLutCheckpoint
In [ ]:
lut = LoadLutCheckpoint("/wd/luts/models/srnet2x2/luts/0.pth")
dict_keys(['model', 'scale', 'quantization_interval', 'state_dict'])
Out[ ]:
SRLut2x2 lut size: torch.Size([17, 17, 17, 17, 4, 4])
In [ ]:
# [lut.stage_lut[(i+8)%17,i,i,(i-8)%17] for i in range(17)] import torch # torch.floor_divide(torch.arange(256), 17) # torch.arange(256) % 17 coefs = (torch.arange(17) % 17) / 17 lut.stage_lut[0,0,0,0], lut.stage_lut[1,1,1,1], coefs, lut.stage_lut[0,0,0,0] + coefs[9]*(lut.stage_lut[1,1,1,1]-lut.stage_lut[0,0,0,0])
Out[ ]:
(tensor([[1., 1., 1., 1.], [1., 1., 1., 0.], [1., 1., 1., 0.], [1., 1., 1., 1.]], grad_fn=<SelectBackward0>), tensor([[17., 16., 16., 16.], [17., 16., 16., 16.], [17., 17., 16., 16.], [17., 17., 16., 16.]], grad_fn=<SelectBackward0>), tensor([0.0000, 0.0588, 0.1176, 0.1765, 0.2353, 0.2941, 0.3529, 0.4118, 0.4706, 0.5294, 0.5882, 0.6471, 0.7059, 0.7647, 0.8235, 0.8824, 0.9412]), tensor([[9.4706, 8.9412, 8.9412, 8.9412], [9.4706, 8.9412, 8.9412, 8.4706], [9.4706, 9.4706, 8.9412, 8.4706], [9.4706, 9.4706, 8.9412, 8.9412]], grad_fn=<AddBackward0>))
In [ ]:
luts = np.load("/wd/luts/models/RCNetTest/luts/RCLutTest_200000_x4_4.0bit_int8.npz", allow_pickle=True) state_dict = luts['state_dict'].item() state_dict
Out[ ]:
{'stage1_lut': array([[131, 131, 130, 130, 129, 129, 128, 128, 127, 126, 126, 125, 125, 124, 124, 123, 255], [115, 117, 118, 120, 121, 123, 124, 126, 127, 129, 130, 131, 133, 134, 136, 137, 255], [153, 150, 147, 143, 140, 137, 134, 130, 127, 124, 120, 117, 114, 110, 107, 104, 255], [115, 117, 118, 120, 121, 123, 124, 126, 127, 129, 130, 132, 133, 134, 136, 137, 255], [129, 129, 129, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 255], [115, 117, 118, 120, 121, 123, 124, 126, 127, 129, 130, 131, 133, 134, 136, 137, 255], [160, 156, 152, 148, 144, 140, 135, 131, 127, 123, 118, 114, 110, 106, 102, 97, 255], [ 44, 52, 60, 70, 80, 91, 103, 115, 127, 140, 152, 164, 175, 185, 194, 203, 255], [178, 172, 166, 160, 153, 147, 140, 134, 127, 120, 113, 107, 100, 94, 88, 82, 255], [112, 114, 116, 118, 120, 122, 123, 125, 127, 129, 131, 133, 134, 136, 138, 140, 255], [153, 150, 147, 143, 140, 137, 134, 130, 127, 124, 120, 117, 114, 110, 107, 104, 255], [ 44, 52, 61, 70, 80, 91, 103, 115, 127, 140, 152, 163, 174, 185, 194, 202, 255], [ 14, 20, 27, 37, 50, 66, 85, 106, 128, 150, 171, 189, 205, 217, 227, 235, 255], [125, 125, 125, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 129, 129, 255], [130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 255], [115, 117, 118, 120, 121, 123, 124, 126, 127, 129, 130, 132, 133, 134, 136, 137, 255], [178, 172, 166, 160, 153, 147, 140, 134, 127, 120, 113, 107, 100, 94, 88, 82, 255], [125, 125, 125, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 129, 129, 255], [127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 255], [126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 255], [129, 129, 129, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 125, 125, 255], [113, 114, 116, 118, 120, 122, 123, 125, 127, 129, 131, 133, 134, 136, 138, 140, 255], [130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 255], [126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 255], [127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 255]], dtype=uint8), 'stage1_dense_upscale_lut': array([[[[[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 3, 1, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 3, 1, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 2, 1, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 1], [ 61, 68, 42, 49]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 1], [ 81, 77, 49, 61]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 7, 2, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 7, 2, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 10, 4, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 1], [122, 104, 50, 52]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 1, 1], [125, 107, 62, 78]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 4, 1, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 4, 1, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 4, 1, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 1], [ 56, 44, 22, 37]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 1], [ 84, 62, 32, 51]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 10, 3, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 10, 3, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 18, 5, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 0], [124, 74, 26, 33]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 1], [127, 89, 43, 62]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 5, 1, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 5, 2, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 5, 2, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 1], [ 93, 64, 30, 49]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 1], [110, 83, 44, 70]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 13, 4, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 15, 5, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 31, 10, 1, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 1], [151, 96, 38, 48]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 1], [158, 103, 48, 71]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], ..., [[[[ 0, 0, 0, 1], [ 0, 0, 0, 1], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 2], [ 0, 0, 0, 1], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 1], [ 0, 0, 0, 1], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 40], [ 0, 0, 0, 71], [ 0, 0, 1, 80], [ 0, 0, 2, 126]], [[ 0, 0, 0, 28], [ 0, 0, 0, 77], [ 0, 0, 1, 107], [ 0, 0, 2, 157]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 2], [ 0, 0, 0, 1], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 4], [ 0, 0, 0, 2], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 3], [ 0, 0, 0, 2], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 52], [ 0, 0, 0, 116], [ 0, 0, 1, 133], [ 0, 0, 2, 151]], [[ 0, 0, 0, 39], [ 0, 0, 0, 102], [ 0, 0, 1, 138], [ 0, 0, 3, 176]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 5], [ 0, 0, 0, 2], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 5], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 4], [ 0, 0, 0, 3], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 71], [ 0, 0, 1, 152], [ 0, 0, 1, 172], [ 0, 0, 3, 187]], [[ 0, 0, 0, 56], [ 0, 0, 1, 137], [ 0, 0, 1, 175], [ 0, 0, 4, 206]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 0, 18, 139, 249], [ 8, 160, 233, 248], [ 83, 226, 235, 241], [211, 222, 191, 155]], [[ 1, 17, 136, 250], [ 9, 164, 233, 249], [ 91, 231, 238, 244], [221, 230, 208, 189]], [[ 0, 21, 168, 253], [ 10, 179, 240, 252], [ 82, 232, 239, 247], [225, 238, 223, 209]], ..., [[ 2, 21, 168, 254], [ 20, 184, 248, 255], [127, 244, 253, 255], [252, 255, 255, 255]], [[ 3, 24, 151, 254], [ 29, 189, 244, 255], [154, 246, 253, 255], [253, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 1, 39, 177, 252], [ 19, 198, 242, 252], [134, 241, 243, 246], [242, 245, 226, 188]], [[ 2, 51, 195, 253], [ 27, 208, 243, 253], [136, 241, 243, 248], [244, 248, 235, 215]], [[ 1, 34, 179, 253], [ 19, 200, 242, 253], [123, 241, 243, 248], [240, 246, 236, 225]], ..., [[ 4, 35, 200, 255], [ 40, 209, 250, 255], [173, 248, 254, 255], [254, 255, 255, 255]], [[ 4, 33, 181, 254], [ 45, 206, 248, 255], [187, 249, 254, 255], [254, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[ 0, 0, 0, 7], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 6], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 6], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 1, 110], [ 0, 0, 1, 157], [ 0, 0, 2, 150], [ 0, 0, 3, 170]], [[ 0, 0, 1, 86], [ 0, 0, 1, 162], [ 0, 0, 2, 171], [ 0, 0, 4, 182]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 7], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 7], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 10], [ 0, 0, 0, 5], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], ..., [[ 0, 0, 1, 135], [ 0, 0, 2, 201], [ 0, 0, 2, 197], [ 0, 0, 3, 187]], [[ 0, 0, 1, 120], [ 0, 0, 2, 203], [ 0, 0, 3, 209], [ 0, 0, 6, 205]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 19], [ 0, 0, 0, 8], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 13], [ 0, 0, 0, 7], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 14], [ 0, 0, 0, 9], [ 0, 0, 0, 2], [ 0, 0, 0, 0]], ..., [[ 0, 0, 1, 133], [ 0, 0, 2, 209], [ 0, 0, 4, 217], [ 0, 0, 6, 215]], [[ 0, 0, 1, 132], [ 0, 0, 2, 213], [ 0, 0, 4, 227], [ 0, 1, 10, 230]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 1, 33, 205, 254], [ 12, 207, 249, 254], [ 99, 240, 247, 249], [226, 232, 208, 184]], [[ 0, 26, 203, 254], [ 12, 210, 250, 254], [111, 243, 248, 251], [228, 235, 216, 201]], [[ 0, 21, 190, 254], [ 9, 193, 248, 254], [ 72, 236, 247, 251], [220, 239, 231, 222]], ..., [[ 4, 55, 231, 255], [ 36, 219, 253, 255], [153, 247, 254, 255], [252, 255, 255, 255]], [[ 4, 59, 231, 255], [ 38, 219, 253, 255], [163, 248, 254, 255], [253, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 1, 48, 211, 254], [ 21, 220, 249, 254], [140, 245, 248, 250], [242, 244, 226, 200]], [[ 1, 52, 220, 254], [ 23, 222, 250, 254], [132, 244, 247, 250], [243, 246, 233, 213]], [[ 1, 51, 221, 254], [ 31, 230, 252, 254], [148, 248, 251, 253], [244, 250, 244, 234]], ..., [[ 6, 68, 233, 255], [ 56, 226, 253, 255], [196, 250, 254, 255], [254, 255, 255, 255]], [[ 6, 68, 231, 255], [ 54, 225, 253, 255], [198, 251, 254, 255], [254, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]]], [[[[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 4, 1, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 6, 2, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 5, 2, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 1], [117, 110, 66, 62]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 1, 1], [117, 121, 80, 81]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 9, 2, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 11, 3, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 17, 6, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 2, 1, 1, 1], [162, 146, 81, 73]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 1, 1], [155, 135, 85, 97]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 5, 1, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 6, 2, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 7, 2, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 1, 1], [128, 109, 63, 77]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 1, 2], [149, 135, 89, 111]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 16, 4, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 17, 4, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 28, 8, 1, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 3, 1, 0, 1], [174, 123, 55, 62]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 2, 1, 1, 1], [190, 147, 82, 105]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 10, 3, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 9, 3, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 9, 3, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 1], [134, 94, 45, 63]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 1, 2], [161, 130, 74, 105]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 0, 0, 0], [ 22, 6, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 0, 0, 0], [ 23, 7, 1, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 0, 0, 0], [ 48, 14, 1, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 3, 2, 1, 1], [186, 125, 54, 70]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 3, 2, 1, 2], [201, 152, 81, 111]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], ..., [[[[ 0, 0, 0, 2], [ 0, 0, 0, 1], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 3], [ 0, 0, 0, 1], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 5], [ 0, 0, 0, 2], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 1, 65], [ 0, 0, 1, 111], [ 0, 0, 1, 113], [ 0, 0, 2, 159]], [[ 0, 0, 1, 65], [ 0, 0, 1, 136], [ 0, 0, 2, 149], [ 0, 0, 3, 177]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 5], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 7], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 7], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 1, 84], [ 0, 0, 1, 162], [ 0, 0, 2, 169], [ 0, 0, 4, 172]], [[ 0, 0, 1, 87], [ 0, 0, 1, 175], [ 0, 0, 3, 189], [ 0, 0, 6, 201]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 8], [ 0, 0, 0, 4], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 8], [ 0, 0, 0, 4], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 8], [ 0, 0, 0, 4], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 1, 120], [ 0, 0, 2, 199], [ 0, 0, 3, 207], [ 0, 0, 6, 204]], [[ 0, 0, 1, 89], [ 0, 0, 1, 178], [ 0, 0, 3, 202], [ 0, 0, 7, 217]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 1, 35, 202, 254], [ 26, 219, 247, 253], [166, 246, 245, 243], [232, 236, 203, 125]], [[ 1, 46, 206, 254], [ 20, 215, 248, 253], [140, 244, 246, 248], [240, 241, 218, 190]], [[ 2, 62, 220, 254], [ 27, 220, 250, 254], [132, 244, 248, 251], [242, 248, 239, 225]], ..., [[ 5, 63, 229, 255], [ 50, 221, 252, 255], [190, 250, 254, 255], [254, 255, 255, 255]], [[ 7, 64, 215, 255], [ 60, 221, 251, 255], [199, 251, 254, 255], [254, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 2, 60, 220, 254], [ 46, 234, 250, 254], [206, 250, 248, 246], [247, 248, 226, 158]], [[ 2, 81, 229, 254], [ 39, 232, 251, 254], [181, 248, 249, 250], [248, 248, 232, 210]], [[ 3, 97, 235, 255], [ 38, 233, 252, 254], [171, 249, 251, 253], [250, 252, 248, 242]], ..., [[ 6, 71, 232, 255], [ 60, 226, 253, 255], [212, 252, 255, 255], [254, 255, 255, 255]], [[ 6, 64, 224, 255], [ 58, 221, 252, 255], [212, 252, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[ 0, 0, 0, 10], [ 0, 0, 0, 5], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 10], [ 0, 0, 0, 5], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 9], [ 0, 0, 0, 4], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 2, 148], [ 0, 0, 2, 190], [ 0, 0, 3, 181], [ 0, 0, 4, 199]], [[ 0, 0, 1, 122], [ 0, 0, 2, 187], [ 0, 0, 3, 192], [ 0, 0, 6, 210]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 17], [ 0, 0, 0, 7], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 14], [ 0, 0, 0, 7], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 17], [ 0, 0, 0, 8], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], ..., [[ 0, 0, 2, 164], [ 0, 0, 3, 211], [ 0, 0, 4, 209], [ 0, 0, 6, 209]], [[ 0, 0, 2, 152], [ 0, 0, 3, 217], [ 0, 0, 5, 220], [ 0, 1, 10, 223]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 34], [ 0, 0, 0, 13], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 29], [ 0, 0, 0, 12], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 36], [ 0, 0, 0, 15], [ 0, 0, 0, 2], [ 0, 0, 0, 0]], ..., [[ 0, 0, 2, 178], [ 0, 0, 4, 230], [ 0, 0, 6, 230], [ 0, 1, 9, 223]], [[ 0, 0, 3, 187], [ 0, 0, 5, 235], [ 0, 1, 8, 236], [ 0, 1, 13, 232]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 1, 51, 226, 254], [ 34, 233, 252, 254], [170, 249, 250, 250], [235, 240, 218, 161]], [[ 1, 58, 226, 254], [ 25, 228, 251, 254], [146, 247, 250, 252], [238, 243, 230, 212]], [[ 1, 71, 236, 255], [ 27, 233, 253, 255], [140, 248, 251, 253], [242, 247, 238, 228]], ..., [[ 7, 98, 245, 255], [ 65, 237, 254, 255], [198, 252, 255, 255], [254, 255, 255, 255]], [[ 6, 88, 243, 255], [ 54, 233, 254, 255], [192, 252, 255, 255], [254, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 2, 73, 235, 255], [ 54, 241, 253, 255], [200, 251, 251, 251], [247, 249, 235, 192]], [[ 3, 96, 240, 255], [ 48, 240, 253, 255], [183, 250, 251, 253], [248, 249, 240, 225]], [[ 2, 100, 242, 255], [ 41, 239, 253, 255], [170, 250, 252, 253], [250, 251, 245, 239]], ..., [[ 9, 98, 244, 255], [ 82, 239, 254, 255], [225, 253, 255, 255], [255, 255, 255, 255]], [[ 10, 105, 245, 255], [ 83, 239, 254, 255], [224, 253, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]]], [[[[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 11, 3, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 10, 3, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 12, 4, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 2, 1, 1, 1], [140, 131, 77, 59]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 1, 1], [139, 130, 92, 90]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 0, 0, 0], [ 19, 5, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 0, 0, 0], [ 23, 7, 1, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 0], [ 35, 11, 1, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 4, 2, 1, 1], [208, 183, 91, 68]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 3, 2, 1, 1], [187, 169, 106, 101]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 13, 3, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 10, 3, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 12, 4, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 2, 1, 1, 1], [162, 145, 94, 100]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 2, 1, 1, 2], [165, 160, 113, 120]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 0, 0, 0], [ 25, 6, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 0, 0, 0], [ 34, 8, 1, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 0, 0, 0], [ 48, 12, 1, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 4, 2, 1, 1], [214, 176, 91, 101]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 4, 2, 1, 2], [210, 169, 93, 121]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 15, 4, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 17, 4, 0, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 18, 5, 0, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 3, 2, 1, 2], [199, 156, 87, 109]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 4, 2, 1, 3], [207, 171, 102, 131]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 0], [ 39, 10, 1, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 0], [ 34, 9, 1, 0]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 1, 1, 0, 0], [ 59, 17, 1, 0]], ..., [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 10, 4, 1, 3], [235, 198, 121, 156]], [[ 0, 0, 0, 0], [ 0, 0, 0, 0], [ 12, 5, 2, 5], [237, 206, 136, 173]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], ..., [[[[ 0, 0, 0, 5], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 6], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 7], [ 0, 0, 0, 3], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], ..., [[ 0, 0, 1, 94], [ 0, 0, 1, 132], [ 0, 0, 2, 126], [ 0, 0, 3, 171]], [[ 0, 0, 1, 97], [ 0, 0, 1, 155], [ 0, 0, 2, 156], [ 0, 0, 4, 190]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 8], [ 0, 0, 0, 5], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 10], [ 0, 0, 0, 6], [ 0, 0, 0, 0], [ 0, 0, 0, 0]], [[ 0, 0, 0, 14], [ 0, 0, 0, 7], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], ..., [[ 0, 0, 1, 120], [ 0, 0, 2, 186], [ 0, 0, 4, 190], [ 0, 0, 6, 203]], [[ 0, 0, 2, 154], [ 0, 0, 3, 216], [ 0, 0, 6, 220], [ 0, 1, 11, 224]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 0, 18], [ 0, 0, 0, 9], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 21], [ 0, 0, 0, 9], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 18], [ 0, 0, 0, 9], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], ..., [[ 0, 0, 2, 152], [ 0, 0, 3, 218], [ 0, 0, 6, 220], [ 0, 1, 11, 220]], [[ 0, 0, 3, 180], [ 0, 0, 4, 230], [ 0, 1, 9, 233], [ 0, 1, 20, 236]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 2, 77, 232, 254], [ 58, 240, 252, 254], [207, 251, 250, 248], [243, 245, 219, 139]], [[ 3, 79, 235, 254], [ 62, 243, 253, 254], [206, 251, 251, 251], [246, 248, 233, 185]], [[ 3, 98, 239, 255], [ 53, 240, 253, 255], [187, 250, 251, 252], [247, 249, 238, 223]], ..., [[ 10, 105, 244, 255], [ 83, 239, 254, 255], [222, 253, 255, 255], [255, 255, 255, 255]], [[ 8, 77, 237, 255], [ 60, 227, 253, 255], [205, 252, 255, 255], [254, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 3, 107, 242, 255], [ 82, 244, 253, 254], [227, 252, 252, 250], [250, 250, 239, 188]], [[ 4, 114, 243, 255], [ 92, 246, 253, 255], [230, 253, 252, 251], [252, 252, 242, 206]], [[ 4, 115, 245, 255], [ 80, 246, 254, 255], [221, 252, 252, 253], [252, 253, 247, 230]], ..., [[ 16, 129, 246, 255], [122, 245, 254, 255], [236, 254, 255, 255], [255, 255, 255, 255]], [[ 12, 99, 241, 255], [ 92, 238, 254, 255], [226, 253, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[ 0, 0, 1, 30], [ 0, 0, 1, 14], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 22], [ 0, 0, 1, 11], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 21], [ 0, 0, 0, 10], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], ..., [[ 0, 0, 4, 203], [ 0, 0, 4, 216], [ 0, 0, 5, 194], [ 0, 0, 6, 208]], [[ 0, 0, 4, 186], [ 0, 0, 4, 218], [ 0, 0, 6, 216], [ 0, 1, 11, 228]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 1, 32], [ 0, 0, 0, 14], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 41], [ 0, 0, 0, 19], [ 0, 0, 0, 1], [ 0, 0, 0, 0]], [[ 0, 0, 0, 40], [ 0, 0, 0, 18], [ 0, 0, 0, 2], [ 0, 0, 0, 0]], ..., [[ 0, 0, 4, 202], [ 0, 0, 6, 231], [ 0, 0, 8, 224], [ 0, 1, 10, 226]], [[ 0, 0, 5, 203], [ 0, 0, 6, 232], [ 0, 1, 10, 232], [ 0, 1, 19, 238]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 0, 0, 1, 60], [ 0, 0, 1, 26], [ 0, 0, 0, 3], [ 0, 0, 0, 0]], [[ 0, 0, 1, 55], [ 0, 0, 1, 24], [ 0, 0, 0, 2], [ 0, 0, 0, 0]], [[ 0, 0, 1, 59], [ 0, 0, 1, 27], [ 0, 0, 0, 3], [ 0, 0, 0, 0]], ..., [[ 0, 0, 5, 214], [ 0, 0, 9, 240], [ 0, 1, 12, 237], [ 0, 1, 15, 236]], [[ 0, 1, 9, 233], [ 0, 1, 14, 248], [ 0, 2, 23, 247], [ 0, 3, 42, 247]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[ 3, 103, 243, 255], [ 75, 246, 254, 255], [211, 252, 252, 252], [244, 247, 231, 175]], [[ 3, 104, 243, 255], [ 77, 246, 254, 255], [211, 252, 252, 252], [246, 249, 236, 191]], [[ 3, 117, 245, 255], [ 70, 245, 254, 255], [203, 252, 253, 253], [248, 250, 243, 228]], ..., [[ 15, 149, 251, 255], [107, 246, 255, 255], [226, 254, 255, 255], [254, 255, 255, 255]], [[ 16, 147, 251, 255], [100, 245, 255, 255], [221, 254, 255, 255], [254, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[ 6, 134, 249, 255], [ 99, 248, 254, 255], [227, 253, 253, 253], [251, 251, 245, 219]], [[ 5, 135, 248, 255], [ 99, 249, 254, 255], [229, 253, 253, 254], [252, 252, 246, 226]], [[ 5, 136, 249, 255], [ 97, 249, 254, 255], [226, 253, 253, 254], [252, 253, 249, 238]], ..., [[ 22, 155, 250, 255], [140, 248, 255, 255], [237, 254, 255, 255], [255, 255, 255, 255]], [[ 23, 156, 250, 255], [135, 248, 255, 255], [234, 254, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]]], ..., [[[[[215, 152, 14, 0], [165, 41, 3, 0], [ 24, 4, 0, 0], [ 1, 0, 0, 0]], [[215, 138, 12, 0], [160, 31, 2, 0], [ 19, 3, 0, 0], [ 0, 0, 0, 0]], [[228, 139, 10, 0], [178, 34, 2, 0], [ 19, 3, 0, 0], [ 0, 0, 0, 0]], ..., [[242, 80, 5, 0], [167, 11, 1, 1], [ 35, 5, 1, 1], [ 5, 5, 3, 5]], [[242, 75, 4, 0], [152, 12, 1, 0], [ 22, 4, 1, 1], [ 5, 6, 5, 7]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[231, 159, 13, 0], [210, 60, 3, 0], [ 61, 7, 0, 0], [ 2, 0, 0, 0]], [[229, 166, 17, 0], [195, 53, 4, 0], [ 41, 4, 0, 0], [ 2, 0, 0, 0]], [[236, 168, 15, 0], [207, 53, 3, 0], [ 40, 4, 0, 0], [ 1, 0, 0, 0]], ..., [[245, 105, 7, 0], [191, 19, 2, 1], [ 56, 10, 2, 2], [ 10, 11, 6, 9]], [[245, 99, 6, 0], [176, 20, 2, 1], [ 34, 8, 2, 1], [ 10, 13, 10, 11]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[237, 171, 15, 0], [228, 83, 4, 0], [107, 14, 1, 0], [ 6, 1, 0, 0]], [[241, 172, 15, 0], [231, 82, 4, 0], [102, 13, 1, 0], [ 5, 1, 0, 0]], [[244, 200, 25, 0], [229, 92, 6, 0], [ 82, 10, 1, 0], [ 3, 1, 0, 0]], ..., [[247, 131, 12, 1], [228, 64, 6, 2], [146, 46, 8, 4], [ 47, 49, 19, 17]], [[250, 139, 12, 1], [218, 44, 4, 1], [ 83, 21, 6, 2], [ 30, 38, 24, 22]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 243, 41], [255, 255, 246, 47], [255, 255, 241, 22], [255, 255, 239, 8]], [[255, 255, 243, 40], [255, 255, 246, 47], [255, 255, 241, 25], [255, 255, 242, 11]], [[255, 255, 239, 27], [255, 255, 242, 52], [255, 255, 242, 43], [255, 255, 246, 26]], ..., [[255, 255, 246, 109], [255, 255, 250, 223], [255, 255, 254, 252], [255, 255, 255, 255]], [[255, 255, 247, 143], [255, 255, 252, 240], [255, 255, 255, 254], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 248, 68], [255, 255, 249, 74], [255, 255, 247, 41], [255, 255, 246, 15]], [[255, 255, 248, 71], [255, 255, 249, 80], [255, 255, 247, 48], [255, 255, 248, 22]], [[255, 255, 249, 81], [255, 255, 250, 95], [255, 255, 248, 66], [255, 255, 250, 38]], ..., [[255, 255, 249, 137], [255, 255, 252, 233], [255, 255, 255, 253], [255, 255, 255, 255]], [[255, 255, 249, 164], [255, 255, 252, 241], [255, 255, 255, 254], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[230, 159, 16, 0], [194, 48, 3, 0], [ 33, 5, 0, 0], [ 0, 0, 0, 0]], [[231, 169, 18, 0], [173, 43, 3, 0], [ 26, 5, 0, 0], [ 0, 0, 0, 0]], [[238, 181, 20, 0], [188, 47, 3, 0], [ 29, 5, 0, 0], [ 0, 0, 0, 0]], ..., [[245, 113, 11, 1], [171, 18, 2, 1], [ 30, 6, 2, 1], [ 4, 5, 4, 6]], [[246, 108, 9, 1], [168, 17, 2, 1], [ 24, 5, 2, 1], [ 5, 5, 5, 9]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[239, 189, 28, 0], [220, 77, 6, 0], [ 64, 10, 1, 0], [ 1, 0, 0, 0]], [[240, 186, 25, 0], [220, 72, 5, 0], [ 62, 10, 1, 0], [ 1, 0, 0, 0]], [[244, 209, 36, 0], [221, 88, 7, 0], [ 59, 10, 1, 0], [ 1, 0, 0, 0]], ..., [[247, 125, 13, 1], [199, 31, 3, 1], [ 60, 15, 4, 2], [ 11, 14, 10, 12]], [[248, 112, 9, 1], [190, 25, 3, 1], [ 40, 9, 3, 2], [ 11, 13, 9, 14]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[244, 197, 26, 0], [234, 98, 9, 0], [121, 18, 1, 0], [ 7, 1, 0, 0]], [[246, 212, 38, 0], [238, 116, 10, 0], [125, 18, 1, 0], [ 6, 1, 0, 0]], [[249, 214, 36, 0], [242, 121, 10, 0], [117, 16, 1, 0], [ 4, 1, 0, 0]], ..., [[248, 157, 24, 1], [228, 84, 10, 2], [138, 51, 12, 4], [ 44, 48, 28, 25]], [[250, 157, 22, 1], [224, 72, 9, 2], [105, 35, 9, 4], [ 38, 45, 29, 33]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 249, 86], [255, 255, 250, 93], [255, 255, 247, 47], [255, 255, 246, 16]], [[255, 255, 250, 102], [255, 255, 251, 110], [255, 255, 249, 62], [255, 255, 248, 25]], [[255, 255, 251, 101], [255, 255, 251, 110], [255, 255, 249, 75], [255, 255, 250, 50]], ..., [[255, 255, 252, 185], [255, 255, 254, 246], [255, 255, 255, 254], [255, 255, 255, 255]], [[255, 255, 252, 205], [255, 255, 254, 249], [255, 255, 255, 254], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 252, 140], [255, 255, 252, 148], [255, 255, 251, 87], [255, 255, 250, 30]], [[255, 255, 252, 135], [255, 255, 253, 149], [255, 255, 252, 97], [255, 255, 252, 43]], [[255, 255, 253, 152], [255, 255, 253, 165], [255, 255, 252, 118], [255, 255, 253, 67]], ..., [[255, 255, 253, 216], [255, 255, 254, 250], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 253, 230], [255, 255, 254, 250], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[242, 190, 27, 1], [212, 67, 5, 0], [ 55, 10, 1, 0], [ 1, 0, 0, 0]], [[244, 201, 32, 0], [219, 79, 6, 0], [ 55, 10, 1, 0], [ 1, 0, 0, 0]], [[243, 204, 32, 0], [207, 70, 5, 0], [ 43, 8, 1, 0], [ 0, 0, 0, 0]], ..., [[247, 138, 18, 2], [180, 23, 3, 2], [ 31, 7, 3, 2], [ 3, 5, 5, 8]], [[246, 123, 15, 2], [173, 23, 3, 2], [ 24, 6, 2, 2], [ 4, 5, 5, 9]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[247, 216, 43, 1], [234, 108, 9, 0], [112, 23, 1, 0], [ 3, 1, 0, 0]], [[248, 219, 46, 1], [229, 99, 8, 0], [ 83, 16, 1, 0], [ 1, 1, 0, 0]], [[249, 219, 43, 1], [234, 102, 8, 0], [ 84, 16, 1, 0], [ 1, 0, 0, 0]], ..., [[249, 169, 31, 3], [212, 53, 7, 3], [ 61, 18, 6, 4], [ 7, 11, 11, 19]], [[251, 164, 28, 3], [213, 46, 8, 4], [ 58, 15, 6, 4], [ 14, 17, 16, 29]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[249, 224, 55, 1], [241, 130, 15, 1], [145, 37, 2, 0], [ 7, 2, 0, 0]], [[249, 230, 68, 1], [242, 144, 16, 0], [131, 29, 2, 0], [ 4, 1, 0, 0]], [[251, 233, 66, 1], [245, 145, 14, 0], [130, 29, 2, 0], [ 3, 1, 0, 0]], ..., [[250, 179, 43, 3], [229, 94, 16, 4], [127, 52, 17, 8], [ 34, 43, 33, 40]], [[250, 177, 37, 3], [228, 95, 16, 4], [100, 39, 13, 7], [ 28, 39, 31, 45]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 253, 184], [255, 255, 253, 184], [255, 255, 252, 108], [255, 255, 250, 35]], [[255, 255, 253, 168], [255, 255, 253, 177], [255, 255, 252, 113], [255, 255, 251, 44]], [[255, 255, 254, 170], [255, 255, 254, 182], [255, 255, 252, 133], [255, 255, 252, 78]], ..., [[255, 255, 254, 243], [255, 255, 255, 253], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 248], [255, 255, 255, 254], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 254, 201], [255, 255, 254, 204], [255, 255, 253, 140], [255, 255, 252, 57]], [[255, 255, 254, 204], [255, 255, 254, 210], [255, 255, 253, 162], [255, 255, 253, 85]], [[255, 255, 254, 195], [255, 255, 254, 207], [255, 255, 254, 168], [255, 255, 254, 101]], ..., [[255, 255, 255, 246], [255, 255, 255, 253], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 250], [255, 255, 255, 254], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], ..., [[[[255, 255, 255, 255], [255, 255, 255, 255], [254, 255, 254, 253], [208, 192, 124, 71]], [[255, 255, 255, 255], [255, 255, 255, 255], [254, 254, 254, 253], [194, 173, 113, 76]], [[255, 255, 255, 255], [255, 255, 255, 255], [254, 254, 254, 254], [174, 157, 112, 106]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [252, 254, 255, 255], [151, 242, 254, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [252, 254, 255, 255], [182, 248, 254, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 254, 254], [239, 227, 168, 119]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 254], [234, 221, 175, 146]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 254], [234, 223, 182, 163]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [254, 255, 255, 255], [216, 252, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [254, 255, 255, 255], [238, 253, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [248, 242, 200, 141]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [249, 244, 217, 187]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [249, 246, 229, 214]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [248, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [250, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 254]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 254, 254], [228, 212, 153, 114]], [[255, 255, 255, 255], [255, 255, 255, 255], [254, 255, 254, 254], [223, 214, 171, 141]], [[255, 255, 255, 255], [255, 255, 255, 255], [254, 254, 254, 254], [196, 198, 162, 153]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [252, 254, 255, 255], [182, 249, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [252, 255, 255, 255], [189, 249, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [244, 233, 186, 153]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [242, 239, 213, 189]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [242, 239, 218, 203]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [254, 255, 255, 255], [229, 253, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [254, 255, 255, 255], [239, 254, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [249, 246, 221, 185]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [250, 247, 224, 194]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [251, 250, 237, 222]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [251, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [251, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]]], [[[[[241, 195, 30, 0], [222, 79, 6, 0], [ 63, 10, 1, 0], [ 1, 0, 0, 0]], [[244, 212, 40, 0], [223, 94, 7, 0], [ 60, 11, 1, 0], [ 1, 0, 0, 0]], [[247, 204, 28, 0], [222, 81, 5, 0], [ 55, 10, 1, 0], [ 1, 0, 0, 0]], ..., [[246, 141, 19, 1], [216, 59, 8, 2], [103, 37, 11, 4], [ 18, 27, 21, 19]], [[249, 148, 17, 1], [212, 44, 4, 1], [ 78, 19, 5, 2], [ 13, 16, 12, 15]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[246, 213, 38, 0], [238, 115, 10, 0], [120, 16, 1, 0], [ 5, 1, 0, 0]], [[249, 217, 38, 0], [242, 120, 10, 0], [115, 15, 1, 0], [ 3, 1, 0, 0]], [[249, 220, 41, 0], [239, 120, 10, 0], [100, 14, 1, 0], [ 3, 1, 0, 0]], ..., [[248, 152, 24, 1], [227, 69, 10, 2], [133, 48, 16, 5], [ 33, 45, 36, 29]], [[249, 165, 26, 1], [229, 84, 10, 2], [136, 48, 12, 4], [ 38, 44, 27, 27]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[248, 220, 44, 0], [244, 140, 13, 0], [158, 26, 1, 0], [ 10, 2, 0, 0]], [[251, 225, 43, 0], [247, 150, 13, 0], [157, 26, 1, 0], [ 7, 2, 0, 0]], [[251, 224, 39, 0], [247, 142, 11, 0], [149, 22, 1, 0], [ 6, 2, 0, 0]], ..., [[253, 214, 59, 2], [247, 144, 33, 8], [204, 107, 38, 17], [ 93, 113, 73, 59]], [[253, 210, 55, 2], [245, 133, 23, 5], [197, 87, 25, 10], [ 97, 101, 64, 59]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 250, 73], [255, 255, 250, 75], [255, 255, 246, 38], [255, 255, 244, 18]], [[255, 255, 250, 68], [255, 255, 250, 75], [255, 255, 247, 47], [255, 255, 247, 29]], [[255, 255, 247, 43], [255, 255, 248, 72], [255, 255, 247, 64], [255, 255, 249, 44]], ..., [[255, 255, 252, 167], [255, 255, 254, 244], [255, 255, 255, 254], [255, 255, 255, 255]], [[255, 255, 252, 181], [255, 255, 254, 247], [255, 255, 255, 254], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 251, 108], [255, 255, 251, 113], [255, 255, 249, 63], [255, 255, 249, 24]], [[255, 255, 252, 107], [255, 255, 252, 113], [255, 255, 250, 75], [255, 255, 250, 48]], [[255, 255, 251, 86], [255, 255, 251, 100], [255, 255, 249, 80], [255, 255, 251, 67]], ..., [[255, 255, 253, 194], [255, 255, 254, 247], [255, 255, 255, 254], [255, 255, 255, 255]], [[255, 255, 253, 199], [255, 255, 254, 249], [255, 255, 255, 254], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[248, 219, 44, 1], [229, 96, 8, 0], [ 78, 15, 1, 0], [ 1, 0, 0, 0]], [[250, 221, 44, 1], [235, 103, 8, 0], [ 83, 15, 1, 0], [ 1, 0, 0, 0]], [[249, 222, 48, 1], [227, 97, 8, 0], [ 67, 12, 1, 0], [ 1, 0, 0, 0]], ..., [[249, 180, 43, 3], [225, 78, 12, 3], [108, 35, 12, 5], [ 15, 20, 18, 21]], [[249, 182, 40, 3], [220, 76, 11, 3], [ 85, 28, 9, 5], [ 11, 16, 15, 25]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[249, 229, 64, 1], [242, 139, 14, 0], [123, 25, 1, 0], [ 3, 1, 0, 0]], [[251, 233, 66, 1], [245, 144, 14, 0], [124, 25, 2, 0], [ 2, 1, 0, 0]], [[252, 229, 53, 1], [245, 132, 10, 0], [134, 26, 1, 0], [ 2, 1, 0, 0]], ..., [[251, 184, 48, 3], [234, 90, 15, 3], [140, 49, 18, 6], [ 32, 38, 34, 33]], [[251, 189, 47, 3], [231, 98, 16, 4], [131, 51, 17, 7], [ 32, 41, 32, 39]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[251, 233, 66, 1], [246, 155, 20, 0], [164, 45, 3, 0], [ 9, 3, 0, 0]], [[252, 235, 72, 1], [248, 166, 19, 0], [161, 36, 2, 0], [ 6, 2, 0, 0]], [[253, 238, 73, 1], [251, 174, 20, 1], [177, 39, 3, 0], [ 7, 2, 0, 0]], ..., [[253, 216, 73, 4], [245, 143, 42, 12], [189, 105, 51, 27], [ 86, 115, 97, 91]], [[253, 212, 67, 4], [245, 137, 31, 8], [195, 95, 35, 17], [104, 113, 86, 91]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 252, 124], [255, 255, 252, 128], [255, 255, 250, 75], [255, 255, 249, 35]], [[255, 255, 253, 135], [255, 255, 253, 141], [255, 255, 251, 93], [255, 255, 250, 53]], [[255, 255, 253, 131], [255, 255, 253, 140], [255, 255, 251, 105], [255, 255, 252, 75]], ..., [[255, 255, 255, 240], [255, 255, 255, 253], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 254, 237], [255, 255, 255, 253], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 253, 166], [255, 255, 253, 173], [255, 255, 252, 109], [255, 255, 251, 40]], [[255, 255, 254, 170], [255, 255, 254, 179], [255, 255, 253, 127], [255, 255, 252, 70]], [[255, 255, 254, 172], [255, 255, 254, 180], [255, 255, 253, 137], [255, 255, 253, 97]], ..., [[255, 255, 255, 247], [255, 255, 255, 254], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 245], [255, 255, 255, 254], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[251, 235, 77, 1], [240, 132, 14, 0], [114, 26, 2, 0], [ 2, 1, 0, 0]], [[252, 235, 74, 1], [241, 135, 14, 0], [105, 22, 2, 0], [ 1, 0, 0, 0]], [[252, 231, 58, 1], [242, 119, 9, 0], [111, 18, 1, 0], [ 1, 0, 0, 0]], ..., [[250, 195, 69, 7], [224, 80, 17, 6], [ 88, 28, 12, 7], [ 11, 14, 16, 25]], [[250, 182, 50, 6], [221, 76, 14, 6], [ 81, 27, 11, 7], [ 10, 14, 16, 30]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[252, 240, 95, 2], [244, 154, 18, 1], [141, 37, 2, 0], [ 3, 1, 0, 0]], [[253, 241, 97, 2], [246, 162, 20, 1], [134, 33, 2, 0], [ 2, 1, 0, 0]], [[253, 243, 104, 2], [249, 169, 21, 1], [156, 38, 3, 0], [ 3, 1, 0, 0]], ..., [[253, 218, 99, 11], [242, 127, 35, 13], [161, 68, 32, 20], [ 38, 52, 55, 72]], [[252, 206, 79, 8], [234, 111, 27, 9], [126, 53, 23, 13], [ 29, 38, 38, 59]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[254, 247, 134, 5], [251, 198, 39, 1], [204, 81, 6, 0], [ 16, 4, 0, 0]], [[253, 244, 112, 3], [251, 189, 30, 1], [186, 58, 4, 0], [ 6, 2, 0, 0]], [[254, 245, 113, 3], [251, 190, 29, 1], [191, 63, 5, 0], [ 6, 2, 0, 0]], ..., [[254, 232, 127, 14], [248, 167, 62, 23], [200, 112, 58, 36], [ 92, 108, 98, 107]], [[254, 230, 116, 12], [247, 164, 55, 20], [201, 116, 58, 37], [106, 125, 112, 130]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 254, 182], [255, 255, 254, 190], [255, 255, 252, 126], [255, 255, 251, 58]], [[255, 255, 254, 187], [255, 255, 254, 202], [255, 255, 253, 154], [255, 255, 253, 88]], [[255, 255, 254, 194], [255, 255, 254, 206], [255, 255, 253, 163], [255, 255, 253, 108]], ..., [[255, 255, 255, 253], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 253], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 254, 216], [255, 255, 254, 214], [255, 255, 254, 156], [255, 255, 253, 75]], [[255, 255, 254, 211], [255, 255, 254, 219], [255, 255, 254, 179], [255, 255, 254, 117]], [[255, 255, 255, 200], [255, 255, 254, 195], [255, 255, 253, 158], [255, 255, 254, 124]], ..., [[255, 255, 255, 253], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 254], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], ..., [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 254], [235, 224, 165, 113]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 254], [230, 217, 163, 130]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 254], [212, 199, 160, 164]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [254, 255, 255, 255], [217, 251, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [254, 255, 255, 255], [218, 252, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [247, 242, 205, 153]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [248, 243, 211, 178]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [246, 242, 215, 196]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [248, 254, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [249, 254, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [252, 250, 232, 199]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [252, 250, 235, 217]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [252, 251, 237, 220]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [253, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [253, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 254], [239, 226, 180, 149]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [238, 229, 191, 170]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [231, 232, 211, 207]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [254, 255, 255, 255], [229, 253, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [254, 255, 255, 255], [228, 253, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [249, 245, 218, 188]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [249, 247, 231, 215]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [250, 248, 235, 224]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [248, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [249, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [252, 249, 229, 198]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [253, 251, 243, 227]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [253, 252, 245, 234]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [253, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [253, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]]], [[[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], ..., [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]], [[[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], ..., [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]], [[[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], ..., [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]], [[255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]]]]], dtype=uint8), 'quantization_interval': 16}
In [ ]:
f, a = plt.subplots(2,1, figsize=(25, 9/2)) lut1 = state_dict['stage1_lut'] # a[0].imshow(lut1) a[1].imshow(np.transpose(state_dict['stage1_dense_upscale_lut'].reshape(17**2, 17*17*16))) pcm = a[0].pcolormesh(lut1) f.colorbar(pcm, ax=a, location='right') f.suptitle("Stage 1, rc_conv") a[0].set_title(f"{int(np.sqrt(lut1.shape[0]))}x{int(np.sqrt(lut1.shape[0]))}") # a[1].set_title(f"stage1_dense_upscale_lut")
Out[ ]:
Text(0.5, 1.0, '5x5')
In [ ]:
from einops import rearrange f, a = plt.subplots(1,1, figsize=(9*5, 9*5)) gg = state_dict['stage1_dense_upscale_lut'].reshape(17**4, 4, 4) gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17) a.imshow(gg)
In [ ]:
luts = np.load("/wd/luts/models/dense_block/luts/RCLutTest_200000_x4_4.0bit_int8.npz", allow_pickle=True) state_dict = luts['state_dict'].item() from einops import rearrange f, a = plt.subplots(1,1, figsize=(9*5, 9*5)) gg = state_dict['stage1_dense_upscale_lut'].reshape(17**4, 4, 4) gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17) a.imshow(gg)
In [ ]:
luts = np.load("/wd/luts/models/dense_block_cascade/luts/RCLutTest_010000_x4_4.0bit_int8.npz", allow_pickle=True) state_dict = luts['state_dict'].item() from einops import rearrange f, a = plt.subplots(1,1, figsize=(9*5, 9*5)) gg = state_dict['stage1_dense_upscale_lut'].reshape(17**4, 1, 1) gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17) a.imshow(gg)
In [ ]:
f, a = plt.subplots(1,1, figsize=(9*5, 9*5)) gg = state_dict['stage2_dense_upscale_lut'].reshape(17**4, 4, 4) gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17) a.imshow(gg)
In [ ]:
f, a = plt.subplots(3,1, figsize=(25/2, 9/2)) lut1 = np.load("LUT_x4_8.0bit_int8_stage1_3x3_rc_conv.npy") lut2 = np.load("LUT_x4_8.0bit_int8_stage1_5x5_rc_conv.npy") lut3 = np.load("LUT_x4_8.0bit_int8_stage1_7x7_rc_conv.npy") a[0].imshow(lut1) a[1].imshow(lut2) a[2].imshow(lut3) pcm = a[0].pcolormesh(lut1) f.colorbar(pcm, ax=a, location='right') f.suptitle("Stage 1, rc_conv") a[0].set_title("3x3") a[1].set_title("5x5") a[2].set_title("7x7")
Out[ ]:
Text(0.5, 1.0, '7x7')
In [ ]:
f, a = plt.subplots(3,1, figsize=(25/2, 9/2)) lut1 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage1_3x3_dense_upscale_lut.npy")) lut2 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage1_5x5_dense_upscale_lut.npy")) lut3 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage1_7x7_dense_upscale_lut.npy")) a[0].imshow(lut1) a[1].imshow(lut2) a[2].imshow(lut3) pcm = a[0].pcolormesh(lut1) f.colorbar(pcm, ax=a, location='right') f.suptitle("Stage 1, dense_upscale_lut") a[0].set_title("3x3") a[1].set_title("5x5") a[2].set_title("7x7")
Out[ ]:
Text(0.5, 1.0, '7x7')
In [ ]:
f, a = plt.subplots(3,1, figsize=(25/2, 9/2)) lut1 = np.load("LUT_x4_8.0bit_int8_stage2_3x3_rc_conv.npy") lut2 = np.load("LUT_x4_8.0bit_int8_stage2_5x5_rc_conv.npy") lut3 = np.load("LUT_x4_8.0bit_int8_stage2_7x7_rc_conv.npy") a[0].imshow(lut1) a[1].imshow(lut2) a[2].imshow(lut3) pcm = a[0].pcolormesh(lut1) f.colorbar(pcm, ax=a, location='right') f.suptitle("Stage 2, rc_conv") a[0].set_title("3x3") a[1].set_title("5x5") a[2].set_title("7x7")
Out[ ]:
Text(0.5, 1.0, '7x7')
In [ ]:
f, a = plt.subplots(3,1, figsize=(25/2, 9/2)) lut1 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_3x3_dense_upscale_lut.npy")) lut2 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_5x5_dense_upscale_lut.npy")) lut3 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_7x7_dense_upscale_lut.npy")) a[0].imshow(lut1) a[1].imshow(lut2) a[2].imshow(lut3) pcm = a[0].pcolormesh(lut1) f.colorbar(pcm, ax=a, location='right') f.suptitle("Stage 2, dense_upscale_lut") a[0].set_title("3x3") a[1].set_title("5x5") a[2].set_title("7x7")
Out[ ]:
Text(0.5, 1.0, '7x7')
In [ ]:
f, a = plt.subplots(3,1, figsize=(25/2, 9/2)) lut1 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_3x3_dense_upscale_lut.npy")) lut2 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_5x5_dense_upscale_lut.npy")) lut3 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_7x7_dense_upscale_lut.npy")) a[1].imshow(lut2) a[2].imshow(lut3) pcm = a[0].pcolormesh(lut1) f.colorbar(pcm, ax=a, location='right') f.suptitle("Stage 2, dense_upscale_lut") a[0].set_title("3x3") a[1].set_title("5x5") a[2].set_title("7x7") # lut1[:, 100:150]
Out[ ]:
Text(0.5, 1.0, '7x7')
In [ ]:
import sys sys.path.insert(0, "/wd/luts/src/") from rclut.model import LoadRCLutCheckpoint, AVAILABLE_LUT_MODELS, RCLutx2, RCLutx1 from pathlib import Path import torch import numpy as np import cv2 from PIL import Image m = LoadRCLutCheckpoint("/wd/luts/models/RCNetx2TMP/RCLutx2_000000_x4_8.0bit_int8.npz") image = cv2.imread("/wd/luts/data/Set5/LR_bicubic/X4/baby.png")[:,:,::-1] # Image.fromarray(image) m(torch.tensor(image.copy()).permute(2,0,1)[None,...])
torch.Size([3, 1, 126, 126]) torch.uint8 torch.Size([3, 1, 128, 128]) float64 (3, 1, 128, 128) tensor(116.4444) tensor(138.5556) tensor(116.) tensor(139.) torch.float32 torch.Size([3, 1, 128, 128])
--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) /wd/luts/models/RCNetx2TMP/explore.ipynb Cell 10 line 1 <a href='vscode-notebook-cell://192.168.88.70:8400/wd/luts/models/RCNetx2TMP/explore.ipynb#X10sdnNjb2RlLXJlbW90ZQ%3D%3D?line=10'>11</a> image = cv2.imread("/wd/luts/data/Set5/LR_bicubic/X4/baby.png")[:,:,::-1] <a href='vscode-notebook-cell://192.168.88.70:8400/wd/luts/models/RCNetx2TMP/explore.ipynb#X10sdnNjb2RlLXJlbW90ZQ%3D%3D?line=11'>12</a> # Image.fromarray(image) ---> <a href='vscode-notebook-cell://192.168.88.70:8400/wd/luts/models/RCNetx2TMP/explore.ipynb#X10sdnNjb2RlLXJlbW90ZQ%3D%3D?line=12'>13</a> m(torch.tensor(image.copy()).permute(2,0,1)[None,...]) File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs) 1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc] 1510 else: -> 1511 return self._call_impl(*args, **kwargs) File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs) 1515 # If we don't have any hooks, we want to skip the rest of the logic in 1516 # this function, and just call forward. 1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks 1518 or _global_backward_pre_hooks or _global_backward_hooks 1519 or _global_forward_hooks or _global_forward_pre_hooks): -> 1520 return forward_call(*args, **kwargs) 1522 try: 1523 result = None File /wd/luts/src/rclut/model.py:265, in RCLutx2.forward(self, x) 263 for rotations_count in range(1,4+1): 264 rotated = torch.rot90(x, k=rotations_count, dims=[2, 3]) --> 265 output_1 += torch.rot90(self.stage1_3x3_block_lut(rotated), k=-rotations_count, dims=[2, 3]) 266 output_1 += torch.rot90(self.stage1_5x5_block_lut(rotated), k=-rotations_count, dims=[2, 3]) 267 output_1 += torch.rot90(self.stage1_7x7_block_lut(rotated), k=-rotations_count, dims=[2, 3]) RuntimeError: The size of tensor a (126) must match the size of tensor b (128) at non-singleton dimension 3
In [ ]:
torch.tensor().repeat?
Object `repeat` not found.
In [ ]:
import numpy as np import torch weights = torch.tensor(np.tile(np.arange(255), 9*3).reshape(3, 9, 255)) +100 x = torch.rand((3,9,1))*255 x = x.round().type(torch.int64) weights.shape, x.shape
Out[ ]:
(torch.Size([3, 9, 255]), torch.Size([3, 9, 1]))
In [ ]:
torch.gather(input=weights, dim=-1, index=x), x
Out[ ]:
(tensor([[[121], [212], [156], [227], [235], [201], [322], [208], [274]], [[119], [117], [232], [318], [183], [234], [324], [117], [166]], [[259], [179], [193], [176], [237], [131], [168], [233], [182]]]), tensor([[[ 21], [112], [ 56], [127], [135], [101], [222], [108], [174]], [[ 19], [ 17], [132], [218], [ 83], [134], [224], [ 17], [ 66]], [[159], [ 79], [ 93], [ 76], [137], [ 31], [ 68], [133], [ 82]]]))
In [ ]:
import torch # Create a matrix matrix = torch.randn(3, 4) # Create a vector of indices indices = torch.tensor([0, 2, 1]) # Extract elements from each row based on the indices selected_elements = matrix[torch.arange(3)[:, None], indices] selected_elements, matrix
Out[ ]:
(tensor([[-0.3433, -1.7434, 0.6454], [ 0.2597, 0.9045, -1.9901], [-1.0239, -1.8547, 0.1800]]), tensor([[-0.3433, 0.6454, -1.7434, -0.4747], [ 0.2597, -1.9901, 0.9045, 0.8336], [-1.0239, 0.1800, -1.8547, -0.5057]]))
In [ ]:
def f(x, w): print(x.shape, w.shape) return torch.index_select(w, 0, x) bv = torch.vmap(f) weights = torch.tensor(np.tile(np.arange(255), 9).reshape(9, 255))+100 x = torch.rand((9,3))*255 x = x.round().type(torch.int64) bv(x, weights), x, weights
torch.Size([3]) torch.Size([255])
Out[ ]:
(tensor([[148, 257, 270], [286, 350, 119], [122, 153, 327], [256, 172, 198], [178, 218, 290], [295, 119, 218], [102, 289, 128], [296, 143, 327], [232, 295, 233]]), tensor([[ 48, 157, 170], [186, 250, 19], [ 22, 53, 227], [156, 72, 98], [ 78, 118, 190], [195, 19, 118], [ 2, 189, 28], [196, 43, 227], [132, 195, 133]]), tensor([[100, 101, 102, ..., 352, 353, 354], [100, 101, 102, ..., 352, 353, 354], [100, 101, 102, ..., 352, 353, 354], ..., [100, 101, 102, ..., 352, 353, 354], [100, 101, 102, ..., 352, 353, 354], [100, 101, 102, ..., 352, 353, 354]]))
In [ ]:
rc_conv_3x3 = np.load("LUT_x4_8.0bit_int8_stage1_3x3_rc_conv.npy") rc_conv_3x3[:,image].shape
Out[ ]:
(9, 126, 126, 3)
In [ ]:
Out[ ]:
In [ ]:
m(image)
In [ ]:
srlut = np.load("/wd/SR-LUT/2_Transfer_to_LUT/Model_S_x4_4bit_int8.npy").reshape(17**4, 4*4).astype(np.int16) # srlut = np.load("/wd/SR-LUT/3_Test_using_LUT/Model_F_x4_4bit_int8.npy").astype(np.int16).reshape(-1, 4*4) srlut = (srlut+128).astype(np.uint8) srlut.shape
Out[ ]:
(83521, 16)
In [ ]:
f, a = plt.subplots(1,1, figsize=(9, 9)) pcm = a.pcolormesh(np.transpose(srlut[:17])) f.colorbar(pcm, ax=a, location='right')
Out[ ]:
<matplotlib.colorbar.Colorbar at 0x7f11264ef5b0>
In [ ]:
set([i//16 for i in range(256)])
Out[ ]:
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
In [ ]:
np.arange(0, 256, 2**4), len(np.arange(0, 256, 2**4))
Out[ ]:
(array([ 0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240]), 16)
In [ ]:
a,b,c,d = 127,127,127,12,7 plt.imshow(srlut.reshape(17,17,17,17,4,4)[a//16,12//16,12//16,12//16], cmap='gray')
Out[ ]:
<matplotlib.image.AxesImage at 0x7f112644d930>
In [ ]:
import seaborn as sns import pandas as pd tt = srlut.reshape(17,17,17,17,16) i = 8 aa = pd.DataFrame(np.transpose(tt[i,5,5,:,:])) aa.columns = [f"[{x*(256/17):.0f},\n{(x+1)*(256/17):.0f}]" for x in np.arange(17)] sns.set_theme(rc={'figure.figsize':(11.7,8.27)}) a = sns.heatmap(aa, annot=True, fmt=".0f") a.set_xlabel("buckets") a.set_ylabel("output pixel") # aa
Out[ ]:
Text(112.49999999999999, 0.5, 'output pixel')
In [ ]:
hh = pd.DataFrame(srlut.flatten()).value_counts().reset_index().sort_values(by=0) hh.columns = ['bucket', 'count'] sns.set_theme(rc={'figure.figsize':(24.7,8.27)}) sns.barplot(data=hh, x='bucket', y='count') plt.xticks(rotation=90, fontsize=8);
In [ ]:
np.transpose(srlut[:17]+127).min(), np.transpose(srlut[:17]+127).max()
Out[ ]:
(-128, 127)
In [ ]:
srlut[:17].dtype
Out[ ]:
dtype('int8')
In [ ]:
(srlut[:17]+127).min()
Out[ ]:
-128
In [ ]:
import cv2 from pathlib import Path ds_path = Path("/wd/luts/data/Synthetic/") hr_path = ds_path / "HR" lr_path = ds_path / "LR" w = h = 1024 for i in range(256): cv2.imwrite(str(hr_path / f"const_{i:04d}.png"), np.full((w,h,3), fill_value=i, dtype=np.uint8)) for scale in [2,4]: cv2.imwrite(str(lr_path / f"X{scale}" / f"const_{i:04d}.png"), np.full((w//scale,h//scale,3), fill_value=i, dtype=np.uint8)) # for i in range(256): im = np.ones((w,h,3), dtype=np.uint8) for i in range(h): im[i] *= int((i / h) * 255) cv2.imwrite(str(hr_path / f"linear.png"), im) for scale in [2,4]: im = np.ones((w//scale,h//scale,3), dtype=np.uint8) for i in range(h//scale): im[i] *= int((i / (h//scale)) * 255) cv2.imwrite(str(lr_path / f"X{scale}" / f"linear.png"), im)
In [ ]:
import numpy as np im = np.ones((w,h,3), dtype=np.uint8) for c in range(3): im = np.rot90(im, c) for i in range(h): for j in range(w): im[i,j,c] *= int(((i + j)/ (h + w)) * 255) cv2.imwrite(str(hr_path / f"diagonalc.png"), im) for scale in [2,4]: im = np.ones((w//scale,h//scale,3), dtype=np.uint8) for c in range(3): im = np.rot90(im, c) for i in range(h//scale): for j in range(w//scale): im[i,j,c] *= int(((i + j)/ (h//scale + w//scale)) * 255) cv2.imwrite(str(lr_path / f"X{scale}" / f"diagonalc.png"), im)
In [ ]:
import torch import torch.nn.functional as F n = 4 a = torch.arange(n**2).view(1,1,n,n).type(torch.float32) b = F.unfold(a, kernel_size=(2,2)) a, b, a.shape, b.shape, gg = torch.nn.Linear(9,1) gg(b).shape
Out[ ]:
torch.Size([1, 4, 1])
In [ ]:
torch.nn.Linear?
Init signature: torch.nn.Linear( in_features: int, out_features: int, bias: bool = True, device=None, dtype=None, ) -> None Docstring: Applies a linear transformation to the incoming data: :math:`y = xA^T + b`. This module supports :ref:`TensorFloat32<tf32_on_ampere>`. On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward. Args: in_features: size of each input sample out_features: size of each output sample bias: If set to ``False``, the layer will not learn an additive bias. Default: ``True`` Shape: - Input: :math:`(*, H_{in})` where :math:`*` means any number of dimensions including none and :math:`H_{in} = \text{in\_features}`. - Output: :math:`(*, H_{out})` where all but the last dimension are the same shape as the input and :math:`H_{out} = \text{out\_features}`. Attributes: weight: the learnable weights of the module of shape :math:`(\text{out\_features}, \text{in\_features})`. The values are initialized from :math:`\mathcal{U}(-\sqrt{k}, \sqrt{k})`, where :math:`k = \frac{1}{\text{in\_features}}` bias: the learnable bias of the module of shape :math:`(\text{out\_features})`. If :attr:`bias` is ``True``, the values are initialized from :math:`\mathcal{U}(-\sqrt{k}, \sqrt{k})` where :math:`k = \frac{1}{\text{in\_features}}` Examples:: >>> m = nn.Linear(20, 30) >>> input = torch.randn(128, 20) >>> output = m(input) >>> print(output.size()) torch.Size([128, 30]) Init docstring: Initialize internal Module state, shared by both nn.Module and ScriptModule. File: /opt/conda/lib/python3.10/site-packages/torch/nn/modules/linear.py Type: type Subclasses: NonDynamicallyQuantizableLinear, LazyLinear, Linear, LinearBn1d, Linear
In [ ]:
import torch import torch.nn as nn import torch.nn.functional as F import numpy as np class PercievePatternv2(): def __init__(self, receptive_field_idxes=[[0,0],[0,1],[1,0],[1,1]], center=[0,0], window_size=2): assert window_size >= (np.max(receptive_field_idxes)+1) self.receptive_field_idxes = np.array(receptive_field_idxes) self.window_size = window_size self.center = center self.receptive_field_idxes = [ self.receptive_field_idxes[0,0]*self.window_size + self.receptive_field_idxes[0,1], self.receptive_field_idxes[1,0]*self.window_size + self.receptive_field_idxes[1,1], self.receptive_field_idxes[2,0]*self.window_size + self.receptive_field_idxes[2,1], self.receptive_field_idxes[3,0]*self.window_size + self.receptive_field_idxes[3,1], ] def __call__(self, x): b,c,h,w = x.shape x = F.pad( x, pad=[self.center[0], self.window_size-self.center[0]-1, self.center[1], self.window_size-self.center[1]-1], mode='replicate' ) x = F.unfold(input=x, kernel_size=self.window_size) x = torch.stack([ x[:,self.receptive_field_idxes[0],:], x[:,self.receptive_field_idxes[1],:], x[:,self.receptive_field_idxes[2],:], x[:,self.receptive_field_idxes[3],:] ], 2) # x = x.reshape(x.shape[0]*x.shape[1], 1, 2, 2) return x
In [ ]:
_extract_pattern = PercievePatternv2(receptive_field_idxes=[[0,0],[0,1],[1,0],[1,1]], center=[0,0], window_size=2) n = 3 a = torch.arange(n**2).view(1,1,n,n).type(torch.float32) a, _extract_pattern(a), _extract_pattern(a).shape
Out[ ]:
(tensor([[[[0., 1., 2.], [3., 4., 5.], [6., 7., 8.]]]]), tensor([[[0., 1., 3., 4.], [1., 2., 4., 5.], [2., 2., 5., 5.], [3., 4., 6., 7.], [4., 5., 7., 8.], [5., 5., 8., 8.], [6., 7., 6., 7.], [7., 8., 7., 8.], [8., 8., 8., 8.]]]), torch.Size([1, 9, 4]))
In [ ]:
def round_func(input): # Backward Pass Differentiable Approximation (BPDA) # This is equivalent to replacing round function (non-differentiable) # with an identity function (differentiable) only when backward, forward_value = torch.round(input) out = input.clone() out.data = forward_value.data return out
In [ ]:
class DenseConvUpscaleBlockv2(nn.Module): def __init__(self, receptive_field_idxes=[[0,0],[0,1],[1,0],[1,1]], center=[0,0], window_size=2, in_features=4, hidden_dim = 32, layers_count=5, upscale_factor=1): super(DenseConvUpscaleBlockv2, self).__init__() assert layers_count > 0 self.percieve_pattern = PercievePatternv2(receptive_field_idxes=receptive_field_idxes, center=center, window_size=window_size) self.upscale_factor = upscale_factor self.hidden_dim = hidden_dim self.embed = nn.Linear(in_features=in_features, out_features=hidden_dim, bias=True) self.linear_projections = [] for i in range(layers_count): self.linear_projections.append(nn.Linear(in_features=(i+1)*hidden_dim, out_features=hidden_dim, bias=True)) self.linear_projections = nn.ModuleList(self.linear_projections) self.project_channels = nn.Linear(in_features=(layers_count+1)*hidden_dim, out_features=upscale_factor * upscale_factor, bias=True) def forward(self, x): b,c,h,w = x.shape x = (x-127.5)/127.5 x = self.percieve_pattern(x) x = torch.relu(self.embed(x)) for linear_projection in self.linear_projections: x = torch.cat([x, torch.relu(linear_projection(x))], dim=2) x = self.project_channels(x) x = x.reshape(b, c, h*self.upscale_factor, w*self.upscale_factor) x = torch.tanh(x) x = x*127.5 + 127.5 x = round_func(x) return x layer = DenseConvUpscaleBlockv2() layer(a)
Out[ ]:
tensor([[[[113., 113., 113.], [113., 113., 113.], [113., 113., 113.]]]], grad_fn=<CloneBackward0>)
In [ ]:
rotations_count = -1 b = torch.rot90(a, k=rotations_count, dims=[-2, -1]) c = torch.rot90(b, k=-rotations_count, dims=[-2, -1]) c
Out[ ]:
tensor([[[[0., 1., 2.], [3., 4., 5.], [6., 7., 8.]]]])
In [ ]:
torch.Size([1, 9, 4])
--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) /wd/lut_reproduce/explore.ipynb Cell 43 line 1 ----> <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=0'>1</a> layer(a) File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs) 1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc] 1510 else: -> 1511 return self._call_impl(*args, **kwargs) File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs) 1515 # If we don't have any hooks, we want to skip the rest of the logic in 1516 # this function, and just call forward. 1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks 1518 or _global_backward_pre_hooks or _global_backward_hooks 1519 or _global_forward_hooks or _global_forward_pre_hooks): -> 1520 return forward_call(*args, **kwargs) 1522 try: 1523 result = None /wd/lut_reproduce/explore.ipynb Cell 43 line 2 <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=21'>22</a> x = torch.relu(self.embed(x)) <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=22'>23</a> for linear_projection in self.linear_projections: ---> <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=23'>24</a> x = torch.cat([x, torch.relu(linear_projection(x))], dim=1) <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=24'>25</a> x = self.project_channels(x) <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=25'>26</a> x = x.reshape(b, c, h*self.upscale_factor, w*self.upscale_factor) File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs) 1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc] 1510 else: -> 1511 return self._call_impl(*args, **kwargs) File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs) 1515 # If we don't have any hooks, we want to skip the rest of the logic in 1516 # this function, and just call forward. 1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks 1518 or _global_backward_pre_hooks or _global_backward_hooks 1519 or _global_forward_hooks or _global_forward_pre_hooks): -> 1520 return forward_call(*args, **kwargs) 1522 try: 1523 result = None File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/linear.py:116, in Linear.forward(self, input) 115 def forward(self, input: Tensor) -> Tensor: --> 116 return F.linear(input, self.weight, self.bias) RuntimeError: mat1 and mat2 shapes cannot be multiplied (18x32 and 64x32)
In [27]:
im_x1, im_x2, im_x4 = gen_sin_im2(tgt_size=256*4, exponent_coef=.148/1.9*2, max_value=16, rotate_angle=0, start_val=127) im_x1
Out[27]:
In [30]:
for angle in range(90): max_value = 15 for start_val in range(0, 255-max_value+1, max_value): coef = .148/1.9*2 im_x1, im_x2, im_x4 = gen_sin_im2(tgt_size=256*4, exponent_coef=coef, max_value=max_value, rotate_angle=angle, start_val=start_val) name = f"sin_{int(coef*100):03d}_{max_value}_{angle}_{start_val}" print(name) im_x1.save(f"./data/SyntheticTrain/HR/v2{name}.png") im_x2.save(f"./data/SyntheticTrain/LR/X2/v2{name}.png") im_x4.save(f"./data/SyntheticTrain/LR/X4/v2{name}.png")
sin_015_15_0_0 sin_015_15_0_15 sin_015_15_0_30 sin_015_15_0_45 sin_015_15_0_60 sin_015_15_0_75 sin_015_15_0_90 sin_015_15_0_105 sin_015_15_0_120 sin_015_15_0_135 sin_015_15_0_150 sin_015_15_0_165 sin_015_15_0_180 sin_015_15_0_195 sin_015_15_0_210 sin_015_15_0_225 sin_015_15_0_240 sin_015_15_1_0 sin_015_15_1_15 sin_015_15_1_30 sin_015_15_1_45 sin_015_15_1_60 sin_015_15_1_75 sin_015_15_1_90 sin_015_15_1_105 sin_015_15_1_120 sin_015_15_1_135 sin_015_15_1_150 sin_015_15_1_165 sin_015_15_1_180 sin_015_15_1_195 sin_015_15_1_210 sin_015_15_1_225 sin_015_15_1_240 sin_015_15_2_0 sin_015_15_2_15 sin_015_15_2_30 sin_015_15_2_45 sin_015_15_2_60 sin_015_15_2_75 sin_015_15_2_90 sin_015_15_2_105 sin_015_15_2_120 sin_015_15_2_135 sin_015_15_2_150 sin_015_15_2_165 sin_015_15_2_180 sin_015_15_2_195 sin_015_15_2_210 sin_015_15_2_225 sin_015_15_2_240 sin_015_15_3_0 sin_015_15_3_15 sin_015_15_3_30 sin_015_15_3_45 sin_015_15_3_60 sin_015_15_3_75 sin_015_15_3_90 sin_015_15_3_105 sin_015_15_3_120 sin_015_15_3_135 sin_015_15_3_150 sin_015_15_3_165 sin_015_15_3_180 sin_015_15_3_195 sin_015_15_3_210 sin_015_15_3_225 sin_015_15_3_240 sin_015_15_4_0 sin_015_15_4_15 sin_015_15_4_30 sin_015_15_4_45 sin_015_15_4_60 sin_015_15_4_75 sin_015_15_4_90 sin_015_15_4_105 sin_015_15_4_120 sin_015_15_4_135 sin_015_15_4_150 sin_015_15_4_165 sin_015_15_4_180 sin_015_15_4_195 sin_015_15_4_210 sin_015_15_4_225 sin_015_15_4_240 sin_015_15_5_0 sin_015_15_5_15 sin_015_15_5_30 sin_015_15_5_45 sin_015_15_5_60 sin_015_15_5_75 sin_015_15_5_90 sin_015_15_5_105 sin_015_15_5_120 sin_015_15_5_135 sin_015_15_5_150 sin_015_15_5_165 sin_015_15_5_180 sin_015_15_5_195 sin_015_15_5_210 sin_015_15_5_225 sin_015_15_5_240 sin_015_15_6_0 sin_015_15_6_15 sin_015_15_6_30 sin_015_15_6_45 sin_015_15_6_60 sin_015_15_6_75 sin_015_15_6_90 sin_015_15_6_105 sin_015_15_6_120 sin_015_15_6_135 sin_015_15_6_150 sin_015_15_6_165 sin_015_15_6_180 sin_015_15_6_195 sin_015_15_6_210 sin_015_15_6_225 sin_015_15_6_240 sin_015_15_7_0 sin_015_15_7_15 sin_015_15_7_30 sin_015_15_7_45 sin_015_15_7_60 sin_015_15_7_75 sin_015_15_7_90 sin_015_15_7_105 sin_015_15_7_120 sin_015_15_7_135 sin_015_15_7_150 sin_015_15_7_165 sin_015_15_7_180 sin_015_15_7_195 sin_015_15_7_210 sin_015_15_7_225 sin_015_15_7_240 sin_015_15_8_0 sin_015_15_8_15 sin_015_15_8_30 sin_015_15_8_45 sin_015_15_8_60 sin_015_15_8_75 sin_015_15_8_90 sin_015_15_8_105 sin_015_15_8_120 sin_015_15_8_135 sin_015_15_8_150 sin_015_15_8_165 sin_015_15_8_180 sin_015_15_8_195 sin_015_15_8_210 sin_015_15_8_225 sin_015_15_8_240 sin_015_15_9_0 sin_015_15_9_15 sin_015_15_9_30 sin_015_15_9_45 sin_015_15_9_60 sin_015_15_9_75 sin_015_15_9_90 sin_015_15_9_105 sin_015_15_9_120 sin_015_15_9_135 sin_015_15_9_150 sin_015_15_9_165 sin_015_15_9_180 sin_015_15_9_195 sin_015_15_9_210 sin_015_15_9_225 sin_015_15_9_240 sin_015_15_10_0 sin_015_15_10_15 sin_015_15_10_30 sin_015_15_10_45 sin_015_15_10_60 sin_015_15_10_75 sin_015_15_10_90 sin_015_15_10_105 sin_015_15_10_120 sin_015_15_10_135 sin_015_15_10_150 sin_015_15_10_165 sin_015_15_10_180 sin_015_15_10_195 sin_015_15_10_210 sin_015_15_10_225 sin_015_15_10_240 sin_015_15_11_0 sin_015_15_11_15 sin_015_15_11_30 sin_015_15_11_45 sin_015_15_11_60 sin_015_15_11_75 sin_015_15_11_90 sin_015_15_11_105 sin_015_15_11_120 sin_015_15_11_135 sin_015_15_11_150 sin_015_15_11_165 sin_015_15_11_180 sin_015_15_11_195 sin_015_15_11_210 sin_015_15_11_225 sin_015_15_11_240 sin_015_15_12_0 sin_015_15_12_15 sin_015_15_12_30 sin_015_15_12_45 sin_015_15_12_60 sin_015_15_12_75 sin_015_15_12_90 sin_015_15_12_105 sin_015_15_12_120 sin_015_15_12_135 sin_015_15_12_150 sin_015_15_12_165 sin_015_15_12_180 sin_015_15_12_195 sin_015_15_12_210 sin_015_15_12_225 sin_015_15_12_240 sin_015_15_13_0 sin_015_15_13_15 sin_015_15_13_30 sin_015_15_13_45 sin_015_15_13_60 sin_015_15_13_75 sin_015_15_13_90 sin_015_15_13_105 sin_015_15_13_120 sin_015_15_13_135 sin_015_15_13_150 sin_015_15_13_165 sin_015_15_13_180 sin_015_15_13_195 sin_015_15_13_210 sin_015_15_13_225 sin_015_15_13_240 sin_015_15_14_0 sin_015_15_14_15 sin_015_15_14_30 sin_015_15_14_45 sin_015_15_14_60 sin_015_15_14_75 sin_015_15_14_90 sin_015_15_14_105 sin_015_15_14_120 sin_015_15_14_135 sin_015_15_14_150 sin_015_15_14_165 sin_015_15_14_180 sin_015_15_14_195 sin_015_15_14_210 sin_015_15_14_225 sin_015_15_14_240 sin_015_15_15_0 sin_015_15_15_15 sin_015_15_15_30 sin_015_15_15_45 sin_015_15_15_60 sin_015_15_15_75 sin_015_15_15_90 sin_015_15_15_105 sin_015_15_15_120 sin_015_15_15_135 sin_015_15_15_150 sin_015_15_15_165 sin_015_15_15_180 sin_015_15_15_195 sin_015_15_15_210 sin_015_15_15_225 sin_015_15_15_240 sin_015_15_16_0 sin_015_15_16_15 sin_015_15_16_30 sin_015_15_16_45 sin_015_15_16_60 sin_015_15_16_75 sin_015_15_16_90 sin_015_15_16_105 sin_015_15_16_120 sin_015_15_16_135 sin_015_15_16_150 sin_015_15_16_165 sin_015_15_16_180 sin_015_15_16_195 sin_015_15_16_210 sin_015_15_16_225 sin_015_15_16_240 sin_015_15_17_0 sin_015_15_17_15 sin_015_15_17_30 sin_015_15_17_45 sin_015_15_17_60 sin_015_15_17_75 sin_015_15_17_90 sin_015_15_17_105 sin_015_15_17_120 sin_015_15_17_135 sin_015_15_17_150 sin_015_15_17_165 sin_015_15_17_180 sin_015_15_17_195 sin_015_15_17_210 sin_015_15_17_225 sin_015_15_17_240 sin_015_15_18_0 sin_015_15_18_15 sin_015_15_18_30 sin_015_15_18_45 sin_015_15_18_60 sin_015_15_18_75 sin_015_15_18_90 sin_015_15_18_105 sin_015_15_18_120 sin_015_15_18_135 sin_015_15_18_150 sin_015_15_18_165 sin_015_15_18_180 sin_015_15_18_195 sin_015_15_18_210 sin_015_15_18_225 sin_015_15_18_240 sin_015_15_19_0 sin_015_15_19_15 sin_015_15_19_30 sin_015_15_19_45 sin_015_15_19_60 sin_015_15_19_75 sin_015_15_19_90 sin_015_15_19_105 sin_015_15_19_120 sin_015_15_19_135 sin_015_15_19_150 sin_015_15_19_165 sin_015_15_19_180 sin_015_15_19_195 sin_015_15_19_210 sin_015_15_19_225 sin_015_15_19_240 sin_015_15_20_0 sin_015_15_20_15 sin_015_15_20_30 sin_015_15_20_45 sin_015_15_20_60 sin_015_15_20_75 sin_015_15_20_90 sin_015_15_20_105 sin_015_15_20_120 sin_015_15_20_135 sin_015_15_20_150 sin_015_15_20_165 sin_015_15_20_180 sin_015_15_20_195 sin_015_15_20_210 sin_015_15_20_225 sin_015_15_20_240 sin_015_15_21_0 sin_015_15_21_15 sin_015_15_21_30 sin_015_15_21_45 sin_015_15_21_60 sin_015_15_21_75 sin_015_15_21_90 sin_015_15_21_105 sin_015_15_21_120 sin_015_15_21_135 sin_015_15_21_150 sin_015_15_21_165 sin_015_15_21_180 sin_015_15_21_195 sin_015_15_21_210 sin_015_15_21_225 sin_015_15_21_240 sin_015_15_22_0 sin_015_15_22_15 sin_015_15_22_30 sin_015_15_22_45 sin_015_15_22_60 sin_015_15_22_75 sin_015_15_22_90 sin_015_15_22_105 sin_015_15_22_120 sin_015_15_22_135 sin_015_15_22_150 sin_015_15_22_165 sin_015_15_22_180 sin_015_15_22_195 sin_015_15_22_210 sin_015_15_22_225 sin_015_15_22_240 sin_015_15_23_0 sin_015_15_23_15 sin_015_15_23_30 sin_015_15_23_45 sin_015_15_23_60 sin_015_15_23_75 sin_015_15_23_90 sin_015_15_23_105 sin_015_15_23_120 sin_015_15_23_135 sin_015_15_23_150 sin_015_15_23_165 sin_015_15_23_180 sin_015_15_23_195 sin_015_15_23_210 sin_015_15_23_225 sin_015_15_23_240 sin_015_15_24_0 sin_015_15_24_15 sin_015_15_24_30 sin_015_15_24_45 sin_015_15_24_60 sin_015_15_24_75 sin_015_15_24_90 sin_015_15_24_105 sin_015_15_24_120 sin_015_15_24_135 sin_015_15_24_150 sin_015_15_24_165 sin_015_15_24_180 sin_015_15_24_195 sin_015_15_24_210 sin_015_15_24_225 sin_015_15_24_240 sin_015_15_25_0 sin_015_15_25_15 sin_015_15_25_30 sin_015_15_25_45 sin_015_15_25_60 sin_015_15_25_75 sin_015_15_25_90 sin_015_15_25_105 sin_015_15_25_120 sin_015_15_25_135 sin_015_15_25_150 sin_015_15_25_165 sin_015_15_25_180 sin_015_15_25_195 sin_015_15_25_210 sin_015_15_25_225 sin_015_15_25_240 sin_015_15_26_0 sin_015_15_26_15 sin_015_15_26_30 sin_015_15_26_45 sin_015_15_26_60 sin_015_15_26_75 sin_015_15_26_90 sin_015_15_26_105 sin_015_15_26_120 sin_015_15_26_135 sin_015_15_26_150 sin_015_15_26_165 sin_015_15_26_180 sin_015_15_26_195 sin_015_15_26_210 sin_015_15_26_225 sin_015_15_26_240 sin_015_15_27_0 sin_015_15_27_15 sin_015_15_27_30 sin_015_15_27_45 sin_015_15_27_60 sin_015_15_27_75 sin_015_15_27_90 sin_015_15_27_105 sin_015_15_27_120 sin_015_15_27_135 sin_015_15_27_150 sin_015_15_27_165 sin_015_15_27_180 sin_015_15_27_195 sin_015_15_27_210 sin_015_15_27_225 sin_015_15_27_240 sin_015_15_28_0 sin_015_15_28_15 sin_015_15_28_30 sin_015_15_28_45 sin_015_15_28_60 sin_015_15_28_75 sin_015_15_28_90 sin_015_15_28_105 sin_015_15_28_120 sin_015_15_28_135 sin_015_15_28_150 sin_015_15_28_165 sin_015_15_28_180 sin_015_15_28_195 sin_015_15_28_210 sin_015_15_28_225 sin_015_15_28_240 sin_015_15_29_0 sin_015_15_29_15 sin_015_15_29_30 sin_015_15_29_45 sin_015_15_29_60 sin_015_15_29_75 sin_015_15_29_90 sin_015_15_29_105 sin_015_15_29_120 sin_015_15_29_135 sin_015_15_29_150 sin_015_15_29_165 sin_015_15_29_180 sin_015_15_29_195 sin_015_15_29_210 sin_015_15_29_225 sin_015_15_29_240 sin_015_15_30_0 sin_015_15_30_15 sin_015_15_30_30 sin_015_15_30_45 sin_015_15_30_60 sin_015_15_30_75 sin_015_15_30_90 sin_015_15_30_105 sin_015_15_30_120 sin_015_15_30_135 sin_015_15_30_150 sin_015_15_30_165 sin_015_15_30_180 sin_015_15_30_195 sin_015_15_30_210 sin_015_15_30_225 sin_015_15_30_240 sin_015_15_31_0 sin_015_15_31_15 sin_015_15_31_30 sin_015_15_31_45 sin_015_15_31_60 sin_015_15_31_75 sin_015_15_31_90 sin_015_15_31_105 sin_015_15_31_120 sin_015_15_31_135 sin_015_15_31_150 sin_015_15_31_165 sin_015_15_31_180 sin_015_15_31_195 sin_015_15_31_210 sin_015_15_31_225 sin_015_15_31_240 sin_015_15_32_0 sin_015_15_32_15 sin_015_15_32_30 sin_015_15_32_45 sin_015_15_32_60 sin_015_15_32_75 sin_015_15_32_90 sin_015_15_32_105 sin_015_15_32_120 sin_015_15_32_135 sin_015_15_32_150 sin_015_15_32_165 sin_015_15_32_180 sin_015_15_32_195 sin_015_15_32_210 sin_015_15_32_225 sin_015_15_32_240 sin_015_15_33_0 sin_015_15_33_15 sin_015_15_33_30 sin_015_15_33_45 sin_015_15_33_60 sin_015_15_33_75 sin_015_15_33_90 sin_015_15_33_105 sin_015_15_33_120 sin_015_15_33_135 sin_015_15_33_150 sin_015_15_33_165 sin_015_15_33_180 sin_015_15_33_195 sin_015_15_33_210 sin_015_15_33_225 sin_015_15_33_240 sin_015_15_34_0 sin_015_15_34_15 sin_015_15_34_30 sin_015_15_34_45 sin_015_15_34_60 sin_015_15_34_75 sin_015_15_34_90 sin_015_15_34_105 sin_015_15_34_120 sin_015_15_34_135 sin_015_15_34_150 sin_015_15_34_165 sin_015_15_34_180 sin_015_15_34_195 sin_015_15_34_210 sin_015_15_34_225 sin_015_15_34_240 sin_015_15_35_0 sin_015_15_35_15 sin_015_15_35_30 sin_015_15_35_45 sin_015_15_35_60 sin_015_15_35_75 sin_015_15_35_90 sin_015_15_35_105 sin_015_15_35_120 sin_015_15_35_135 sin_015_15_35_150 sin_015_15_35_165 sin_015_15_35_180 sin_015_15_35_195 sin_015_15_35_210 sin_015_15_35_225 sin_015_15_35_240 sin_015_15_36_0 sin_015_15_36_15 sin_015_15_36_30 sin_015_15_36_45 sin_015_15_36_60 sin_015_15_36_75 sin_015_15_36_90 sin_015_15_36_105 sin_015_15_36_120 sin_015_15_36_135 sin_015_15_36_150 sin_015_15_36_165 sin_015_15_36_180 sin_015_15_36_195 sin_015_15_36_210 sin_015_15_36_225 sin_015_15_36_240 sin_015_15_37_0 sin_015_15_37_15 sin_015_15_37_30 sin_015_15_37_45 sin_015_15_37_60 sin_015_15_37_75 sin_015_15_37_90 sin_015_15_37_105 sin_015_15_37_120 sin_015_15_37_135 sin_015_15_37_150 sin_015_15_37_165 sin_015_15_37_180 sin_015_15_37_195 sin_015_15_37_210 sin_015_15_37_225 sin_015_15_37_240 sin_015_15_38_0 sin_015_15_38_15 sin_015_15_38_30 sin_015_15_38_45 sin_015_15_38_60 sin_015_15_38_75 sin_015_15_38_90 sin_015_15_38_105 sin_015_15_38_120 sin_015_15_38_135 sin_015_15_38_150 sin_015_15_38_165 sin_015_15_38_180 sin_015_15_38_195 sin_015_15_38_210 sin_015_15_38_225 sin_015_15_38_240 sin_015_15_39_0 sin_015_15_39_15 sin_015_15_39_30 sin_015_15_39_45 sin_015_15_39_60 sin_015_15_39_75 sin_015_15_39_90 sin_015_15_39_105 sin_015_15_39_120 sin_015_15_39_135 sin_015_15_39_150 sin_015_15_39_165 sin_015_15_39_180 sin_015_15_39_195 sin_015_15_39_210 sin_015_15_39_225 sin_015_15_39_240 sin_015_15_40_0 sin_015_15_40_15 sin_015_15_40_30 sin_015_15_40_45 sin_015_15_40_60 sin_015_15_40_75 sin_015_15_40_90 sin_015_15_40_105 sin_015_15_40_120 sin_015_15_40_135 sin_015_15_40_150 sin_015_15_40_165 sin_015_15_40_180 sin_015_15_40_195 sin_015_15_40_210 sin_015_15_40_225 sin_015_15_40_240 sin_015_15_41_0 sin_015_15_41_15 sin_015_15_41_30 sin_015_15_41_45 sin_015_15_41_60 sin_015_15_41_75 sin_015_15_41_90 sin_015_15_41_105 sin_015_15_41_120 sin_015_15_41_135 sin_015_15_41_150 sin_015_15_41_165 sin_015_15_41_180 sin_015_15_41_195 sin_015_15_41_210 sin_015_15_41_225 sin_015_15_41_240 sin_015_15_42_0 sin_015_15_42_15 sin_015_15_42_30 sin_015_15_42_45 sin_015_15_42_60 sin_015_15_42_75 sin_015_15_42_90 sin_015_15_42_105 sin_015_15_42_120 sin_015_15_42_135 sin_015_15_42_150 sin_015_15_42_165 sin_015_15_42_180 sin_015_15_42_195 sin_015_15_42_210 sin_015_15_42_225 sin_015_15_42_240 sin_015_15_43_0 sin_015_15_43_15 sin_015_15_43_30 sin_015_15_43_45 sin_015_15_43_60 sin_015_15_43_75 sin_015_15_43_90 sin_015_15_43_105 sin_015_15_43_120 sin_015_15_43_135 sin_015_15_43_150 sin_015_15_43_165 sin_015_15_43_180 sin_015_15_43_195 sin_015_15_43_210 sin_015_15_43_225 sin_015_15_43_240 sin_015_15_44_0 sin_015_15_44_15 sin_015_15_44_30 sin_015_15_44_45 sin_015_15_44_60 sin_015_15_44_75 sin_015_15_44_90 sin_015_15_44_105 sin_015_15_44_120 sin_015_15_44_135 sin_015_15_44_150 sin_015_15_44_165 sin_015_15_44_180 sin_015_15_44_195 sin_015_15_44_210 sin_015_15_44_225 sin_015_15_44_240 sin_015_15_45_0 sin_015_15_45_15 sin_015_15_45_30 sin_015_15_45_45 sin_015_15_45_60 sin_015_15_45_75 sin_015_15_45_90 sin_015_15_45_105 sin_015_15_45_120 sin_015_15_45_135 sin_015_15_45_150 sin_015_15_45_165 sin_015_15_45_180 sin_015_15_45_195 sin_015_15_45_210 sin_015_15_45_225 sin_015_15_45_240 sin_015_15_46_0 sin_015_15_46_15 sin_015_15_46_30 sin_015_15_46_45 sin_015_15_46_60 sin_015_15_46_75 sin_015_15_46_90 sin_015_15_46_105 sin_015_15_46_120 sin_015_15_46_135 sin_015_15_46_150 sin_015_15_46_165 sin_015_15_46_180 sin_015_15_46_195 sin_015_15_46_210 sin_015_15_46_225 sin_015_15_46_240 sin_015_15_47_0 sin_015_15_47_15 sin_015_15_47_30 sin_015_15_47_45 sin_015_15_47_60 sin_015_15_47_75 sin_015_15_47_90 sin_015_15_47_105 sin_015_15_47_120 sin_015_15_47_135 sin_015_15_47_150 sin_015_15_47_165 sin_015_15_47_180 sin_015_15_47_195 sin_015_15_47_210 sin_015_15_47_225 sin_015_15_47_240 sin_015_15_48_0 sin_015_15_48_15 sin_015_15_48_30 sin_015_15_48_45 sin_015_15_48_60 sin_015_15_48_75 sin_015_15_48_90 sin_015_15_48_105 sin_015_15_48_120 sin_015_15_48_135 sin_015_15_48_150 sin_015_15_48_165 sin_015_15_48_180 sin_015_15_48_195 sin_015_15_48_210 sin_015_15_48_225 sin_015_15_48_240 sin_015_15_49_0 sin_015_15_49_15 sin_015_15_49_30 sin_015_15_49_45 sin_015_15_49_60 sin_015_15_49_75 sin_015_15_49_90 sin_015_15_49_105 sin_015_15_49_120 sin_015_15_49_135 sin_015_15_49_150 sin_015_15_49_165 sin_015_15_49_180 sin_015_15_49_195 sin_015_15_49_210 sin_015_15_49_225 sin_015_15_49_240 sin_015_15_50_0 sin_015_15_50_15 sin_015_15_50_30 sin_015_15_50_45 sin_015_15_50_60 sin_015_15_50_75 sin_015_15_50_90 sin_015_15_50_105 sin_015_15_50_120 sin_015_15_50_135 sin_015_15_50_150 sin_015_15_50_165 sin_015_15_50_180 sin_015_15_50_195 sin_015_15_50_210 sin_015_15_50_225 sin_015_15_50_240 sin_015_15_51_0 sin_015_15_51_15 sin_015_15_51_30 sin_015_15_51_45 sin_015_15_51_60 sin_015_15_51_75 sin_015_15_51_90 sin_015_15_51_105 sin_015_15_51_120 sin_015_15_51_135 sin_015_15_51_150 sin_015_15_51_165 sin_015_15_51_180 sin_015_15_51_195 sin_015_15_51_210 sin_015_15_51_225 sin_015_15_51_240 sin_015_15_52_0 sin_015_15_52_15 sin_015_15_52_30 sin_015_15_52_45 sin_015_15_52_60 sin_015_15_52_75 sin_015_15_52_90 sin_015_15_52_105 sin_015_15_52_120 sin_015_15_52_135 sin_015_15_52_150 sin_015_15_52_165 sin_015_15_52_180 sin_015_15_52_195 sin_015_15_52_210 sin_015_15_52_225 sin_015_15_52_240 sin_015_15_53_0 sin_015_15_53_15 sin_015_15_53_30 sin_015_15_53_45 sin_015_15_53_60 sin_015_15_53_75 sin_015_15_53_90 sin_015_15_53_105 sin_015_15_53_120 sin_015_15_53_135 sin_015_15_53_150 sin_015_15_53_165 sin_015_15_53_180 sin_015_15_53_195 sin_015_15_53_210 sin_015_15_53_225 sin_015_15_53_240 sin_015_15_54_0 sin_015_15_54_15 sin_015_15_54_30 sin_015_15_54_45 sin_015_15_54_60 sin_015_15_54_75 sin_015_15_54_90 sin_015_15_54_105 sin_015_15_54_120 sin_015_15_54_135 sin_015_15_54_150 sin_015_15_54_165 sin_015_15_54_180 sin_015_15_54_195 sin_015_15_54_210 sin_015_15_54_225 sin_015_15_54_240 sin_015_15_55_0 sin_015_15_55_15 sin_015_15_55_30 sin_015_15_55_45 sin_015_15_55_60 sin_015_15_55_75 sin_015_15_55_90 sin_015_15_55_105 sin_015_15_55_120 sin_015_15_55_135 sin_015_15_55_150 sin_015_15_55_165 sin_015_15_55_180 sin_015_15_55_195 sin_015_15_55_210 sin_015_15_55_225 sin_015_15_55_240 sin_015_15_56_0 sin_015_15_56_15 sin_015_15_56_30 sin_015_15_56_45 sin_015_15_56_60 sin_015_15_56_75 sin_015_15_56_90 sin_015_15_56_105 sin_015_15_56_120 sin_015_15_56_135 sin_015_15_56_150 sin_015_15_56_165 sin_015_15_56_180 sin_015_15_56_195 sin_015_15_56_210 sin_015_15_56_225 sin_015_15_56_240 sin_015_15_57_0 sin_015_15_57_15 sin_015_15_57_30 sin_015_15_57_45 sin_015_15_57_60 sin_015_15_57_75 sin_015_15_57_90 sin_015_15_57_105 sin_015_15_57_120 sin_015_15_57_135 sin_015_15_57_150 sin_015_15_57_165 sin_015_15_57_180 sin_015_15_57_195 sin_015_15_57_210 sin_015_15_57_225 sin_015_15_57_240 sin_015_15_58_0 sin_015_15_58_15 sin_015_15_58_30 sin_015_15_58_45 sin_015_15_58_60 sin_015_15_58_75 sin_015_15_58_90 sin_015_15_58_105 sin_015_15_58_120 sin_015_15_58_135 sin_015_15_58_150 sin_015_15_58_165 sin_015_15_58_180 sin_015_15_58_195 sin_015_15_58_210 sin_015_15_58_225 sin_015_15_58_240 sin_015_15_59_0 sin_015_15_59_15 sin_015_15_59_30 sin_015_15_59_45 sin_015_15_59_60 sin_015_15_59_75 sin_015_15_59_90 sin_015_15_59_105 sin_015_15_59_120 sin_015_15_59_135 sin_015_15_59_150 sin_015_15_59_165 sin_015_15_59_180 sin_015_15_59_195 sin_015_15_59_210 sin_015_15_59_225 sin_015_15_59_240 sin_015_15_60_0 sin_015_15_60_15 sin_015_15_60_30 sin_015_15_60_45 sin_015_15_60_60 sin_015_15_60_75 sin_015_15_60_90 sin_015_15_60_105 sin_015_15_60_120 sin_015_15_60_135 sin_015_15_60_150 sin_015_15_60_165 sin_015_15_60_180 sin_015_15_60_195 sin_015_15_60_210 sin_015_15_60_225 sin_015_15_60_240 sin_015_15_61_0 sin_015_15_61_15 sin_015_15_61_30 sin_015_15_61_45 sin_015_15_61_60 sin_015_15_61_75 sin_015_15_61_90 sin_015_15_61_105 sin_015_15_61_120 sin_015_15_61_135 sin_015_15_61_150 sin_015_15_61_165 sin_015_15_61_180 sin_015_15_61_195 sin_015_15_61_210 sin_015_15_61_225 sin_015_15_61_240 sin_015_15_62_0 sin_015_15_62_15 sin_015_15_62_30 sin_015_15_62_45 sin_015_15_62_60 sin_015_15_62_75 sin_015_15_62_90 sin_015_15_62_105 sin_015_15_62_120 sin_015_15_62_135 sin_015_15_62_150 sin_015_15_62_165 sin_015_15_62_180 sin_015_15_62_195 sin_015_15_62_210 sin_015_15_62_225 sin_015_15_62_240 sin_015_15_63_0 sin_015_15_63_15 sin_015_15_63_30 sin_015_15_63_45 sin_015_15_63_60 sin_015_15_63_75 sin_015_15_63_90 sin_015_15_63_105 sin_015_15_63_120 sin_015_15_63_135 sin_015_15_63_150 sin_015_15_63_165 sin_015_15_63_180 sin_015_15_63_195 sin_015_15_63_210 sin_015_15_63_225 sin_015_15_63_240 sin_015_15_64_0 sin_015_15_64_15 sin_015_15_64_30 sin_015_15_64_45 sin_015_15_64_60 sin_015_15_64_75 sin_015_15_64_90 sin_015_15_64_105 sin_015_15_64_120 sin_015_15_64_135 sin_015_15_64_150 sin_015_15_64_165 sin_015_15_64_180 sin_015_15_64_195 sin_015_15_64_210 sin_015_15_64_225 sin_015_15_64_240 sin_015_15_65_0 sin_015_15_65_15 sin_015_15_65_30 sin_015_15_65_45 sin_015_15_65_60 sin_015_15_65_75 sin_015_15_65_90 sin_015_15_65_105 sin_015_15_65_120 sin_015_15_65_135 sin_015_15_65_150 sin_015_15_65_165 sin_015_15_65_180 sin_015_15_65_195 sin_015_15_65_210 sin_015_15_65_225 sin_015_15_65_240 sin_015_15_66_0 sin_015_15_66_15 sin_015_15_66_30 sin_015_15_66_45 sin_015_15_66_60 sin_015_15_66_75 sin_015_15_66_90 sin_015_15_66_105 sin_015_15_66_120 sin_015_15_66_135 sin_015_15_66_150 sin_015_15_66_165 sin_015_15_66_180 sin_015_15_66_195 sin_015_15_66_210 sin_015_15_66_225 sin_015_15_66_240 sin_015_15_67_0 sin_015_15_67_15 sin_015_15_67_30 sin_015_15_67_45 sin_015_15_67_60 sin_015_15_67_75 sin_015_15_67_90 sin_015_15_67_105 sin_015_15_67_120 sin_015_15_67_135 sin_015_15_67_150 sin_015_15_67_165 sin_015_15_67_180 sin_015_15_67_195 sin_015_15_67_210 sin_015_15_67_225 sin_015_15_67_240 sin_015_15_68_0 sin_015_15_68_15 sin_015_15_68_30 sin_015_15_68_45 sin_015_15_68_60 sin_015_15_68_75 sin_015_15_68_90 sin_015_15_68_105 sin_015_15_68_120 sin_015_15_68_135 sin_015_15_68_150 sin_015_15_68_165 sin_015_15_68_180 sin_015_15_68_195 sin_015_15_68_210 sin_015_15_68_225 sin_015_15_68_240 sin_015_15_69_0 sin_015_15_69_15 sin_015_15_69_30 sin_015_15_69_45 sin_015_15_69_60 sin_015_15_69_75 sin_015_15_69_90 sin_015_15_69_105 sin_015_15_69_120 sin_015_15_69_135 sin_015_15_69_150 sin_015_15_69_165 sin_015_15_69_180 sin_015_15_69_195 sin_015_15_69_210 sin_015_15_69_225 sin_015_15_69_240 sin_015_15_70_0 sin_015_15_70_15 sin_015_15_70_30 sin_015_15_70_45 sin_015_15_70_60 sin_015_15_70_75 sin_015_15_70_90 sin_015_15_70_105 sin_015_15_70_120 sin_015_15_70_135 sin_015_15_70_150 sin_015_15_70_165 sin_015_15_70_180 sin_015_15_70_195 sin_015_15_70_210 sin_015_15_70_225 sin_015_15_70_240 sin_015_15_71_0 sin_015_15_71_15 sin_015_15_71_30 sin_015_15_71_45 sin_015_15_71_60 sin_015_15_71_75 sin_015_15_71_90 sin_015_15_71_105 sin_015_15_71_120 sin_015_15_71_135 sin_015_15_71_150 sin_015_15_71_165 sin_015_15_71_180 sin_015_15_71_195 sin_015_15_71_210 sin_015_15_71_225 sin_015_15_71_240 sin_015_15_72_0 sin_015_15_72_15 sin_015_15_72_30 sin_015_15_72_45 sin_015_15_72_60 sin_015_15_72_75 sin_015_15_72_90 sin_015_15_72_105 sin_015_15_72_120 sin_015_15_72_135 sin_015_15_72_150 sin_015_15_72_165 sin_015_15_72_180 sin_015_15_72_195 sin_015_15_72_210 sin_015_15_72_225 sin_015_15_72_240 sin_015_15_73_0 sin_015_15_73_15 sin_015_15_73_30 sin_015_15_73_45 sin_015_15_73_60 sin_015_15_73_75 sin_015_15_73_90 sin_015_15_73_105 sin_015_15_73_120 sin_015_15_73_135 sin_015_15_73_150 sin_015_15_73_165 sin_015_15_73_180 sin_015_15_73_195 sin_015_15_73_210 sin_015_15_73_225 sin_015_15_73_240 sin_015_15_74_0 sin_015_15_74_15 sin_015_15_74_30 sin_015_15_74_45 sin_015_15_74_60 sin_015_15_74_75 sin_015_15_74_90 sin_015_15_74_105 sin_015_15_74_120 sin_015_15_74_135 sin_015_15_74_150 sin_015_15_74_165 sin_015_15_74_180 sin_015_15_74_195 sin_015_15_74_210 sin_015_15_74_225 sin_015_15_74_240 sin_015_15_75_0 sin_015_15_75_15 sin_015_15_75_30 sin_015_15_75_45 sin_015_15_75_60 sin_015_15_75_75 sin_015_15_75_90 sin_015_15_75_105 sin_015_15_75_120 sin_015_15_75_135 sin_015_15_75_150 sin_015_15_75_165 sin_015_15_75_180 sin_015_15_75_195 sin_015_15_75_210 sin_015_15_75_225 sin_015_15_75_240 sin_015_15_76_0 sin_015_15_76_15 sin_015_15_76_30 sin_015_15_76_45 sin_015_15_76_60 sin_015_15_76_75 sin_015_15_76_90 sin_015_15_76_105 sin_015_15_76_120 sin_015_15_76_135 sin_015_15_76_150 sin_015_15_76_165 sin_015_15_76_180 sin_015_15_76_195 sin_015_15_76_210 sin_015_15_76_225 sin_015_15_76_240 sin_015_15_77_0 sin_015_15_77_15 sin_015_15_77_30 sin_015_15_77_45 sin_015_15_77_60 sin_015_15_77_75 sin_015_15_77_90 sin_015_15_77_105 sin_015_15_77_120 sin_015_15_77_135 sin_015_15_77_150 sin_015_15_77_165 sin_015_15_77_180 sin_015_15_77_195 sin_015_15_77_210 sin_015_15_77_225 sin_015_15_77_240 sin_015_15_78_0 sin_015_15_78_15 sin_015_15_78_30 sin_015_15_78_45 sin_015_15_78_60 sin_015_15_78_75 sin_015_15_78_90 sin_015_15_78_105 sin_015_15_78_120 sin_015_15_78_135 sin_015_15_78_150 sin_015_15_78_165 sin_015_15_78_180 sin_015_15_78_195 sin_015_15_78_210 sin_015_15_78_225 sin_015_15_78_240 sin_015_15_79_0 sin_015_15_79_15 sin_015_15_79_30 sin_015_15_79_45 sin_015_15_79_60 sin_015_15_79_75 sin_015_15_79_90 sin_015_15_79_105 sin_015_15_79_120 sin_015_15_79_135 sin_015_15_79_150 sin_015_15_79_165 sin_015_15_79_180 sin_015_15_79_195 sin_015_15_79_210 sin_015_15_79_225 sin_015_15_79_240 sin_015_15_80_0 sin_015_15_80_15 sin_015_15_80_30 sin_015_15_80_45 sin_015_15_80_60 sin_015_15_80_75 sin_015_15_80_90 sin_015_15_80_105 sin_015_15_80_120 sin_015_15_80_135 sin_015_15_80_150 sin_015_15_80_165 sin_015_15_80_180 sin_015_15_80_195 sin_015_15_80_210 sin_015_15_80_225 sin_015_15_80_240 sin_015_15_81_0 sin_015_15_81_15 sin_015_15_81_30 sin_015_15_81_45 sin_015_15_81_60 sin_015_15_81_75 sin_015_15_81_90 sin_015_15_81_105 sin_015_15_81_120 sin_015_15_81_135 sin_015_15_81_150 sin_015_15_81_165 sin_015_15_81_180 sin_015_15_81_195 sin_015_15_81_210 sin_015_15_81_225 sin_015_15_81_240 sin_015_15_82_0 sin_015_15_82_15 sin_015_15_82_30 sin_015_15_82_45 sin_015_15_82_60 sin_015_15_82_75 sin_015_15_82_90 sin_015_15_82_105 sin_015_15_82_120 sin_015_15_82_135 sin_015_15_82_150 sin_015_15_82_165 sin_015_15_82_180 sin_015_15_82_195 sin_015_15_82_210 sin_015_15_82_225 sin_015_15_82_240 sin_015_15_83_0 sin_015_15_83_15 sin_015_15_83_30 sin_015_15_83_45 sin_015_15_83_60 sin_015_15_83_75 sin_015_15_83_90 sin_015_15_83_105 sin_015_15_83_120 sin_015_15_83_135 sin_015_15_83_150 sin_015_15_83_165 sin_015_15_83_180 sin_015_15_83_195 sin_015_15_83_210 sin_015_15_83_225 sin_015_15_83_240 sin_015_15_84_0 sin_015_15_84_15 sin_015_15_84_30 sin_015_15_84_45 sin_015_15_84_60 sin_015_15_84_75 sin_015_15_84_90 sin_015_15_84_105 sin_015_15_84_120 sin_015_15_84_135 sin_015_15_84_150 sin_015_15_84_165 sin_015_15_84_180 sin_015_15_84_195 sin_015_15_84_210 sin_015_15_84_225 sin_015_15_84_240 sin_015_15_85_0 sin_015_15_85_15 sin_015_15_85_30 sin_015_15_85_45 sin_015_15_85_60 sin_015_15_85_75 sin_015_15_85_90 sin_015_15_85_105 sin_015_15_85_120 sin_015_15_85_135 sin_015_15_85_150 sin_015_15_85_165 sin_015_15_85_180 sin_015_15_85_195 sin_015_15_85_210 sin_015_15_85_225 sin_015_15_85_240 sin_015_15_86_0 sin_015_15_86_15 sin_015_15_86_30 sin_015_15_86_45 sin_015_15_86_60 sin_015_15_86_75 sin_015_15_86_90 sin_015_15_86_105 sin_015_15_86_120 sin_015_15_86_135 sin_015_15_86_150 sin_015_15_86_165 sin_015_15_86_180 sin_015_15_86_195 sin_015_15_86_210 sin_015_15_86_225 sin_015_15_86_240 sin_015_15_87_0 sin_015_15_87_15 sin_015_15_87_30 sin_015_15_87_45 sin_015_15_87_60 sin_015_15_87_75 sin_015_15_87_90 sin_015_15_87_105 sin_015_15_87_120 sin_015_15_87_135 sin_015_15_87_150 sin_015_15_87_165 sin_015_15_87_180 sin_015_15_87_195 sin_015_15_87_210 sin_015_15_87_225 sin_015_15_87_240 sin_015_15_88_0 sin_015_15_88_15 sin_015_15_88_30 sin_015_15_88_45 sin_015_15_88_60 sin_015_15_88_75 sin_015_15_88_90 sin_015_15_88_105 sin_015_15_88_120 sin_015_15_88_135 sin_015_15_88_150 sin_015_15_88_165 sin_015_15_88_180 sin_015_15_88_195 sin_015_15_88_210 sin_015_15_88_225 sin_015_15_88_240 sin_015_15_89_0 sin_015_15_89_15 sin_015_15_89_30 sin_015_15_89_45 sin_015_15_89_60 sin_015_15_89_75 sin_015_15_89_90 sin_015_15_89_105 sin_015_15_89_120 sin_015_15_89_135 sin_015_15_89_150 sin_015_15_89_165 sin_015_15_89_180 sin_015_15_89_195 sin_015_15_89_210 sin_015_15_89_225 sin_015_15_89_240
In [250]:
Path("./data/Synthetic/HR/").mkdir(parents=True, exist_ok=True) Path("./data/Synthetic/LR/X2").mkdir(parents=True, exist_ok=True) Path("./data/Synthetic/LR/X4").mkdir(parents=True, exist_ok=True)
In [ ]:
In [26]:
from PIL import Image import numpy as np def gen_sin_im(tgt_size=640, exponent_coef=0.8, max_value=255, rotate_angle=0): normal_size = int((np.sqrt(2)-1)*tgt_size*np.cos(np.radians(rotate_angle/np.pi))) size = tgt_size+normal_size*2 im = np.linspace(0,np.pi*size,num=size)+np.pi im = np.sin(im**exponent_coef) im = np.stack([im]*size) im = im-im.min() im = im/im.max() im = im*max_value im = im.astype(np.uint8) # im = im[normal_size:-normal_size,normal_size:-normal_size] im_hr = Image.fromarray(im, mode='L') im_hr = im_hr.rotate(rotate_angle) im_hr = im_hr.crop((normal_size,normal_size,im.shape[1]-normal_size,im.shape[0]-normal_size)) im_x2 = im_hr.copy() im_x4 = im_hr.copy() im_x2.thumbnail([tgt_size//2,tgt_size//2], resample=Image.LANCZOS) im_x4.thumbnail([tgt_size//4,tgt_size//4], resample=Image.LANCZOS) return im_hr, im_x2, im_x4 def gen_sin_im2(tgt_size=640, exponent_coef=0.8, max_value=255, rotate_angle=0, start_val = 0): normal_size = int((np.sqrt(2)-1)*tgt_size*np.cos(np.radians(rotate_angle/np.pi))) size = tgt_size+normal_size*2 im = np.linspace(0,np.pi*size,num=size)+np.pi im = np.sin(im*im**exponent_coef) im = np.stack([im]*size) im = im-im.min() im = im/im.max() im = im*max_value+start_val im = im.astype(np.uint8) # im = im[normal_size:-normal_size,normal_size:-normal_size] im_hr = Image.fromarray(im, mode='L') im_hr = im_hr.rotate(rotate_angle) im_hr = im_hr.crop((normal_size,normal_size,im.shape[1]-normal_size,im.shape[0]-normal_size)) im_x2 = im_hr.copy() im_x4 = im_hr.copy() im_x2.thumbnail([tgt_size//2,tgt_size//2], resample=Image.LANCZOS) im_x4.thumbnail([tgt_size//4,tgt_size//4], resample=Image.LANCZOS) return im_hr, im_x2, im_x4 # for max_value in range(1, 255): # im_x1, im_x2, im_x4 = gen_sin_im(size=256*4, exponent_coef=coef, max_value=max_value, rotate_angle=45) # im_x1
In [93]:
max_value = 255 for angle in [45,90,135]: coef = 0.55 im_x1, im_x2, im_x4 = gen_sin_im(tgt_size=256*4, exponent_coef=coef, max_value=max_value, rotate_angle=angle) name = f"sin_{int(coef*100):03d}_{max_value}_{angle}" print(name) im_x1.save(f"./data/Synthetic/HR/{name}.png") im_x2.save(f"./data/Synthetic/LR/X2/{name}.png") im_x4.save(f"./data/Synthetic/LR/X4/{name}.png")
sin_055_255_45 sin_055_255_90 sin_055_255_135
In [123]:
max_value = 255 for angle in range(90): coef = .148/2 im_x1, im_x2, im_x4 = gen_sin_im2(tgt_size=256*4, exponent_coef=coef, max_value=max_value, rotate_angle=angle) name = f"sin_{int(coef*100):03d}_{max_value}_{angle}" print(name) im_x1.save(f"./data/Synthetic/HR/v2{name}.png") im_x2.save(f"./data/Synthetic/LR/X2/v2{name}.png") im_x4.save(f"./data/Synthetic/LR/X4/v2{name}.png")
sin_007_255_0 sin_007_255_1 sin_007_255_2 sin_007_255_3 sin_007_255_4 sin_007_255_5 sin_007_255_6 sin_007_255_7 sin_007_255_8 sin_007_255_9 sin_007_255_10 sin_007_255_11 sin_007_255_12 sin_007_255_13 sin_007_255_14 sin_007_255_15 sin_007_255_16 sin_007_255_17 sin_007_255_18 sin_007_255_19 sin_007_255_20 sin_007_255_21 sin_007_255_22 sin_007_255_23 sin_007_255_24 sin_007_255_25 sin_007_255_26 sin_007_255_27 sin_007_255_28 sin_007_255_29 sin_007_255_30 sin_007_255_31 sin_007_255_32 sin_007_255_33 sin_007_255_34 sin_007_255_35 sin_007_255_36 sin_007_255_37 sin_007_255_38 sin_007_255_39 sin_007_255_40 sin_007_255_41 sin_007_255_42 sin_007_255_43 sin_007_255_44 sin_007_255_45 sin_007_255_46 sin_007_255_47 sin_007_255_48 sin_007_255_49 sin_007_255_50 sin_007_255_51 sin_007_255_52 sin_007_255_53 sin_007_255_54 sin_007_255_55 sin_007_255_56 sin_007_255_57 sin_007_255_58 sin_007_255_59 sin_007_255_60 sin_007_255_61 sin_007_255_62 sin_007_255_63 sin_007_255_64 sin_007_255_65 sin_007_255_66 sin_007_255_67 sin_007_255_68 sin_007_255_69 sin_007_255_70 sin_007_255_71 sin_007_255_72 sin_007_255_73 sin_007_255_74 sin_007_255_75 sin_007_255_76 sin_007_255_77 sin_007_255_78 sin_007_255_79 sin_007_255_80 sin_007_255_81 sin_007_255_82 sin_007_255_83 sin_007_255_84 sin_007_255_85 sin_007_255_86 sin_007_255_87 sin_007_255_88 sin_007_255_89
In [ ]:
from PIL import Image import numpy as np def PSNR(y_true, y_pred, shave_border=4): target_data = np.array(y_true, dtype=np.float32) ref_data = np.array(y_pred, dtype=np.float32) diff = ref_data - target_data if shave_border > 0: diff = diff[shave_border:-shave_border, shave_border:-shave_border] rmse = np.sqrt(np.mean(np.power(diff, 2))) return 20 * np.log10(255. / rmse) def _rgb2ycbcr(img, maxVal=255): O = np.array([[16], [128], [128]]) T = np.array([[0.256788235294118, 0.504129411764706, 0.097905882352941], [-0.148223529411765, -0.290992156862745, 0.439215686274510], [0.439215686274510, -0.367788235294118, -0.071427450980392]]) if maxVal == 1: O = O / 255.0 t = np.reshape(img, (img.shape[0] * img.shape[1], img.shape[2])) t = np.dot(t, np.transpose(T)) t[:, 0] += O[0] t[:, 1] += O[1] t[:, 2] += O[2] ycbcr = np.reshape(t, [img.shape[0], img.shape[1], img.shape[2]]) return ycbcr image = np.array(Image.open("./data/Set14/HR/monarch.png")) np.random.seed(2) noise = np.random.randint(-5,5,size=image.shape) def with_noise(image, noise): return (image + noise).clip(0,255).astype(np.uint8) a = _rgb2ycbcr(image)[:,:,0] b = _rgb2ycbcr(with_noise(image, noise))[:,:,0] image = np.array(Image.open("./data/Set14/HR/monarch.png").convert("YCbCr").getchannel(0)) c = image d = with_noise(image, noise[:,:,0]) image = np.array(Image.open("./data/Set14/HR/monarch.png")) y = _rgb2ycbcr(image)[:,:,0] e = y f = with_noise(y, noise[:,:,0]) noise_before_rgb2y = PSNR(a, b) noise_after_pil_rgb2y = PSNR(c, d) noise_after_mutlut_rgb2y = PSNR(e, f) # 43.49568901720914, 38.837762584624734, 38.445220463904704 noise_before_rgb2y, noise_after_pil_rgb2y, noise_after_mutlut_rgb2y
(43.49568901720914, 38.837762584624734, 38.445220463904704)
In [254]:
for angle in range(0,271, 15): coef = 0.23 max_value=255 im_x1, im_x2, im_x4 = gen_sin_im(tgt_size=256*4, exponent_coef=coef, max_value=max_value, rotate_angle=angle) name = f"sin_{int(coef*100):03d}_{max_value}_{angle}" print(name) im_x1.save(f"./data/Synthetic/HR/{name}.png") im_x2.save(f"./data/Synthetic/LR/X2/{name}.png") im_x4.save(f"./data/Synthetic/LR/X4/{name}.png")
sin_023_255_0 sin_023_255_15 sin_023_255_30 sin_023_255_45 sin_023_255_60 sin_023_255_75 sin_023_255_90 sin_023_255_105 sin_023_255_120 sin_023_255_135 sin_023_255_150 sin_023_255_165 sin_023_255_180 sin_023_255_195 sin_023_255_210 sin_023_255_225 sin_023_255_240 sin_023_255_255 sin_023_255_270
In [227]:
from pathlib import Path hr = list(Path("./data/Synthetic/LR/X4/").glob("*")) sizes = [[f,Image.open(f).size[0],Image.open(f).size[0]] for f in hr] import pandas as pd df = pd.DataFrame(sizes, columns=['path', 'width', 'height']) df
Out[227]:
path | width | height | |
---|---|---|---|
0 | data/Synthetic/LR/X4/const_0000.png | 256 | 256 |
1 | data/Synthetic/LR/X4/const_0001.png | 256 | 256 |
2 | data/Synthetic/LR/X4/const_0002.png | 256 | 256 |
3 | data/Synthetic/LR/X4/const_0003.png | 256 | 256 |
4 | data/Synthetic/LR/X4/const_0004.png | 256 | 256 |
... | ... | ... | ... |
1271 | data/Synthetic/LR/X4/sin_085_253_90.png | 256 | 256 |
1272 | data/Synthetic/LR/X4/sin_085_253_135.png | 256 | 256 |
1273 | data/Synthetic/LR/X4/sin_085_254_45.png | 256 | 256 |
1274 | data/Synthetic/LR/X4/sin_085_254_90.png | 256 | 256 |
1275 | data/Synthetic/LR/X4/sin_085_254_135.png | 256 | 256 |
1276 rows × 3 columns
In [ ]:
hr = list(Path("./data/Synthetic/HR/").glob("*")) sizes = [[f,Image.open(f).size[0],Image.open(f).size[0]] for f in hr] import pandas as pd df = pd.DataFrame(sizes, columns=['path', 'width', 'height']) df
Out[ ]:
path | width | height | |
---|---|---|---|
0 | data/Synthetic/HR/const_0000.png | 1024 | 1024 |
1 | data/Synthetic/HR/const_0001.png | 1024 | 1024 |
2 | data/Synthetic/HR/const_0002.png | 1024 | 1024 |
3 | data/Synthetic/HR/const_0003.png | 1024 | 1024 |
4 | data/Synthetic/HR/const_0004.png | 1024 | 1024 |
... | ... | ... | ... |
1271 | data/Synthetic/HR/sin_085_252_90.png | 1024 | 1024 |
1272 | data/Synthetic/HR/sin_085_253_45.png | 1024 | 1024 |
1273 | data/Synthetic/HR/sin_085_253_90.png | 1024 | 1024 |
1274 | data/Synthetic/HR/sin_085_254_45.png | 1024 | 1024 |
1275 | data/Synthetic/HR/sin_085_254_90.png | 1024 | 1024 |
1276 rows × 3 columns
In [4]:
from matplotlib import pyplot as plt import numpy as np cmap = plt.get_cmap('viridis') cmaplist = [cmap(i) for i in range(cmap.N)] cmaplut = np.array(cmaplist) cmaplut = np.round(cmaplut[:, 0:3]*255).astype(np.uint8) cmaplut.shape im = np.random.randint(0,255,size=[127,127]).astype(np.uint8) im_c = cmaplut[im] from PIL import Image Image.fromarray(im_c)
Out[4]:
In [2]:
import torch import matplotlib.pyplot as plt def perm_roll(im, axis, amount): permutation = torch.roll(torch.arange(im.shape[axis], device=im.device), amount, dims=0) return torch.index_select(im, axis, permutation) def shift_left(im): tt = perm_roll(im, axis=-2, amount=-(im.shape[-2]+1)//2) tt = perm_roll(tt, axis=-1, amount=-(im.shape[-1]+1)//2) return tt def shift_right(im): tt = perm_roll(im, axis=-2, amount=(im.shape[-2]+1)//2) tt = perm_roll(tt, axis=-1, amount=(im.shape[-1]+1)//2) return tt def circular_aperture(h, w, r=None, low_pass_frequency=False): if r is None: r = min(h//2, w//2) x, y = torch.meshgrid(torch.arange(-h//2, h//2), torch.arange(-w//2, w//2), indexing='ij') circle_dist = torch.sqrt(x**2 + y**2) if low_pass_frequency: circle_aperture = torch.where(circle_dist<r, torch.zeros_like(circle_dist), torch.ones_like(circle_dist)) else: circle_aperture = torch.where(circle_dist<r, torch.ones_like(circle_dist), torch.zeros_like(circle_dist)) return circle_aperture def aperture(h, w, condition=None, low_pass_frequency=False): """torch.where(condition(circle_dist), torch.ones_like(circle_dist), torch.zeros_like(circle_dist)) """ x, y = torch.meshgrid(torch.arange(-h//2, h//2), torch.arange(-w//2, w//2), indexing='ij') circle_dist = torch.sqrt(x**2 + y**2) if low_pass_frequency: circle_aperture = torch.where(condition(circle_dist), torch.zeros_like(circle_dist), torch.ones_like(circle_dist)) else: circle_aperture = torch.where(condition(circle_dist), torch.ones_like(circle_dist), torch.zeros_like(circle_dist)) return circle_aperture def imshow(tensor, figsize=None, title="", **args): figsize = figsize if figsize else (13*0.8,5*0.8) if type(tensor) is list: for idx, el in enumerate(tensor): imshow(el, figsize=figsize, title=title, **args) plt.suptitle("{} {}".format(idx, title)) return if len(tensor.shape)==4: for idx, el in enumerate(torch.squeeze(tensor, dim=1)): imshow(el, figsize=figsize, title=title, **args) plt.suptitle("{} {}".format(idx, title)) return tensor = tensor.detach().cpu() if type(tensor) == torch.Tensor else tensor if tensor.dtype == torch.complex64: f, ax = plt.subplots(1, 5, figsize=figsize, gridspec_kw={'width_ratios': [46.5,3,1,46.5,3]}) real_im = ax[0].imshow(tensor.real, **args) imag_im = ax[3].imshow(tensor.imag, **args) box = ax[1].get_position() box.x0 = box.x0 - 0.02 box.x1 = box.x1 - 0.03 ax[1].set_position(box) box = ax[4].get_position() box.x0 = box.x0 - 0.02 box.x1 = box.x1 - 0.03 ax[4].set_position(box) ax[0].set_title("real"); ax[3].set_title("imag"); f.colorbar(real_im, ax[1]); f.colorbar(imag_im, ax[4]); f.suptitle(title) ax[2].remove() return f, ax else: f, ax = plt.subplots(1, 2, gridspec_kw={'width_ratios': [95,5]}, figsize=figsize) im = ax[0].imshow(tensor, **args) f.colorbar(im, ax[1]) f.suptitle(title) return f, ax h, w = 640, 640 r = min(h, w)//4 imshow(aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, low_pass_frequency=False))
Out[2]:
(<Figure size 1040x400 with 2 Axes>, array([<Axes: >, <Axes: >], dtype=object))
In [73]:
aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, is_inv=True).sum()
Out[73]:
tensor(12453.)
In [11]:
from torch.fft import rfft2, irfft2, fft2, ifft2 i = 206 image = np.array(Image.open("./models/HDBHNet_L_DIV2K_x4/val/Set14/monarch_400000.png").convert("YCbCr").getchannel(0))#[i:i+48,i:i+48] h,w = image.shape r = min(h, w)//12 ap = aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, low_pass_frequency=False) image = torch.tensor(image) # image = ifft(fft2(image) * aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, is_inv=False)) image = ifft2(shift_right(shift_right(fft2(image))*ap)).real**2 f,ax=plt.subplots(1,1,figsize=[20,20]) ax.imshow(image)
Out[11]:
<matplotlib.image.AxesImage at 0x7ff3546c5c60>
In [54]:
imshow(shift_left(fft2(image))*aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, is_inv=True), figsize=[25,25])
Out[54]:
(<Figure size 2500x2500 with 4 Axes>, array([<Axes: title={'center': 'real'}>, <Axes: >, <Axes: >, <Axes: title={'center': 'imag'}>, <Axes: >], dtype=object))
In [43]:
aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, is_inv=False).shape, fft2(image).shape
Out[43]:
(torch.Size([504, 768]), torch.Size([504, 768]))