From f06ff1eae8ded0969803cc2346e00ba9adb4d8bc Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 07:57:09 -0800 Subject: [PATCH 01/70] feat: ms_ssim implementation --- core/leras/ops/__init__.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/core/leras/ops/__init__.py b/core/leras/ops/__init__.py index 500a22a..af59c6c 100644 --- a/core/leras/ops/__init__.py +++ b/core/leras/ops/__init__.py @@ -307,6 +307,35 @@ def dssim(img1,img2, max_val, filter_size=11, filter_sigma=1.5, k1=0.01, k2=0.03 nn.dssim = dssim + +def ms_ssim(img1, img2, resolution, kernel_size=11, k1=0.01, k2=0.03, max_value=1.0, + power_factors=(0.0448, 0.2856, 0.3001, 0.2363, 0.1333)): + img_dtype = img1.dtype + if img_dtype != img2.dtype: + raise ValueError("img1.dtype != img2.dtype") + + if img_dtype != tf.float32: + img1 = tf.cast(img1, tf.float32) + img2 = tf.cast(img2, tf.float32) + + # restrict mssim factors to those greater/equal to kernel size + power_factors = [power_factors[i] for i in range(len(power_factors)) if resolution//(2**i) >= kernel_size] + + # normalize power factors if reduced because of size + if sum(power_factors) < 1.0: + power_factors = [x/sum(power_factors) for x in power_factors] + + ms_ssim_val = tf.image.ssim_multiscale(img1, img2, max_value=max_value, power_factors=power_factors, + filter_size=kernel_size, k1=k1, k2=k2) + loss = (1.0 - ms_ssim_val) / 2.0 + + if img_dtype != tf.float32: + loss = tf.cast(loss, img_dtype) + return loss + +nn.dssim = ms_ssim + + def space_to_depth(x, size): if nn.data_format == "NHWC": # match NCHW version in order to switch data_format without problems @@ -385,7 +414,7 @@ def total_variation_mse(images): """ pixel_dif1 = images[:, 1:, :, :] - images[:, :-1, :, :] pixel_dif2 = images[:, :, 1:, :] - images[:, :, :-1, :] - + tot_var = ( tf.reduce_sum(tf.square(pixel_dif1), axis=[1,2,3]) + tf.reduce_sum(tf.square(pixel_dif2), axis=[1,2,3]) ) return tot_var @@ -400,4 +429,4 @@ def tf_suppress_lower_mean(t, eps=0.00001): q = tf.clip_by_value(q-t_mean_eps, 0, eps) q = q * (t/eps) return q -""" \ No newline at end of file +""" From 7cb33128f06a00da8f22cadbe4f9a23481779726 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 08:08:36 -0800 Subject: [PATCH 02/70] feat: add ms_ssim_loss option to SAEHD prompts --- models/Model_SAEHD/Model.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 02dbddf..65bca2d 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -53,6 +53,8 @@ class SAEHDModel(ModelBase): lr_dropout = {True:'y', False:'n'}.get(lr_dropout, lr_dropout) #backward comp default_lr_dropout = self.options['lr_dropout'] = lr_dropout + default_ms_ssim_loss = self.options['ms_ssim_loss'] = self.load_or_def_option('ms_ssim_loss', False) + default_random_warp = self.options['random_warp'] = self.load_or_def_option('random_warp', True) default_true_face_power = self.options['true_face_power'] = self.load_or_def_option('true_face_power', 0.0) default_face_style_power = self.options['face_style_power'] = self.load_or_def_option('face_style_power', 0.0) @@ -74,7 +76,7 @@ class SAEHDModel(ModelBase): resolution = np.clip ( (resolution // 16) * 16, min_res, max_res) self.options['resolution'] = resolution self.options['face_type'] = io.input_str ("Face type", default_face_type, ['h','mf','f','wf','head', 'custom'], help_message="Half / mid face / full face / whole face / head / custom. Half face has better resolution, but covers less area of cheeks. Mid face is 30% wider than half face. 'Whole face' covers full area of face include forehead. 'head' covers full head, but requires XSeg for src and dst faceset.").lower() - + while True: archi = io.input_str ("AE architecture", default_archi, help_message=\ """ @@ -135,11 +137,11 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... self.options['mouth_prio'] = io.input_bool ("Mouth priority", default_mouth_prio, help_message='Helps to fix mouth problems during training by forcing the neural network to train mouth with higher priority similar to eyes ') self.options['uniform_yaw'] = io.input_bool ("Uniform yaw distribution of samples", default_uniform_yaw, help_message='Helps to fix blurry side faces due to small amount of them in the faceset.') - + default_gan_power = self.options['gan_power'] = self.load_or_def_option('gan_power', 0.0) default_gan_patch_size = self.options['gan_patch_size'] = self.load_or_def_option('gan_patch_size', self.options['resolution'] // 8) default_gan_dims = self.options['gan_dims'] = self.load_or_def_option('gan_dims', 16) - + if self.is_first_run() or ask_override: self.options['models_opt_on_gpu'] = io.input_bool ("Place models and optimizer on GPU", default_models_opt_on_gpu, help_message="When you train on one GPU, by default model and optimizer weights are placed on GPU to accelerate the process. You can place they on CPU to free up extra VRAM, thus set bigger dimensions.") @@ -147,17 +149,19 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... self.options['lr_dropout'] = io.input_str (f"Use learning rate dropout", default_lr_dropout, ['n','y','cpu'], help_message="When the face is trained enough, you can enable this option to get extra sharpness and reduce subpixel shake for less amount of iterations. Enabled it before `disable random warp` and before GAN. \nn - disabled.\ny - enabled\ncpu - enabled on CPU. This allows not to use extra VRAM, sacrificing 20% time of iteration.") + self.options['ms_ssim_loss'] = io.input_bool("Use multiscale loss?", default_ms_ssim_loss, help_message="Use Multiscale structural similarity for image quality assessment.") + self.options['random_warp'] = io.input_bool ("Enable random warp of samples", default_random_warp, help_message="Random warp is required to generalize facial expressions of both faces. When the face is trained enough, you can disable it to get extra sharpness and reduce subpixel shake for less amount of iterations.") self.options['gan_power'] = np.clip ( io.input_number ("GAN power", default_gan_power, add_info="0.0 .. 1.0", help_message="Forces the neural network to learn small details of the face. Enable it only when the face is trained enough with lr_dropout(on) and random_warp(off), and don't disable. The higher the value, the higher the chances of artifacts. Typical fine value is 0.1"), 0.0, 1.0 ) - - if self.options['gan_power'] != 0.0: + + if self.options['gan_power'] != 0.0: gan_patch_size = np.clip ( io.input_int("GAN patch size", default_gan_patch_size, add_info="3-640", help_message="The higher patch size, the higher the quality, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is resolution / 8." ), 3, 640 ) self.options['gan_patch_size'] = gan_patch_size - + gan_dims = np.clip ( io.input_int("GAN dimensions", default_gan_dims, add_info="4-64", help_message="The dimensions of the GAN network. The higher dimensions, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is 16." ), 4, 64 ) self.options['gan_dims'] = gan_dims - + if 'df' in self.options['archi']: self.options['true_face_power'] = np.clip ( io.input_number ("'True face' power.", default_true_face_power, add_info="0.0000 .. 1.0", help_message="Experimental option. Discriminates result face to be more like src face. Higher value - stronger discrimination. Typical value is 0.01 . Comparison - https://i.imgur.com/czScS9q.png"), 0.0, 1.0 ) else: @@ -173,7 +177,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... if self.options['pretrain'] and self.get_pretraining_data_path() is None: raise Exception("pretraining_data_path is not defined") - + self.gan_model_changed = (default_gan_patch_size != self.options['gan_patch_size']) or (default_gan_dims != self.options['gan_dims']) self.pretrain_just_disabled = (default_pretrain == True and self.options['pretrain'] == False) @@ -406,7 +410,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_target_dstm_style_blur = gpu_target_dstm_blur #default style mask is 0.5 on boundary gpu_target_dstm_blur = tf.clip_by_value(gpu_target_dstm_blur, 0, 0.5) * 2 - gpu_target_dst_masked = gpu_target_dst*gpu_target_dstm_blur + gpu_target_dst_masked = gpu_target_dst*gpu_target_dstm_blur gpu_target_dst_style_masked = gpu_target_dst*gpu_target_dstm_style_blur gpu_target_dst_style_anti_masked = gpu_target_dst*(1.0 - gpu_target_dstm_style_blur) @@ -516,13 +520,13 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_G_loss += gan_power*(DLoss(gpu_pred_src_src_d_ones, gpu_pred_src_src_d) + \ DLoss(gpu_pred_src_src_d2_ones, gpu_pred_src_src_d2)) - - + + if masked_training: # Minimal src-src-bg rec with total_variation_mse to suppress random bright dots from gan gpu_G_loss += 0.000001*nn.total_variation_mse(gpu_pred_src_src) gpu_G_loss += 0.02*tf.reduce_mean(tf.square(gpu_pred_src_src_anti_masked-gpu_target_src_anti_masked),axis=[1,2,3] ) - + gpu_G_loss_gvs += [ nn.gradients ( gpu_G_loss, self.src_dst_trainable_weights ) ] From 039559e4fdb8cddb1b02f048b53971b6470f0c18 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 08:11:21 -0800 Subject: [PATCH 03/70] fix: typo in new ms_ssim opt function --- core/leras/ops/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/leras/ops/__init__.py b/core/leras/ops/__init__.py index af59c6c..b7f1bab 100644 --- a/core/leras/ops/__init__.py +++ b/core/leras/ops/__init__.py @@ -333,7 +333,7 @@ def ms_ssim(img1, img2, resolution, kernel_size=11, k1=0.01, k2=0.03, max_value= loss = tf.cast(loss, img_dtype) return loss -nn.dssim = ms_ssim +nn.ms_ssim = ms_ssim def space_to_depth(x, size): From d5fd69906d2eac8ba1f5359dfd14a1adf7b8a5b3 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 08:17:04 -0800 Subject: [PATCH 04/70] feat: first test of ms_ssim --- models/Model_SAEHD/Model.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 65bca2d..2989d6e 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -425,12 +425,15 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_psd_target_dst_style_masked = gpu_pred_src_dst*gpu_target_dstm_style_blur gpu_psd_target_dst_style_anti_masked = gpu_pred_src_dst*(1.0 - gpu_target_dstm_style_blur) - if resolution < 256: - gpu_src_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + if self.options['ms_ssim_loss']: + gpu_src_loss = tf.reduce_mean ( 10*nn.ms_ssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, resolution), axis=[1]) else: - gpu_src_loss = tf.reduce_mean ( 5*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) - gpu_src_loss += tf.reduce_mean ( 5*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) - gpu_src_loss += tf.reduce_mean ( 10*tf.square ( gpu_target_src_masked_opt - gpu_pred_src_src_masked_opt ), axis=[1,2,3]) + if resolution < 256: + gpu_src_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + else: + gpu_src_loss = tf.reduce_mean ( 5*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_src_loss += tf.reduce_mean ( 5*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) + gpu_src_loss += tf.reduce_mean ( 10*tf.square ( gpu_target_src_masked_opt - gpu_pred_src_src_masked_opt ), axis=[1,2,3]) if eyes_prio or mouth_prio: if eyes_prio and mouth_prio: From 6b78f1cbc3a0ad4d65bb3c7a428f4ccdab169c18 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 08:18:56 -0800 Subject: [PATCH 05/70] fix: misnamed arg for tf.image.ssim_multiscale --- core/leras/ops/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/leras/ops/__init__.py b/core/leras/ops/__init__.py index b7f1bab..398679c 100644 --- a/core/leras/ops/__init__.py +++ b/core/leras/ops/__init__.py @@ -325,7 +325,7 @@ def ms_ssim(img1, img2, resolution, kernel_size=11, k1=0.01, k2=0.03, max_value= if sum(power_factors) < 1.0: power_factors = [x/sum(power_factors) for x in power_factors] - ms_ssim_val = tf.image.ssim_multiscale(img1, img2, max_value=max_value, power_factors=power_factors, + ms_ssim_val = tf.image.ssim_multiscale(img1, img2, max_val=max_value, power_factors=power_factors, filter_size=kernel_size, k1=k1, k2=k2) loss = (1.0 - ms_ssim_val) / 2.0 From 0df0d6d5cb365238432de2793d92652c82f4a9f6 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 08:26:14 -0800 Subject: [PATCH 06/70] fix: transpose batches for tf msssim --- core/leras/ops/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/leras/ops/__init__.py b/core/leras/ops/__init__.py index 398679c..6824488 100644 --- a/core/leras/ops/__init__.py +++ b/core/leras/ops/__init__.py @@ -325,7 +325,10 @@ def ms_ssim(img1, img2, resolution, kernel_size=11, k1=0.01, k2=0.03, max_value= if sum(power_factors) < 1.0: power_factors = [x/sum(power_factors) for x in power_factors] - ms_ssim_val = tf.image.ssim_multiscale(img1, img2, max_val=max_value, power_factors=power_factors, + # Transpose images from NCHW to NHWC + img1_t = tf.transpose(img1, [0, 2, 3, 1]) + img2_t = tf.transpose(img2, [0, 2, 3, 1]) + ms_ssim_val = tf.image.ssim_multiscale(img1_t, img2_t, max_val=max_value, power_factors=power_factors, filter_size=kernel_size, k1=k1, k2=k2) loss = (1.0 - ms_ssim_val) / 2.0 From 19461ef76f97a5b507d96c9f6d5c90680ce52d24 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 08:29:30 -0800 Subject: [PATCH 07/70] fix: remove axis from ms_ssim call --- models/Model_SAEHD/Model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 2989d6e..2db427d 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -426,7 +426,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_psd_target_dst_style_anti_masked = gpu_pred_src_dst*(1.0 - gpu_target_dstm_style_blur) if self.options['ms_ssim_loss']: - gpu_src_loss = tf.reduce_mean ( 10*nn.ms_ssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, resolution), axis=[1]) + gpu_src_loss = tf.reduce_mean ( 10*nn.ms_ssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, resolution)) else: if resolution < 256: gpu_src_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) From f5edf30e84d110f7708d92dfab060a70a2557306 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 08:41:48 -0800 Subject: [PATCH 08/70] fix: try inner function --- core/leras/ops/__init__.py | 38 +++++++++++++++++++++---------------- models/Model_SAEHD/Model.py | 2 +- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/core/leras/ops/__init__.py b/core/leras/ops/__init__.py index 6824488..c136009 100644 --- a/core/leras/ops/__init__.py +++ b/core/leras/ops/__init__.py @@ -308,15 +308,8 @@ def dssim(img1,img2, max_val, filter_size=11, filter_sigma=1.5, k1=0.01, k2=0.03 nn.dssim = dssim -def ms_ssim(img1, img2, resolution, kernel_size=11, k1=0.01, k2=0.03, max_value=1.0, +def ms_ssim(resolution, kernel_size=11, k1=0.01, k2=0.03, max_value=1.0, power_factors=(0.0448, 0.2856, 0.3001, 0.2363, 0.1333)): - img_dtype = img1.dtype - if img_dtype != img2.dtype: - raise ValueError("img1.dtype != img2.dtype") - - if img_dtype != tf.float32: - img1 = tf.cast(img1, tf.float32) - img2 = tf.cast(img2, tf.float32) # restrict mssim factors to those greater/equal to kernel size power_factors = [power_factors[i] for i in range(len(power_factors)) if resolution//(2**i) >= kernel_size] @@ -325,15 +318,28 @@ def ms_ssim(img1, img2, resolution, kernel_size=11, k1=0.01, k2=0.03, max_value= if sum(power_factors) < 1.0: power_factors = [x/sum(power_factors) for x in power_factors] - # Transpose images from NCHW to NHWC - img1_t = tf.transpose(img1, [0, 2, 3, 1]) - img2_t = tf.transpose(img2, [0, 2, 3, 1]) - ms_ssim_val = tf.image.ssim_multiscale(img1_t, img2_t, max_val=max_value, power_factors=power_factors, - filter_size=kernel_size, k1=k1, k2=k2) - loss = (1.0 - ms_ssim_val) / 2.0 + def loss(img1, img2): + img_dtype = img1.dtype + if img_dtype != img2.dtype: + raise ValueError("img1.dtype != img2.dtype") + + if img_dtype != tf.float32: + img1 = tf.cast(img1, tf.float32) + img2 = tf.cast(img2, tf.float32) + + + + # Transpose images from NCHW to NHWC + img1_t = tf.transpose(img1, [0, 2, 3, 1]) + img2_t = tf.transpose(img2, [0, 2, 3, 1]) + ms_ssim_val = tf.image.ssim_multiscale(img1_t, img2_t, max_val=max_value, power_factors=power_factors, + filter_size=kernel_size, k1=k1, k2=k2) + ms_ssim_loss = (1.0 - ms_ssim_val) / 2.0 + + if img_dtype != tf.float32: + ms_ssim_loss = tf.cast(ms_ssim_loss, img_dtype) + return ms_ssim_loss - if img_dtype != tf.float32: - loss = tf.cast(loss, img_dtype) return loss nn.ms_ssim = ms_ssim diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 2db427d..16d63da 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -426,7 +426,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_psd_target_dst_style_anti_masked = gpu_pred_src_dst*(1.0 - gpu_target_dstm_style_blur) if self.options['ms_ssim_loss']: - gpu_src_loss = tf.reduce_mean ( 10*nn.ms_ssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, resolution)) + gpu_src_loss = tf.reduce_mean ( 10*nn.ms_ssim(resolution)(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt)) else: if resolution < 256: gpu_src_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) From 28279971a17a5300ced4e129b8bf953063007b44 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 11:28:01 -0800 Subject: [PATCH 09/70] fix: more testing --- core/leras/ops/__init__.py | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/core/leras/ops/__init__.py b/core/leras/ops/__init__.py index c136009..583a67d 100644 --- a/core/leras/ops/__init__.py +++ b/core/leras/ops/__init__.py @@ -308,7 +308,7 @@ def dssim(img1,img2, max_val, filter_size=11, filter_sigma=1.5, k1=0.01, k2=0.03 nn.dssim = dssim -def ms_ssim(resolution, kernel_size=11, k1=0.01, k2=0.03, max_value=1.0, +def ms_ssim(img1, img2, resolution, kernel_size=11, k1=0.01, k2=0.03, max_value=1.0, power_factors=(0.0448, 0.2856, 0.3001, 0.2363, 0.1333)): # restrict mssim factors to those greater/equal to kernel size @@ -318,29 +318,24 @@ def ms_ssim(resolution, kernel_size=11, k1=0.01, k2=0.03, max_value=1.0, if sum(power_factors) < 1.0: power_factors = [x/sum(power_factors) for x in power_factors] - def loss(img1, img2): - img_dtype = img1.dtype - if img_dtype != img2.dtype: - raise ValueError("img1.dtype != img2.dtype") + img_dtype = img1.dtype + if img_dtype != img2.dtype: + raise ValueError("img1.dtype != img2.dtype") - if img_dtype != tf.float32: - img1 = tf.cast(img1, tf.float32) - img2 = tf.cast(img2, tf.float32) + if img_dtype != tf.float32: + img1 = tf.cast(img1, tf.float32) + img2 = tf.cast(img2, tf.float32) + # Transpose images from NCHW to NHWC + img1_t = tf.transpose(img1, [0, 2, 3, 1]) + img2_t = tf.transpose(img2, [0, 2, 3, 1]) + ms_ssim_val = tf.image.ssim_multiscale(img1_t, img2_t, max_val=max_value, power_factors=power_factors, + filter_size=kernel_size, k1=k1, k2=k2) + ms_ssim_loss = (1.0 - ms_ssim_val) / 2.0 - - # Transpose images from NCHW to NHWC - img1_t = tf.transpose(img1, [0, 2, 3, 1]) - img2_t = tf.transpose(img2, [0, 2, 3, 1]) - ms_ssim_val = tf.image.ssim_multiscale(img1_t, img2_t, max_val=max_value, power_factors=power_factors, - filter_size=kernel_size, k1=k1, k2=k2) - ms_ssim_loss = (1.0 - ms_ssim_val) / 2.0 - - if img_dtype != tf.float32: - ms_ssim_loss = tf.cast(ms_ssim_loss, img_dtype) - return ms_ssim_loss - - return loss + if img_dtype != tf.float32: + ms_ssim_loss = tf.cast(ms_ssim_loss, img_dtype) + return ms_ssim_loss nn.ms_ssim = ms_ssim From 3588b0efa96d5d737a02fb111a5723d7a15f7e5c Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 11:29:44 -0800 Subject: [PATCH 10/70] fix: model --- models/Model_SAEHD/Model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 00c1fc0..23065ec 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -426,7 +426,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_psd_target_dst_style_anti_masked = gpu_pred_src_dst*(1.0 - gpu_target_dstm_style_blur) if self.options['ms_ssim_loss']: - gpu_src_loss = tf.reduce_mean ( 10*nn.ms_ssim(resolution)(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt)) + gpu_src_loss = tf.reduce_mean ( 10*nn.ms_ssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, resolution)) else: if resolution < 256: gpu_src_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) From d35549fc5d86ff9e38f56ce06ffc9f4e3652efab Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 16:00:20 -0800 Subject: [PATCH 11/70] Try assign device --- core/leras/ops/__init__.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/leras/ops/__init__.py b/core/leras/ops/__init__.py index 583a67d..b460f17 100644 --- a/core/leras/ops/__init__.py +++ b/core/leras/ops/__init__.py @@ -329,8 +329,16 @@ def ms_ssim(img1, img2, resolution, kernel_size=11, k1=0.01, k2=0.03, max_value= # Transpose images from NCHW to NHWC img1_t = tf.transpose(img1, [0, 2, 3, 1]) img2_t = tf.transpose(img2, [0, 2, 3, 1]) - ms_ssim_val = tf.image.ssim_multiscale(img1_t, img2_t, max_val=max_value, power_factors=power_factors, - filter_size=kernel_size, k1=k1, k2=k2) + + def assign_device(op): + if op.type != 'ListDiff': + return '/gpu:0' + else: + return '/cpu:0' + + with tf.device(assign_device): + ms_ssim_val = tf.image.ssim_multiscale(img1_t, img2_t, max_val=max_value, power_factors=power_factors, + filter_size=kernel_size, k1=k1, k2=k2) ms_ssim_loss = (1.0 - ms_ssim_val) / 2.0 if img_dtype != tf.float32: From 9b98607b334136a42ecd7a7173647103dd806331 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 17:52:57 -0800 Subject: [PATCH 12/70] test: try as layer --- core/leras/layers/MsSsim.py | 25 ++++++++++++ core/leras/ops/__init__.py | 76 ++++++++++++++++++------------------- models/Model_SAEHD/Model.py | 2 +- 3 files changed, 64 insertions(+), 39 deletions(-) create mode 100644 core/leras/layers/MsSsim.py diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py new file mode 100644 index 0000000..d1ad64c --- /dev/null +++ b/core/leras/layers/MsSsim.py @@ -0,0 +1,25 @@ +from core.leras import nn +tf = nn.tf + +class MsSsim(nn.LayerBase): + default_power_factors = (0.0448, 0.2856, 0.3001, 0.2363, 0.1333) + + def __init__(self, resolution, kernel_size=11, **kwargs): + # restrict mssim factors to those greater/equal to kernel size + power_factors = [p for i, p in enumerate(self.default_power_factors) if resolution//(2**i) >= kernel_size] + # normalize power factors if reduced because of size + if sum(power_factors) < 1.0: + power_factors = [x/sum(power_factors) for x in power_factors] + self.power_factors = power_factors + self.kernel_size = kernel_size + + super().__init__(**kwargs) + + def __call__(self, y_true, y_pred, max_val): + # Transpose images from NCHW to NHWC + y_true_t = tf.transpose(y_true, [0, 2, 3, 1]) + y_pred_t = tf.transpose(y_pred, [0, 2, 3, 1]) + loss = tf.image.ssim_multiscale(y_true, y_pred, max_val, power_factors=self.power_factors) + return (1.0 - loss) / 2.0 + +nn.MsSsim = MsSsim diff --git a/core/leras/ops/__init__.py b/core/leras/ops/__init__.py index b460f17..f34461f 100644 --- a/core/leras/ops/__init__.py +++ b/core/leras/ops/__init__.py @@ -308,44 +308,44 @@ def dssim(img1,img2, max_val, filter_size=11, filter_sigma=1.5, k1=0.01, k2=0.03 nn.dssim = dssim -def ms_ssim(img1, img2, resolution, kernel_size=11, k1=0.01, k2=0.03, max_value=1.0, - power_factors=(0.0448, 0.2856, 0.3001, 0.2363, 0.1333)): - - # restrict mssim factors to those greater/equal to kernel size - power_factors = [power_factors[i] for i in range(len(power_factors)) if resolution//(2**i) >= kernel_size] - - # normalize power factors if reduced because of size - if sum(power_factors) < 1.0: - power_factors = [x/sum(power_factors) for x in power_factors] - - img_dtype = img1.dtype - if img_dtype != img2.dtype: - raise ValueError("img1.dtype != img2.dtype") - - if img_dtype != tf.float32: - img1 = tf.cast(img1, tf.float32) - img2 = tf.cast(img2, tf.float32) - - # Transpose images from NCHW to NHWC - img1_t = tf.transpose(img1, [0, 2, 3, 1]) - img2_t = tf.transpose(img2, [0, 2, 3, 1]) - - def assign_device(op): - if op.type != 'ListDiff': - return '/gpu:0' - else: - return '/cpu:0' - - with tf.device(assign_device): - ms_ssim_val = tf.image.ssim_multiscale(img1_t, img2_t, max_val=max_value, power_factors=power_factors, - filter_size=kernel_size, k1=k1, k2=k2) - ms_ssim_loss = (1.0 - ms_ssim_val) / 2.0 - - if img_dtype != tf.float32: - ms_ssim_loss = tf.cast(ms_ssim_loss, img_dtype) - return ms_ssim_loss - -nn.ms_ssim = ms_ssim +# def ms_ssim(img1, img2, resolution, kernel_size=11, k1=0.01, k2=0.03, max_value=1.0, +# power_factors=(0.0448, 0.2856, 0.3001, 0.2363, 0.1333)): +# +# # restrict mssim factors to those greater/equal to kernel size +# power_factors = [power_factors[i] for i in range(len(power_factors)) if resolution//(2**i) >= kernel_size] +# +# # normalize power factors if reduced because of size +# if sum(power_factors) < 1.0: +# power_factors = [x/sum(power_factors) for x in power_factors] +# +# img_dtype = img1.dtype +# if img_dtype != img2.dtype: +# raise ValueError("img1.dtype != img2.dtype") +# +# if img_dtype != tf.float32: +# img1 = tf.cast(img1, tf.float32) +# img2 = tf.cast(img2, tf.float32) +# +# # Transpose images from NCHW to NHWC +# img1_t = tf.transpose(img1, [0, 2, 3, 1]) +# img2_t = tf.transpose(img2, [0, 2, 3, 1]) +# +# def assign_device(op): +# if op.type != 'ListDiff': +# return '/gpu:0' +# else: +# return '/cpu:0' +# +# with tf.device(assign_device): +# ms_ssim_val = tf.image.ssim_multiscale(img1_t, img2_t, max_val=max_value, power_factors=power_factors, +# filter_size=kernel_size, k1=k1, k2=k2) +# ms_ssim_loss = (1.0 - ms_ssim_val) / 2.0 +# +# if img_dtype != tf.float32: +# ms_ssim_loss = tf.cast(ms_ssim_loss, img_dtype) +# return ms_ssim_loss +# +# nn.ms_ssim = ms_ssim def space_to_depth(x, size): diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 23065ec..c57ec6e 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -426,7 +426,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_psd_target_dst_style_anti_masked = gpu_pred_src_dst*(1.0 - gpu_target_dstm_style_blur) if self.options['ms_ssim_loss']: - gpu_src_loss = tf.reduce_mean ( 10*nn.ms_ssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, resolution)) + gpu_src_loss = tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt)) else: if resolution < 256: gpu_src_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) From 1ac2d26710a5f7d3bca0f2615964146ea449a5db Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 17:58:25 -0800 Subject: [PATCH 13/70] update module --- core/leras/layers/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/leras/layers/__init__.py b/core/leras/layers/__init__.py index 1c81963..d8f1c9d 100644 --- a/core/leras/layers/__init__.py +++ b/core/leras/layers/__init__.py @@ -13,4 +13,5 @@ from .FRNorm2D import * from .TLU import * from .ScaleAdd import * from .DenseNorm import * -from .AdaIN import * \ No newline at end of file +from .AdaIN import * +from .MsSsim import * From 8b8093435f54b51ac34d393df0519fdfe733a186 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 17:59:55 -0800 Subject: [PATCH 14/70] update args --- models/Model_SAEHD/Model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index c57ec6e..ab1ac1f 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -426,7 +426,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_psd_target_dst_style_anti_masked = gpu_pred_src_dst*(1.0 - gpu_target_dstm_style_blur) if self.options['ms_ssim_loss']: - gpu_src_loss = tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt)) + gpu_src_loss = tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0)) else: if resolution < 256: gpu_src_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) From aaaf9e375d45a4b4e1b64af987fd795dca8354af Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 18:01:34 -0800 Subject: [PATCH 15/70] Fix transposition --- core/leras/layers/MsSsim.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index d1ad64c..12b9ea1 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -19,7 +19,7 @@ class MsSsim(nn.LayerBase): # Transpose images from NCHW to NHWC y_true_t = tf.transpose(y_true, [0, 2, 3, 1]) y_pred_t = tf.transpose(y_pred, [0, 2, 3, 1]) - loss = tf.image.ssim_multiscale(y_true, y_pred, max_val, power_factors=self.power_factors) + loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) return (1.0 - loss) / 2.0 nn.MsSsim = MsSsim From 0225a29832c1a35eacf080e3ea5875a3473bea8a Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 18:07:27 -0800 Subject: [PATCH 16/70] cpu --- core/leras/layers/MsSsim.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index 12b9ea1..d9533f4 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -19,7 +19,8 @@ class MsSsim(nn.LayerBase): # Transpose images from NCHW to NHWC y_true_t = tf.transpose(y_true, [0, 2, 3, 1]) y_pred_t = tf.transpose(y_pred, [0, 2, 3, 1]) - loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) + with tf.device('/CPU:0'): + loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) return (1.0 - loss) / 2.0 nn.MsSsim = MsSsim From ce5f479f9f2691f1708ecec9b714167fa0e23272 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 18:09:51 -0800 Subject: [PATCH 17/70] try casting --- core/leras/layers/MsSsim.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index d9533f4..6fa7c69 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -17,10 +17,9 @@ class MsSsim(nn.LayerBase): def __call__(self, y_true, y_pred, max_val): # Transpose images from NCHW to NHWC - y_true_t = tf.transpose(y_true, [0, 2, 3, 1]) - y_pred_t = tf.transpose(y_pred, [0, 2, 3, 1]) - with tf.device('/CPU:0'): - loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) + y_true_t = tf.transpose(tf.cast(y_true), [0, 2, 3, 1]) + y_pred_t = tf.transpose(tf.cast(y_pred), [0, 2, 3, 1]) + loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) return (1.0 - loss) / 2.0 nn.MsSsim = MsSsim From 6c42cd3a8f21ab7052576ef8f6c932a07101e269 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 18:11:05 -0800 Subject: [PATCH 18/70] fix cast --- core/leras/layers/MsSsim.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index 6fa7c69..fff5f74 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -17,8 +17,8 @@ class MsSsim(nn.LayerBase): def __call__(self, y_true, y_pred, max_val): # Transpose images from NCHW to NHWC - y_true_t = tf.transpose(tf.cast(y_true), [0, 2, 3, 1]) - y_pred_t = tf.transpose(tf.cast(y_pred), [0, 2, 3, 1]) + y_true_t = tf.transpose(tf.cast(y_true, tf.float32), [0, 2, 3, 1]) + y_pred_t = tf.transpose(tf.cast(y_pred, tf.float32), [0, 2, 3, 1]) loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) return (1.0 - loss) / 2.0 From beb8c30970b310ce1fac421e1448726451a80845 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 18:27:00 -0800 Subject: [PATCH 19/70] assign device --- core/leras/layers/MsSsim.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index fff5f74..84028bb 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -19,7 +19,16 @@ class MsSsim(nn.LayerBase): # Transpose images from NCHW to NHWC y_true_t = tf.transpose(tf.cast(y_true, tf.float32), [0, 2, 3, 1]) y_pred_t = tf.transpose(tf.cast(y_pred, tf.float32), [0, 2, 3, 1]) - loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) - return (1.0 - loss) / 2.0 + + + def assign_device(op): + if op.type != 'Assert': + return '/gpu:0' + else: + return '/cpu:0' + + with tf.device(assign_device): + loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) + return (1.0 - loss) / 2.0 nn.MsSsim = MsSsim From 39601603ef9a21abf5fbc571726eeca623307b16 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 18:32:49 -0800 Subject: [PATCH 20/70] no message --- core/leras/layers/MsSsim.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index 84028bb..b631491 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -22,7 +22,7 @@ class MsSsim(nn.LayerBase): def assign_device(op): - if op.type != 'Assert': + if op.type != 'Assert' or op.type != 'ListDiff': return '/gpu:0' else: return '/cpu:0' From 6a68dd5e5954f0ba394494d5dbf913b73b45b6d3 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 18:36:41 -0800 Subject: [PATCH 21/70] tf2 --- core/leras/layers/MsSsim.py | 13 +++---------- core/leras/nn.py | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index b631491..1f7ad6d 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -1,5 +1,6 @@ from core.leras import nn tf = nn.tf +tf2 = nn.tf2 class MsSsim(nn.LayerBase): default_power_factors = (0.0448, 0.2856, 0.3001, 0.2363, 0.1333) @@ -20,15 +21,7 @@ class MsSsim(nn.LayerBase): y_true_t = tf.transpose(tf.cast(y_true, tf.float32), [0, 2, 3, 1]) y_pred_t = tf.transpose(tf.cast(y_pred, tf.float32), [0, 2, 3, 1]) - - def assign_device(op): - if op.type != 'Assert' or op.type != 'ListDiff': - return '/gpu:0' - else: - return '/cpu:0' - - with tf.device(assign_device): - loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) - return (1.0 - loss) / 2.0 + loss = tf2.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) + return (1.0 - loss) / 2.0 nn.MsSsim = MsSsim diff --git a/core/leras/nn.py b/core/leras/nn.py index ef5c2c9..8b10fba 100644 --- a/core/leras/nn.py +++ b/core/leras/nn.py @@ -31,6 +31,7 @@ class nn(): current_DeviceConfig = None tf = None + tf2 = None tf_sess = None tf_sess_config = None tf_default_device = None @@ -40,7 +41,7 @@ class nn(): conv2d_spatial_axes = None floatx = None - + @staticmethod def initialize(device_config=None, floatx="float32", data_format="NHWC"): @@ -50,7 +51,7 @@ class nn(): nn.setCurrentDeviceConfig(device_config) # Manipulate environment variables before import tensorflow - + if 'CUDA_VISIBLE_DEVICES' in os.environ.keys(): os.environ.pop('CUDA_VISIBLE_DEVICES') @@ -77,15 +78,17 @@ class nn(): io.log_info("Caching GPU kernels...") import tensorflow - + tf_version = getattr(tensorflow,'VERSION', None) if tf_version is None: tf_version = tensorflow.version.GIT_VERSION if tf_version[0] == 'v': tf_version = tf_version[1:] - + if tf_version[0] == '2': tf = tensorflow.compat.v1 + tf2 = tensorflow + nn.tf2 = tf2 else: tf = tensorflow @@ -93,7 +96,7 @@ class nn(): # Disable tensorflow warnings tf_logger = logging.getLogger('tensorflow') tf_logger.setLevel(logging.ERROR) - + if tf_version[0] == '2': tf.disable_v2_behavior() nn.tf = tf @@ -105,7 +108,7 @@ class nn(): import core.leras.optimizers import core.leras.models import core.leras.archis - + # Configure tensorflow session-config if len(device_config.devices) == 0: nn.tf_default_device = "/CPU:0" @@ -118,7 +121,7 @@ class nn(): config.gpu_options.force_gpu_compatible = True config.gpu_options.allow_growth = True nn.tf_sess_config = config - + if nn.tf_sess is None: nn.tf_sess = tf.Session(config=nn.tf_sess_config) @@ -273,7 +276,7 @@ class nn(): @staticmethod def ask_choose_device(*args, **kwargs): return nn.DeviceConfig.GPUIndexes( nn.ask_choose_device_idxs(*args,**kwargs) ) - + def __init__ (self, devices=None): devices = devices or [] From 2e4fdf20ca545161be8553b0484817c38c13dc65 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 18:45:34 -0800 Subject: [PATCH 22/70] soft placement --- core/leras/layers/MsSsim.py | 3 +-- core/leras/nn.py | 5 +---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index 1f7ad6d..b8d4c45 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -1,6 +1,5 @@ from core.leras import nn tf = nn.tf -tf2 = nn.tf2 class MsSsim(nn.LayerBase): default_power_factors = (0.0448, 0.2856, 0.3001, 0.2363, 0.1333) @@ -21,7 +20,7 @@ class MsSsim(nn.LayerBase): y_true_t = tf.transpose(tf.cast(y_true, tf.float32), [0, 2, 3, 1]) y_pred_t = tf.transpose(tf.cast(y_pred, tf.float32), [0, 2, 3, 1]) - loss = tf2.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) + loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) return (1.0 - loss) / 2.0 nn.MsSsim = MsSsim diff --git a/core/leras/nn.py b/core/leras/nn.py index 8b10fba..8ac437b 100644 --- a/core/leras/nn.py +++ b/core/leras/nn.py @@ -31,7 +31,6 @@ class nn(): current_DeviceConfig = None tf = None - tf2 = None tf_sess = None tf_sess_config = None tf_default_device = None @@ -87,8 +86,6 @@ class nn(): if tf_version[0] == '2': tf = tensorflow.compat.v1 - tf2 = tensorflow - nn.tf2 = tf2 else: tf = tensorflow @@ -115,7 +112,7 @@ class nn(): config = tf.ConfigProto(device_count={'GPU': 0}) else: nn.tf_default_device = "/GPU:0" - config = tf.ConfigProto() + config = tf.ConfigProto(allow_soft_placement=True) config.gpu_options.visible_device_list = ','.join([str(device.index) for device in device_config.devices]) config.gpu_options.force_gpu_compatible = True From 9537c82213cc0a5987e46e32a07be8fdecaf53f3 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 18:57:24 -0800 Subject: [PATCH 23/70] ms ssim --- models/Model_SAEHD/Model.py | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index ab1ac1f..d97a408 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -443,9 +443,15 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... elif mouth_prio: gpu_target_part_mask = gpu_target_srcm_mouth - gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) + if self.options['ms_ssim_loss']: + gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0)) + else: + gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) - gpu_src_loss += tf.reduce_mean ( 10*tf.square( gpu_target_srcm - gpu_pred_src_srcm ),axis=[1,2,3] ) + if self.options['ms_ssim_loss']: + gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_srcm, gpu_pred_src_srcm, max_val=1.0)) + else: + gpu_src_loss += tf.reduce_mean ( 10*tf.square( gpu_target_srcm - gpu_pred_src_srcm ),axis=[1,2,3] ) face_style_power = self.options['face_style_power'] / 100.0 if face_style_power != 0 and not self.pretrain: @@ -456,12 +462,15 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_src_loss += tf.reduce_mean( (10*bg_style_power)*nn.dssim( gpu_psd_target_dst_style_anti_masked, gpu_target_dst_style_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) gpu_src_loss += tf.reduce_mean( (10*bg_style_power)*tf.square(gpu_psd_target_dst_style_anti_masked - gpu_target_dst_style_anti_masked), axis=[1,2,3] ) - if resolution < 256: - gpu_dst_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/11.6) ), axis=[1]) + if self.options['ms_ssim_loss']: + gpu_dst_loss = tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0)) else: - gpu_dst_loss = tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/11.6) ), axis=[1]) - gpu_dst_loss += tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/23.2) ), axis=[1]) - gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dst_masked_opt- gpu_pred_dst_dst_masked_opt ), axis=[1,2,3]) + if resolution < 256: + gpu_dst_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/11.6) ), axis=[1]) + else: + gpu_dst_loss = tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/11.6) ), axis=[1]) + gpu_dst_loss += tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/23.2) ), axis=[1]) + gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dst_masked_opt- gpu_pred_dst_dst_masked_opt ), axis=[1,2,3]) if eyes_prio or mouth_prio: @@ -472,9 +481,15 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... elif mouth_prio: gpu_target_part_mask = gpu_target_dstm_mouth - gpu_dst_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_dst*gpu_target_part_mask - gpu_pred_dst_dst*gpu_target_part_mask ), axis=[1,2,3]) + if self.options['ms_ssim_loss']: + gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dst*gpu_target_part_mask, gpu_pred_dst_dst*gpu_target_part_mask, max_val=1.0)) + else: + gpu_dst_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_dst*gpu_target_part_mask - gpu_pred_dst_dst*gpu_target_part_mask ), axis=[1,2,3]) - gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) + if self.options['ms_ssim_loss']: + gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0)) + else: + gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) gpu_src_losses += [gpu_src_loss] gpu_dst_losses += [gpu_dst_loss] From cddfa763f1371f74eec06aa00c09df1a57fb3464 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 19:09:14 -0800 Subject: [PATCH 24/70] fix --- models/Model_SAEHD/Model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index d97a408..13c7e0a 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -482,12 +482,12 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_target_part_mask = gpu_target_dstm_mouth if self.options['ms_ssim_loss']: - gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dst*gpu_target_part_mask, gpu_pred_dst_dst*gpu_target_part_mask, max_val=1.0)) + gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dst*gpu_target_part_mask, gpu_pred_dst_dst*gpu_target_part_mask, max_val=1.0)) else: gpu_dst_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_dst*gpu_target_part_mask - gpu_pred_dst_dst*gpu_target_part_mask ), axis=[1,2,3]) if self.options['ms_ssim_loss']: - gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0)) + gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dstm, gpu_pred_dst_dstm, max_val=1.0)) else: gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) From 023be4cf38d1cdc51ddf7ce43732c24f1b964d63 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 12 Mar 2021 19:13:06 -0800 Subject: [PATCH 25/70] commented out code --- models/Model_SAEHD/Model.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 13c7e0a..c6aa24e 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -443,15 +443,15 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... elif mouth_prio: gpu_target_part_mask = gpu_target_srcm_mouth - if self.options['ms_ssim_loss']: - gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0)) - else: - gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) + # if self.options['ms_ssim_loss']: + # gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0)) + # else: + gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) - if self.options['ms_ssim_loss']: - gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_srcm, gpu_pred_src_srcm, max_val=1.0)) - else: - gpu_src_loss += tf.reduce_mean ( 10*tf.square( gpu_target_srcm - gpu_pred_src_srcm ),axis=[1,2,3] ) + # if self.options['ms_ssim_loss']: + # gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_srcm, gpu_pred_src_srcm, max_val=1.0)) + # else: + gpu_src_loss += tf.reduce_mean ( 10*tf.square( gpu_target_srcm - gpu_pred_src_srcm ),axis=[1,2,3] ) face_style_power = self.options['face_style_power'] / 100.0 if face_style_power != 0 and not self.pretrain: @@ -481,15 +481,15 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... elif mouth_prio: gpu_target_part_mask = gpu_target_dstm_mouth - if self.options['ms_ssim_loss']: - gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dst*gpu_target_part_mask, gpu_pred_dst_dst*gpu_target_part_mask, max_val=1.0)) - else: - gpu_dst_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_dst*gpu_target_part_mask - gpu_pred_dst_dst*gpu_target_part_mask ), axis=[1,2,3]) + # if self.options['ms_ssim_loss']: + # gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dst*gpu_target_part_mask, gpu_pred_dst_dst*gpu_target_part_mask, max_val=1.0)) + # else: + gpu_dst_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_dst*gpu_target_part_mask - gpu_pred_dst_dst*gpu_target_part_mask ), axis=[1,2,3]) - if self.options['ms_ssim_loss']: - gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dstm, gpu_pred_dst_dstm, max_val=1.0)) - else: - gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) + # if self.options['ms_ssim_loss']: + # gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dstm, gpu_pred_dst_dstm, max_val=1.0)) + # else: + gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) gpu_src_losses += [gpu_src_loss] gpu_dst_losses += [gpu_dst_loss] From 1785ecc77d88859ca9451bfa8c4ba7a4a20cd452 Mon Sep 17 00:00:00 2001 From: jh Date: Sat, 13 Mar 2021 12:54:44 -0800 Subject: [PATCH 26/70] ms-ssim loss for eyes/mouth --- models/Model_SAEHD/Model.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index c6aa24e..1d88fbe 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -443,10 +443,10 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... elif mouth_prio: gpu_target_part_mask = gpu_target_srcm_mouth - # if self.options['ms_ssim_loss']: - # gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0)) - # else: - gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) + if self.options['ms_ssim_loss']: + gpu_src_loss += tf.reduce_mean ( 300*nn.MsSsim(resolution, kernel_size=5)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0)) + else: + gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) # if self.options['ms_ssim_loss']: # gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_srcm, gpu_pred_src_srcm, max_val=1.0)) @@ -481,10 +481,10 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... elif mouth_prio: gpu_target_part_mask = gpu_target_dstm_mouth - # if self.options['ms_ssim_loss']: - # gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dst*gpu_target_part_mask, gpu_pred_dst_dst*gpu_target_part_mask, max_val=1.0)) - # else: - gpu_dst_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_dst*gpu_target_part_mask - gpu_pred_dst_dst*gpu_target_part_mask ), axis=[1,2,3]) + if self.options['ms_ssim_loss']: + gpu_dst_loss += tf.reduce_mean ( 300*nn.MsSsim(resolution, kernel_size=5)(gpu_target_dst*gpu_target_part_mask, gpu_pred_dst_dst*gpu_target_part_mask, max_val=1.0)) + else: + gpu_dst_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_dst*gpu_target_part_mask - gpu_pred_dst_dst*gpu_target_part_mask ), axis=[1,2,3]) # if self.options['ms_ssim_loss']: # gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dstm, gpu_pred_dst_dstm, max_val=1.0)) From 703c790e67d110e047a1750fd2d6f34cb5085fc1 Mon Sep 17 00:00:00 2001 From: jh Date: Sat, 13 Mar 2021 14:39:36 -0800 Subject: [PATCH 27/70] kernel size fix --- core/leras/layers/MsSsim.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index b8d4c45..9aebf8f 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -20,7 +20,7 @@ class MsSsim(nn.LayerBase): y_true_t = tf.transpose(tf.cast(y_true, tf.float32), [0, 2, 3, 1]) y_pred_t = tf.transpose(tf.cast(y_pred, tf.float32), [0, 2, 3, 1]) - loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors) + loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors, filter_size=self.kernel_size) return (1.0 - loss) / 2.0 nn.MsSsim = MsSsim From fd3b4ad8933ad3e47f2ac998d8c1a2050ad665cb Mon Sep 17 00:00:00 2001 From: jh Date: Sat, 13 Mar 2021 17:25:18 -0800 Subject: [PATCH 28/70] uncomment lines --- models/Model_SAEHD/Model.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 1d88fbe..afdba77 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -448,10 +448,10 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... else: gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) - # if self.options['ms_ssim_loss']: - # gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_srcm, gpu_pred_src_srcm, max_val=1.0)) - # else: - gpu_src_loss += tf.reduce_mean ( 10*tf.square( gpu_target_srcm - gpu_pred_src_srcm ),axis=[1,2,3] ) + if self.options['ms_ssim_loss']: + gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_srcm, gpu_pred_src_srcm, max_val=1.0)) + else: + gpu_src_loss += tf.reduce_mean ( 10*tf.square( gpu_target_srcm - gpu_pred_src_srcm ),axis=[1,2,3] ) face_style_power = self.options['face_style_power'] / 100.0 if face_style_power != 0 and not self.pretrain: @@ -486,10 +486,10 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... else: gpu_dst_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_dst*gpu_target_part_mask - gpu_pred_dst_dst*gpu_target_part_mask ), axis=[1,2,3]) - # if self.options['ms_ssim_loss']: - # gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dstm, gpu_pred_dst_dstm, max_val=1.0)) - # else: - gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) + if self.options['ms_ssim_loss']: + gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dstm, gpu_pred_dst_dstm, max_val=1.0)) + else: + gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) gpu_src_losses += [gpu_src_loss] gpu_dst_losses += [gpu_dst_loss] From a366d28adeaf38aede24c657c9ef4becaa10d952 Mon Sep 17 00:00:00 2001 From: jh Date: Tue, 16 Mar 2021 16:36:52 -0700 Subject: [PATCH 29/70] debug shape --- models/Model_SAEHD/Model.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 25d6228..b47e339 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -495,6 +495,9 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_pred_src_src_d, \ gpu_pred_src_src_d2 = self.D_src(gpu_pred_src_src_masked_opt) + print("Shape (gpu_pred_src_src_d): ", gpu_pred_src_src_d.shape) + print("Shape (gpu_pred_src_src_d2): ", gpu_pred_src_src_d2.shape) + gpu_pred_src_src_d_ones = tf.ones_like (gpu_pred_src_src_d) gpu_pred_src_src_d_zeros = tf.zeros_like(gpu_pred_src_src_d) From 22cb3103d88e443e00ad37b099611941029e617a Mon Sep 17 00:00:00 2001 From: jh Date: Tue, 16 Mar 2021 16:43:03 -0700 Subject: [PATCH 30/70] more debugging --- models/Model_SAEHD/Model.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index b47e339..2bfed55 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -498,6 +498,19 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... print("Shape (gpu_pred_src_src_d): ", gpu_pred_src_src_d.shape) print("Shape (gpu_pred_src_src_d2): ", gpu_pred_src_src_d2.shape) + print("Flattened Shape (gpu_pred_src_src_d): ", gpu_pred_src_src_d.flatten().shape()) + + # def get_smooth_noisy_labels_like(label, tensor, smoothing=0.2, noise=0.05): + # new_labels = [] + # for label in labels: + # if np.random.random() < noise: + # label = 0 if label == 1 else 1 + # if label == 0: + # new_labels.append(np.random.uniform(0, 0+smoothing/2)) + # else: + # new_labels.append(np.random.uniform(1-smoothing/2, 1.0)) + # return new_labels + gpu_pred_src_src_d_ones = tf.ones_like (gpu_pred_src_src_d) gpu_pred_src_src_d_zeros = tf.zeros_like(gpu_pred_src_src_d) From 6092a77924f34762b8c4769b753d5a4136862664 Mon Sep 17 00:00:00 2001 From: jh Date: Tue, 16 Mar 2021 16:57:53 -0700 Subject: [PATCH 31/70] more debugging --- models/Model_SAEHD/Model.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 2bfed55..5d48762 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -497,8 +497,9 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... print("Shape (gpu_pred_src_src_d): ", gpu_pred_src_src_d.shape) print("Shape (gpu_pred_src_src_d2): ", gpu_pred_src_src_d2.shape) + for i in gpu_pred_src_src_d2.shape: + print("Shape (gpu_pred_src_src_d2) i: ", i) - print("Flattened Shape (gpu_pred_src_src_d): ", gpu_pred_src_src_d.flatten().shape()) # def get_smooth_noisy_labels_like(label, tensor, smoothing=0.2, noise=0.05): # new_labels = [] From 0d5b67a35518c9f61cdd4fccd19089c0fc54642f Mon Sep 17 00:00:00 2001 From: jh Date: Tue, 16 Mar 2021 17:11:31 -0700 Subject: [PATCH 32/70] test --- models/Model_SAEHD/Model.py | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 5d48762..216f861 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -497,32 +497,30 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... print("Shape (gpu_pred_src_src_d): ", gpu_pred_src_src_d.shape) print("Shape (gpu_pred_src_src_d2): ", gpu_pred_src_src_d2.shape) - for i in gpu_pred_src_src_d2.shape: - print("Shape (gpu_pred_src_src_d2) i: ", i) - # def get_smooth_noisy_labels_like(label, tensor, smoothing=0.2, noise=0.05): - # new_labels = [] - # for label in labels: - # if np.random.random() < noise: - # label = 0 if label == 1 else 1 - # if label == 0: - # new_labels.append(np.random.uniform(0, 0+smoothing/2)) - # else: - # new_labels.append(np.random.uniform(1-smoothing/2, 1.0)) - # return new_labels + def get_smooth_noisy_label(label, smoothing=0.2, noise=0.05): + if np.random.random() < noise: + label = 0 if label == 1 else 1 + if label == 0: + return lambda x: np.random.uniform(0, 0+smoothing/2) + else: + return lambda x: np.random.uniform(1-smoothing/2, 1.0) - gpu_pred_src_src_d_ones = tf.ones_like (gpu_pred_src_src_d) - gpu_pred_src_src_d_zeros = tf.zeros_like(gpu_pred_src_src_d) + gpu_pred_src_src_d_ones = tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), gpu_pred_src_src_d) + gpu_pred_src_src_d_zeros = tf.map_fn (get_smooth_noisy_label(0, smoothing=0.2, noise=0.05), gpu_pred_src_src_d) - gpu_pred_src_src_d2_ones = tf.ones_like (gpu_pred_src_src_d2) - gpu_pred_src_src_d2_zeros = tf.zeros_like(gpu_pred_src_src_d2) + print("Shape (gpu_pred_src_src_d_ones): ", gpu_pred_src_src_d.shape) + print("Shape (gpu_pred_src_src_d_zeros): ", gpu_pred_src_src_d2.shape) + + gpu_pred_src_src_d2_ones = tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), gpu_pred_src_src_d2) + gpu_pred_src_src_d2_zeros = tf.map_fn (get_smooth_noisy_label(0, smoothing=0.2, noise=0.05), gpu_pred_src_src_d2) gpu_target_src_d, \ gpu_target_src_d2 = self.D_src(gpu_target_src_masked_opt) - gpu_target_src_d_ones = tf.ones_like(gpu_target_src_d) - gpu_target_src_d2_ones = tf.ones_like(gpu_target_src_d2) + gpu_target_src_d_ones = tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), gpu_target_src_d) + gpu_target_src_d2_ones = tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), gpu_target_src_d2) gpu_D_src_dst_loss = (DLoss(gpu_target_src_d_ones , gpu_target_src_d) + \ DLoss(gpu_pred_src_src_d_zeros , gpu_pred_src_src_d) ) * 0.5 + \ From cca2d86c3f2098afadc373d98b16a3d0805c2bde Mon Sep 17 00:00:00 2001 From: jh Date: Tue, 16 Mar 2021 17:17:38 -0700 Subject: [PATCH 33/70] test --- models/Model_SAEHD/Model.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 216f861..4fa6b72 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -495,8 +495,10 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_pred_src_src_d, \ gpu_pred_src_src_d2 = self.D_src(gpu_pred_src_src_masked_opt) - print("Shape (gpu_pred_src_src_d): ", gpu_pred_src_src_d.shape) - print("Shape (gpu_pred_src_src_d2): ", gpu_pred_src_src_d2.shape) + print("gpu_pred_src_src_d.shape: ", gpu_pred_src_src_d.shape) + print("gpu_pred_src_src_d2.shape: ", gpu_pred_src_src_d2.shape) + + print("gpu_pred_src_src_d.reshape([-1]).shape: ", gpu_pred_src_src_d.reshape([-1]).shape) def get_smooth_noisy_label(label, smoothing=0.2, noise=0.05): @@ -507,7 +509,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... else: return lambda x: np.random.uniform(1-smoothing/2, 1.0) - gpu_pred_src_src_d_ones = tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), gpu_pred_src_src_d) + gpu_pred_src_src_d_ones = tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), gpu_pred_src_src_d.reshape([-1])).reshape(gpu_pred_src_src_d.shape) gpu_pred_src_src_d_zeros = tf.map_fn (get_smooth_noisy_label(0, smoothing=0.2, noise=0.05), gpu_pred_src_src_d) print("Shape (gpu_pred_src_src_d_ones): ", gpu_pred_src_src_d.shape) From 08495a199e2821e4641cef3d3a71846d383e9c48 Mon Sep 17 00:00:00 2001 From: jh Date: Tue, 16 Mar 2021 17:19:26 -0700 Subject: [PATCH 34/70] test --- models/Model_SAEHD/Model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 4fa6b72..f879310 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -498,7 +498,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... print("gpu_pred_src_src_d.shape: ", gpu_pred_src_src_d.shape) print("gpu_pred_src_src_d2.shape: ", gpu_pred_src_src_d2.shape) - print("gpu_pred_src_src_d.reshape([-1]).shape: ", gpu_pred_src_src_d.reshape([-1]).shape) + print("tf.reshape(gpu_pred_src_src_d, [-1]).shape: ", tf.reshape(gpu_pred_src_src_d, [-1]).shape) def get_smooth_noisy_label(label, smoothing=0.2, noise=0.05): @@ -509,7 +509,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... else: return lambda x: np.random.uniform(1-smoothing/2, 1.0) - gpu_pred_src_src_d_ones = tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), gpu_pred_src_src_d.reshape([-1])).reshape(gpu_pred_src_src_d.shape) + gpu_pred_src_src_d_ones = tf.reshape(tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), tf.reshape(gpu_pred_src_src_d, [-1])), gpu_pred_src_src_d.shape) gpu_pred_src_src_d_zeros = tf.map_fn (get_smooth_noisy_label(0, smoothing=0.2, noise=0.05), gpu_pred_src_src_d) print("Shape (gpu_pred_src_src_d_ones): ", gpu_pred_src_src_d.shape) From 91301d0516ac43816a386b542d0b58d68999b90e Mon Sep 17 00:00:00 2001 From: jh Date: Tue, 16 Mar 2021 19:16:48 -0700 Subject: [PATCH 35/70] update labels --- models/Model_SAEHD/Model.py | 39 ++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index f879310..991e805 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -498,31 +498,38 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... print("gpu_pred_src_src_d.shape: ", gpu_pred_src_src_d.shape) print("gpu_pred_src_src_d2.shape: ", gpu_pred_src_src_d2.shape) - print("tf.reshape(gpu_pred_src_src_d, [-1]).shape: ", tf.reshape(gpu_pred_src_src_d, [-1]).shape) + # print("tf.reshape(gpu_pred_src_src_d, [-1]).shape: ", tf.reshape(gpu_pred_src_src_d, [-1]).shape) - def get_smooth_noisy_label(label, smoothing=0.2, noise=0.05): - if np.random.random() < noise: - label = 0 if label == 1 else 1 - if label == 0: - return lambda x: np.random.uniform(0, 0+smoothing/2) - else: - return lambda x: np.random.uniform(1-smoothing/2, 1.0) + def get_smooth_noisy_labels(label, tensor, smoothing=0.2, noise=0.05): + labels = [] + num_labels = self.batch_size + for d in tensor.shape[1:]: + num_labels *= d + for _ in num_labels: + if np.random.random() < noise: + label = 0 if label == 1 else 1 + if label == 0: + label = np.random.uniform(0, 0+smoothing/2) + else: + label = np.random.uniform(1-smoothing/2, 1.0) + labels.append(label) + return tf.reshape(labels, tensor.shape) - gpu_pred_src_src_d_ones = tf.reshape(tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), tf.reshape(gpu_pred_src_src_d, [-1])), gpu_pred_src_src_d.shape) - gpu_pred_src_src_d_zeros = tf.map_fn (get_smooth_noisy_label(0, smoothing=0.2, noise=0.05), gpu_pred_src_src_d) + gpu_pred_src_src_d_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d, smoothing=0.2, noise=0.05) + gpu_pred_src_src_d_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d, smoothing=0.2, noise=0.05) - print("Shape (gpu_pred_src_src_d_ones): ", gpu_pred_src_src_d.shape) - print("Shape (gpu_pred_src_src_d_zeros): ", gpu_pred_src_src_d2.shape) + print("gpu_pred_src_src_d_ones.shape: ", gpu_pred_src_src_d_ones.shape) + print("gpu_pred_src_src_d_zeros.shape: ", gpu_pred_src_src_d_zeros.shape) - gpu_pred_src_src_d2_ones = tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), gpu_pred_src_src_d2) - gpu_pred_src_src_d2_zeros = tf.map_fn (get_smooth_noisy_label(0, smoothing=0.2, noise=0.05), gpu_pred_src_src_d2) + gpu_pred_src_src_d2_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d2, smoothing=0.2, noise=0.05) + gpu_pred_src_src_d2_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d2, smoothing=0.2, noise=0.05) gpu_target_src_d, \ gpu_target_src_d2 = self.D_src(gpu_target_src_masked_opt) - gpu_target_src_d_ones = tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), gpu_target_src_d) - gpu_target_src_d2_ones = tf.map_fn (get_smooth_noisy_label(1, smoothing=0.2, noise=0.05), gpu_target_src_d2) + gpu_target_src_d_ones = get_smooth_noisy_labels(1, gpu_target_src_d, smoothing=0.2, noise=0.05) + gpu_target_src_d2_ones = get_smooth_noisy_labels(1, gpu_target_src_d2, smoothing=0.2, noise=0.05) gpu_D_src_dst_loss = (DLoss(gpu_target_src_d_ones , gpu_target_src_d) + \ DLoss(gpu_pred_src_src_d_zeros , gpu_pred_src_src_d) ) * 0.5 + \ From 4223ec79864767b129246be3072b439d1282bc17 Mon Sep 17 00:00:00 2001 From: jh Date: Tue, 16 Mar 2021 19:18:22 -0700 Subject: [PATCH 36/70] fix range --- models/Model_SAEHD/Model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 991e805..553e6e8 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -506,7 +506,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... num_labels = self.batch_size for d in tensor.shape[1:]: num_labels *= d - for _ in num_labels: + for _ in range(num_labels): if np.random.random() < noise: label = 0 if label == 1 else 1 if label == 0: From a89cf63e9f7adc1c380fc473ebaa6d9ced5a6a9c Mon Sep 17 00:00:00 2001 From: jh Date: Tue, 16 Mar 2021 19:20:24 -0700 Subject: [PATCH 37/70] fix reshape --- models/Model_SAEHD/Model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 553e6e8..7cd65a6 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -514,7 +514,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... else: label = np.random.uniform(1-smoothing/2, 1.0) labels.append(label) - return tf.reshape(labels, tensor.shape) + return tf.reshape(labels, (self.batch_size,) + tensor.shape[1:]) gpu_pred_src_src_d_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d, smoothing=0.2, noise=0.05) gpu_pred_src_src_d_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d, smoothing=0.2, noise=0.05) From 3e7fb39cada1fce5a96a7743ebc4f5022959cc22 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 08:26:00 -0700 Subject: [PATCH 38/70] Vectorize --- models/Model_SAEHD/Model.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 7cd65a6..95445ac 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -502,19 +502,15 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... def get_smooth_noisy_labels(label, tensor, smoothing=0.2, noise=0.05): - labels = [] num_labels = self.batch_size for d in tensor.shape[1:]: num_labels *= d - for _ in range(num_labels): - if np.random.random() < noise: - label = 0 if label == 1 else 1 - if label == 0: - label = np.random.uniform(0, 0+smoothing/2) - else: - label = np.random.uniform(1-smoothing/2, 1.0) - labels.append(label) - return tf.reshape(labels, (self.batch_size,) + tensor.shape[1:]) + probs = tf.math.log([[noise, 1-noise]]) if label == 1 else tf.math.log([[1-noise, noise]]) + x = tf.random.categorical(probs, num_labels) + x = tf.cast(x, tf.float32) + x = x * (1-smoothing) + (smoothing/x.shape[1]) + x = tf.reshape(x, (self.batch_size,) + tensor.shape[1:]) + return x gpu_pred_src_src_d_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d, smoothing=0.2, noise=0.05) gpu_pred_src_src_d_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d, smoothing=0.2, noise=0.05) From 3edcd9a173fc5bda2c62077a4246829551c402bb Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 08:30:39 -0700 Subject: [PATCH 39/70] fix error --- models/Model_SAEHD/Model.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 95445ac..f8dfbe9 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -508,7 +508,8 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... probs = tf.math.log([[noise, 1-noise]]) if label == 1 else tf.math.log([[1-noise, noise]]) x = tf.random.categorical(probs, num_labels) x = tf.cast(x, tf.float32) - x = x * (1-smoothing) + (smoothing/x.shape[1]) + x = x * (1-smoothing) + (smoothing/num_labels) + # x = tf.math.scalar_mul(1-smoothing, x) + (smoothing/x.shape[1]) x = tf.reshape(x, (self.batch_size,) + tensor.shape[1:]) return x From faf2a4a88544f79f5949d1c1c3cade6f81e1dfdd Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 08:34:00 -0700 Subject: [PATCH 40/70] fix error --- models/Model_SAEHD/Model.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index f8dfbe9..3dfef64 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -508,8 +508,9 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... probs = tf.math.log([[noise, 1-noise]]) if label == 1 else tf.math.log([[1-noise, noise]]) x = tf.random.categorical(probs, num_labels) x = tf.cast(x, tf.float32) - x = x * (1-smoothing) + (smoothing/num_labels) - # x = tf.math.scalar_mul(1-smoothing, x) + (smoothing/x.shape[1]) + # x = x * (1-smoothing) + (smoothing/num_labels) + x = tf.math.scalar_mul(1-smoothing, x) + x = x + (smoothing/num_labels) x = tf.reshape(x, (self.batch_size,) + tensor.shape[1:]) return x From 86c7618c071bfd3d0e70ef1c1f1a245f5ed5b75f Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 08:37:33 -0700 Subject: [PATCH 41/70] fix num_labels type --- models/Model_SAEHD/Model.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 3dfef64..ff5584a 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -503,8 +503,9 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... def get_smooth_noisy_labels(label, tensor, smoothing=0.2, noise=0.05): num_labels = self.batch_size - for d in tensor.shape[1:]: + for d in tensor.get_shape().as_list()[1:]: num_labels *= d + # num_labels = int(num_labels) probs = tf.math.log([[noise, 1-noise]]) if label == 1 else tf.math.log([[1-noise, noise]]) x = tf.random.categorical(probs, num_labels) x = tf.cast(x, tf.float32) From 7696a30d84133951614cde87f9abe30e631d12c4 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 08:44:45 -0700 Subject: [PATCH 42/70] clean up --- models/Model_SAEHD/Model.py | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index ff5584a..81368b1 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -495,13 +495,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_pred_src_src_d, \ gpu_pred_src_src_d2 = self.D_src(gpu_pred_src_src_masked_opt) - print("gpu_pred_src_src_d.shape: ", gpu_pred_src_src_d.shape) - print("gpu_pred_src_src_d2.shape: ", gpu_pred_src_src_d2.shape) - - # print("tf.reshape(gpu_pred_src_src_d, [-1]).shape: ", tf.reshape(gpu_pred_src_src_d, [-1]).shape) - - - def get_smooth_noisy_labels(label, tensor, smoothing=0.2, noise=0.05): + def get_smooth_noisy_labels(label, tensor, smoothing=0.1, noise=0.05): num_labels = self.batch_size for d in tensor.get_shape().as_list()[1:]: num_labels *= d @@ -515,20 +509,17 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... x = tf.reshape(x, (self.batch_size,) + tensor.shape[1:]) return x - gpu_pred_src_src_d_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d, smoothing=0.2, noise=0.05) - gpu_pred_src_src_d_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d, smoothing=0.2, noise=0.05) + gpu_pred_src_src_d_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d) + gpu_pred_src_src_d_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d) - print("gpu_pred_src_src_d_ones.shape: ", gpu_pred_src_src_d_ones.shape) - print("gpu_pred_src_src_d_zeros.shape: ", gpu_pred_src_src_d_zeros.shape) - - gpu_pred_src_src_d2_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d2, smoothing=0.2, noise=0.05) - gpu_pred_src_src_d2_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d2, smoothing=0.2, noise=0.05) + gpu_pred_src_src_d2_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d2) + gpu_pred_src_src_d2_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d2) gpu_target_src_d, \ gpu_target_src_d2 = self.D_src(gpu_target_src_masked_opt) - gpu_target_src_d_ones = get_smooth_noisy_labels(1, gpu_target_src_d, smoothing=0.2, noise=0.05) - gpu_target_src_d2_ones = get_smooth_noisy_labels(1, gpu_target_src_d2, smoothing=0.2, noise=0.05) + gpu_target_src_d_ones = get_smooth_noisy_labels(1, gpu_target_src_d) + gpu_target_src_d2_ones = get_smooth_noisy_labels(1, gpu_target_src_d2) gpu_D_src_dst_loss = (DLoss(gpu_target_src_d_ones , gpu_target_src_d) + \ DLoss(gpu_pred_src_src_d_zeros , gpu_pred_src_src_d) ) * 0.5 + \ From d2b44fc2ca9a94deaab9e084c5b1d300b19a7c0a Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 09:06:49 -0700 Subject: [PATCH 43/70] Add GAN options --- models/Model_SAEHD/Model.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 81368b1..28e14f1 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -139,6 +139,8 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... default_gan_power = self.options['gan_power'] = self.load_or_def_option('gan_power', 0.0) default_gan_patch_size = self.options['gan_patch_size'] = self.load_or_def_option('gan_patch_size', self.options['resolution'] // 8) default_gan_dims = self.options['gan_dims'] = self.load_or_def_option('gan_dims', 16) + default_gan_smoothing = self.options['gan_smoothing'] = self.load_or_def_option('gan_smoothing', 0.1) + default_gan_noise = self.options['gan_noise'] = self.load_or_def_option('gan_noise', 0.05) if self.is_first_run() or ask_override: self.options['models_opt_on_gpu'] = io.input_bool ("Place models and optimizer on GPU", default_models_opt_on_gpu, help_message="When you train on one GPU, by default model and optimizer weights are placed on GPU to accelerate the process. You can place they on CPU to free up extra VRAM, thus set bigger dimensions.") @@ -158,6 +160,9 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gan_dims = np.clip ( io.input_int("GAN dimensions", default_gan_dims, add_info="4-64", help_message="The dimensions of the GAN network. The higher dimensions, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is 16." ), 4, 64 ) self.options['gan_dims'] = gan_dims + self.options['gan_smoothing'] = np.clip ( io.input_number("GAN label smoothing", default_gan_smoothing, add_info="0 - 0.5", help_message="Uses soft labels with values slightly off from 0/1 for GAN, has a regularizing effect"), 0, 0.5) + self.options['gan_noise'] = np.clip ( io.input_number("GAN noisy labels", default_gan_noise, add_info="0 - 0.5", help_message="Marks some images with the wrong label, helps prevent collapse"), 0, 0.5) + if 'df' in self.options['archi']: self.options['true_face_power'] = np.clip ( io.input_number ("'True face' power.", default_true_face_power, add_info="0.0000 .. 1.0", help_message="Experimental option. Discriminates result face to be more like src face. Higher value - stronger discrimination. Typical value is 0.01 . Comparison - https://i.imgur.com/czScS9q.png"), 0.0, 1.0 ) else: @@ -499,27 +504,29 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... num_labels = self.batch_size for d in tensor.get_shape().as_list()[1:]: num_labels *= d - # num_labels = int(num_labels) + probs = tf.math.log([[noise, 1-noise]]) if label == 1 else tf.math.log([[1-noise, noise]]) x = tf.random.categorical(probs, num_labels) x = tf.cast(x, tf.float32) - # x = x * (1-smoothing) + (smoothing/num_labels) x = tf.math.scalar_mul(1-smoothing, x) x = x + (smoothing/num_labels) x = tf.reshape(x, (self.batch_size,) + tensor.shape[1:]) return x - gpu_pred_src_src_d_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d) - gpu_pred_src_src_d_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d) + smoothing = self.options['gan_smoothing'] + noise = self.options['gan_noise'] - gpu_pred_src_src_d2_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d2) - gpu_pred_src_src_d2_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d2) + gpu_pred_src_src_d_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d, smoothing=smoothing, noise=noise) + gpu_pred_src_src_d_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d, smoothing=smoothing, noise=noise) + + gpu_pred_src_src_d2_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d2, smoothing=smoothing, noise=noise) + gpu_pred_src_src_d2_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d2, smoothing=smoothing, noise=noise) gpu_target_src_d, \ gpu_target_src_d2 = self.D_src(gpu_target_src_masked_opt) - gpu_target_src_d_ones = get_smooth_noisy_labels(1, gpu_target_src_d) - gpu_target_src_d2_ones = get_smooth_noisy_labels(1, gpu_target_src_d2) + gpu_target_src_d_ones = get_smooth_noisy_labels(1, gpu_target_src_d, smoothing=smoothing, noise=noise) + gpu_target_src_d2_ones = get_smooth_noisy_labels(1, gpu_target_src_d2, smoothing=smoothing, noise=noise) gpu_D_src_dst_loss = (DLoss(gpu_target_src_d_ones , gpu_target_src_d) + \ DLoss(gpu_pred_src_src_d_zeros , gpu_pred_src_src_d) ) * 0.5 + \ From 33ea98012c0973a717df3b7df59d3091dc331539 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 11:15:33 -0700 Subject: [PATCH 44/70] fix loss --- core/leras/layers/MsSsim.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index 9aebf8f..6c8e931 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -1,6 +1,7 @@ from core.leras import nn tf = nn.tf + class MsSsim(nn.LayerBase): default_power_factors = (0.0448, 0.2856, 0.3001, 0.2363, 0.1333) @@ -20,7 +21,9 @@ class MsSsim(nn.LayerBase): y_true_t = tf.transpose(tf.cast(y_true, tf.float32), [0, 2, 3, 1]) y_pred_t = tf.transpose(tf.cast(y_pred, tf.float32), [0, 2, 3, 1]) - loss = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors, filter_size=self.kernel_size) - return (1.0 - loss) / 2.0 + ms_ssim_val = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors, filter_size=self.kernel_size) + # ssim_multiscale returns values in range [0, 1] (where 1 is completely identical) + # subtract from 1 to get loss + return 1 - ms_ssim_val nn.MsSsim = MsSsim From 607863f3fab644a275c11886f74cd32d7048bc6c Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 11:22:02 -0700 Subject: [PATCH 45/70] fix? --- core/leras/layers/MsSsim.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index 6c8e931..cb48294 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -24,6 +24,6 @@ class MsSsim(nn.LayerBase): ms_ssim_val = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors, filter_size=self.kernel_size) # ssim_multiscale returns values in range [0, 1] (where 1 is completely identical) # subtract from 1 to get loss - return 1 - ms_ssim_val + return 1.0 - ms_ssim_val nn.MsSsim = MsSsim From 5f10e3c67e4296066d78263c34a81ba95b894202 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 11:32:05 -0700 Subject: [PATCH 46/70] revert changes --- core/leras/layers/MsSsim.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index cb48294..7843860 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -24,6 +24,7 @@ class MsSsim(nn.LayerBase): ms_ssim_val = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors, filter_size=self.kernel_size) # ssim_multiscale returns values in range [0, 1] (where 1 is completely identical) # subtract from 1 to get loss - return 1.0 - ms_ssim_val + return (1.0 - ms_ssim_val) / 2.0 + nn.MsSsim = MsSsim From cce3061dca6e84d6979d2bc19973cbe1f232fc7e Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 11:41:46 -0700 Subject: [PATCH 47/70] fixme --- models/Model_SAEHD/Model.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 67dbe95..8de5bce 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -450,10 +450,13 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... else: gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) - if self.options['ms_ssim_loss']: - gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_srcm, gpu_pred_src_srcm, max_val=1.0)) - else: - gpu_src_loss += tf.reduce_mean ( 10*tf.square( gpu_target_srcm - gpu_pred_src_srcm ),axis=[1,2,3] ) + # FIXME + # if self.options['ms_ssim_loss']: + # gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_srcm, gpu_pred_src_srcm, max_val=1.0)) + # else: + print('gpu_target_srcm.shape:', gpu_target_srcm.shape) + print('gpu_pred_src_srcm.shape:', gpu_pred_src_srcm.shape) + gpu_src_loss += tf.reduce_mean ( 10*tf.square( gpu_target_srcm - gpu_pred_src_srcm ),axis=[1,2,3] ) face_style_power = self.options['face_style_power'] / 100.0 if face_style_power != 0 and not self.pretrain: @@ -488,10 +491,11 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... else: gpu_dst_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_dst*gpu_target_part_mask - gpu_pred_dst_dst*gpu_target_part_mask ), axis=[1,2,3]) - if self.options['ms_ssim_loss']: - gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dstm, gpu_pred_dst_dstm, max_val=1.0)) - else: - gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) + # FIXME + # if self.options['ms_ssim_loss']: + # gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dstm, gpu_pred_dst_dstm, max_val=1.0)) + # else: + gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) gpu_src_losses += [gpu_src_loss] gpu_dst_losses += [gpu_dst_loss] From bcffcde97f5e75b36d6ad18e021240b26c7e9c5d Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 11:53:38 -0700 Subject: [PATCH 48/70] debug --- models/Model_SAEHD/Model.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 8de5bce..a01836d 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -446,6 +446,16 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_target_part_mask = gpu_target_srcm_mouth if self.options['ms_ssim_loss']: + # FIXME + ms_ssim_loss = nn.MsSsim(resolution, kernel_size=5)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0) + print('ms_ssim_loss.shape: ', ms_ssim_loss.shape) + ms_ssim_mean_loss = tf.reduce_mean(300 * ms_ssim_loss) + print('ms_ssim_mean_loss.shape: ', ms_ssim_mean_loss.shape) + abs_loss = tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ) + print('abs_loss.shape: ', abs_loss.shape) + abs_mean_loss = tf.reduce_mean(300 * abs_loss, axis=[1,2,3]) + print('abs_mean_loss.shape: ', abs_mean_loss.shape) + gpu_src_loss += tf.reduce_mean ( 300*nn.MsSsim(resolution, kernel_size=5)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0)) else: gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) From e9ae398e8e33192733e96c3405e04e3c46ab466a Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 12:03:04 -0700 Subject: [PATCH 49/70] test --- models/Model_SAEHD/Model.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index a01836d..be470df 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -455,8 +455,9 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... print('abs_loss.shape: ', abs_loss.shape) abs_mean_loss = tf.reduce_mean(300 * abs_loss, axis=[1,2,3]) print('abs_mean_loss.shape: ', abs_mean_loss.shape) + gpu_src_loss += 300*nn.MsSsim(resolution, kernel_size=5)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0) - gpu_src_loss += tf.reduce_mean ( 300*nn.MsSsim(resolution, kernel_size=5)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0)) + # gpu_src_loss += tf.reduce_mean ( 300*nn.MsSsim(resolution, kernel_size=5)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0)) else: gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) From 7eafa4edbd8dbf90d34bd1ec076f58ff2a6e129a Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 12:09:09 -0700 Subject: [PATCH 50/70] test --- models/Model_SAEHD/Model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index be470df..2c706af 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -428,7 +428,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_psd_target_dst_style_anti_masked = gpu_pred_src_dst*(1.0 - gpu_target_dstm_style_blur) if self.options['ms_ssim_loss']: - gpu_src_loss = tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0)) + gpu_src_loss = 10 * nn.MsSsim(resolution)(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0) else: if resolution < 256: gpu_src_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) From 40924b5f74dc759fab39df1ccaef4a0a2306ba32 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 12:13:28 -0700 Subject: [PATCH 51/70] test --- models/Model_SAEHD/Model.py | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 2c706af..6ae3fb5 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -446,28 +446,14 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_target_part_mask = gpu_target_srcm_mouth if self.options['ms_ssim_loss']: - # FIXME - ms_ssim_loss = nn.MsSsim(resolution, kernel_size=5)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0) - print('ms_ssim_loss.shape: ', ms_ssim_loss.shape) - ms_ssim_mean_loss = tf.reduce_mean(300 * ms_ssim_loss) - print('ms_ssim_mean_loss.shape: ', ms_ssim_mean_loss.shape) - abs_loss = tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ) - print('abs_loss.shape: ', abs_loss.shape) - abs_mean_loss = tf.reduce_mean(300 * abs_loss, axis=[1,2,3]) - print('abs_mean_loss.shape: ', abs_mean_loss.shape) - gpu_src_loss += 300*nn.MsSsim(resolution, kernel_size=5)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0) - - # gpu_src_loss += tf.reduce_mean ( 300*nn.MsSsim(resolution, kernel_size=5)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0)) + gpu_src_loss += 300 * nn.MsSsim(resolution, kernel_size=5)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0) else: gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) - # FIXME - # if self.options['ms_ssim_loss']: - # gpu_src_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_srcm, gpu_pred_src_srcm, max_val=1.0)) - # else: - print('gpu_target_srcm.shape:', gpu_target_srcm.shape) - print('gpu_pred_src_srcm.shape:', gpu_pred_src_srcm.shape) - gpu_src_loss += tf.reduce_mean ( 10*tf.square( gpu_target_srcm - gpu_pred_src_srcm ),axis=[1,2,3] ) + if self.options['ms_ssim_loss']: + gpu_src_loss += 10 * nn.MsSsim(resolution)(gpu_target_srcm, gpu_pred_src_srcm, max_val=1.0) + else: + gpu_src_loss += tf.reduce_mean ( 10*tf.square( gpu_target_srcm - gpu_pred_src_srcm ),axis=[1,2,3] ) face_style_power = self.options['face_style_power'] / 100.0 if face_style_power != 0 and not self.pretrain: From 4e088645316978fad82b10c917cce8ea6ee483a7 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 12:16:03 -0700 Subject: [PATCH 52/70] test --- models/Model_SAEHD/Model.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 6ae3fb5..3f4864a 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -465,7 +465,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_src_loss += tf.reduce_mean( (10*bg_style_power)*tf.square(gpu_psd_target_dst_style_anti_masked - gpu_target_dst_style_anti_masked), axis=[1,2,3] ) if self.options['ms_ssim_loss']: - gpu_dst_loss = tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0)) + gpu_dst_loss = 10*nn.MsSsim(resolution)(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0) else: if resolution < 256: gpu_dst_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/11.6) ), axis=[1]) @@ -484,15 +484,14 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_target_part_mask = gpu_target_dstm_mouth if self.options['ms_ssim_loss']: - gpu_dst_loss += tf.reduce_mean ( 300*nn.MsSsim(resolution, kernel_size=5)(gpu_target_dst*gpu_target_part_mask, gpu_pred_dst_dst*gpu_target_part_mask, max_val=1.0)) + gpu_dst_loss += 300 * nn.MsSsim(resolution, kernel_size=5)(gpu_target_dst*gpu_target_part_mask, gpu_pred_dst_dst*gpu_target_part_mask, max_val=1.0) else: gpu_dst_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_dst*gpu_target_part_mask - gpu_pred_dst_dst*gpu_target_part_mask ), axis=[1,2,3]) - # FIXME - # if self.options['ms_ssim_loss']: - # gpu_dst_loss += tf.reduce_mean ( 10*nn.MsSsim(resolution)(gpu_target_dstm, gpu_pred_dst_dstm, max_val=1.0)) - # else: - gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) + if self.options['ms_ssim_loss']: + gpu_dst_loss += 10 * nn.MsSsim(resolution)(gpu_target_dstm, gpu_pred_dst_dstm, max_val=1.0) + else: + gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) gpu_src_losses += [gpu_src_loss] gpu_dst_losses += [gpu_dst_loss] From cd6f820e9fc7bb36f39fb9b8b11a3015020c7625 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 12:16:14 -0700 Subject: [PATCH 53/70] formatting --- models/Model_SAEHD/Model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 3f4864a..08bce7a 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -465,7 +465,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_src_loss += tf.reduce_mean( (10*bg_style_power)*tf.square(gpu_psd_target_dst_style_anti_masked - gpu_target_dst_style_anti_masked), axis=[1,2,3] ) if self.options['ms_ssim_loss']: - gpu_dst_loss = 10*nn.MsSsim(resolution)(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0) + gpu_dst_loss = 10 * nn.MsSsim(resolution)(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0) else: if resolution < 256: gpu_dst_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/11.6) ), axis=[1]) From 5a8d9f66f252cc0d180cc8532c16b5ece386d147 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 12:19:10 -0700 Subject: [PATCH 54/70] fixes loss range --- core/leras/layers/MsSsim.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/leras/layers/MsSsim.py b/core/leras/layers/MsSsim.py index 7843860..d45a599 100644 --- a/core/leras/layers/MsSsim.py +++ b/core/leras/layers/MsSsim.py @@ -24,7 +24,7 @@ class MsSsim(nn.LayerBase): ms_ssim_val = tf.image.ssim_multiscale(y_true_t, y_pred_t, max_val, power_factors=self.power_factors, filter_size=self.kernel_size) # ssim_multiscale returns values in range [0, 1] (where 1 is completely identical) # subtract from 1 to get loss - return (1.0 - ms_ssim_val) / 2.0 + return 1.0 - ms_ssim_val nn.MsSsim = MsSsim From 5dbbf4767cb6d03cb6cfec3d60c90ea8011548d6 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 12:22:36 -0700 Subject: [PATCH 55/70] test hard placement --- core/leras/nn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/leras/nn.py b/core/leras/nn.py index 8ac437b..d9c5850 100644 --- a/core/leras/nn.py +++ b/core/leras/nn.py @@ -112,7 +112,7 @@ class nn(): config = tf.ConfigProto(device_count={'GPU': 0}) else: nn.tf_default_device = "/GPU:0" - config = tf.ConfigProto(allow_soft_placement=True) + config = tf.ConfigProto() config.gpu_options.visible_device_list = ','.join([str(device.index) for device in device_config.devices]) config.gpu_options.force_gpu_compatible = True From ecb3436c1b1843b1b55448e1e1f813bb556e7bc8 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 12:26:02 -0700 Subject: [PATCH 56/70] restore soft placement --- core/leras/nn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/leras/nn.py b/core/leras/nn.py index d9c5850..8ac437b 100644 --- a/core/leras/nn.py +++ b/core/leras/nn.py @@ -112,7 +112,7 @@ class nn(): config = tf.ConfigProto(device_count={'GPU': 0}) else: nn.tf_default_device = "/GPU:0" - config = tf.ConfigProto() + config = tf.ConfigProto(allow_soft_placement=True) config.gpu_options.visible_device_list = ','.join([str(device.index) for device in device_config.devices]) config.gpu_options.force_gpu_compatible = True From c3a4e4159e6fe6a345f469ddce1dd8c262515e82 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 12:37:06 -0700 Subject: [PATCH 57/70] rm commented out code --- core/leras/ops/__init__.py | 45 ++------------------------------------ 1 file changed, 2 insertions(+), 43 deletions(-) diff --git a/core/leras/ops/__init__.py b/core/leras/ops/__init__.py index f34461f..500a22a 100644 --- a/core/leras/ops/__init__.py +++ b/core/leras/ops/__init__.py @@ -307,47 +307,6 @@ def dssim(img1,img2, max_val, filter_size=11, filter_sigma=1.5, k1=0.01, k2=0.03 nn.dssim = dssim - -# def ms_ssim(img1, img2, resolution, kernel_size=11, k1=0.01, k2=0.03, max_value=1.0, -# power_factors=(0.0448, 0.2856, 0.3001, 0.2363, 0.1333)): -# -# # restrict mssim factors to those greater/equal to kernel size -# power_factors = [power_factors[i] for i in range(len(power_factors)) if resolution//(2**i) >= kernel_size] -# -# # normalize power factors if reduced because of size -# if sum(power_factors) < 1.0: -# power_factors = [x/sum(power_factors) for x in power_factors] -# -# img_dtype = img1.dtype -# if img_dtype != img2.dtype: -# raise ValueError("img1.dtype != img2.dtype") -# -# if img_dtype != tf.float32: -# img1 = tf.cast(img1, tf.float32) -# img2 = tf.cast(img2, tf.float32) -# -# # Transpose images from NCHW to NHWC -# img1_t = tf.transpose(img1, [0, 2, 3, 1]) -# img2_t = tf.transpose(img2, [0, 2, 3, 1]) -# -# def assign_device(op): -# if op.type != 'ListDiff': -# return '/gpu:0' -# else: -# return '/cpu:0' -# -# with tf.device(assign_device): -# ms_ssim_val = tf.image.ssim_multiscale(img1_t, img2_t, max_val=max_value, power_factors=power_factors, -# filter_size=kernel_size, k1=k1, k2=k2) -# ms_ssim_loss = (1.0 - ms_ssim_val) / 2.0 -# -# if img_dtype != tf.float32: -# ms_ssim_loss = tf.cast(ms_ssim_loss, img_dtype) -# return ms_ssim_loss -# -# nn.ms_ssim = ms_ssim - - def space_to_depth(x, size): if nn.data_format == "NHWC": # match NCHW version in order to switch data_format without problems @@ -426,7 +385,7 @@ def total_variation_mse(images): """ pixel_dif1 = images[:, 1:, :, :] - images[:, :-1, :, :] pixel_dif2 = images[:, :, 1:, :] - images[:, :, :-1, :] - + tot_var = ( tf.reduce_sum(tf.square(pixel_dif1), axis=[1,2,3]) + tf.reduce_sum(tf.square(pixel_dif2), axis=[1,2,3]) ) return tot_var @@ -441,4 +400,4 @@ def tf_suppress_lower_mean(t, eps=0.00001): q = tf.clip_by_value(q-t_mean_eps, 0, eps) q = q * (t/eps) return q -""" +""" \ No newline at end of file From 86493d386612ea612da6ff76b4b49f0b535396fd Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 17 Mar 2021 14:18:27 -0700 Subject: [PATCH 58/70] docs: update docs for ms-ssim --- doc/features/ms-ssim/README.md | 42 +++++++++++++++++++++++++++++ doc/features/random-color/README.md | 5 +++- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 doc/features/ms-ssim/README.md diff --git a/doc/features/ms-ssim/README.md b/doc/features/ms-ssim/README.md new file mode 100644 index 0000000..c7a0476 --- /dev/null +++ b/doc/features/ms-ssim/README.md @@ -0,0 +1,42 @@ +# Multiscale SSIM (MS-SSIM) + +Allows you to train using the MS-SSIM (multiscale structural similarity index measure) as the main loss metric, +a perceptually more accurate measure of image quality than MSE (mean squared error). + +- [DESCRIPTION](#description) +- [USAGE](#usage) + +![](example.png) + +## DESCRIPTION + +[SSIM](https://en.wikipedia.org/wiki/Structural_similarity) is metric for comparing the perceptial quality of an image: +> SSIM is a perception-based model that considers image degradation as perceived change in structural information, +> while also incorporating important perceptual phenomena, including both luminance masking and contrast masking terms. +> [...] +> Structural information is the idea that the pixels have strong inter-dependencies especially when they are spatially +> close. These dependencies carry important information about the structure of the objects in the visual scene. +> Luminance masking is a phenomenon whereby image distortions (in this context) tend to be less visible in bright +> regions, while contrast masking is a phenomenon whereby distortions become less visible where there is significant +> activity or "texture" in the image. + +The current loss metric is a combination of SSIM (structural similarity index measure) and +[MSE](https://en.wikipedia.org/wiki/Mean_squared_error) (mean squared error). + +[Multiscale SSIM](https://en.wikipedia.org/wiki/Structural_similarity#Multi-Scale_SSIM) is a variant of SSIM that +improves upon SSIM by comparing the similarity at multiple scales (e.g.: full-size, half-size, 1/4 size, etc.) +By using MS-SSIM as our main loss metric, we should expect the image similarity to improve across each scale, improving +both the large scale and small scale detail of the predicted images. + +Original paper: [Wang, Zhou, Eero P. Simoncelli, and Alan C. Bovik. +"Multiscale structural similarity for image quality assessment." +Signals, Systems and Computers, 2004.](https://www.cns.nyu.edu/pub/eero/wang03b.pdf) + +## USAGE + +``` +[n] Use multiscale loss? ( y/n ?:help ) : y +``` + + + diff --git a/doc/features/random-color/README.md b/doc/features/random-color/README.md index 8d8298c..d1aeac1 100644 --- a/doc/features/random-color/README.md +++ b/doc/features/random-color/README.md @@ -19,4 +19,7 @@ maintaining the same `C*` (chroma, relative saturation). ## USAGE -`[n] Random color ( y/n ?:help ) : y` +``` +[n] Random color ( y/n ?:help ) : y +``` + From 7bc5bf2b949ff62b04d077fb3dcde54270f3f6a1 Mon Sep 17 00:00:00 2001 From: jh Date: Sun, 21 Mar 2021 23:13:32 -0700 Subject: [PATCH 59/70] feature: adds GANv2 --- core/leras/models/PatchDiscriminator.py | 126 ++++++++++++++++++++++-- models/Model_SAEHD/Model.py | 23 ++++- 2 files changed, 138 insertions(+), 11 deletions(-) diff --git a/core/leras/models/PatchDiscriminator.py b/core/leras/models/PatchDiscriminator.py index 343e000..dcaf941 100644 --- a/core/leras/models/PatchDiscriminator.py +++ b/core/leras/models/PatchDiscriminator.py @@ -111,7 +111,7 @@ class UNetPatchDiscriminator(nn.ModelBase): for i in range(layers_count-1): st = 1 + (1 if val & (1 << i) !=0 else 0 ) layers.append ( [3, st ]) - sum_st += st + sum_st += st rf = self.calc_receptive_field_size(layers) @@ -131,7 +131,7 @@ class UNetPatchDiscriminator(nn.ModelBase): return s[q][2] def on_build(self, patch_size, in_ch, base_ch = 16): - + class ResidualBlock(nn.ModelBase): def on_build(self, ch, kernel_size=3 ): self.conv1 = nn.Conv2D( ch, ch, kernel_size=kernel_size, padding='SAME') @@ -152,7 +152,7 @@ class UNetPatchDiscriminator(nn.ModelBase): self.upres1 = [] self.upres2 = [] layers = self.find_archi(patch_size) - + level_chs = { i-1:v for i,v in enumerate([ min( base_ch * (2**i), 512 ) for i in range(len(layers)+1)]) } self.in_conv = nn.Conv2D( in_ch, level_chs[-1], kernel_size=1, padding='VALID') @@ -162,12 +162,12 @@ class UNetPatchDiscriminator(nn.ModelBase): self.res1.append ( ResidualBlock(level_chs[i]) ) self.res2.append ( ResidualBlock(level_chs[i]) ) - + self.upconvs.insert (0, nn.Conv2DTranspose( level_chs[i]*(2 if i != len(layers)-1 else 1), level_chs[i-1], kernel_size=kernel_size, strides=strides, padding='SAME') ) self.upres1.insert (0, ResidualBlock(level_chs[i-1]*2) ) self.upres2.insert (0, ResidualBlock(level_chs[i-1]*2) ) - + self.out_conv = nn.Conv2D( level_chs[-1]*2, 1, kernel_size=1, padding='VALID') self.center_out = nn.Conv2D( level_chs[len(layers)-1], 1, kernel_size=1, padding='VALID') @@ -183,7 +183,7 @@ class UNetPatchDiscriminator(nn.ModelBase): x = tf.nn.leaky_relu( conv(x), 0.2 ) x = res1(x) x = res2(x) - + center_out, x = self.center_out(x), tf.nn.leaky_relu( self.center_conv(x), 0.2 ) for i, (upconv, enc, upres1, upres2 ) in enumerate(zip(self.upconvs, encs, self.upres1, self.upres2)): @@ -195,3 +195,117 @@ class UNetPatchDiscriminator(nn.ModelBase): return center_out, self.out_conv(x) nn.UNetPatchDiscriminator = UNetPatchDiscriminator + +class UNetPatchDiscriminatorV2(nn.ModelBase): + """ + Inspired by https://arxiv.org/abs/2002.12655 "A U-Net Based Discriminator for Generative Adversarial Networks" + """ + def calc_receptive_field_size(self, layers): + """ + result the same as https://fomoro.com/research/article/receptive-field-calculatorindex.html + """ + rf = 0 + ts = 1 + for i, (k, s) in enumerate(layers): + if i == 0: + rf = k + else: + rf += (k-1)*ts + ts *= s + return rf + + def find_archi(self, target_patch_size, max_layers=6): + """ + Find the best configuration of layers using only 3x3 convs for target patch size + """ + s = {} + for layers_count in range(1,max_layers+1): + val = 1 << (layers_count-1) + while True: + val -= 1 + + layers = [] + sum_st = 0 + for i in range(layers_count-1): + st = 1 + (1 if val & (1 << i) !=0 else 0 ) + layers.append ( [3, st ]) + sum_st += st + layers.append ( [3, 2]) + sum_st += 2 + + rf = self.calc_receptive_field_size(layers) + + s_rf = s.get(rf, None) + if s_rf is None: + s[rf] = (layers_count, sum_st, layers) + else: + if layers_count < s_rf[0] or \ + ( layers_count == s_rf[0] and sum_st > s_rf[1] ): + s[rf] = (layers_count, sum_st, layers) + + if val == 0: + break + + x = sorted(list(s.keys())) + q=x[np.abs(np.array(x)-target_patch_size).argmin()] + return s[q][2] + + def on_build(self, patch_size, in_ch): + class ResidualBlock(nn.ModelBase): + def on_build(self, ch, kernel_size=3 ): + self.conv1 = nn.Conv2D( ch, ch, kernel_size=kernel_size, padding='SAME') + self.conv2 = nn.Conv2D( ch, ch, kernel_size=kernel_size, padding='SAME') + + def forward(self, inp): + x = self.conv1(inp) + x = tf.nn.leaky_relu(x, 0.2) + x = self.conv2(x) + x = tf.nn.leaky_relu(inp + x, 0.2) + return x + + prev_ch = in_ch + self.convs = [] + self.res = [] + self.upconvs = [] + self.upres = [] + layers = self.find_archi(patch_size) + base_ch = 16 + + level_chs = { i-1:v for i,v in enumerate([ min( base_ch * (2**i), 512 ) for i in range(len(layers)+1)]) } + + self.in_conv = nn.Conv2D( in_ch, level_chs[-1], kernel_size=1, padding='VALID') + + for i, (kernel_size, strides) in enumerate(layers): + self.convs.append ( nn.Conv2D( level_chs[i-1], level_chs[i], kernel_size=kernel_size, strides=strides, padding='SAME') ) + + self.res.append ( ResidualBlock(level_chs[i]) ) + + self.upconvs.insert (0, nn.Conv2DTranspose( level_chs[i]*(2 if i != len(layers)-1 else 1), level_chs[i-1], kernel_size=kernel_size, strides=strides, padding='SAME') ) + + self.upres.insert (0, ResidualBlock(level_chs[i-1]*2) ) + + self.out_conv = nn.Conv2D( level_chs[-1]*2, 1, kernel_size=1, padding='VALID') + + self.center_out = nn.Conv2D( level_chs[len(layers)-1], 1, kernel_size=1, padding='VALID') + self.center_conv = nn.Conv2D( level_chs[len(layers)-1], level_chs[len(layers)-1], kernel_size=1, padding='VALID') + + + def forward(self, x): + x = tf.nn.leaky_relu( self.in_conv(x), 0.1 ) + + encs = [] + for conv, res in zip(self.convs, self.res): + encs.insert(0, x) + x = tf.nn.leaky_relu( conv(x), 0.1 ) + x = res(x) + + center_out, x = self.center_out(x), self.center_conv(x) + + for i, (upconv, enc, upres) in enumerate(zip(self.upconvs, encs, self.upres)): + x = tf.nn.leaky_relu( upconv(x), 0.1 ) + x = tf.concat( [enc, x], axis=nn.conv2d_ch_axis) + x = upres(x) + + return center_out, self.out_conv(x) + +nn.UNetPatchDiscriminatorV2 = UNetPatchDiscriminatorV2 diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 476d0f0..afeff57 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -138,6 +138,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... self.options['uniform_yaw'] = io.input_bool ("Uniform yaw distribution of samples", default_uniform_yaw, help_message='Helps to fix blurry side faces due to small amount of them in the faceset.') + default_gan_version = self.options['gan_version'] = self.load_or_def_option('gan_version', 2) default_gan_power = self.options['gan_power'] = self.load_or_def_option('gan_power', 0.0) default_gan_patch_size = self.options['gan_patch_size'] = self.load_or_def_option('gan_patch_size', self.options['resolution'] // 8) default_gan_dims = self.options['gan_dims'] = self.load_or_def_option('gan_dims', 16) @@ -154,6 +155,9 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... self.options['gan_power'] = np.clip ( io.input_number ("GAN power", default_gan_power, add_info="0.0 .. 1.0", help_message="Forces the neural network to learn small details of the face. Enable it only when the face is trained enough with lr_dropout(on) and random_warp(off), and don't disable. The higher the value, the higher the chances of artifacts. Typical fine value is 0.1"), 0.0, 1.0 ) if self.options['gan_power'] != 0.0: + gan_version = np.clip (io.input_int("GAN version", default_gan_version, add_info="2 or 3", help_message="Choose GAN version (v2: 7/16/2020, v3: 1/3/2021):"), 2, 3) + self.options['gan_version'] = gan_version + gan_patch_size = np.clip ( io.input_int("GAN patch size", default_gan_patch_size, add_info="3-640", help_message="The higher patch size, the higher the quality, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is resolution / 8." ), 3, 640 ) self.options['gan_patch_size'] = gan_patch_size @@ -299,8 +303,12 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... if self.is_training: if gan_power != 0: - self.D_src = nn.UNetPatchDiscriminator(patch_size=self.options['gan_patch_size'], in_ch=input_ch, base_ch=self.options['gan_dims'], name="D_src") - self.model_filename_list += [ [self.D_src, 'GAN.npy'] ] + if self.options['gan_version'] == 2: + self.D_src = nn.UNetPatchDiscriminatorV2(patch_size=resolution//16, in_ch=input_ch, name="D_src") + self.model_filename_list += [ [self.D_src, 'D_src_v2.npy'] ] + else: + self.D_src = nn.UNetPatchDiscriminator(patch_size=self.options['gan_patch_size'], in_ch=input_ch, base_ch=self.options['gan_dims'], name="D_src") + self.model_filename_list += [ [self.D_src, 'GAN.npy'] ] # Initialize optimizers lr=5e-5 @@ -325,9 +333,14 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... self.model_filename_list += [ (self.D_code_opt, 'D_code_opt.npy') ] if gan_power != 0: - self.D_src_dst_opt = OptimizerClass(lr=lr, lr_dropout=lr_dropout, clipnorm=clipnorm, name='GAN_opt') - self.D_src_dst_opt.initialize_variables ( self.D_src.get_weights(), vars_on_cpu=optimizer_vars_on_cpu, lr_dropout_on_cpu=self.options['lr_dropout']=='cpu')#+self.D_src_x2.get_weights() - self.model_filename_list += [ (self.D_src_dst_opt, 'GAN_opt.npy') ] + if self.options['gan_version'] == 2: + self.D_src_dst_opt = OptimizerClass(lr=lr, lr_dropout=lr_dropout, clipnorm=clipnorm, name='D_src_dst_opt') + self.D_src_dst_opt.initialize_variables ( self.D_src.get_weights(), vars_on_cpu=optimizer_vars_on_cpu, lr_dropout_on_cpu=self.options['lr_dropout']=='cpu')#+self.D_src_x2.get_weights() + self.model_filename_list += [ (self.D_src_dst_opt, 'D_src_v2_opt.npy') ] + else: + self.D_src_dst_opt = OptimizerClass(lr=lr, lr_dropout=lr_dropout, clipnorm=clipnorm, name='GAN_opt') + self.D_src_dst_opt.initialize_variables ( self.D_src.get_weights(), vars_on_cpu=optimizer_vars_on_cpu, lr_dropout_on_cpu=self.options['lr_dropout']=='cpu')#+self.D_src_x2.get_weights() + self.model_filename_list += [ (self.D_src_dst_opt, 'GAN_opt.npy') ] if self.is_training: # Adjust batch size for multiple GPU From ba1a1b2b912cc543bc6e94fb970e872e1dd307c1 Mon Sep 17 00:00:00 2001 From: jh Date: Sun, 21 Mar 2021 23:46:13 -0700 Subject: [PATCH 60/70] fix: check gan version for certain gan settings --- models/Model_SAEHD/Model.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index afeff57..5ebc4e3 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -157,12 +157,13 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... if self.options['gan_power'] != 0.0: gan_version = np.clip (io.input_int("GAN version", default_gan_version, add_info="2 or 3", help_message="Choose GAN version (v2: 7/16/2020, v3: 1/3/2021):"), 2, 3) self.options['gan_version'] = gan_version + + if self.options['gan_version'] == 3: + gan_patch_size = np.clip ( io.input_int("GAN patch size", default_gan_patch_size, add_info="3-640", help_message="The higher patch size, the higher the quality, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is resolution / 8." ), 3, 640 ) + self.options['gan_patch_size'] = gan_patch_size - gan_patch_size = np.clip ( io.input_int("GAN patch size", default_gan_patch_size, add_info="3-640", help_message="The higher patch size, the higher the quality, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is resolution / 8." ), 3, 640 ) - self.options['gan_patch_size'] = gan_patch_size - - gan_dims = np.clip ( io.input_int("GAN dimensions", default_gan_dims, add_info="4-64", help_message="The dimensions of the GAN network. The higher dimensions, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is 16." ), 4, 64 ) - self.options['gan_dims'] = gan_dims + gan_dims = np.clip ( io.input_int("GAN dimensions", default_gan_dims, add_info="4-64", help_message="The dimensions of the GAN network. The higher dimensions, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is 16." ), 4, 64 ) + self.options['gan_dims'] = gan_dims if 'df' in self.options['archi']: self.options['true_face_power'] = np.clip ( io.input_number ("'True face' power.", default_true_face_power, add_info="0.0000 .. 1.0", help_message="Experimental option. Discriminates result face to be more like src face. Higher value - stronger discrimination. Typical value is 0.01 . Comparison - https://i.imgur.com/czScS9q.png"), 0.0, 1.0 ) From 4462e376215754bec063c7982dbf3293525ecd0b Mon Sep 17 00:00:00 2001 From: jh Date: Sun, 21 Mar 2021 23:50:38 -0700 Subject: [PATCH 61/70] fix gan power --- models/Model_SAEHD/Model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 5ebc4e3..f061710 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -152,12 +152,12 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... self.options['random_warp'] = io.input_bool ("Enable random warp of samples", default_random_warp, help_message="Random warp is required to generalize facial expressions of both faces. When the face is trained enough, you can disable it to get extra sharpness and reduce subpixel shake for less amount of iterations.") - self.options['gan_power'] = np.clip ( io.input_number ("GAN power", default_gan_power, add_info="0.0 .. 1.0", help_message="Forces the neural network to learn small details of the face. Enable it only when the face is trained enough with lr_dropout(on) and random_warp(off), and don't disable. The higher the value, the higher the chances of artifacts. Typical fine value is 0.1"), 0.0, 1.0 ) + self.options['gan_power'] = np.clip ( io.input_number ("GAN power", default_gan_power, add_info="0.0 .. 10.0", help_message="Forces the neural network to learn small details of the face. Enable it only when the face is trained enough with lr_dropout(on) and random_warp(off), and don't disable. The higher the value, the higher the chances of artifacts. Typical fine value is 0.1"), 0.0, 1.0 ) if self.options['gan_power'] != 0.0: gan_version = np.clip (io.input_int("GAN version", default_gan_version, add_info="2 or 3", help_message="Choose GAN version (v2: 7/16/2020, v3: 1/3/2021):"), 2, 3) self.options['gan_version'] = gan_version - + if self.options['gan_version'] == 3: gan_patch_size = np.clip ( io.input_int("GAN patch size", default_gan_patch_size, add_info="3-640", help_message="The higher patch size, the higher the quality, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is resolution / 8." ), 3, 640 ) self.options['gan_patch_size'] = gan_patch_size From f989d0aac6b688dacffc7efada5ac7fe014f358b Mon Sep 17 00:00:00 2001 From: jh Date: Mon, 22 Mar 2021 08:54:15 -0700 Subject: [PATCH 62/70] feat: ask GAN version prior to power --- models/Model_SAEHD/Model.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index f061710..7d382d4 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -152,18 +152,19 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... self.options['random_warp'] = io.input_bool ("Enable random warp of samples", default_random_warp, help_message="Random warp is required to generalize facial expressions of both faces. When the face is trained enough, you can disable it to get extra sharpness and reduce subpixel shake for less amount of iterations.") - self.options['gan_power'] = np.clip ( io.input_number ("GAN power", default_gan_power, add_info="0.0 .. 10.0", help_message="Forces the neural network to learn small details of the face. Enable it only when the face is trained enough with lr_dropout(on) and random_warp(off), and don't disable. The higher the value, the higher the chances of artifacts. Typical fine value is 0.1"), 0.0, 1.0 ) + self.options['gan_version'] = np.clip (io.input_int("GAN version", default_gan_version, add_info="2 or 3", help_message="Choose GAN version (v2: 7/16/2020, v3: 1/3/2021):"), 2, 3) - if self.options['gan_power'] != 0.0: - gan_version = np.clip (io.input_int("GAN version", default_gan_version, add_info="2 or 3", help_message="Choose GAN version (v2: 7/16/2020, v3: 1/3/2021):"), 2, 3) - self.options['gan_version'] = gan_version + if self.options['gan_version'] == 2: + self.options['gan_power'] = np.clip ( io.input_number ("GAN power", default_gan_power, add_info="0.0 .. 10.0", help_message="Train the network in Generative Adversarial manner. Forces the neural network to learn small details of the face. Enable it only when the face is trained enough and don't disable. Typical value is 0.1"), 0.0, 10.0 ) + else: + self.options['gan_power'] = np.clip ( io.input_number ("GAN power", default_gan_power, add_info="0.0 .. 1.0", help_message="Forces the neural network to learn small details of the face. Enable it only when the face is trained enough with lr_dropout(on) and random_warp(off), and don't disable. The higher the value, the higher the chances of artifacts. Typical fine value is 0.1"), 0.0, 1.0 ) - if self.options['gan_version'] == 3: - gan_patch_size = np.clip ( io.input_int("GAN patch size", default_gan_patch_size, add_info="3-640", help_message="The higher patch size, the higher the quality, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is resolution / 8." ), 3, 640 ) - self.options['gan_patch_size'] = gan_patch_size + if self.options['gan_power'] != 0.0 and self.options['gan_version'] == 3: + gan_patch_size = np.clip ( io.input_int("GAN patch size", default_gan_patch_size, add_info="3-640", help_message="The higher patch size, the higher the quality, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is resolution / 8." ), 3, 640 ) + self.options['gan_patch_size'] = gan_patch_size - gan_dims = np.clip ( io.input_int("GAN dimensions", default_gan_dims, add_info="4-64", help_message="The dimensions of the GAN network. The higher dimensions, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is 16." ), 4, 64 ) - self.options['gan_dims'] = gan_dims + gan_dims = np.clip ( io.input_int("GAN dimensions", default_gan_dims, add_info="4-64", help_message="The dimensions of the GAN network. The higher dimensions, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is 16." ), 4, 64 ) + self.options['gan_dims'] = gan_dims if 'df' in self.options['archi']: self.options['true_face_power'] = np.clip ( io.input_number ("'True face' power.", default_true_face_power, add_info="0.0000 .. 1.0", help_message="Experimental option. Discriminates result face to be more like src face. Higher value - stronger discrimination. Typical value is 0.01 . Comparison - https://i.imgur.com/czScS9q.png"), 0.0, 1.0 ) From f3f28079728b56f788f81fee9ecab2bba6df9f39 Mon Sep 17 00:00:00 2001 From: jh Date: Mon, 22 Mar 2021 12:00:44 -0700 Subject: [PATCH 63/70] Fix gan options --- models/Model_SAEHD/Model.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 791e051..f19cbfe 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -161,13 +161,14 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... else: self.options['gan_power'] = np.clip ( io.input_number ("GAN power", default_gan_power, add_info="0.0 .. 1.0", help_message="Forces the neural network to learn small details of the face. Enable it only when the face is trained enough with lr_dropout(on) and random_warp(off), and don't disable. The higher the value, the higher the chances of artifacts. Typical fine value is 0.1"), 0.0, 1.0 ) - if self.options['gan_power'] != 0.0 and self.options['gan_version'] == 3: - gan_patch_size = np.clip ( io.input_int("GAN patch size", default_gan_patch_size, add_info="3-640", help_message="The higher patch size, the higher the quality, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is resolution / 8." ), 3, 640 ) - self.options['gan_patch_size'] = gan_patch_size - - gan_dims = np.clip ( io.input_int("GAN dimensions", default_gan_dims, add_info="4-64", help_message="The dimensions of the GAN network. The higher dimensions, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is 16." ), 4, 64 ) - self.options['gan_dims'] = gan_dims + if self.options['gan_power'] != 0.0: + if self.options['gan_version'] == 3: + gan_patch_size = np.clip ( io.input_int("GAN patch size", default_gan_patch_size, add_info="3-640", help_message="The higher patch size, the higher the quality, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is resolution / 8." ), 3, 640 ) + self.options['gan_patch_size'] = gan_patch_size + gan_dims = np.clip ( io.input_int("GAN dimensions", default_gan_dims, add_info="4-64", help_message="The dimensions of the GAN network. The higher dimensions, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is 16." ), 4, 64 ) + self.options['gan_dims'] = gan_dims + self.options['gan_smoothing'] = np.clip ( io.input_number("GAN label smoothing", default_gan_smoothing, add_info="0 - 0.5", help_message="Uses soft labels with values slightly off from 0/1 for GAN, has a regularizing effect"), 0, 0.5) self.options['gan_noise'] = np.clip ( io.input_number("GAN noisy labels", default_gan_noise, add_info="0 - 0.5", help_message="Marks some images with the wrong label, helps prevent collapse"), 0, 0.5) @@ -545,7 +546,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... num_labels = self.batch_size for d in tensor.get_shape().as_list()[1:]: num_labels *= d - + probs = tf.math.log([[noise, 1-noise]]) if label == 1 else tf.math.log([[1-noise, noise]]) x = tf.random.categorical(probs, num_labels) x = tf.cast(x, tf.float32) From c36eca36105623f16906739e5700bc1b05eae587 Mon Sep 17 00:00:00 2001 From: jh Date: Mon, 22 Mar 2021 15:22:28 -0700 Subject: [PATCH 64/70] feat: use one-sided smoothing (eg: positive/real labels 1.0 -> 0.9), and only apply to discriminator --- models/Model_SAEHD/Model.py | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index f19cbfe..5522891 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -168,7 +168,7 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gan_dims = np.clip ( io.input_int("GAN dimensions", default_gan_dims, add_info="4-64", help_message="The dimensions of the GAN network. The higher dimensions, the more VRAM is required. You can get sharper edges even at the lowest setting. Typical fine value is 16." ), 4, 64 ) self.options['gan_dims'] = gan_dims - + self.options['gan_smoothing'] = np.clip ( io.input_number("GAN label smoothing", default_gan_smoothing, add_info="0 - 0.5", help_message="Uses soft labels with values slightly off from 0/1 for GAN, has a regularizing effect"), 0, 0.5) self.options['gan_noise'] = np.clip ( io.input_number("GAN noisy labels", default_gan_noise, add_info="0 - 0.5", help_message="Marks some images with the wrong label, helps prevent collapse"), 0, 0.5) @@ -551,29 +551,28 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... x = tf.random.categorical(probs, num_labels) x = tf.cast(x, tf.float32) x = tf.math.scalar_mul(1-smoothing, x) - x = x + (smoothing/num_labels) + # x = x + (smoothing/num_labels) x = tf.reshape(x, (self.batch_size,) + tensor.shape[1:]) return x smoothing = self.options['gan_smoothing'] noise = self.options['gan_noise'] - gpu_pred_src_src_d_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d, smoothing=smoothing, noise=noise) - gpu_pred_src_src_d_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d, smoothing=smoothing, noise=noise) + gpu_pred_src_src_d_ones = tf.ones_like(gpu_pred_src_src_d) + gpu_pred_src_src_d2_ones = tf.ones_like(gpu_pred_src_src_d2) - gpu_pred_src_src_d2_ones = get_smooth_noisy_labels(1, gpu_pred_src_src_d2, smoothing=smoothing, noise=noise) - gpu_pred_src_src_d2_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d2, smoothing=smoothing, noise=noise) + gpu_pred_src_src_d_smooth_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d, smoothing=smoothing, noise=noise) + gpu_pred_src_src_d2_smooth_zeros = get_smooth_noisy_labels(0, gpu_pred_src_src_d2, smoothing=smoothing, noise=noise) - gpu_target_src_d, \ - gpu_target_src_d2 = self.D_src(gpu_target_src_masked_opt) + gpu_target_src_d, gpu_target_src_d2 = self.D_src(gpu_target_src_masked_opt) - gpu_target_src_d_ones = get_smooth_noisy_labels(1, gpu_target_src_d, smoothing=smoothing, noise=noise) - gpu_target_src_d2_ones = get_smooth_noisy_labels(1, gpu_target_src_d2, smoothing=smoothing, noise=noise) + gpu_target_src_d_smooth_ones = get_smooth_noisy_labels(1, gpu_target_src_d, smoothing=smoothing, noise=noise) + gpu_target_src_d2_smooth_ones = get_smooth_noisy_labels(1, gpu_target_src_d2, smoothing=smoothing, noise=noise) - gpu_D_src_dst_loss = (DLoss(gpu_target_src_d_ones , gpu_target_src_d) + \ - DLoss(gpu_pred_src_src_d_zeros , gpu_pred_src_src_d) ) * 0.5 + \ - (DLoss(gpu_target_src_d2_ones , gpu_target_src_d2) + \ - DLoss(gpu_pred_src_src_d2_zeros , gpu_pred_src_src_d2) ) * 0.5 + gpu_D_src_dst_loss = DLoss(gpu_target_src_d_smooth_ones, gpu_target_src_d) \ + + DLoss(gpu_pred_src_src_d_smooth_zeros, gpu_pred_src_src_d) \ + + DLoss(gpu_target_src_d2_smooth_ones, gpu_target_src_d2) \ + + DLoss(gpu_pred_src_src_d2_smooth_zeros, gpu_pred_src_src_d2) gpu_D_src_dst_loss_gvs += [ nn.gradients (gpu_D_src_dst_loss, self.D_src.get_weights() ) ]#+self.D_src_x2.get_weights() From 0a1f35bf83e7bf28caf4cb820a45c29cad3e00ff Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 24 Mar 2021 06:29:33 -0700 Subject: [PATCH 65/70] Updates ms-ssim --- models/Model_SAEHD/Model.py | 54 +++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index df9dee7..fcd4ef3 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -436,11 +436,11 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... if self.options['ms_ssim_loss']: gpu_src_loss = 10 * nn.MsSsim(resolution)(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0) else: - if resolution < 256: - gpu_src_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) - else: - gpu_src_loss = tf.reduce_mean ( 5*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) - gpu_src_loss += tf.reduce_mean ( 5*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) + if resolution < 256: + gpu_src_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + else: + gpu_src_loss = tf.reduce_mean ( 5*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_src_loss += tf.reduce_mean ( 5*nn.dssim(gpu_target_src_masked_opt, gpu_pred_src_src_masked_opt, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) gpu_src_loss += tf.reduce_mean ( 10*tf.square ( gpu_target_src_masked_opt - gpu_pred_src_src_masked_opt ), axis=[1,2,3]) if eyes_prio or mouth_prio: @@ -451,23 +451,20 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... elif mouth_prio: gpu_target_part_mask = gpu_target_srcm_mouth - if self.options['ms_ssim_loss']: - gpu_src_loss += 300 * nn.MsSsim(resolution, kernel_size=5)(gpu_target_src*gpu_target_part_mask, gpu_pred_src_src*gpu_target_part_mask, max_val=1.0) - else: gpu_src_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_src*gpu_target_part_mask - gpu_pred_src_src*gpu_target_part_mask ), axis=[1,2,3]) - if self.options['ms_ssim_loss']: - gpu_src_loss += 10 * nn.MsSsim(resolution)(gpu_target_srcm, gpu_pred_src_srcm, max_val=1.0) - else: gpu_src_loss += tf.reduce_mean ( 10*tf.square( gpu_target_srcm - gpu_pred_src_srcm ),axis=[1,2,3] ) if self.options['background_power'] > 0: bg_factor = self.options['background_power'] - if resolution < 256: - gpu_src_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_src_anti_masked, gpu_pred_src_src_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + if self.options['ms_ssim_loss']: + gpu_src_loss = 10 * nn.MsSsim(resolution)(gpu_target_src_anti_masked, gpu_pred_src_src_anti_masked, max_val=1.0) else: - gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src_anti_masked, gpu_pred_src_src_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) - gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src_anti_masked, gpu_pred_src_src_anti_masked, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) + if resolution < 256: + gpu_src_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_src_anti_masked, gpu_pred_src_src_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + else: + gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src_anti_masked, gpu_pred_src_src_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src_anti_masked, gpu_pred_src_src_anti_masked, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) gpu_src_loss += bg_factor * tf.reduce_mean ( 10*tf.square ( gpu_target_src_anti_masked - gpu_pred_src_src_anti_masked ), axis=[1,2,3]) face_style_power = self.options['face_style_power'] / 100.0 @@ -482,11 +479,11 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... if self.options['ms_ssim_loss']: gpu_dst_loss = 10 * nn.MsSsim(resolution)(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0) else: - if resolution < 256: - gpu_dst_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/11.6) ), axis=[1]) - else: - gpu_dst_loss = tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/11.6) ), axis=[1]) - gpu_dst_loss += tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/23.2) ), axis=[1]) + if resolution < 256: + gpu_dst_loss = tf.reduce_mean ( 10*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/11.6) ), axis=[1]) + else: + gpu_dst_loss = tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/11.6) ), axis=[1]) + gpu_dst_loss += tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_masked_opt, gpu_pred_dst_dst_masked_opt, max_val=1.0, filter_size=int(resolution/23.2) ), axis=[1]) gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dst_masked_opt- gpu_pred_dst_dst_masked_opt ), axis=[1,2,3]) @@ -498,23 +495,20 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... elif mouth_prio: gpu_target_part_mask = gpu_target_dstm_mouth - if self.options['ms_ssim_loss']: - gpu_dst_loss += 300 * nn.MsSsim(resolution, kernel_size=5)(gpu_target_dst*gpu_target_part_mask, gpu_pred_dst_dst*gpu_target_part_mask, max_val=1.0) - else: gpu_dst_loss += tf.reduce_mean ( 300*tf.abs ( gpu_target_dst*gpu_target_part_mask - gpu_pred_dst_dst*gpu_target_part_mask ), axis=[1,2,3]) if self.options['background_power'] > 0: bg_factor = self.options['background_power'] - if resolution < 256: - gpu_dst_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_dst_anti_masked, gpu_pred_dst_dst_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + if self.options['ms_ssim_loss']: + gpu_src_loss = 10 * nn.MsSsim(resolution)(gpu_target_dst_anti_masked, gpu_pred_dst_dst_anti_masked, max_val=1.0) else: - gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_anti_masked, gpu_pred_dst_dst_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) - gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_anti_masked, gpu_pred_dst_dst_anti_masked, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) + if resolution < 256: + gpu_dst_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_dst_anti_masked, gpu_pred_dst_dst_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + else: + gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_anti_masked, gpu_pred_dst_dst_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_anti_masked, gpu_pred_dst_dst_anti_masked, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) gpu_dst_loss += bg_factor * tf.reduce_mean ( 10*tf.square ( gpu_target_dst_anti_masked - gpu_pred_dst_dst_anti_masked ), axis=[1,2,3]) - if self.options['ms_ssim_loss']: - gpu_dst_loss += 10 * nn.MsSsim(resolution)(gpu_target_dstm, gpu_pred_dst_dstm, max_val=1.0) - else: gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) gpu_src_losses += [gpu_src_loss] From 1829f1637962abd4740c8792ba51d40cf490b053 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 24 Mar 2021 09:14:29 -0700 Subject: [PATCH 66/70] fix: Apply background source to the entire images (not just the area outside the mask) --- models/Model_SAEHD/Model.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index 476d0f0..9ff9b3a 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -416,15 +416,12 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... gpu_target_dst_style_anti_masked = gpu_target_dst*(1.0 - gpu_target_dstm_style_blur) gpu_target_src_anti_masked = gpu_target_src*(1.0-gpu_target_srcm_blur) - gpu_target_dst_anti_masked = gpu_target_dst_style_anti_masked - gpu_target_src_masked_opt = gpu_target_src*gpu_target_srcm_blur if masked_training else gpu_target_src gpu_target_dst_masked_opt = gpu_target_dst_masked if masked_training else gpu_target_dst gpu_pred_src_src_masked_opt = gpu_pred_src_src*gpu_target_srcm_blur if masked_training else gpu_pred_src_src gpu_pred_src_src_anti_masked = gpu_pred_src_src*(1.0-gpu_target_srcm_blur) gpu_pred_dst_dst_masked_opt = gpu_pred_dst_dst*gpu_target_dstm_blur if masked_training else gpu_pred_dst_dst - gpu_pred_dst_dst_anti_masked = gpu_pred_dst_dst*(1.0-gpu_target_dstm_blur) gpu_psd_target_dst_style_masked = gpu_pred_src_dst*gpu_target_dstm_style_blur gpu_psd_target_dst_style_anti_masked = gpu_pred_src_dst*(1.0 - gpu_target_dstm_style_blur) @@ -451,11 +448,11 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... if self.options['background_power'] > 0: bg_factor = self.options['background_power'] if resolution < 256: - gpu_src_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_src_anti_masked, gpu_pred_src_src_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_src_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_src, gpu_pred_src_src, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) else: - gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src_anti_masked, gpu_pred_src_src_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) - gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src_anti_masked, gpu_pred_src_src_anti_masked, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) - gpu_src_loss += bg_factor * tf.reduce_mean ( 10*tf.square ( gpu_target_src_anti_masked - gpu_pred_src_src_anti_masked ), axis=[1,2,3]) + gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src, gpu_pred_src_src, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src, gpu_pred_src_src, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) + gpu_src_loss += bg_factor * tf.reduce_mean ( 10*tf.square ( gpu_target_src - gpu_pred_src_src ), axis=[1,2,3]) face_style_power = self.options['face_style_power'] / 100.0 if face_style_power != 0 and not self.pretrain: @@ -487,11 +484,11 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... if self.options['background_power'] > 0: bg_factor = self.options['background_power'] if resolution < 256: - gpu_dst_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_dst_anti_masked, gpu_pred_dst_dst_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_dst_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_dst, gpu_pred_dst_dst, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) else: - gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_anti_masked, gpu_pred_dst_dst_anti_masked, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) - gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst_anti_masked, gpu_pred_dst_dst_anti_masked, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) - gpu_dst_loss += bg_factor * tf.reduce_mean ( 10*tf.square ( gpu_target_dst_anti_masked - gpu_pred_dst_dst_anti_masked ), axis=[1,2,3]) + gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst, gpu_pred_dst_dst, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst, gpu_pred_dst_dst, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) + gpu_dst_loss += bg_factor * tf.reduce_mean ( 10*tf.square ( gpu_target_dst - gpu_pred_dst_dst ), axis=[1,2,3]) gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) From 30711658833e8a5924af234ebf00806a7545d4d2 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 24 Mar 2021 09:19:03 -0700 Subject: [PATCH 67/70] fix after merge --- models/Model_SAEHD/Model.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/models/Model_SAEHD/Model.py b/models/Model_SAEHD/Model.py index dc8ac68..f5799a1 100644 --- a/models/Model_SAEHD/Model.py +++ b/models/Model_SAEHD/Model.py @@ -455,13 +455,13 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... if self.options['background_power'] > 0: bg_factor = self.options['background_power'] if self.options['ms_ssim_loss']: - gpu_src_loss = 10 * nn.MsSsim(resolution)(gpu_target_src_anti_masked, gpu_pred_src_src_anti_masked, max_val=1.0) + gpu_src_loss = 10 * nn.MsSsim(resolution)(gpu_target_src, gpu_pred_src_src, max_val=1.0) else: if resolution < 256: - gpu_src_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_src, gpu_pred_src_src, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_src_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_src, gpu_pred_src_src, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) else: - gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src, gpu_pred_src_src, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) - gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src, gpu_pred_src_src, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) + gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src, gpu_pred_src_src, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_src_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_src, gpu_pred_src_src, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) gpu_src_loss += bg_factor * tf.reduce_mean ( 10*tf.square ( gpu_target_src - gpu_pred_src_src ), axis=[1,2,3]) face_style_power = self.options['face_style_power'] / 100.0 @@ -497,13 +497,13 @@ Examples: df, liae, df-d, df-ud, liae-ud, ... if self.options['background_power'] > 0: bg_factor = self.options['background_power'] if self.options['ms_ssim_loss']: - gpu_src_loss = 10 * nn.MsSsim(resolution)(gpu_target_dst_anti_masked, gpu_pred_dst_dst_anti_masked, max_val=1.0) + gpu_src_loss = 10 * nn.MsSsim(resolution)(gpu_target_dst, gpu_pred_dst_dst, max_val=1.0) else: if resolution < 256: - gpu_dst_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_dst, gpu_pred_dst_dst, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_dst_loss += bg_factor * tf.reduce_mean ( 10*nn.dssim(gpu_target_dst, gpu_pred_dst_dst, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) else: - gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst, gpu_pred_dst_dst, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) - gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst, gpu_pred_dst_dst, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) + gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst, gpu_pred_dst_dst, max_val=1.0, filter_size=int(resolution/11.6)), axis=[1]) + gpu_dst_loss += bg_factor * tf.reduce_mean ( 5*nn.dssim(gpu_target_dst, gpu_pred_dst_dst, max_val=1.0, filter_size=int(resolution/23.2)), axis=[1]) gpu_dst_loss += bg_factor * tf.reduce_mean ( 10*tf.square ( gpu_target_dst - gpu_pred_dst_dst ), axis=[1,2,3]) gpu_dst_loss += tf.reduce_mean ( 10*tf.square( gpu_target_dstm - gpu_pred_dst_dstm ),axis=[1,2,3] ) From 20b5b2d1b925c174fb0a422a141b25170b700e83 Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 24 Mar 2021 13:57:56 -0700 Subject: [PATCH 68/70] docs: update changelog --- CHANGELOG.md | 14 +++-- doc/features/gan-options/README.md | 50 ++++++++++++++++++ ...generative-adversarial-networks-54-638.jpg | Bin 0 -> 63917 bytes doc/features/ms-ssim/README.md | 5 +- 4 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 doc/features/gan-options/README.md create mode 100644 doc/features/gan-options/tutorial-on-theory-and-application-of-generative-adversarial-networks-54-638.jpg diff --git a/CHANGELOG.md b/CHANGELOG.md index 889cce3..59dba12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### In Progress -- [MS-SSIM loss training option](https://github.com/faceshiftlabs/DeepFaceLab/tree/feature/ms-ssim-loss-2) - [Freezeable layers (encoder/decoder/etc.)](https://github.com/faceshiftlabs/DeepFaceLab/tree/feature/freezable-weights) -- [GAN stability improvements](https://github.com/faceshiftlabs/DeepFaceLab/tree/feature/gan-updates) + +## [1.4.0] - 2020-03-24 +### Added +- [MS-SSIM loss training option](doc/features/ms-ssim) +- GAN version option (v2 - late 2020 or v3 - current GAN) +- [GAN label smoothing and label noise options](doc/features/gan-options) +### Fixed +- Background Power now uses the entire image, not just the area outside of the mask for comparison. +This should help with rough areas directly next to the mask ## [1.3.0] - 2020-03-20 ### Added @@ -53,7 +60,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Reset stale master branch to [seranus/DeepFaceLab](https://github.com/seranus/DeepFaceLab), 21 commits ahead of [iperov/DeepFaceLab](https://github.com/iperov/DeepFaceLab) ([compare](https://github.com/iperov/DeepFaceLab/compare/4818183...seranus:3f5ae05)) -[Unreleased]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.3.0...HEAD +[Unreleased]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.4.0...HEAD +[1.4.0]: https://github.com/faceshiftlabs/DeepFaceLab/compare/v1.3.0...v1.4.0 [1.3.0]: https://github.com/faceshiftlabs/DeepFaceLab/compare/v1.2.1...v1.3.0 [1.2.1]: https://github.com/faceshiftlabs/DeepFaceLab/compare/v1.2.0...v1.2.1 [1.2.0]: https://github.com/faceshiftlabs/DeepFaceLab/compare/v1.1.5...v1.2.0 diff --git a/doc/features/gan-options/README.md b/doc/features/gan-options/README.md new file mode 100644 index 0000000..80e77a6 --- /dev/null +++ b/doc/features/gan-options/README.md @@ -0,0 +1,50 @@ +# GAN Options + +Allows you to use one-sided label smoothing and noisy labels when training the discriminator. + +- [ONE-SIDED LABEL SMOOTHING](#one-sided-label-smoothing) +- [USAGE](#usage) + +## ONE-SIDED LABEL SMOOTHING + +![](tutorial-on-theory-and-application-of-generative-adversarial-networks-54-638.jpg) + +> Deep networks may suffer from overconfidence. For example, it uses very few features to classify an object. To +> mitigate the problem, deep learning uses regulation and dropout to avoid overconfidence. +> +> In GAN, if the discriminator depends on a small set of features to detect real images, the generator may just produce +> these features only to exploit the discriminator. The optimization may turn too greedy and produces no long term +> benefit. In GAN, overconfidence hurts badly. To avoid the problem, we penalize the discriminator when the prediction +> for any real images go beyond 0.9 (D(real image)>0.9). This is done by setting our target label value to be 0.9 +> instead of 1.0. + - [GAN — Ways to improve GAN performance](https://towardsdatascience.com/gan-ways-to-improve-gan-performance-acf37f9f59b) + +By setting the label smoothing value to any value > 0, the target label value used with the discriminator will be: +``` +target label value = 1 - (label smoothing value) +``` +### USAGE + +``` +[0.1] GAN label smoothing ( 0 - 0.5 ?:help ) : 0.1 +``` + +## Noisy labels + +> make the labels the noisy for the discriminator: occasionally flip the labels when training the discriminator + - [How to Train a GAN? Tips and tricks to make GANs work](https://github.com/soumith/ganhacks/blob/master/README.md#6-use-soft-and-noisy-labels) + +By setting the noisy labels value to any value > 0, then the target labels used with the discriminator will be flipped +("fake" => "real" / "real" => "fake") with probability p (where p is the noisy label value). + +E.g., if the value is 0.05, then ~5% of the labels will be flipped when training the discriminator + +### USAGE +``` +[0.05] GAN noisy labels ( 0 - 0.5 ?:help ) : 0.05 +``` + + + + + diff --git a/doc/features/gan-options/tutorial-on-theory-and-application-of-generative-adversarial-networks-54-638.jpg b/doc/features/gan-options/tutorial-on-theory-and-application-of-generative-adversarial-networks-54-638.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3698e95ad58e19f11612fbaa58b9d3405799b5b GIT binary patch literal 63917 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

jPO*{qUT8v?APD4&()jd8H`#C* zl0HR`2X-TZNdmFq^ab1UfReoO@sd}_23_`Jr+h2l-bn1@oBJIjRbMF*Wa6XSLB)|f z-_a=6jT=ltcFk2X(jKGdO_blQ6=T-Ga$E(|IAS)mJGH?B69KW7$lj7s9rJAFtWxs) zX1x27K)i()?R)}mRHvH7peF;z-C)Y_lIrO@9ZP)dq1f9gwh}3<*Ga%@Vc(Zy0s52& zkvYiZ9`0d0yABx?v03{{tcQ|!Id!JjG_W!ok%Vy7IT}dV5iHG}){85(w1brk^kj)i zF3g!ooF>b7M+aMZabu3u<*$}h0fdp4BeP6!a~6fm51H=^-)n>532>o+ z5D~%vYkOMSLnSlKlx(;F$?%LlOPwIf=~Dq`jXaSOd^`10Av9YFVZt8%W0*66zy$4B znCkw-7$%$3osG~QoxxS63Hpb?AK4?Z>WI9Xd@j@S(p4j((O)lU(k0v;lUVt$7FNtj zW|X^&*#rm0h;@`;uf@WMfk$fjXC_{7FYB;;$HxQhe07ReXX4!aK(77ddFw;=xvv)a zp|mhId$D+N^D`m|tuDn6YuG_f^$bj(Je_5Zh%(icI=_%Jxu@FogRWs;{4z4QB?+1j z2f~qdK#uGlU&^_T1SsHvaz?-y=kCb<`5yD|Rdh3PG5kH_>u?VL*}1&e$Ale_3+W%X6xVD#&vIk;;Mi3ssfE? zew}&If8z?rCbe_#v|%brple{O0HI4VvOe;XRYvhlu5-Ute5UhRBRe(e7W&Ism#GK6 zUZ5$Wgbtzn-hdIukHj(CPb^x#{So7rir7L9K;$gZ%V~lFAl(?yuNBLHR;O)7(2FxJzyQQ(uq3^p-~ufbImjMvQL@2FTmlVWmgREj-G z{Z-i`OK55qcA@XT5pyLKB+9gVPcQEA95WU@|IJ}qlSpp^6mL7HPzEbZp5M8#xbpb9 zi~Mx@uj9Bu);X-To)zax-={F8)g&msD$Ld&mwQMpwP}IIO=xTr!^Y@|*B9=yQ?#uK z$KgINBiMlQiteE&@Gv|~s^Ymk#)P+`%A$-@3y8ydMQIJjwd>#eek2|Xmn-))h(bqg+^3;h%bB@kJLgqtBwLBf#Vtb%y~ z{gg=~OBh||mOlLkszz5>OEjqBGgI=PBl<%Fm-HJ1`?|*GJ8xR^3Bu!GqP1!hVFq_^ zsxtb*Vp0kK`kl-Qc(FL1H;s+li`Wvz??%}LiXDO>TRO@qE%yj4ao2g0P;b)lC*2}_ z1=F^sQE)F^#~)P^CC77}anD)jQlQ5=vfp=~%;{6lj3w95>ux}f@OL*#N^jmllv_PoVK$DO2n3|4S0M0Z@@ZQ)drh;&Mo zzJ6$0P`gqFuc7ot_pYN;y|Rp){etzX#qQ%@hq9X}4|u_0<<}c}k4PfFW5O2JL|!4d z5{~!IFNYj$;dnJr)EGK|M-N0>Z~5fBRx!;o;DJ@mo))*a{|kH{R1h}w!uMAbx4wcFV2zW0!uxT5Xa5&v&ydal literal 0 HcmV?d00001 diff --git a/doc/features/ms-ssim/README.md b/doc/features/ms-ssim/README.md index c7a0476..41039d3 100644 --- a/doc/features/ms-ssim/README.md +++ b/doc/features/ms-ssim/README.md @@ -3,11 +3,12 @@ Allows you to train using the MS-SSIM (multiscale structural similarity index measure) as the main loss metric, a perceptually more accurate measure of image quality than MSE (mean squared error). +As an added benefit, you may see a decrease in ms/iteration (when using the same batch size) with Multiscale loss +enabled. You may also be able to train with a larger batch size with it enabled. + - [DESCRIPTION](#description) - [USAGE](#usage) -![](example.png) - ## DESCRIPTION [SSIM](https://en.wikipedia.org/wiki/Structural_similarity) is metric for comparing the perceptial quality of an image: From 9bdadcaf81fdcb3ef4e4a3f25fbc6a5c8726d35b Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 24 Mar 2021 16:25:33 -0700 Subject: [PATCH 69/70] docs: adds cover photo to README --- README.md | 2 ++ doc/dfl_cover.png | Bin 0 -> 334071 bytes 2 files changed, 2 insertions(+) create mode 100644 doc/dfl_cover.png diff --git a/README.md b/README.md index f5df802..40b95d4 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ # CHANGELOG ### [View most recent changes](CHANGELOG.md) +![](doc/dfl_cover.png) +
diff --git a/doc/dfl_cover.png b/doc/dfl_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..53f2b7fba942a9a757a7992d8e60d4cb9a1b23e0 GIT binary patch literal 334071 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 z zd6OZN5dAl+c_Oan0FNdh$SITpzx)FA^xJi?9NwT8!SXf(2-4fb9-=P`Q|P}9q85uDmo&r40fI-cnflI(l0UY-Ci zv1#tEX5n6au+FW5uj>u7stpahmJyuueKpa+YhS%4eKm&4-&gDX8CF~F%L5vpV+Qbr zAvxY4J82rbfKmBE)lfZ4^Qf7GpbQqYN8M!eL=b1CvHSpi-p7OxiG^q?FAS56zWad% zTm4?iNF~Xqij81xG#sy37>Hnr?{}34hO?=lAOFu2=+SCOL*;o+t72HR^7MORS!7xC z&`5GpS=M7!IM>*hK7;dq1MohUNYf}on#EMD=U8bNo>$%SOCjLmI5Qhk6Ni z-#sYtfb8Gpjb|B-Y3p0DMAHHw={N`+U&-!bEQx_Q-l@ z+tbeD>t&G4Iwl{~`QB$44+{Lt$3KDTb_tzsjLRlAE`*jt78W`6l*iHb-~$9-M0u0_ zVDD{XA=F!dP5=28B`qJoM=(cxELyBe2~yVJaIGQPX#UvrD#8?B5sXHI)oy{MlEd&= z0#*a+4TV7PodkeIATgk^7_q;PPK`}Uu`B{7KJo~pmBoc!St6ZPSS|UN%RdDn7F2@= ztkjJh4?gHypbu@H+sbO{4C8yFkATMnu)*UEy!fJL;}*98C0J$8y}S9NfBIjj7_0)B zAZ3gup1=n`eL2!uL5gmTs!F>Jiwm6b_{VYXu47Zdu6Inq7_!9Ho+^e}I}(g?C7f{5 ziMUoWY_GKKec-C=zcjaX?lfz^NxqZgWK<{RahsiQuF0aO9D8{vBiJh7F(4M>Y|Qg* zK#f){bELkf)RF&#%U;=ZP*oo|u#y)=f|40W*9b_LA36W&h_OiSFlEVSuf3K#@3>oDj`R*Ne^117-gXO&uM68%mE+boN@gvW8HqLoep-2tIDiJiuwwQ`D?7Cai0(Dr| z!lxCn66LB2?PYF4K%_(|(8zH?)KD5Y|Cn7o^{ms7ZEbKlX4$i{yv&!sd^2zP^FO6a zY7Etw52_EbcB1=soNo2KGRiY~BlW>i>t=(jIlnbnAdFql&r7y{RIOs((s#3}EsWZi zX${h+_2!<|19X<(XL)^Eb&A1#H+7G=tbN0<1KwzHdm4#~SuWbJi!*L}``hHap2E$z zYcxuSt%;5ezV5xRpW}>frwst}@&K8)@5fM@R#-c}EwZj_xZWb-JaqM|1>N|Grz$hC zh6Pb;8#d&oOdr!CnR!?8Og73lWiA$=4p}t`7cJ#w8(>Jdc{MRdds*=X&DtR*$&{A7d6cqIlq4AN&xktYEwnI(sR* z0dW=_apWHbmxx&j2jJf&&m=mue$(d;c#aX|-HRg_Fk| zzLO9FtEERQNOzgr@3@=)b;XrPP>hY^p$y7{QKdir4|ePA>owR`%&C#0Z3w|*6fQXB z6x6jLvvfPFeD2!oSj}T+zd@kz5k@pI0KEH?pTewm2rIh@2x2S+CDLj`JLkn0KMPDi zG>f;gRBJh=P9T~r#=-gUxo4ftLw4?j%z-s{U&i&*YM1N3^{tsej!A!?lzR=Ev!~7D zHXGy^Js3=1=W=t7m}YN^G!`TcB?*d_sj(>lrmW+5(1109hRDDPKj86Za~}_kvnvvt zCW0@)=3IQ{>Fhjw2jm%{Q$QKG^qOnwY6R2-iBgV^yabOVa(Tx z4y>PL^!vvFACuPm^FCMWJumBNI-Is)a1>i;aQ(dzugrN!T~F&BGVSkXl5_kd)7o*b z4-SY~oae_COeQ6-`#TUai}~ufzc-6N!&n@He;@VPN$;H{aF06IVTK?wYw|pEp=HRS z41yk({_$<*SR9*VA~fu{r!gq%JO53}VZ{VUEDuB*zz03>qncEjGFJmKP|hayK`QiD z%nnzvE&$Oemt=(Go8eeU;KyRS&Cy&D5q+XC?f0nKvAGA=sf3=l)mkeKHC14SyX z`qw>Xf+3SUYDN=LPn*{9YT;o!ABs&fQ-kAlzAO-(Y5}??hw_S=D1T^81{i#1P!Vha z*w{t>*uxG1D?K^U5Xc@75^$z2Bq?z8qmMv>(zZF>`**|MJ-p|#ODT=PVDR3jPnbdP z%^%3e;5yJ+J9Gj5p8*URx~-t7%_s%laLLbL58fUnaZ68*<%8E=1x4ye#$(gy@u{2t z(>HvDTW-Dyy31%0<)=bBhpYt)ZJu%F8RVhj|3+zA0n}zw#YY(-QBl2i!6~Q4eQCF2 zYUna3J#@(ba3F#l zao%w(mhjMr?o3j#fe;cSg)%e$~Tj;Iq^S zY5=6EVOSMA#uXwaQA?*OY_A8q!7ZBQ=;c ziQVjlkqiJLgH$@Bj18#sn7F113bPgw#~-lPei&kO$O3?*fJwdBuO|wV7zho(A%YD( z7J?C??*own>a3xaWh}Jv2!6ENHSn>tuuwBWA^_qVM&T}*iucUL^M;I;tNu@ni0Wx8 zc7&}MAPp(6Ca5KAYd!;||2~$CF_p(d9Vyef?#0fUd12`DBFg5`^RvJd_z3rRiQPPz8s^v4At_i8bci7lzDrAkjA1B3)amaIpN47fil*9!hTfbX?Wbs-1R5{ z^(Bx2IT9S+3OVqOU;OV|R-lfxTIpkzOf&q&R%}Cq_li?XUKnh!cw;fXx_R>-?>-@Ute^LzgeB&S-=$DG3uwETg; zw+C~9rYzHzt<|O&$a7<4ubuG;A^LMX?ZlHP+AVMa5y#%!@8l2v@gH%TJgiJ)Q+WVi z`5st4bj4>dt0kt}MawRka|AK4ZHdDl{RsZ+g-=V~fhOe~k>PK}OttUL`L3sv9dq9k zAN43)s|_|5O+yF}JmLfY_L<8!l!J|$pC_57kILglZEG9=GpS}VhZ`WCQzNJ~Gf!Ct z8(sCpV4XvOQhhA!S>;b&`RXW%NK-P^#0m1j^kvf}e&)Teb2kYFCIk6 zm5TnJ%dftMZ{B+kNTfhyP0z(t7yR0tck{Vxt|lz+#rWt+;aWLrEV9t%?9)%@sGU1; zO&?eMmJGjf1$0Ef88C{^T>WMbVDgx=Xa^zSlH?V^V1pqqJcIqR*%LfG^84-Ta5H!iJ-Lg1 zFl5?d#kj#YEx<8Lv20S;>Hft27*zmY?*JOc92hrPCP`bZN5W-XK~dLHz#JEZHsfJ* zZSrrJtq3-&1lFYD-n4;ll5C8uIk%e3%d1XC(^sUo4Ihb~;kc>UAJ$lmu{}0IQ)YKK zF$S@ZCL5wg0|pYRA&imQc)YqVD|4&nwuCh%>=i)LlfmkNAeF~Q1@5>cH)c)0oLA-b z(R=oQ4`X@^5Srd6Lciw;+Em3FF*e5=qOBK*oAw^sEZ}3*qIephW7vDv9EXvak`W0# zHb}(+sp8VUox5gF%BE>bnD)HP3ZBfuTAXJ`=Yx+q&c(*WSn4bvyY4?=brp&NDT?G8 z35dnDTO4upG2{tXv@XZ)2gQ_Nh>PsZHoR%21~(=>oJO7QxR^6>(QK4UE_y02dg_z; z?(MhX2h36jLFSELglHNm)*#lz-z(F|36C;pV+stE_$awS3C45&QAh9_Klw8(-@m*5 zE-`WO>K_2Nput0k1(lzF+OsHJG|bdu8TKyo-jDq|U%%%r@FhWfDq5$Q^x*Bi_Fmr? z?2mPNl&#l)YVepLaNcnzaK__LBWo?<1Je@j8rItfHh!YF?e2b z!TDTr(bM_Xt=|Qk)k9s0-TV4r0GdNR$ZUB|z7dI;wNG%yq88q8$w4y_~+5ul8?QO_HoBXiDxa27pqDGUIrjJI` z`|5f(?`3U4zJ$#ekN_?62J6E>7J(2`b+DO$NZ^$}`h5QOx8A@3J01#oMoWcI6ny@Q z>p1^)uf>=QLW!snN*@7ZiH6w0d&Js?Kit*<3tR1dxY@PWadpdT-Cd`j(m&>=QFa*h z-g$vZvnnJ^TLYYhF)?YaJ?#Be-FO`Mv0iXu(m0yrMY0|SNb~7NnWGI`R1LfNnw=uk z4whLv-N&IqvwY|NQs}59iW<@;s!EvP17fWmJ5UD`!*S<#SZDU6E^jrgt(p!NjK>|b ztSwJQJx& zac*$`n&WHy`gT0iW$e-_O$GHeZ!UbRV#FrTU;X>3BLjSM3^Zj;27jJ5IUm;eu+ie! z(D`tk<3t~<9&E`YrlJ9Y@~)45jQ{z%4iqJXE%dxYS=F*V_I6qWAefkVh%Yb{9JzA`Z+XRQc-o04amW34M9&P7UY?j(iJ=DI zH(D%6_qZ{LwXrx-nN-Wb`UlpHD7_p? zn|ae5=NRuj&N<4m`~iw@0Wt97=RFZxd7`cvLU)CKx#|iCQK#P4^HuERufYpn^7$LT z&Mn`$jmI2*5VpGrS@cKJ_9ErtHZFMbc^q@dLEL!nGC?c+Ri*+!2CuPc$n9BU*>%Ek zsIibavUU~$YV~~Yj@we1b2b%-S@va|G}WlQa@g;Ec}3&rEt%tuL5*Nt2D$6a5t4qG zv zP#kdKDJSAxWGWgdk)q@;KJYIX1Hl8Dp%jo<9zLznH3)zGuOH;KFMBC=&mP>;HbC(v zhjxzLegKzT{7l~X?swviArqzC2j?v|;P%gHK5IeC(Y25nK|?p*Ql=a4ts==@g}{?{ z?czCSoW--wKcAycJQjP%HiFrP`YzHbx#e58^Ao@OI=syxl(^)PVv-bf;Y$dDIENNx zY+JEz>RRM_>y;a+a}N7#-|xDSA+M)yH%l#h z)S7$PT&F|kxnb+$aX`a3Fk&M$n2}>;ioZ?51|~H^sw!@<_^|d%bfkwz^CXQ*TIOX4 zGj4#40&5;9ot@KM%xOO}EYTTuGYq>%N13digj7`oZAv4hv)J&;peM0ao$tDcE(66# zt!FN+iuFRj9#zxNq|r%PvordBZkoLhfDY0R0X6^HtL;c*$rpd_Nnz0#8ws32hiqfS z*h@tuX)bu^8L>w&E_L^&?ntf1gfW;9(ByU417&omiDENJsLpzG{M10v$UT+~jpvOn zxcXw!CXuJ71zU&xzG?BG!P?R}Eqc}$i*)4rd%cPKxbBo;?^_QLvR;|S^^AiDADdMp ziY$;-1K<9}H+keChd}Ak5IYwI#kCx2Er+)92#N~{?A_NppSp6L?J-tn8FRsK&N0XF zloO8Ug2$iA6HYmq#VmuO0$qvnYZ45)Mdxg25!?up8%*vv_w>i{N5B5-WV@Hitk5k>+Ch2TV~<8N z%g#qVf^CN!gtS_ig>A63gc5ThQRTL;+|EV6_%gn8$GspWqN&9p~Gb$JZy{%Yt)?C1brY?9_MW`YkhTI*M1ZT zGFZczwN5?jnA_+$ou-a3seaxEfP@hGC5&nl)EM*!cYaVabntJpn4UBfP55igl+zErN`Lp+aWU+7>KaWW_^(?P9 z&qe(`jlf}t9g9pS^E7H4*%8;PX>>KLd@FTgUiL}NNRYnsZ$ zVZ1EWDD-krvaH^ohS3I2V|-cab5Z{-x+eC0^L2y9gv5 zcXdb!{Ae&hSObuxi7tT2) zB?{KyHDFN0T70L2wGPxE#*r&{F?a%Kz!-;y5|wE5IPPJAQld-?gt`nM#$ZEWqrKc2 zjv|y`EzWyx`p#WE^7H_@it*jV6fh7hSmmr!&*p6({bcl9P?JJssF(ZF$hkDkqmbJx ze2DhI=OAFL#S|s9mRQ;5`J30hfm^@vb#A%sR#tt%0v4|Z<18VR7=efH*ukR?-+?QY zla4!%hdpEmhwOM5VKFY$(Tp+#+}-yP#0>`HO;|t$kSGH|zKCBukQY4jS)6p_kzD_! zFXK(s4IWKYC4mRTN2IaBEp*njx(ceRD+8q@n2-a9ijqRbiD6jvim*Av;&K=kl;qN~5 z@BHy)9|ujJ3k^Uh{XP}=AzAPKlz4v%g3&m4ZaPq4O*G1tC}3tq2x5>{)?hVdK!K4W z<_RVmFvsy2QrwcB#7`(=tPl{jcqzdKUU7CRG`V1C zV#6vFB1mJ9t!e+5)2TIBLTaP71cHsYfK`LwdG6UyWXHoEmd>ZbYQdFPUK5#9>Y=O^ zerLi1&RA;YoA#xZ=lX9}hErey?)2QNJ_3fo0Za zmzn)xq==^FS)1;*?fm`g-@sSC_Eo<7z1z{!gW4z^WMap?1s?H`hw$)2caVwYaYrA) zj)y;#Ll1ihva}G-eJjU@F81y{APb49m-0j-*brj6KSj}AgY+7uv_E1QF&p=3G7|HU zdjDclAq5~7QK2gy6AGNOabop`kmoV^2yxEIfKny08BB%`MeKba(?xiOGl zg4Wnq@Ns+^O^i-6pC*P;1>Lxo7E}YzKmR-=U%;p%sKx5AJPm8tJQHwTTMo&=7hmGu7XcbX4_P zWP+MC9%!Mlz8_Z?odyILc5W-SZS!xK(vn z39Pk)OeYr5XDJ5lKWP323Nk}vK*k;WAm}j&fGG1Z4jP7LPOBj~X^NRe=Hx%aV;BWc z)?yX)Apig%07*naR4D~CkK*6tH%}+VD^7Cif2>&ZX4sc$J0Rw{z@KMadmu45r!Oxn#@U#N zO7#6H{3>Nx)?<7l=iDVZKbyH2cYTOPjH-w=tU5z!Vv?RoEH{PUPZU=#IDRS6+x}TwsR0+bukCKgmIScl0m#B zE4r}M;mVu8v;_cxCJ@9>7{M*JIRB|n;>l;8M%cZATP;yv;zPirWUU;rhQfRDJdf8W zGmy7Y>)^lxV~lQP_}%v*&hnLS-O`xJ<5-L=lg;NxsEvcm`v^9MG?!Y5huw7&ja)RE zz>0bxP---)&O*rt-tb12c5H{>2*oNN|LnE=#9Q7JD<2yi|0POcBZy}WNC_TIGMQVH zXFJ;~W`tO+Q)@8oc0xO25wg@QHCrf3JWnR&Ocuq5ZZe+*CpMmUS8~B)ck!B^xP*&N zKaI?$m?OYEOyZ+HXeuZ|@G&Q{DVN;}fGsrgFqK}-IV4Gzmptn^QU1yVLTNw>F8$(v ztYMyyfF}{)iW|Pht>3zpojVRC+q(h>y9nl+47=3kkw+fQ^PX@f|M-P3Kqx6q@&lPi zh%=@>zDd%1lavKEv=$q-<{blM3|p_QUCVCvTGE0E;0$^0_|gCJU(h{!DfX^l2uOD& z0R)MOhmA6OqERx-wowbkwl*fuad`{Wqk9zHzQhe*xoOS02!ORRmAc?cODRoAj5Y8k zZ6^pi4}e-dqK3>^x*?*)72w*B(J5p z0O*^`LNvxumStKN#{#G_-#UV|wy(jm?{6w#JkP!88PLix8L)R5Rs(7cJmE5V<r2GA7*l*n=2i(Rn;QS7tqIQZxy@Mb%}eHZBj>CCJv!2VYTR}nNcGQI>c7)? zYEEkS-j_A}aU_eu*Ib1FO^YJV^2PHS9HR;YGNj{Vvj@?z?;Hh!$iVM)!Ep!xqLr7x z28&SR&dIn!*LuBF!mtXStSy|(yO6rxKrVgyO^pB?20GD0qd46F2C8#l`?vtp-3QZ5 zQq$fGLxWRdevJQ;fU2Q_6>1qUQ+4)IgCCMiwT@#HFn(|&1 znpAfM&;(9;3>H!csx*+1YHwAw0sCm5|41CG)wPeB`5Lrg#6ECww7=s~h@C*yYgHVY zLgszuSUpKYat#PFFb5eieI|aRzHeOIn!#jYc27EZhU@MnkYcXEI2e1~^fXgfts{{!+ zYq6@RmWWt#2Z)C}qw65g46?X@BG}B)F`j&(g{(MAR~hp9UJUfn_h8fOBVMs$k|lJ- z`i=5wV!@S~?4v!#3Bd>QG=@5qyzY`0a{j5OQaTTNl}}#%B`$p9ui*lebC5+@^b#eH zQbT?8^U@?gGCJR!-}SfAQ^pg=n-xr!(M2K)1OuWNh2?B}9dil-)+W!fVB%RY2Gx>W z;YCk-3TGaD4CkKoI8HeFxG1l-vdWFuf3epAO@?f+Q#dL9V5}vib#3L5W4CG^kQYPl2F_H3A){k^7)8us zguEMKoDLBInY4csJ^Z#HcXZCBShYEn$3gX!L3rnRXPw2v4m%XJ7O_#n?&_=lgPZTX zV~XJ$>mttPeD(YHaOKt4an?Zx%M6S~#Gvg377sayUwzRfyy0)&fiaE{wuS`) zj2s7{vx0W^aQ|K3zRD+5C{IxWR((U}1ik z;=-&7FZ&7z8H~LX>tl`kbeN}OwXGm)&zCmO7c!D%IE^IZsN-NCHABy80Wpcqu^s?q znl=5j<8-~}V%FaQocBfFj#RWDFhk^bbgXIZJUV2jafsg+;KwMiV;rpq9bP2slfVi( z)cAI*z=2uMUsHug#%ymhm?E?Io{R&BAejyiUPtXU^3^7URbjnR1UK5x)|q5TKI=Ii zEqgWoz7fV(%2Wb98hJC|rvzCdQCiZyZ;8*!+*}epx@J-cQSLyRphn%>Ngz^uYZ_|v z9v=h}M(7bpL+Yxg6((f~0L3Q9=cT^dN&Zlk&(# zp!R;Ku4Skh9*s%7x=*U}nAj$&6@ZfTMOC9Ix&~AOAyhy~4|eMJI_WW2BzXkgPV~uZV6@bp3>2UgJ~X4Or6{p-7ZWzENoTk!Y%Zgz#x5abKeTGvIi3aqDqM; z6T_hg9?XtI4#n@jAKS_aR=`=rcd<@jZZn zZ-4EZ?7sVMxOXquG8S%vVuG@LX&XCtJcMjv0XiP<16c+kEaSBx%NN0J!N|HtMJmB{U_Xkj>_?IWSB%eG^Y#H!LCIi5fLcq{}q$oQz&~Ep$8R>I&iw;nI(xrRR&^{wi)|1*2^=v#~=PIDXf0h&7aXhHp9AEejaR zGGN*nVQHzCpNQYE44NQlkXo8HUd@27&F2;MVz4>PH~?A)^IQcJW1ruYLFSMJ?xoHLpri+Zkhh{r@gHR`<1ipb1+0PM@6$T$hCNdU+w2`uJpI5_zGD2@DS zijkpK_Zj_}kSMbj86KGD2!aef-YK?kD*uRvtU$B7t|{?U|DUw+Z5s0`lZ%n-Nw&uq zkNa5!6Mc22U3eIJ;6g*rsg{+h7$C|2!!%^DL=$tQ0vSvKVXA^Vl_UU-!hgeaf_|@q z8t7;M9wuqd_fJl1H5}KPWoray8m-B)MiQ$D4)s8g${$0t(hikMQGP98(*#zA9EVCu z@HKYZXhTD*J~!I4Q`g2~NfQ&L-zO$LD-eV*(2d>%q}KYNPBEX$uO4R;vZwRlKzmw{Ng`4LoW`o4@;oS5YDeCEnynOQG-^J(;K~ zZMVqovdd#0@i1BlAM=xQf|NV(v}pxwZt0_Z(hm{=fEvNs;3!;jNnr-St+er1{8e%l}MXCM66=%EruFJMK4 zCmpwoT@QU2hiu!&aF5z!$Epd-a?kQVId!_VV5Df4`6I5q~zw zl=6aY+u;qS=KI+8>|MTs|kQu|HB$X*9Tk(h;8AWXQ3mkScA!z395)O zuv&oe(9Y52z$3RE!rNc@E3{ZajZj!HW#FMp@XlAhinb^#&Y_{p{`}Z=>@F_9>BhuZ zshUqL0o}O23Zo^4D)~Pb3eGw8G&o=h4_Fta&Hnr&|3)aLi9aR*yHP6gZ$A7Xe&wYv zLpoh_n_{g+%MR*V*sR6zr<}lf#~#C{Zukbs76VW^ByNQj{QdXfx~uhjECDN)A_z)W zuZ92lv!CamKlgcF^R_?cXP$N;zx1Oo;@A_8COh~ba0}3G!2t_Ub})GhtmVgk;)R@h z>KVM~_kNShufKsH28&XPVx)~~cYHxwrYjIP>yMKFhH?(Pwvl5Rg(i>doEZmv^oqr63yH&I zyQ5VXvUiZJLWVl57fe_PUgA6;$ zikX7;OGgO(rsmag_t~{4xvmNXp>Yq?r)h++TTSgA1amYoNkYZisC4&x?7E=+GD|&U z@*Z=e0zhJQtQv>Zb|NNOeb#b1x^}-bnX5KgDMJh4!}7=(;^d@7?WE*lT2GE?Sb@_l zv-4&A)ozHKgd&_-JSxhiMorkBf2r`!(v^gwdasUhBU$SxDGXB_0_3TQv!Y z&J@R|0bsUre&1{$#9E6l%KGkd&Y@b+DZ1Qw_g!56r5iSsT%XV_qfw|aXb7=@65=(@ zUB>O--_2*gd;{&SKr7Jk(a79-Phss;qGu(_6HYpc&)j$;VjX4KrNm-vIkYKemWOk~ zYSAV07Hcy)MTZNDfGn@l&JUn8U^S#-LEzi>-^0IO{~x#jHg`C$bbLt=Au}1dI(COH zXYM+dR&F+Z3`ns8EBE78SE3qM^1s3c3Lj07tJ}z=@ZA;RpFVdvHgotgdWaa{B~QJO zH@*6`Y-=g36x@FQeOmzFfGGUTBTF^ zWVGs0>uPq&W<7o?$-auUageG&h#ovK87UGg1Twl2?<~4x)>4!mGL7uAG8kyJu&p*B zvq+|hD^RlyS|HZJ-etc1?OVC>n(MIIiLqqEvWtO$!vv+}EZuIG!e*!`2}eGLh1TMh z6yEyGT9YTqnU6i1)6O_8n&alJXl?NQ`}l)@eou^jOlJWv3ZB@heCah;^RmaE0_7@3 z79-wb9GYjy_H8`>!i)Hgzk4?TUgmIv4S4rexp%A8+Gh<4vI#zLo8|AQCix02uVD9d zV^_M(P+y?xqUjGHMq{&GH|FVGgb!T)X)*$(O>?`z&t3F1e*gb?4cjwdb(vf5yEo0j zA+4_>vyd|Mf!CuR%NTCD?GCQE@g}yLoUW7`J*zE(E-M{n1!w)@- zZnqoPX~yEc$A>6EI&Ty7Va=Vt@uHumefVJn$s(}6Tyo{rU*sEi-!}SDijO|&#c-F=CnB-qHk65`CGJvznQ_r%kAoQt4468HD z!T=ep3k;s~t!97BQu7$Kf5Tpzrm1t1r`AT9ALI6K8n9#5*P7qu`ZtiUdl6?V!Ou7+tAOKI3RLufRtOo?CXkD{xzt01FfB`Zr zALY>ouhdIR_*qrsX1MbsFjqNc)7t;K1Jdo%fyj2KIkB(Nst0w&byP+iHE$nv6L z1ZA2sQz8-kFeLVeNv7ygYQ;!DaM7T8L`Fr>K2ylr&0DFvK!pKmtBQ4!z>bP}QX8=| zFmXwrlSeHr6wBI=rXq1hy9Q&x*!<64bj5os?3C1NT(^6E|ykEk|a~PW;?A+q>ET5Ss zL3$uQWPmkV6a^T;ILDp$+|8d}`r)Bq*4UWUc)VPQjE`=CS+c3CH05-K=k{Cg;2oF# zTfGpqP|Fi&Br8n5UJiccN1o4HF8ffD>Pz5-&cVY$Z1UHN0Pdr%IgnTU+>2vZXebGx zi#5^5K|8`7x8KL#T>3FQ8Q@U~*d${aQY}RdSQB{i2`6saLc8j^wIO!whUL^@7$N{- zfS|Ff*EoxoKE-X5>QaI)0)j(*%)kHgqaWpjBX{x2i=PPs|8(VNHhp}WR$_b?K6c?Q zchFF#YaAt_d^IqQB-yqkFJTNe#M!4b2E|YW`1H*;@S3;2iFg0nZy|WDyXmH+OF?2a zC|0Wi?Iz!UL=)mHD9<|cTyDJOtK4ws_c-dIhw}7ePGkF_2Xp+x9>ICXAJ1bRz7w>| z-qpQ)>MLL4jqm(xF2CU`m;^(p^|4W`mB#-*B|*vbizo@C!wLZx!EdC zZ~L7$#ylewsOHg#Sz{h^=XY-9LzjJog+0Qubh!AmW4ZLxU!;_hGBf0z4qgnW9DOtk z3dbCCbnKFCwGeY4WEs+3MOzL!tJrSfhHu}>+b_EmH3113Y|sOw&xbxWuNZ3)JRv-V z3r;*`lLuJ8lTBO5tpG-@X710$L9{Z<#e$#^}SSB+dD7)FfV=S ziy=hd+loRa$kG9@+~ugFkK?>!j^^^4zk&~Q06?lbK*KZ^5e_-zkiOh#Gv?`8{YBO* zt+H9*M-2d!B^D1woFmjjW`u4?_9`BS9m;^K?3 zUbyVDpQDm4*Gg2-N54uhI)Yb=3o2kzvAPczk)yi)!*dN#~+P9IAGgL&{`yOM0wfL(W2zf|F7Rb z-}qa+=c>=5&fz)*!A$4zIt}x^Cn-IfGS2?M`q*flbB)xK>6g74cihA3ls&&!ndk#D zYJM5kK)u=E$6#G~R>g!#fX6h~ln)t>qIfM>W4NL^Jv8bh<_>ijm^S0nSJT7ftB zS?XfGF-i!AAb}v!CnY3MB(m!&|6;A|&y%5M&x2Ca3O`Vp%U2zn+A#dmKG_55J5b#x zF?p1Z^hN-XaSQKRlD)}5;>P0oD7FR@K#*C0gZ1w7bOvU+WwCsJmAu->T%DXjbVx68rp<9Ft5T zL9d7hzb6_xYS1M2VkwOuuG==-35wE4D&UlF-ur!m212)svxdA|<(P3l#0N@=i`OhD zg=B=(&0obmk%)p=-2xMIUjQ8fD~SbB;0TmTT}e_Oxeq@1VAurI#MYE9>I5mFYv8T# zeK$XS;Zt!cv^;b+dG~EmrYc7aP+bYEXcrvVqQI-^OB`ZWVd|!+LcpoUDjuFiVA;ZZ zuDO!e-SQoFJ$fhK-@7|$(nB@TIUwlfFCfb_CwE1;@s_Xh+_TQ+S04Qsb{=*xhaY+< zSy589EH~cu9X@dN6@2nPzRW*e@fiwY!A@zRbV(lWAReniDHcPy;VHE(3lu`^+72G$ zjSsHuMuZ?n4pwKKnuFXDp-Shj}Hna5WK^PA!r#5z-!67 z2%>qD&aVfn(8=Jf@A+GP_M(gNXl!f{i)zthd&8P_&dB($Hi9e3Q^SYK_bW=_ZB&9! z0P79vl(JNEAMj!#aW1$hrPeL5+qQv}cxNyx9kMbtd~7f4om6%RQnI6H!Rii z#y@#0uYLK?v#`AlT~E0nxGaMr%1R#ksGYp(hkls<_XF>b6w`hA5P{OiMim9i0>O9E z+PQ_$iR(>)EU#xn>9MHZ_pEFz1JuHR0k{BQQ& zJWiIZtn>ap=R{;?)xEbDXu4UNR#}=x5a^a>v7wtq5ER+O!I43H2RB?_XB>4L7e;5s z*LP+lg6Ig{+MogrXall#LpOo~y+ZfBx2iHD&UxmKb7INJh>Xaptb6M= z755W2D>EZABTk(4_j{h-k0Z|VYd`vu|8xxe-8Ys3!kE4E|x^81|dW(NO z#D_M>k2?NX9;@A^=CYt+%-aOBTqw`nTPXBlUBgm%vg9_=~BK zYgHHLWridfmGW0ja7m*gbd@bqNo7?4mPbT`2^KX&&=}QF7_XM5HUOMJW4|@c{KA-h z5!jLl?#?%jHa1U90cca|;Fl6Us-;$gX25P?$FdaNAPJ_P84BTU={WGn9{JsOrl_o%$jz)W?#In)pRs zmr9zc%w8cx(FVLeF483e*0I`_^)!}`XuGBKT&G#P*HYsQ>Hukd2O*Cd>+K|@phoAJ z@B(}{QqmAk1-yi80WlagV1w*|B0;u8Ow{?6Fu;VI-9U&KLMDh%yU%qQtOESk^0~~B z0#t_Ok!-PI=CVHKvOzk18#)%B_2dkxG9k1 zDyX7Hab8d#j0%INhe5sKP3$v`&Y7UsGeT4~7`8=8EK!4+03wL`@}w%gMuNk~qb2-dF2;YYoQO+I=;EK};m^qAXLHArw-L0&pCKOM;9S z)H`&iDc0K7I#cvrs}8vJUFv1g;yu!9a&D^6xVApnw3MrF>#r%Jugib2zRaCB^SZLq z@DQ56cc#{N7Ik)BYEW!4H~v@sOw2OSJrV>^$r5?uMzmI8xAhY$i>g7BG!<(9AgZ*_ZXzgq!o$cb&KQv(CrW2^=^KD zItxI&DybSY7mS~x;&DtvH{gPVN?s7BzTZH!-p|d(!M`HLH-~HVx_1acQj{!2(mBtj zg2|>}Q`FCpQ9{0>ByI-k`P_-)K#KS*#ExrLI|Wm4D%hCOv<3*HHd!&HET%Lx!6W{X#eDha5jbleQ$(@i)Gd}j2 z&oUE8)Q}s$XOoH$rS8KzA@?z*%`gMp9%60$Qj?^ufncjf-7bJ5?BHxd!wd=)85IsTps;S#J33U3~DPALXn`9{LN-%Hur_ba-Bs z;=)+z8a=$9ttCA|F}Si14(+m%^4-DsI0|~jdWnQQco$wTFr-kH9&a7^3_LhF1q|^T zfJE;Xr%B$qwUlp=(My8cw}MeaE)J)TS3c+2Fgb!dIsz;thSAxZR9xU4Izk+IyX(dMLYvi_muar|0vy{lFy4bg&5+kdy@9Shj+hkc*+1on4HeLQ@CP4j@ z*xfU{XCfQg#LxqfIbWt~WbeVTtC|xni>^l7F#j50ZRR?Pk|i&_IBK$0g*m!0l|M)% zON=pCV=y-UZ4F6cu{I%1ENPOET8m9AiA_kXEq7}zw)lJjgd=lHqgHgTb8=MsWFaY4 zkV`c%xg-TT?|tJ8N(roHiut0ShN=0Q7;8zAgrq2kB#n>Zc~b7NOyYA}luZ)Kr^wbR z{|PMwEcDN?mBnFjz5VMd-#NsPYd@ndR?YTUr4L>v<+#qiX_az62oWr;(K>5P*WT}I zJndzu3ehCoXIXVl#?;881H2VkjH(zhyzncZ4TayFv3T!DjG!|IdBz9-@#esA1b+UW zFu91?mBH%-ue|w&f55wBVKIMj?_n_d74IW46tutp=-M~qMq`W*(j0=2`)W9K9Bv1q z3bu{GUVG(H>V38;=Edn!#5w~ z@yR6sw$`M8@{(sg2PUK7&14nwJeI3Nb%t&vxCt;h0vks=_cTcmYapL78K-D=67n6a z-w6P+=7DTC7K4Rjn;bds-u%c*Uk2nz9=Q#LomxmxkUG;jBAjl5{L^sN^#i~$upeH5SQa7f=)Kj zjZK(rz{cjno=8eM+6+K)k_7**+~H?a$TFDjV6qIcDNHOJ9plo3M}O&MJoO=$gn$7P z&c{NOmQoyA0@(+7Gd7TT>T|}x^MCaF_~?gkg1hd9tt~X4ks!!f$6z$ZoO2G3dd#K# z_m_Vs&bW~E>%b7!^UgWMD`}bx%KqE!I%pOAvMUqfAYgfWRm0f}_PXr&GkKg@c5hcv z>*&IRPgT9?`<)W2G-mE^)92ICWdhq~irz(h^i5QTnsuL!2DJHh6O^s!R@AuhMK##r3Wrf zkUHuwMYc=RFp7EOacOiO@wv4YBNE68W3kqh1V&;_1>ncWG%23P*CIJ$Z6rKOQf1Ms zO6F&K)f25>OVweU;Y@Y&GLdu1aTQYSQ$B*7*LXxO&FO}U+E<26uc44%3AQ$rcynXie+rY;xTMbzncn_Qj41upal<*{Z z4#_A;D&!%0$L(w*7}(zCGh15}cG`O8@=GkERadHORGdQ^gC$`{o$MIVy@zV@2$asS+ zwdiQXb1r=Xsd@~C1RFByBxXfxCFfjbk`}&E5_(sUkON!C?+$(=*$go@NO~EA6Xh`v zeP{@{5ipXVV#raFG-T!K9>(vkIoOaj;5})xn2;Im2)RZ+1UdYt-+47xzwZP0yzb~8 zd@uKB_7np_%qVzFh8!TCf5j7d;1_-oY#u?>!E_tDGldgd*zGBHJHzZabheGow(;2x zZnjVsMVp4?{xC5VRs*Sqa!hyF&N$K-ylp@v{*UHEBRrpGGZ({|iJ>!aEN z+xw1byWX}s&?FD~KEG}pe+a>{EU@2N8w0V!VN0LJCqdL^kZy|O zv~Zk^a#v;DDe6+K6BQFN5h-=%PWmz|2pKDQ-w38|F?hAP=uXq#Eq>TxZZLT1g3lnuOpgt~AP4xNjbM;MQ zp0#SbWRQA~HvDUfArszoSb0=ralW%(X!m9Xy%nv3@&!&sTlG^c)$Z6$d7#2zd^^_*wHxwU>hYQ z*#tH=x$Lq_x$2UKaP^083cY3SKtlGgsv}ngALr&qf;4rhVH)P1#u)zbpFYXMANW9w zizEq(8I5u2h{s%VadfM*s0+S>-T<=`ZB>>T|z8fjbEPVY_o`D&qrQammTm0iqH}PM7 znQh>E8yH^(ANK^9cY*k43IW?MEhWA8y=yHmh6M?=p})UQkC0XI^2LDec`__nHW{gF zk=6I2ASzQQ?X9S*07vzVhd%IPl?c&3)@YgDSQ`y5K z*C!<=(g2~Q`}&uWAg8h;Da%pzrvaANqh;`772Q;jAN4Y*n=v6PH|k|k>Z>xW#qX;| zgKeW#)rkwXf)toDiYk7i2-qmIK??1~SUKYR)s<>xA}*C>x-k{S5x&n<@>_KoC!Me5 zbyM|4HQ(kjEPhE_U6=MIRS-v7BTVWYXje<5H1w1z!ma=lnvF@Sdtz$;6$?o(9_uTg z0`Gk^T`$VC1^6!suFCtQ%yZGo%R}PAwh5q8BNLR}%M-NsE&U7GX8+qv&25VUEI+dc zka}5` zfj}^JRu9JDoX6CHr$iMM!|UJqZl3fdmxQ+KrU;N1fY=$lB{sno*PsA7&$;{x7$=y? zIOtCu-{zWY{)*pv!y9le_Fo>vg1Vl5IuRsys0mZQk;2r5zyIa4UdThnUj$h6$T8R$ zBS{M5F&vrjvS&Yst8e%jyiJhI6O_$-3|xwym+FH=iwVAT#n=%7a6H$46Cv5y1q zf-IT{k|x-V4IcX7hcI?96^}8axYi8qIZ2W^afxWGro z#x`|%$O<9lq-1bUOq4jx{#aqN!KglZYvMeKgDW5VrI>USNXY39dUA(XzwWjC>Kp!? zBxdMExBLD99)~ry%oIzF#e3yV@BIKTyy^}?=k8(k)6L*bvgWnV&|}(&;ROto{Wri~^etY# zM($FoY0LU3baID~AIns3x&r+V&OBU}J`P>`t14n@=wV0jwl?H5yMim%RYsllPwA`& zMfbIk6*Ocb(FF!IrLTr)a`t6^tOB&GqmrxwiuFyNcKe%cm1)SnC_5H*??akm@w|9# zh-_AuL|J#GlHTh()e=}k!N6U0&Mntw3449|Aj(|kM_ZW;1x=Sp^eio7)n)72()hak z{?Z#`(O|v)ebUmIl>Qdc2c$5XlDLFl^Tgvh*rN0VO_?T5>q%OY| z3#>3ZulN6TjWB5`zQ#)n1HQ;oOk_80aoNP7Yit-&=T}{{b`A1<5?Dhd1$XQJv1*xi zo#zk&WfdujWo0-d=wPpX{?Plsmp*g9$DmU^{t1@bZo4f2R1gG*l}IO?8JpJ%biMz* z&Oxn3M&ruYB+nts_}DF)3`5%GDh?%6Z%BjS0 zE_dJsaXy$&#<4orV7fe$L-ON5+`}?ZumZ4m)&FV8ASmRp#4Bn&g7Di{znS;n^hunF z1OTvSle`14O`XRos2Bve0@CI&W-!seK#UU3B@1$8;#Nec;@I5srt7^N1C&3C<=YN00IyU;DKrR&hQnWik>gWLbuIX`NdQ#UA>O?_000 zIv+S4bB95V(+FM!t6?4GioR9MVdwRE-+60{WmNEj2fpV8&*#|r_lC(B?{j=MW%}8> zc-0^M5ysmvH}r-Hqwao3!Y=9%C1i-j-^$eE@O{jIg>|8z~~3<4u1ddQ4)eIxWS?XBG>^x|A)UHWUx-2B-=hwdG947lJSI% zd!NI%e$9&zft}ejkVs;qT&=<7-PQm@{0(-~j}5Ul7$Tv3DhPlfc;gTofi|P~EK)PdU#0JU!&PE!)hYe{^R%&J$6 zGAAK0B!zEi9UKZ)YeTL{2@zKsGYm9l1XKh;qrFDYh+;8R&uS4dAf_ZgO!2oE!oQ+J zHC2X4&C|owy+>HE881CGv@y}sMe2b$uZxOSN3p@ja>-(7bfHlMW1%hk@Vk?HLil{0nSSd|zHp zeCz8NV@$aYwAO}$eUKe|*GF%_Z3n|+pJx#m1xY3_+2GkSP8B;{|Gg&Zv1%C&%{=NQ1Xa6D zt?Lp`O3W6Df=Tr(2`ScUHE)mx5fZXFA{l~|*&IbSLrIn(HN#UAzoU)xpv6dB8%ZrK zB#kx<&TH8rbKHkEyhG|4B~+Opb!tGGB#1E;Db$7?6hw{I2?yqXyq2C<0f16UfmM(3 zy?9OWuX(bjE-}Tt;d$K`p}e7Obz-jo$iNBBx-^&9)wYL7OSMfNSLwgkd5*jNzIFD6 zLnb17otW>I-0G@_r*fitswc&&8VqMu$+E0$!^W61!bH1}z%TmCOCEYLqsbVP*kGDH zosrKnjQ70p>Z`-#H3l)Op7}sYj$jO=UU34}OB{Yf=ET7V2rQt1+=!|cNc4m-K?u@O zWrcVja+AdQPI=J7?Nlz9wLVE{5F&nH9fPZidg{Q z&eY8l&8jUt(yg&9&EF%eH~E1S%a^U(-PC-aQhcr7;L8NP>8S_3+`_ zZ{@G9xtj4z$+otuk0lnfIYu_deB;x;5@w;Ft)y2akQ7lNq#(-+PdbU1i50`&{=#ri_E0J6^M3Q*V3f*IoPOD$`H%upAU$ z_A}bi|EL(8H;9Z-64WJ#ra%fl;pbobT5iAPGw9Y1WS%5fa1OH(yolH|{MgsOJm3sA zWXoY;WCT3}2=El}Vq=Vl;#|yZ1e_%N@t^%Ey1j#LZzFkzNfHntKQaMLcWf>NVd0r75d7d+y&6v$*=jH45 z@@}4I{dsXrv1eJ^>Q!LrP}V3&PCE|HR&5rcFQ{RX8oOy z#IN1wXg2NZZ9pj{uI3hbrG}i85md!-iI{~>0V?vf2}U*RYF9ZfJ8q#})Q_zblTpvt zd&PS#qlvuMzSApCJ>G@mv?i}skR=&Bv zFB@l?ogiv1gyXyf0mbBSOAuNyDpA9ZCMuK^Cp7xCRhuLgkzhYBfh4KO^7)P_p1Z15AmQCBB?o#kfx(kA~+y$R7o=-f_5{ZUn6+ zgDEy@lTddl>$(4nj)dO(@`W5_R*Vz%dmf*k@tgHH5}e6-+Jhd(qaXDc++>49X0W5! zof*IQmOllBObsfK8pS%m7x^9CyGLVt@^~`P9L1MC-~V~v`|&$>lFX(s1yMo8;Kw64 za&Inq)PuO{i!T8OSy+ffQZk%NeF#&)X}B+*upV%v{LTCRnq+zsW**H`GLyncV7$rr zerNNoS3NJ>PgRoKgH7=$#>|$=Q5Bvcs%~*7>_g^J%hrK&V}32*sTiZZkE47Z4dzYJ zZ)uP=JIz3st40Yl8b}v`U-_Bdg6aWbF<8qt7kGzTFGZI4Ja`1ToNxV#FXzZv_r^_9 z#DnpU+dp|Lzkc;!;zT8S$6bzXP*<0%#jC@faL;o1&YdOF0rfXn2#p(>r zGRSgBMi`gCM#4oG-mh}GQ$>A7o*Hs5B)Yv6=UPSfud82dg4ILUiL1)BH}S$%35l*u zf}zSmMWlZr%hXneU2EGe1*9e(-dvL}TZ1lJ>vrL)LnOJHdlOe_Tg$g$6jeZTffco{ zjf*l(l7u8lT5*Fi!=i@qHnGsI>u(F>Z{q9A$hfwwl)2xoSs0YZEvw*tphI6|#!%2{ z74y|DgPPr#&<;I^{baP30g8pMN8#tu1_U-i!6wPkbxhmyA@^rlCv{rqPixFr>GSPq z)sUMcY|8|YMn;6NAPH5MiK0xwD;C&`3+HNGqW$DYMK_ed zJ#!u(^Zp>Z;Pugzd8%iCG$-ZE`E<FhKzTs_CI~+yw^UUD}}f(Wp!Qs{VK9l zePuGl!{ze^zw~hT$*mxx6vuU98vdD34j!=9l8fV;p7B*oCu3ZafEd(!+|CwEGydkf zcVd8;Q8TpxE*e%d&^_wq{54z_Eg+t5;Im2zwg5(Z~`GwW?j(V z&;H?S_}q=3!e=|=ZiaIXF$R-Pa8}SG8+_*rUyNF?8iJFGdF7DdTn+s0o34SK88Y35 zX+~;<9DySv%;YF9d%<(D7A&6JZlFFxo$vIaTBbqYHuqX4pE@-AqbrKJFpl<#Vdfn& z%VCm|cs=t8hQsZizZpfN#+_BilP`N5Y>cpWgyu8Yp7GkZUK5DU=+PAXm$J3|yr}0_ zUiUh5Ylr;qyRqz`E(YeMBm73nx%Ynn-}8bO;EMRZG!3Ca_kia0>058%V>jJ|+uBB* zC+g5*tbsIv)R4LutS3q$7N0prNlHx?W8ZPEy{ZSC4iAta>*cQX?QZwBb@6_d?_M#~ zw)5^<@3;NlGC8rmmSq>duopSXA<|cU_=Q>JruI!R`XYwc1>SVsjJ}52_WP&We7&nI zo7pgJkM(SiYR}3&&u6v2^WMGb4bs<0Ot+Odp}vNqF?szg4yC zhw9z70kK2AUt&Z}0l1^e^BO zybJg0ic25Oc=H$}DJmYBDM@w$j!*fczx`{-gCVS-m2}VHcDNmGhui7uzKp^6oJ8Sy zS6zjU$Cxz1U?JP#n)h5!4y4Jr%mNHv=w>Yva8rT5eD~i64gPEg$%4F%Q?SQ2;n*>r z^TaC{xj2hd4Ve`-fgv2SI9`9<-*Nk=K7(wXL|hKp6rUt89>eGu_j%9*_=&H32`)9I z6makgNP5@e>+t#5i!7D~-C}a}LJD8_DVYl6c+?=DI40(Uuj_%#3M1u9^X}8!WqTEk0EKs|(NU!aRp&-?U{_EZe)X zjoPHLntszmaM-SES#}L=vA=k`QYv z=Rj8EbEHR8E~H6}6r@NS@v+P=r0qT~YaF{_RfiBB`w3+A-RovUTWH|T>#G?CHunX? z^a1swtu75|Q)Rl_vO4N(QeUcbl2~O*S}kRaxkxcBSb+FjMR^qF=e2raO!l ziZY(N*CoMGTx;bWQdXxHAW)ZP+O%D*mVPgN?REd>^X+wi86h%+^j?KnT_%UMEZukA zz8|}ZZXB9QyX@HdceZ6?>;+@HccMSDuISAXnwIzWJ!TTIy`nMGR7-xVHy11Zm z|DrE@9A`b?UODI|jb` ziI3-kiylBCAY#e#DJSpz9IyWKH{y(tWe$lx4q?gQ=OmtXKUpyR^#6H1$;s^iK)M`! zj-(U3wV2Tc>AjBeqc8mia&g#@KR0}AaGsf@y#5{UfRo43*$Lbl~RV;*>1P#3o{KLaWL6=Tl(C;dTaWHZB20 zdC8Se!H*LlAs2z2DewEh2YJUwJ_1_sogoX%62$QKx&=8)%WMDYTFi6{W>Ykqp^0Fy zBhlVVah?y|cmq}pnrkUr za7tQ*iChTqMJcf>QS+%k+10$A2#`X~_>o&7p zX4=!HQQv1Av+j-A!3k|BZg$OaJ~Z94nS`_t9nhIRz&1Oiv>h=*t% zc6C}tDfQpmGC}$P(4iSHeMDGSds)_LYAwsc*R*5n&sF^#P+!QgYBS41YR(m98JJ2E zikci&!#upao?4bcB@?wseE8<;ZT%DT#6o56UW5E~o&*?}FR)0H)G}Ub%tJ+@)Crr; zy&^dJjwuXDrF3uaI6nz&hjt;Ob(eXmhz{n6vVxpC1z_!p?R^LUKIF4~)(AHdGvs_wT|4W=WsjR4!6VY zbc0|oea2Ui*#xXXb4QxzTzCC@`Pi+umVKP!!BwP(VLbtYZ~M>(x$#3Ef$fvbwztZ4 z3mapw3I5myFL?4(7-=A0f;M(xfIMJsqK^OkJO2~5XXx=0Va}Lm!RzDb7&)@ZxfeZ% zSAF02<50%NFq0IWZ7-eI^sVFD=0Sb0_kF(k8zR98KJhV|2O;-v&fo5EJKPTJ7Nyq$uqC=Ue{XnpskaJsuK($KDt2oAsHgO#eTbR(jnKhDjCwc{%aw0+K7)pb}YaC ziYOqGA!cco%(ASHA^7TEj$M@$D$UTvRI{EgvzWdJ)IM-xosFw6T7C$CJOqr`OXTw^ zGDV9ZP&=UHe1_Mi^i|w_Hn)4tTaOLdAF~c3Bmk~$vRFf;v33LebVU;{>y-DJ8M0fc znC5e%3-I!M7Qim*|Ip~>Rm)o2$|){>>R@{*Csmh~nybUi8G2WeP_;~iSQ_PP6cSl7 z$3B$47AkXQ=k-jFX7)#!;n6mD>%7%@!|J1j%IF{o228?AtM`IasLNti>_SN{)iXhS zli-O7LQC&^-O#;xoeL-D7f-hFf)rX^(m2nBc5wPgklkcG4E5p|ni;ZJkB{9%+w8`N zYshyEAwQN)%-YIl2m!z9zRVE5k05CaAUJUF{yv|R&y@`D`7FK=qIiOLl^f8-gYTKgfhwH2@+v-F6$-{_Wc^J2TvgEtpPm>M>T>-aG>5p3O_2 z^E|%h376yJw0hFxLp9X@V-*jOA@j)k=bb8MnxR&hWJ;Er0A`L7eC|%^Sbn%2ZmVw5 zeu$@B^2OZu{tqA-C!mUTIl1$^`p^G7tT{bVKGa7Ff_XWBz05)JeBht|nRmYDz2sSj zO2%0LEbdGCh~=Q_c$b+DSNfI;g%|9SbU z2EkEgakRhJCV`c^*-9QDUB>ENfYh=KggyzZRmy6=!K}V)kgjt!I_$icWzH-EJBLWZ ztgtRCBg6{;UJz9MoL@x=wlnXqL6pL(tU`i$qEr_aeK4fvQz2!_ghbLKezZoW)WLnN z%+2SBkCwk_5G3&`=jE=NER~dx^S&e%dm&Q!oYcKGnw}d-P5x@`e$EpI)Xdl0GCcbG z$wmeY^ByVlJ|e~W=|Z+gWg=hrqetRtKG~!Eg*I~Kpm>1{Aw2pBh-C}mAq4gi?auwW z{#C}&zKPeWq<EZZtxE=KAp9ier6)$`t=GYOiHh}Bf$9dP^ zy_b*Paa&yT8OTH5j)CwDTWqga>Q{5m?G=3^a1YVK`7Qy19OcHA=gtG0}f zE?JRvc3$i3n0I?FL+|slXz0D3Zy#8@YG=EQajj&pbk4N9`Yl}y29bGxjgtJ(^6e5( zrfbjngT*3AK!Z%6PJC!L@exl@+6IF1Z%VnYdR9y6@LqgJjU{AU~q%1s(<%f-C&MbDl&2E<<|84sHe*4KJ|O+ zXdipY0_!`bPlvjzO!l*!_S;}?6%uE!9x1D2bgUvPb|(3M?DK#|?j2G@lzAmd5=877 zkpc3JU-4|Ny6OrzvWXjwuwr03B|pB!dq4O-e&T=r79(dMH6gN?%DY$np#;|9cDNmG zr+0h)mp%a|V^ln9C+PGf?|9F9*fJ(a_W5ektg09!^j&L`pfLyz!{5H|J?QopCIfbM z@HXiE>&7POv7@o;{mc2p@jI}YCo^GO)kBHJ z!|i}?CPo)N`Latf;|X3A^&UT)@y>U?o6N-EJ!7yMGiOcsoJ8ghZrGe>VKPh$Gv~g?&!nK|7vWZLG2)zB`DwM7`50M3N z`|`J&kBOw=D6iCmzfq5OzVs!S2Q(}2v{{I4CgDpbcj8eB@YCbeg}ZGT0<0|pSqp4K)pbmeO$3YcGTR_TSNRI$j{Y5Gq`oQAzXJdb zii@8we#2;$JwdHLI|PXuv8tZj2LdUVcwHtQuR)hj1;j|HQ*P>h5%ud~aUe3rl=3dd zNb5qOI4|#g$)pyK8VgWWgCTisvZ7MludrJ&cq3R55Q9hX2u?%!1>l}ix=GX{9@Kzf zP_=~>MV#=|>tG>ORXtXj2{oB5=CeT1W;TL$%+;#nN+~L-EX(JKkNR;@iYu(_!u_wl z5=2pzGJ~b`0f|pUK(s-s6fA<&+9VR{nO86#yg|f=bUg)?A|)gGqs+-?6?L>Gh1HPv zs*a^F17Y!d{u8eEJT|O zoA}4^L1IRh5pcS2zOA5(6zRv+{oc3D3s*eqq2LVI6cQoNATb%31hokX;7x+{Il08e zuXwD7b&3$w+gkOv2~}9b?*TX)Sd53=?|%IFxBWkGWCOo>HbztY>;&fSyBXiL#ee?I zUnK~8WssF}*Fau~D4#;4LGif@-D=T?Spz1)xZt~j1?wQV(0jZ|P(Rz-@5Zv45Ejt6 z(Qw%&_9{bU6k-z!(cF|0HR2U-9O6b)6nTsgGoZfEQrqL{OQ-`j_qgI*)ZmQoy@f&} zW6?+%^{&Q(kM&Fx36l`K0ppY`IY0=@K_zITms{vda>Rr=i)fe|e!g$T+}0|nF&MAp zR>50PK}^nLAN>dzPjFU9Tnr zx9`SnoQJVH_+*2TKZ#2dj^5|~yyBT(&X2tMe}Rrb`}?Mh6eM)MBj5*r=Qnun)4!aJ zbOR>mgR$7n2~Hj6$T>)E`PyfFH9z(7Pw)f3_gle_AOnLT9}Al0SVlNe5<4%wJBK^? zqTKSOYiz0c*Gb#hu8P_O$s99rq*h2gY>8s9kdN8a9lq@07ck8oA)MWl&PHUo+Im5I z$2}tiU{lKIF}%+)I>93t39=!Gk88})-p2=HFyg~{Sq&nJijsK9B?Zk+bN3Pk8%5`^ zA`ywex#BdzkRgf1vVkThWP)Na#)p}dHxVzGh3NzqZxmeL_>_eCLahoJNf4h$9Da3Q+Brt+*<12h4-JIzGp2DQ3Z8@)U2z!~TyPG^5sbHxoy1LZe({>W zm}^Il+AvSPmh-dT;%tsO5Nr6oH~$5%c<_bj(M=dDk|bnyM!I2eN5?$m;g9Ai54(i7 zeB=f&zOjC7im>(*-K;25_&RgNrwy!b5dVE_>cvc~OGB6A14FuZ6mtMImhj76qIdyceu3FdmC1 zNQ;^1Nn3!t8X9|r(X{wf)Ryvd{<0NbBujA#^Imjp(2(Vb}p*({wTDR zms0aKS)+{II>wAu+QOCCSV3dtYO*m2K#ma}bm2wh@jkn`**u#(PY59CKm^womd4zx$i~;k({*fPheowKfC~#OuX-@_YuP z6iZUBrX3z{1E9Qjf-BUooltV1kcvS(m6>TTDOIht1gRFy#smPVh(uH&^Ev7~;=ruI zW5p4^Myywr}`8GcBu}`AYZP=M1 z)`mVKNzus|jvV1-&v`zH2^~u+L%u(YV3J`bmQUUGS^mRs{R$kPqFcvdD?^<_#$)_s zj5})s&fVl&zTsuO`0~d?F4z%dCdbT#L?%e$*>D+}xxsU(zU{6i2N;7rcTpY=R^I)cpv)ePK} z_rCA_+;qz=`+k0oFjpu7Qh(`B{s``#VP-R2J|lNI>3A~$l}UnZO!&cXd^u|K&<>o*6?G`+u@0bV*|`pBOzXH| ztLm7pqK!V}^Ft&@>c@BagS35inI}jW=(JbBaR?Z@4v=f8hTb~KwN=WdZ&5J3{t9(5 zsX0QU2F#a+={4ZK0P+{>(!9)*Hi3NKQFj-}5*7%QdX~dHVNwsOtjLeK0D@YQ*qm{B zjSMkTV~huB2||@`RQC<3Ga~c%s7`)3Up%iQvD8;(<+{qLjIf`Vx~j5ksQHgnNT)84 zVZ}nA%lTtH3!Xkn#G%qutM=>5fbmt^-d@M2Ats!C?RzNMy4yamO%}1$m#Rmau}eyE z8M)s_w6CJ=y=>Atw7m8rrFFVU5W#aK4b$r*a{d$P1IzT|N z7JB%#tFxkP=hI;N3%De$W$W!7;U9M}+sgm|AOJ~3K~!l{W+mVEKIcP>oSoQoXopmi z9R(?#J6Fr_5}f8Z&B1%p(FRG9UXP;V`f|E))s`oRFZT9CJFa{!2S5fXFLn6C)fV|)fRn- zA&f0pe)_eq$Ao@pjdxoo|*9|9y3ZY&XGqVcpal#VnR=CF&O8$==}SJ@ki#Pe-FeM+JPIG zAe(^q4iX`qOgMVpxq;NF@i>MMfS^UY8kn6JK(7Qe5FsN#M+t}_QP20kO z5Dr8Fp@g}I*q|x_keVcb{ebn#m5;gf6yxXp~wd@CeBaYfcslh?{Ln| zDLxb`4{Aephy}dMuoBC1K>H|s=P+SDBr&KWD`X=)JmSG$fTlv?93%#N*A8rL^SZyf zhN&@Vnvgq3nj~b?Sx_ty!HQXF-L_Xye7{MM{Q}h6o-dP9TK4{`a{Q|VsJHcT%X~}v zu6d|R!jSLU@B2O^c(%`LdtE`D%kY~p-s}=gUKQ}EFOK(0e(WVmxJ!qut>Nw^^QAQc zr6Y27FA=j%fT{2MigRj$U0og_%?yztz}0R##Gx$Zs*K{QJ|E5dZyKp`Lrl!uB+&qz zKx4mF)!JVN@iF%|%zJ4>z}v{YutbriP$4(9ds}3O6!oTF4;pn!BS}&M`X#U*1>Qmy3${B)Mw(>6)Vb&w&a za&s0gzUU$_LSjb&5VHmqiwc}~&bdMHN~BB|Rv*ZabzI#ti8%;Ti8zBNB^QH=@{?cp z^?dtFUxu7>Z*)8X@9oLdT9-e$M`%3#R#Q*&tA7& zJsF|iB^WM!*d<|{GJ|iz()S93!w|7ueW}&M43MGgDjzdhHAb$}BT@NzS4KYM%lW8@ znH%L{_qh*`x%839XpBa=TixE_t?zjc;!N!P_8%cl5vC}pICL{Fh4PO3?XM^($iE%Hz{)~W&Vmy-Yvj6YL_|#1whZA?h$&-+07!^hv$8h6K zIO_;!-|u{0_2aMP#ZSBv6^qv#<2}wQ-lTXnOV`hX2#zJ#1AsV1tid@)hG!P%@reqv z*_0o9`8V*0`(41_zW+n0_aSQBnG*C|xxcPS5(oKdVVqb54Q9!SiJ4Y*(EPi1{P!7Z zN6f@?#ltTN85Jb)`%i!W*P0oxinTTX)={P!_1KLG*syN7;Qae>|N5QZ!e#_Ay?RJOguX4FpYE+71H6x9rzLkD=MAR9** zpLc{GeBq0OoL6)17~9R9+)i)*>`0O%5Lbl>e0hRtNu=Z^5Z7M)f@f#<{HtIZlaMun zDSekP$_uZ!lJoC-f5h0J#qFM0U305tzrD;0qwjjUK6@%u4~EpeJ|&&~ zIM*S#fm!CL-gYCFIlFgFKKd%qZYJrgWPc1HT$WXuy~tk;AupN?V%P62BTa@Hn6H{~ z(gdUml4MAu9}0vHVKe(!-esNskdC#DNGPR`Y90csW`Xo&77dAL9um#GOzLIM)Vr>M z5y5rpc?&JlP1Gfrd>ygMB8Cq0-WVtmW@`2`}TPLjk7k4TD?(ozkXskw85In(iq?3vG^@k6dvYbN#O@9X?I zz=EMXw9ALhO)|^BR$IUf$!Ho%EOdQlS*FLbi2vP?BFmodWsDjk(J++k>|EUU5VU>g z(soX(j167KFB|ignWgt-jtmV7SY?vBDiOEag~5J(Mh!gjiyr|tt;QT{kWnx~zxR3f zBCTDM5mOEY>&$qqd!z-pB7o91`bDXPY>=P-j_>5(e%E)wv7=;WggA%K9cKGDAHV)X zeAV~=dv3nv4n#AyIT#WiQU`}k8p~ax{?G=DxY-ml8o`kx zaP~RK11{j#U-@Hv?PZS+diu!-pZQ3bj0Qz_*|s@fe82N~ z`O}^SP1V75rCU(5RvmWzU!~)`?uNt^%bOm#> zL8Ye=3^y)gio*wUP8{%}%P!|zu6ibSoIFu-e5gZFTx~6RS~usbOh#j3aG(#YQI_-E z%b$qf96>rEu@=d4K5_FW`RJ{8vX%&pJ_4jzD;uIms^O>q@b|dm);r+%-LSQVMRA5e zf=niGY=eLC)MsK9tg#p|bGrYfH1psdunJBoiAMpk7PW#IPdNL?(U1*C?8kMWgqkrS zQ6vlXO_QMVkf;YyzWv$H!JK_I7=u*{+uQih-Olg7UMo)3}0T9yIQhu1C3lIUCS50wO4 z=e_U3C5GI~Rjz;4`m=0KV1_iJRW#F#SCiM-qnHjftgE5i52R6pO?VU zx?P&kOUwOWUMn1(H`(^J3=pl6AoJNEK19IPJw)oBB8@DLHZyqNVgkM};MAmBDtoRr z!a++pFIU#->ba}GUe9bPy-=DWQ4P7SnDOEpZ^v21J{vcT^nfR>Hn zZN$cqzP~L~u#emrnt|9iwyi>H44tqJ@w4h9>sOtCol;HQ94@@@LKvrDYye|SjOb2B zFiyGX?DNXxHYct$H{K6#wu1a9dMZbPQP0EfcQ#l5_)qao|MI19)>$wak){G$4)fXD zx#9iq=ea-pL)>ud=YoE-Qb}E$=B++vs&^%MBqBkpJPGA|)k7Y^%=icltOtBha#9aZ zdHiFm^|}VI#;zD)9`KXcF7iAE41{sOrU|(*FdA{;1s4P}_jM3Z0>&iK`vYF_tgqtT zAA0|yyZQ2pwe-Dev6%!y%35TU@Zbl2!NI9K2Q-_aF8x_QXJZU!opshBK_oWFxDg}5 zRmi;~@$l7GJ_VT^!CMPH!*5Ud$c;C0#pMme(|Sqx88}p<8DrF z-HCNMf}oQL96O8joO?04=sbS=NB$!}^^%v7`x&GYtT(8c_7WefjL&WF=W*?lTEXXz z#3Xn>!z=voi~be&oosT#<-F}99||&nB6u>KlQLLf=$P((%yf_5IYyE=3K&Q&X1vMM z9{NaTCYW2V5hZ8h;2BSR63&FmU{u$VVY03{K~a1*dN8PJh}JhY_)v)rU~?K@n{4n6 zFM1IpM*ylN0M~}f?08U@8ifrK6cvvehr#oZd!NmJ|K@LF(~P+OpKb;NUUSMoH%_I$X?NGxofgqsO;4$IM=C=LfQ>@y$VUQEDNM73u3pPrmF@h_hA%$*Rh-X zwp%=ORRV3d`1dkQvhRNH^}PD<0W&nJekdqA6mVLHti&o(L46F>ei{9)Dqpo550If9 zQD4M%o1S~I=Xt)AwAn2~xN76yYbxI=Z22mk=CU@i%01`UVMe*ous4&h&<6f9!U`v~CZOuKs*gZ-{l8mJKCpRyk%FC_l8%Z(Wpk zkRNUPP#=)uxc+nVs1~c(#a-2P?&1A@`Lbnyui`bbS2ARsi-@7yl@ECc4|(tx!60d@7redWb0iy7(fB7W0-FzD+#FU&=1r2y-V0Jaktm27hoX*S? z7Z^i8DmSAL4H}b4wL^&F`0Foyk#}DBLHPMLvb(pz&U;{2m*^|GrVXE%toS7T)~Q-=!6kpGi>Pmr_=p zis2%pK2TUgTa!%GK^u1G%Wr%qdvD%@i08j9{b6r%G}ZiWqyj%50I!}@T~u1e5q!ic zyyCgfW7S@piTMn!CiRYC9LRQk3WSZptLOH;NB%>C(_r<6{G$oW*5;&Ta&zr`+ zVY#G+<>tDlJ?}!f+@(rjErdmwr5tcEiLU!oJ9{}YCM(q$CUubE>srWUXEA!Gi|I&{ zq)$dAxE88fUT$BSHaILNKu>GVK8-ftH1{_xyJ%XL$6}4w=S@zP`9-bs+=n6>phr_J zt2P$ZQH+MZywzx#sW`+w&>?9k9b%a@*%71J5OKusHQS;7ZV&9JK#mYAFfRnWPk=}1 z)7uA6>3#3N)4K*q`rqq)zj3?)(6BdlbnvY@&mcaIV1W#RqB@^BGHRk361JM(&W-=> z0VVS{4byHae_8avrvX+TDE-{a8nMo$dEysf&ek`B;i?^dfrEk6b>;GTJpU8{OdOW*2JFtKz2hCL2YNutC)@#l5 zbKUygG3|B&3e*zCKy^>C?bvPodOr0x7jod{Ez7=sSFJqu-n=Joef~??5$2Moa%D)n zQsXSilS!|V7;D*Y-z`&pcewz^;x6`qHD8Kzy(DGL{77aOfmW;a|L_kQmT^_W&x+$E z=RO;|+bn+dDnRhsg%J4Wr9Z?bU83ndZYCsy7VMt}G$>jY zl&F9+Ipj0YZnJ9d-T8y(K6i?1Nvwuw1h5!!;F1T5L;=ls<;Oq7o8R|tTDNb9U))XH zxgFaL1Qee;SUn4~YtRiFIOm+l^V5%fgr^?=FuJb2B74M%^H4OX2&D$Bv6L}z@Y+qh z{e>^Xwk?_)uD$WbWR6a%qEAhqBqXQZQ`Tc>-MV$jZ^a~8pI{)0l4YwfYgTdS!;a?5 zZ+Z)1g$$}KaMsBu^PE%8WJkFR!QyJ!Hgo?6n_BiKgnpbB5jJkz2zj0==dHntq;-r4 zfk;?21FPG-_?)M6_Q@xqHH)c2BaJcBg;J@^xPqZ$;FQA-=Sy#X7yBKw56(nxFL!e7 zZCj}=>0PCAAj$(m152g443qBNM-Kw~@423H&w4DhTQECQ#U}&7^YM!=LLKDy#q&2V zK^`#$NoUji@r^5f%+*)?lvsKQJ^`ZEfG9dUL#w@-haYzw4>{&or1s@#vL&azbWM4U z{rBI$Dt@qOEElKl!ZQ7N1yD17!$-okzd?Tc^c zxLsYC>mYakf_HxS{e1G`?;=qMPJ3*YvMezT_LETm+vPK!d3`_p>KHT_yG1464B$0;S<0LkQJu-$n z;3N(4=HD0E$TZK}JWtaDVqC&x*hIB?-F1?*K1a={Xja(zN`|0$Khw%(jZ2^ow|}!8 zM-AZNdmL_yY4qKj$6xF~Ud$jF`wW@??COewQRfm7thGHlZu5Ef4D1>SzFxbjjFlo2 zk={9n#}KhH3vT$R)Ym;p@6l9?=y6HHiPg*1HTD-3={?W~DxG%G1~^igmBxAOjv+v! zmTiiCFOd3gsrpR^d@2%B5eHZw^JKMpo*@g!+VlXE1a$P-8v*abAgjZV`gf17fRECL z!T+wlTlRnw-+QO;RiBBm0z~4xcmKZTvp{MC^d`e(U_4hKNKmb+of>0VDy9p4nX42} zLgnkyXuIC{5yaG9Ce^zkf7R^w&38RM>b^Xxzcn@gC&iH3EW7p*nihO%9(&Yv)z>zB z?MqEyO(UN)?HC+2zf59oE%dixIlf7t>NJd)7?auYI6154^^XEXM)^Vwe#R4{A5)Q2 z3k(dhLx$(~)Q>}@$XwsAAyws1mSk+sOOxiy@qNbh-gP3RXmjDNC+Lv?AJ`HLlK#ziJ;zrm9b2<$)R3o)AP+hGS0HOa zX25|72C&%KS){!RcHe`84nKrTE_^>vIO)XnJtNgK&vCdUqgJmetf8Mnmt?3e25gQO z%Yl2Y=PMVyj{Wx9!cTs73t6<_%G4hh@-eE{Xx4y4Y!nPFaPW{r4ue)3j1n?HEddW% zn`j+-?ztDI9d#5L;BYu;W5}>J0}B}|Qvo>*fMTj=A~oBheqMFL=iWm&5UGGDGx$Dm zk4?$b#$|~yrl}uzYtY#?n4HHPaun?_nrd6=Q!5?gZU!6@F$7ul&tt^XQ|FuHr%+dZgDs9fC2{_)`Vr3F?s` zSTzV9gHqyn)!+Xk&v^A~_{9x3V(z{T?zs#5i#hOB0(#9FbhlNo`|ce4;A8m2+up&a z{^;c#xOq#(SO~<#yFfxjRS4qn75L&wo*AKP!`|LW6GKlb-A7{_K@0(@j?qo?u$e){ z@Th|h=A!q!oBa;l0=un2T$^jR-HB0;jqP-N17Gv6ece zF%DbLxJG!&BOcDj|M2BxvzAM*xdBzB5U`O-GU@(*nX2m6YQQ*)QQ>_rdKs+BFs@Cl zhp1u*#$nnyHp|e}8_4(Gz=!_gojm2llgL#lZH}sg=&H3zY7?nl$EvkU{gc>2o#61i z=J8M93-5dv`yO>L-Bq)&dOg?Oa2MWy7{%czBvtpXlt)!>%_svo`(Df+h&Lu(w-r|n zMpGGh2}B3Z;td?Weh)tL*MH0G=GFMMt1)URokgYKhFfl@6v%u|A)yy17@V|-Uch)Fkxzd8zwy3=7;wJCYoyFtNN!wpYZo8q0xpf!W;zM8`yd=Q`ci?=qOg8|7J zWg3kp5es5)1jHCr3_C?x!G#j$cEUaP@P-fm9dG~irx8({T2Rw3 zHZ{@%K8z;6vSNw~kSJ#0Efs5Iu>im%S?g*1N2XctjLSQY+RqPr1`h8{dvdx%`~Knm ze=|ohDOWsc{WiS+Ywiilvg|404DXGH_q4-%QjvxC{|n9gi;;Gol=mLzZ9IIAasJQ4 zMZe9w=RB$XG0%V0zYp6i%mXWio^vxtJ8fRHnZJrLj^B0P->A|`o&UbNk7;B~CYj@o zdvK$W$dzo5QA~)1wARNVdkayHmU3<5yf*Gnlyh2S^SR8wK+*s`O7AJkvj2OJO%ev!B7@A4LHVp<_R2saxgn|51VOZ7i3|Wq z4R%fanR;J4XoMbnJ}%Jw+@KuRwB9w%zfDTMuVhvIa;i3#8$Ty~Zy{-}m55i1r8`gZ z51H2Vd>rdzQePR@PbM$WTADx)3%ugVPvL79T)-9o_%WXSlqaxi%_?Gh23HDsj1)WW zLU(NEQ(yW5k2vo+yz!I&`oKtlW-j?-0hwA_YH{ACwb!_eXIn)4n6d{PFigcGz z0xvrCbT)3;1A>CuB%4Elk0l;Y5JfYPwX0dXWi$Ww=C|;XKYk5IZQ31)C29&n20- zOv!LD8Pytv7e4N>sZYBq`6?l4s~OVYT9#8!c{H6WY{$}LB_d@43)GbS(!bOsX(tS& zI0~DiI9$vSGSKAXkSQFxaV;0W`JJ43^2xAv4X}nH^OSj@*tH!@Pc>4>V&lleJJ~kb=53E~@ zW;qb~$qhHA+AK*09TuBR?@3^8@BXV~ra>U4opR=_&cmzY>$N)JB8 zN+SxZb7(t`Kjt`o_;;V?z30E29Pm!Twh`}8nd(X|7RjX*Va?rq~*Ib>#K!|u^RT$O_+V^_v6p~_(s70c|BxZE zb%QndSdyXSY6&8I>(}nPcAr_u)S;_=^N2SdY3E8j}=O zi-3?LI21=9L#v_+wHb=wVo9)Y^dX0U5jr!5U}FMFGea;2otZ)M8Q60@XFuvOT=d4b zkt-PI5iJ3as{l)-O1NskX+(`8RdV*xM;*hr-gO~o{>np;H5s8(!q0!fu3PWs{5QUl z*Zk8**@d7nQqIsT+?up+UMN3zU#=;pk(Ro*{X-_T)neHg%kjuqO0I3%`&x;-$25lG zOYK7o<$f1y4!_tO!eXv@p?e=ijBxi>Ctj+=(Wq+5an+Se=@bK|NDYLn`S)q>Z>fo> zaX%-Sz&15Z?~SDUu!dcXF)b_`>;b7Nb9-!pM&gV*6{F2ISRnhpz;(@QV_hByvQU+7 z^SI*}Dmo-XH0fNU-ipoxbm~fcT>x+yH7=$F-I~CIA(@4`0hX}HP6!oDSGS}sLjRG2Dfk4r;TEp8jPSy93mzy_9IMq8k2FPM@aSW zwH#I)Y@Y!md4>U!rgWArYSJD4{3r&<;P_hlq(AK(FbIWF8D@!2JNJ%SD>U1y5AZH-?wHn${@zMz&I7Qc zkWz4IQ;UE^c+tOe?VZ~ai=j#=XV&0-RUxCHacE05rz2Oq+( z9&-$5mu~HF@prz%>pp%Vmt1*OlBX6kl}`1&{R*Y8STPxe zhEyHd)1L60eCT03;gmCo8VTJl+3GdKU2_;CJ#)F4nHKKD5k+NGsX&UrG^1!I#}fC!WUN&rW; zYBx~N(@sB=r#<2n{__Xl=ie{;F7Nu}C-4TM20YL*hKQk5j~XS5@Y2UUk!PKDHb)$E z5GFU2x{Iu%+_Zfsfe6lEqmC_7uE%<5G!?6QkirwJL$%~-4}Unj@799SBSi_jx?n34 z+is^?(pYSAJ`+@h6 z@U}Pc)oXqV!81cfr%EEb%3IG^n;4&>Sm)4?ik6T-7NHc#BYgext2z96&*bB;c|A`$ z>l9eC3pcY0U9}rs=dd=%xhzT3%(lqdGd%A%e~YJ__INJ3cz!IRG6u;Y$GXIeeGpSuX_aHHiOFQ!tDv|Cx5rw}fA+K3dB+{R>6z#8{?C1uYqsAB-NfRJ zApy5uQa4|v@cgIz2EXx$hjQFQk0)Eb7S_zrb_XtkXdSQ95slBB~O|i$4EsR(gcjiP+}}~tfpksVB&o# z!FLpOY55??Xw#wuGBv=l5p6R{mT6v}W3qA4K>wbQkR5lQqXPACUmjc0KQs$B<&k=J z=sI7CK?dLs?E@VQo0?1W$UPur*k)|l6C@4+8w1xif+E=mP6j7Qk!J3pL5TlKDrkCvNK`siS0hLM{wE|z7U`1@4 zTj_%^eZ%<1XKQbkr~`f<^TCLQ7lFCPvp~oD}A02WKuYB%vx#{|!@x5!WXZzevzV|;9KPxk0ucTmppHPkdy;5o_0S;VWOw>bAplJJ8Mvzqk{`qLK;+ zP{9UCdKcwfl?+gVMAq!CJpQDI^2C#mXX~AJbH~nmxcu5{C^ZtiC({<|R?l+efe&Ke zO&gPxRJ%>g9KjguJ<1I~y9qDgd}V8EGJNP@45$i5q?#vUPZL{2(5Oj*#TFDs`Pv14 z!G4=I;L8Gb-2(zK2uNDnSxHhEvGm|Q(U-VDdcL!klOJ*~9{_Ls0!L_&E%+GGS zji2w@g*Qp#dX3FF_CW`6#DNFkDR8S>cuext?zA9u`Ma-Ngv&B~RLbZVlz(!eogg@4 z&{$$bF(LBWXFd|k2;HIs= zAdk>>g7H;BTnJcelfO|V-Rzu0RVia&MxkpAF@V~PXT0Hcyy)9!@X}{JlYp$sMB z(t6&F<%Z6uLX1Fxa~znp8OluayW=weRdx?(hBBmiw5Nc9mVb z^)4)AlVH;#|~@#{GE4HqPa zV@!p0#@H&kFJzcBPezY7W|{L=plvN3OalK@(HR5Xg5N&<@f@+=KGnys^&}kVlNoe0!=`!m;_e6^~Jx7 zm_X?4Ah%f>16f8je_XyIJ9 zu^_{!3i(B&Y*Pk?#V|ldC8&lw_)nIK54k&%%MkXq=r z{=7D-=T~CswH(v+;XtqyFsUaKqx8(HN17z*!ohZ2@Edn6+DpvK*dRDvnz@b(* zleCKa2vd`(q1C3f2hfT3B(0*-^InM!t8P)(kITCY@^`fPIq3);QpP8~`$@cw&6~8}f*f zI5ZE{Tr=AM=u#P8@4WNcT<5h}6a45g7|rDVpi5wgthChIq+szJpW)WcuC;Cx>2 zs58h`&!#Hv?K?4T4_yypF(|X`oLHIHI$vOn!*>EsG79f;ZU%A6K8GH}UiI16Q0tBxK%>XTNGuiOJ$}~?G6R^%?2K^u{(E!OK@WnMSi)&i4G=;~(u4>_ zz{!rJ*Ix=nx4>c0GNgIYX6ZYVo{xzTl8N(vo7eKYXFQp+PCAhz_t_UZ1v0lC-`S3x znL#V5He!Iz9JbSiatEJy<)89~Pke&+e&Mr8enXTJMZ_!_{#fijr7ps`&w&*jL1I-- z9QoD54(5WVJ(ov5^k|T6#GPqv66bayHcQtTN+=3UQQ+q0_{}rUWYd~;%&wk+&`rnn zP>6*GhRwhd))`e%6gk~wsD{m;;{&gJ;*)sAIp-3L=Z>G>%?-ESz)lIY$dH>OM?L6Z z%#Jz8Gop4d#T;4D#cRnC2kgxy?|cv6yXGoB_dnm^>sS7a@BQ%mh!`?s5o;)l0&DG{ zN8b`(RubF5TgW|JaNcwHwTGR=5nJ|#tV_IS8==?5j<=VWEXh5}509Xn~y72LXQTWT8&xa5i$Lz12{*7Vld($pPy1_cW5`R%jM z;(}*ApY<~aDGS(kH>OC{-_kNzlR%?xS>jNv%dnkJRe3Mai7DwF0#O5NH}1~N`ZXNB z|AP{Ph;H%>%W{JEL@h94k+}ksStuicjJrE!<%yAsrckh|O-{xA1Ati2*yZsjoWvWR z|2#Ht+#`W!J3D9yXs2Cyk0sBB*h~CYa%4eKmmzaLu_d}8`9E0Yz(e=tfI|=LdAVtb z5Pf=9Qh|!{`MRCAwV0E%#%OEASD@asAjm@hHf}F=Z?Zt{{kgcAJDUywsdGeiLBV2tPR8xw zM}ZWh{P>A_9I_?VPLS*T5yG5{xmAS2Bu8`s-p zgv`SgwO{Q!iUBfB6E8L~IdBj6vJ6Sn=VF|h(Ih0gO4W^|!3m?Uf0TjGC=g^)B{Z_7wrFAbS-ehiQYl0*7{{~FKVTRZV~?Mx8J9)sqg30~PK%4{UARtkHyO00}{o4|>g2YfVtjsuh%e;B#OS%_h|R8NtWns*uy2#0LkgJ(YcWS(&H zBgtmlTzl76xFb@UfM9WXhE>C12OX9YAg-eNW{$3PwAA3Dhp4n9Ro+Xcn7IO*CN`pp zNsn6uix7Pm>l~OFV#^_&IZWQdhb}HeRKRspoQsrParKp4e${nca{cwZ`!k=RAXQa* zl6ke*YA!Mnjik!Ms=Dv~d^rpyP)1KK!v1?~;JAYiWqoUgR!6zu{TC+FPF1=VT3#rv zK}DD;6fXgrIXYz*YaO-%GdzM?hlyP>Nzybu^J^j|M)uirZ#Hh;Kr4{s$^;~{Ns`N2 z=H}-3{`J>$=RJ2-rpkh9z=%s@H-ftU+N&-MXj#YRO`F+k(`Js}us@N4cV6_bxNeEh zGIEPMMz7%Zhm_E@!wBM&?v>E2t54}vin!7DZ^ z=mHmCekp5WMjj1i#gIV;Y)41-e?!4jPdI@`KlC_un^}bo$~Uh3G2g%TDoiP8+(kY! zOSdSJxp`EMJp53kEJ+2?yKw4w!P%#C?xRoQC%4?hRX5$t)i>P8=fC|eI>s((TrMg} z(F1Xl8O(hOgct}!&N<oJsfDL5~*T}H>0gjirOs5)jSdDX{1!fQYN5zag93|?^7=^X#Chfub* zL2C_}Re~DC<)~zY2>I+f*tHF5x7cUz{n=;Z7RtFfp81%wKm#8*|FEw}vqF8=l6OA_lYMna*qT8^M#vkYI((b61W z6=-OPw8V1YhP^my{{z^vek0rH@VXDaAK!uuMJq|CPAer*^C+08SZgUIwU-sJ3f_Cv zBy|N51L`W%Yy%-;5cb<^6I(WH!1#c(LZM|^`@6I*>h3K0@wHcT%eL*k7-M3ZOQHeM zm8;ZV%IlB~8#w>;vpMagnnC5suFxq0z3He#sF9MK1&O)Q23H|)W6 zKf9IaJrF2WXd8!(X%6hh5_N_U0-3QC&XIKkt;|qJNCwp1lGtwXZ$J1(kNw#5JQrI@ z--Y{x8<=Upqxfig`qWq4bSJ<2f%o%!AN)WXb1DS1CqtJQlmQ5cTGS{rYM2WpxTFLb zYz{`5EdyKj-Ul%jiD}#xMM3T|Vz=zeWlp*0n^&Nqku1+C>5!{%#QsO}v9Eud^WXmg zz+kGPq@Yy(M-Jy4Wd#Bg$~5=jaAF8rRFa@zVrBfThD6~%YgE?-${n=yf z>eR_iMDN~?nQfzz*w8^N;w&b5@Bze-`I!2KFUdP4N=#CBCYj6&7Uv`tP-uy9VEk$> zz3FOxaN`a9+tSO+aK?0A!&Y^tgQVy}<~XHuo`2KarvJ^|(Fqq(Z>D0C?C! zV$>dbB^V&%^6U%!90Y3`iN_Jga^vVXqaN^5%xISbf-IM6G_LAusghTd9?qnDAD5UK zmt-54@QN!~b-a*i?YMiY4d9wT`+sN19D8x-@j?_-aF%{r5WqVE`JU8^A<~=b0bM+JYO(10GyrhL%PXVi@gbewoL~Y7A>ColOpX8|W zqRBK;t4f_%eRgn@+pFxOO0p4<7>OoegC*F|lfxQjy7W9kq`vRQbvI1Po3dB6&u>Ld5X8D@_a}IwKE>hJ@qVd3E+hNHf-R44V#h~t-?bOJCf)FULu*X7#}%s zzkO*LS5@a*Iy-i7)g4z8GdObN-duLoRqWcajcaeajly^N)=#eCvYW2s+m~O7m%Li5 z1SA#H5<lz*y(m5p_D`|sXpj>s=9b9$S9jSsgkwZ``7!@MW5<@p6 zLyb%wrKE~RV=WpYF4>n7Dotz`QliciG2$?yc<*t}BzcdRVJp81uL0}8iK8eyY7NAQ zbAaY4Cm9r_Bx~jPu20D>ji@m==MaUWEV=o%TiCjFE8ns|1{*PDBpS%0P(+0+d2ncm zgP=#1fRmc7X(Cc5YGZ^bDdAD1O50TbqToxcn3U)Xz5*izZzH+4s4XZ%ggl2J%!HCI zv1h7091H64U}*Di-}yHG{Jl$Xr9qt|P>_2=X)>?@^;H#ljEJioa};9qWMT+G37Ji- z9Bc3v=o+k@iTFM+CHaeV%p-{I5W{7wQc)uiDlI=B|Cz~57uI za>{N&5lgUwtAN`m5%C`DGJLfr!z6zQSC&LE+;HQK*vwVq-t{~{3@Nd>nDza<>A_g6 zW)LIaxa@xr3)ti>IrmpjwwG1gbJ`#)FuX5AmIEAHj^aFRV|+H>F(l|J8!2O3$D2O zdK|)KKf9g)W8<+nNSKVlK*FaY96I%}Lrt8c!**F)X$;Yc6m_~4<1V2WIrb_=u zB{M?MWXc_*Vyz+i>bu6EQE=kW*iE8mHi2$N17cm0BWmme@2dpn@ax*G_wcH}{}{z5 zK86$tU=U4hE^3G3&-|Aq`C^DhY=9sB)!*>om%IdPa$@XYOzgWjRa?^xL#S3qDlXN~ z#A=SHB)f?+us#nYEFh{TNn#A~KJZY9rYabeh^WC<^+JKP9zY?_^ECcK0u#LNrm-tR z6rtrkr7>8Wp*|v+!`#$kLUh+?orqvT!*VhC0+3XueC=OI#q)s( z&|{ih<+#1}Bwvtez=BC&$Vy9KHFJUE7$M`@dZ_@~LIBR_0!T*gm&X-}F2w_6v1{vb zId>z2piRmX4#Vn|+~M$pT}j|!IZ{pcSEa(ev-!}eJH|BkzETociwT^I1wa;S`@0xP zsHL_+lk&dQzPu7%Bukw%rkQj`8K28!_+w~sCw&W#CW6|~=hxdMYiaPu~}@cPUK2g}~NH#$?OU8yzo!wY)iJA$saU z0LVf>$D-nxnF8FEVHU{Z)*JH}dN6S@xoC#bech35mzkKnslAa@Bj)Zvh?C^18lCjkNg{#|0qgQq$!T)b6}Vt1)qtBxM#Bo3 zu|!d$g4(qE*>@2kd8nK2X)nXwJmZIfo6_G4=gtEZc z8N3u=T1X5Nz6LW+$bF<~9ma=?p#jaaWKerW%*^;$X93EJq1!BU7v zY>~hZfhvdeODTcXT-!u4BFVQ1QRaMsl@uF8QW&D8mTuRRyBUh$F(KkD$!kVE8@m`?_#VVrob19%N;%>FjXbuy(iCed<;EynudsVu990)By$i-TnXM-Iz%#KDh~*Y z;3zwu+`>(_-ojfy`5E5$na`uTiz7Gh%_&D7&9Mg^#7ry48p8p5?Za;E)kM>+ik{MV zzWvU-*n0O}cm%PA?K`(~<+azbQI&ISH5< z*hNO>=Liz9(P8rp7a@2}Aj|-e+0U0mjhM_4qep{9ZAPmUVixgQ(&`i#lT(-y4|ILR zT89ZKzUD3?l%7xnAI9U9sz4xFf=6-K02vVpN>GqI6%$yJl$m$QZ_o$G2$V($>amhx zLz$}5@5dZVFkRHx$}b4efLenK4k#=Ci{_?ua6Mwl2|gxP01%l269}=u5tB!Rf~ma| zNj^u|Drt>R1OTB|bdgx^fJPh^Z>l|7qb9?ONd<2Ac65%lVt}cb5HYb&G_j{0mLhn_ z44DU`lH}ivK}sc>lEMj50wx%Yv&2v$Rw=bWV=BapR+5*Erhctad%l><$vGJbScTvm zrT5I(7Fw2sOepE#$iWJw?!gAr)#!V(hwL z@y0_ggb?uo)Hu8-#zhD*tt-5TSdf`?&4skk*s3PV#jOFBYJk4jwZ$~&owRqlH|OSl zUS?r%WE$U(aUP@hc062)iqW)1(2FTBU25KP6d17_tA@p@E-iHYNyhCW^ChzZT& zsy!{zS~5e%m=6zEP>%YyQPrWt#~n_nG!08fQs5{2`$7^x0M@#(=O5LW!yPP{qBYJx zoM5Sq?6fkRtVqRL$vbFeAg3`V35cqqyphEm_?ysouWxF^jzkZq>0DLPT84fO-22cm zjYuUWq`028W=cLAYcZCzV2%;vlIVlfMl;nl*SYbD;7Z*~Neen+Ej87zP&UR@I@eYI zs;-5Ker=?YnAIw|T^ZG-{?}-V7?V+;R(Uoe8l+DH6(~gq(#By(@~EzotP}lN91Oyy zGQqB;mSX7pcqHaPVi6G2V#dZwVj`s9Mf)a+s!9+Y8|)|PgwzN zPl@$ZF=NE0O_{0L6#Z`6^EpXJ8p(Q5n&#;Z=1d&)q@cl6NgC>DQD;VtQ%Tp2p>he3 z-glCmfZ}5E|AC4;zRD%+F5>NA*x zRO#IJodJEI;!ycqp}99;ieV&nH%B~F`iZLvq~ zmnx>m2J@qyYlf5h;})0W7HQ+>;5x|@`fV6StO2470Btq?STA0B6^v%El4D-ntEbW` zfsHlkK%p{P)+)YKv6(9ID%K2Lw^nmR9qVfl&Gx)X7GAlT6nGV+s#Y_B-k9&P!IXuQ zr~&5sowa}VG9~D#q^lcskj-Kj%0^)BVbax}%r_=FWkh9AOovMI$XrUbhX_PsFzEw2 zBz35M=sIFghEX9^wf6pfg$iy)qWe?jwg-|TpcNP({b!?6`G`j5h?Nvfm2{E1O1JK> zp>ba9{UyP8> zDQbGh?*f*-Z$n|Lgh*BVV6gKVRVx$oG*%L;5?jrcN@A&0ecAQ~X}VHDh(^hRC)x}m zi5Y@NahMnu+0fO__aLXGUX^i^8P7j`b{1~_CjGDj>4G2OY$4g)O zH0T4!0KGS#HR^e!>c4e3YmDnyR}8AJ#$10ztW^lF)f>xdpW$P-UKS@`22ARMK2;5O zMf)R2(!QuUq@)VKy*^?VUkEjCe;ZSrQ4MIQN3epe{Eeh$w^Y|Vh>fMOVNy(pAziNz zy#UvXD={WXruv%28hW#l5wu#TghVXC^~R2^E+;0bFu-R9P;4xLj4N-ugR8cF4ZilZ z5&h6CvW@b@=C-NQJ0~Ks?`7yI!9uHwDIyW1l|UAoD!DyMN*na$Y)w@+s=YnB?fFGy z0>m;E7DUK!M39~7c`;uI|0Sce=lxNaCdu`UUJCB_Q;=&fmDDv+2kk=N^y0uMxt3PBX7Sq0|$ zDmK-p(ZQ2e^LoiZiep~?@`T=fhu)wVSWT@&6ZCyFoA=o$j!TQUFgSlB1e3fn2&vd5 zQ2!nY25ddPl&UB(G-QCP`;3h_UQESqHA{{;LlG#gk3z(Wp~Qnr`&xso);RQH%)rr1 zT95dkz3Z{{^;K(!6lbNkc#gf0Bh`JGUIC%6@^MnLM`~5=STV+`{!)okr`(Vcd<>Ou zj3h-t)9;VTlinb{%Agnq7MFq{Mli@6$q4V~!nXwZK`*eXAqm7*A=sax2ApF1Vy<4v}U3MPyj5%xV_iNLR?a;A;tsvPX ziek5$gPI(SP=pT>5MeGtq~rp)0EvSDiF?Ga;D#TO3xp6?xrh|Nk>k)fr1230k!_O5 zk!2FQ-*>N?gNu2nF=x%gm{qmb-fz3#Py5?@uf0~ST2=Ef#`BEvJS&3?fh=v_cJSjO zdO7;A$&+CoFXD9FliEf}mVm3|M@hf#eoog^;5br=XSv;qTscZ#2R!Wln#E7@ z{kHq#@ud}|KPaURr|dJ(K0hB7ZMO)jktBCo$3n1X5~S@5$<(jPD#ipT6Y>S5A$z z%x4(0D-C;(yvK+TX-S>6p3`F3TAdI_tF5#5R$M32Tq6PQ$;F0g54tc_7M;NaU^9Z;I0?Pcm{~A30$ZOwgS$j^~iLJ8?f)bd2N#0YeGbcEOw@b6RWgra2Erz1^}! z{?*>Q_ZdbNH0uR>NDolELY7g}@u86utljUc?&TFAw%=}@spsM@;Jsan zx41vE)pfJal?mb%vF4TMJ9GX=*4;B}!kNA5>h)_BuV)E+w&%XTdH>$mzbI!z0XXDA zto$sk^|P-V&4VNF`{?f7qjSC574D+RLlH!_F5j17MZ$!$=~riYth4E z796jXJ|Z!DX6?ADv+_2lR5Wva9U*j#7V|re2Ku}Rkh79QHHoDWOFGiQ>z(6K zQbTLHI|{z4Y-gp5M6Iu8&@^-3cjt(~sRWo*zAB{Cfg9cvY{ZDeUb1VIAV0?r61OuA zE_*Fn3vxMO>x*_<>%Xl0K0b$p$@oS+1PQBXSd2n9D>{io7<$LhSW010A-A=)p|S9) zNL?V|zgQJ3tFqk57>v z#rjoxe~k8zQ3B8-c+UiaSMK+6obJix`4;6`m+W3nbS@cs_u%5^aiY`g%qaGIR1mLy zyxOdojqh{kbH(R{b_(@puRlLW}o&t77q%_3&j z9jjMpuK8Pu(`w^_mM`bX>(WDlW-A!yydatb_F8s-T$#6z3dd`?d>0q5{VbmI*>!;Q zbk}EI-wN_-zqc+jPneSTbkeHeV+W9{J!hmx-@@-SM(!y93;<&(WtN_6#NZ`VC0=y* zhw1(%7k02*uOR7T7_(6u(sN``udm^!~B33I&g z8Cc{Rxh89%JH%_a@K2ZAiR?evUpLMOvaRcbe8+^4hNvynETp`cI7kr$sVHpnX(kXG zmVF0^H3s+9lPq^KFtlQgGIQjD*G4|Rwhk3jkRGASBlvtoQ*|;VG*u&cBW0$9HUl>E zbYi!W6)ut+oSo11wUHi97<6-m^k_`9T|(JQ!n_1sXY=e3ccTDpW^Jg+EVj^W zUdwf9CTQJvr_3k)E&q}pIn**WuMxOX_De%_Xo8cg{7bIvDk;BLiJuw~)CCo|8o0HB z*|NGDidg!Y9Sy?-P(ly8ac~@T_$y-PHiZ(Z6ef${B#{OvlCNMuHqolBd_Q z3IWnPOi7+T>i$0)XnNkgmyuT`(FRrjepRLPTXZ04_hk){b2W%|wDY!rXimJp?S8J& z>@Wk(c!C`qVQt2uXSDUT#hNqs|8p+Vc#mN36|XrGA3S1BIYMq|_M-Q)zn#4oBkAC? z@un8=?-d@t#U4H?(mqRol%IP~1n4k;Ue0y4*wO^>+c&2_Pm~L zb5B|`36uKX*u&IoIf6FcXzgX$xmHfh1<4rVP{d8S+~Q~10djPa?@5%Xh!55e@{xh} z2%zbGuRYdlDeD1|n!(muG|Gx=Q}IXX$v8DKmM*cu=o#O*{pSz_NQ8+=dOA?h0G5+n z-0Rp;&;nq&vFWrH;iCz{DM_(P>agkbQ4&aE-a0KPV?gBM8(t%HHS@oVmnG>au96_} zrJ3)CF$MWCB0&lrFJ@RKI55ZpOtTQtE<^#^>x@Xi4$4 zJaBV$5b@g5CoJM*@=HFRvVuVeNl@>J1?v(wsGW0f{Av|2W^n1A0>-F2Bwb4r zp<^`cGqas|gfFI%_Qx`Et^YCgtdPqeRTFi6mOLpz6DwWQ z=TwfZQAIaPR|CcMDqFdnAV{e26IhcabssF#wxYEF-`e6TAFF|B5>$Icz{-*2AbEAd z(n$iY&lc6RWM^Y05=;q@3g&>Ex*N9p7>SmW?az{u(MKc#MKk*FIhZy>D=*s?PtGJ# zX5nCp1z`%^=?p)Re6H)%ekv6r{pBh<*Xx0-ZWVUjr=c}TMJ@Ob|^?0 zFRtHko&b>L$Ea1c*FfLie9#iG>dJ}Ad)MX{i4A@hXrmKy06n?EQPqQ{>Phoek{`YO zsuzro&iQO$Jsa$d_RA~?LS3G6lf3d1=rOMQM^aFWD zqCfMz(fTrsFH7md@_Ddf?6ls+J>{CtNaekUdwmov>Uk&CUsUe^+3k1x822`b?qR*>l|=_ge3--S~yR0(EBYr+t1D zOH2`@Du{vhxVK^G1L(>h?BU)%$0T>f1&0=>72*yzI52?Lp1R(b9nOou?4op(=|@(1l*}p zZP5KOCOwZyV2#$Qqx;p2;dzUAA62z>wNMp7&odL_=Dnzp+U0#Z8hFiuJd4^#od zX{vDFQ=GN`t^>#({#g>JiHwoC+T{2w=y23zvnHW;MCL?uUYg`f0{|QWa%#`L%6N4q zd7FKYaffr=0|YI}3>NW4LoVw|^V(@6=FDvTovcmVmU)nCE@x|(z60bafPCfp^GGmS z<0W|&__hD}u@YcC;79||4%fsHAv%{=#VWmG!m(!v-o*Q3Jif#lSbA&Hd!b)7 zu@f@y%u>GPD(SpO5g(U(&0M_JJ=%DACO#hFZKJ=pB>JxE0C~&Yp*C(Ze@4_Fuiay2 zuFj!WQDnWqb31nFktrW<<<$`n>J>7L^6pm0cMErE#yB+B%}PXYMqo+CfE~c(67ED? z{~RK8gD$R< zAT>aVFg9?a{fF#=h4a8ydA;)c=p<1x02g};h(`0VWmbG-6S-8fC-bQY|Ia!&cwaf8 z!q7RBLQ5ci+@=KiA-@9!19Eh;jsIgAbV@0!f7|SHcn@IR@ z?dt4ujLdH(vLGTE$;MFD5fa8bi+jh(VMNTU$E}}Q!0)Qo)fUm%BSS_K1tUTM#va~N z&IY2gvRl)hJK86D0phIL`Ln>8tM~s_Fx=}Vx?)Xkb%2camML)Z5edvm`_a=91n-m# zI-2;+9&_X=Hj++jNf>Iuj3Wk|SF907Dgn2k^%a#g+`89%4&=JxoR5yVnZl9Y{XHsUcg1IYWCzI1I`v3`JX^a)$5(2%%9!`l^UjCLqNPG(c!Imu(dB{lvBOhUVLI zq?IAb&J+n=2w4R#QKd>8MdE+Ec`qx*cq8Z{U$PM!+c*`hPEihmG=3w=v;iy9{3}0Q z4lKz=a29JzCrC(hR?&T?4Ge3q$u?$(>fRIAmD>7U&OI$CUR#ID{cRNZwj{xNfm~~U z0)Ta0cY8+5{MIkKgls_)mZ0Ujr`&D*4~kKo^Omw$`}x7@TzCGw>T9Sg*UOR^p!)pYmK8Gvpziz`p|8f) zk{a3iF^n(GmZQib!Qz9qJl}fjUr&2o+dcBp-0)-n+#kn(#tgOwcejGA!5Z@AYMf9QMhAODn(neGO#@0iOWBK*Mjem{tQ5jO|i4S^g5(_sf=9KiMz znK6FMocs*)MYviSwrdEI{^z5Cl`q%k$OIWu%Po32Zu#?_>#KudX7af=Rv;2z3^cZEtcR9-;*Y&UBR59XjtE;Pb1aoxaRTX#Cu$$f(ji0wS zK4Ki)!+2WwOnkkqy!H=l2guCkJn{rNwpinI2S6=2HPT3Wf&l4F(%yB+JvZoK_n-&D zYW_w=UvKtYf{Jh(ZP@RLao=4FA$=5a66WICN|1#s5=yd@fPKQ*3?+mtQ|cT_r$IaE zD;e=~lTeU^9ruBv*!>aoup%iy96);murnZ&HBP1%ClaLOECKiE<5)6j5y zy}rI~MFikfnDKZ1*PnmNI@h01bt$wXvBZq&BA&Q<_VtMA6hJ(l?`;CBWhgp&-z()s zXtCa}Y;`bjSmT;_v-p+&``7XDPy8@`{71eDScBK~4r}d}%rg=Y`6z&KxG&rY{OJy| z2EX==Z{SaV^+$cu{Kd^Dr|W||&<3~P1%TsryTRSplvKOdJCa|B2u1{}Nxx6Z4xg3WfQ&8^q^2c6g)=1^$Of9e)Vtv zJpPrh{wVmq0xt`2AHDwgUVa9ziT{4}cYg=J^7nreuMFHQVRg>unAU<hxOEB9+&zYC6eTmacCDol@YSzL&& zG*|0AuDl;ic`<73*pXmpNkEe|AlLB-om3&x&WEc!6-Nb>B>}{sIswwEB!BO~)1xM* z3}E^a1Kc#3ZB?qC-BfFgvSdsn`C*Ll34|FN4^@F8-nT&QCi7rnIigpb`+sorO{DJ# zDaT0b_mT0rMgrz7Hku*mnK~`X_5sm}0G6owrvF!%MPgUTwRI6he4a%o2#Iq@Dg{#i zKAwjB-VMLX(8rsf?>`zr5)jF&!y|IuC!`FbX#ZpOu>-N<4d1t)5w4S?I9~{mn=a)a zBwkY%ohmul&)raztJlR}11DLM=5rqphK;^@$?SeSe_k!`y`)xa_?2G|RQHnBp3?fR z2`om$$E<&p_U|J}hn`ept@|U&@6}`*W!G!1dVUla^*nK^*A2c>I(EFdJ7f8<;Ag-2 zck#dc?Qh`Y?L+nRXydT)o-?Wd9482iwQ%^#2zJiRITCw5l}NR+sG%NC7+kY z%Gl)Z3>g@9SebEmz%TsrFXP|+rT+uB+YO&SeFBKEEDJt<{0N)YCp&k)cISCK=ip$B z>AS0e8w_6IaI*_OzJBs#&7FZx~Tp8sKa~&aDP}|;VfWoCUkQ%tX=TB-eHX05xhse!ma?j>+|Z`_~{A| z_zdoMRMt;(y;Y{>6Yr&w1{xL0T}^5q&4*iSR+%@YJgD#)Zh1DAkH^m04FF%qF;1le zq$EQeuf^Zv>$eVsS~o(=gEM_L$6cwf=Djp^40uNn(2{@7)DaUD5{v_kziw72_9Rsw zabM09ieH5-^%_x$ss^AAe6_gsVcly(f9^jyS(0iC6wqJsp-;J%Y0P z%7nPVK1*l0wIPp8%g-2UYYic_>;7(?IC(Ckjss0+g+`N9LwacZi?l|2tqO|~gf%NS z)CzXH`$I+QvQ?RY@4dd_*x(}r^u-O7Dv&n`jJ&gw$7o6S zTn7ZlkUt?W7rFRgf4LbjuV4zAv1U|Zem}XdxxrWtl~5q?dWU0&m$1*R>xz}m1?97e zZx66wTxS;E15VEnAUgtX__@$cIy9A$S0+ZYK!o=G_PTGnalA3Wx+U|5yu8fv#S8w) zw?5(aa>MKE$5f}{)>qsXlgMx9?#gR0xSt1rBm!_VzRL2`y24olV#a;FtPt!%0DF?zTEe=%f{5_)vf$Mie1OI4$4{W;gYU>8FA3|M%Lt}RJAafp@CfWW ze?HG4KzegTOFWL|T(3a$=o--T#_YvRXEBIT$As1Y zN%T1|hz%AjSi|)_Lwxifdz7@^F>>OH0&7i&)Fa}&Gr!LgFTDb^v!HP;k9h_OQmz}) z;}QjCgrZO_m+dl}XGKK{8hslgGhcujQ%bt#M=%X#t9*_MPkiDG87rI22Ib#C96ad^;GXuK~FGoH=8tl0E4F zezHQo3-UJz54Sl}Y{w#OpE>NIjwR`X+$W)zC}0foK7;sZ0-!q(m(pWWt|}uO3K=EN z;*7jo0tE?@y{D5Z`VBxdJl_);oV_8Jq(pCOip~$T2#QkP3KhvOMW9=Ic23F_giUst zJ<$|KUPk1xG@{?}Aly99=SaUoS62acWS#C29KA$TTP@zIe9@30 z7>tKjKq2o}>%Pteca0NkebsTlZV*>E|;(c9Vt@YKAj?;LlXJj9>9U!yUb7s7c0J|2DbrjfZp68&`qxZg=&vZ17(Gn8c!kp1PCJZFD2FAd> zYeq!)XgOhL%)ssTg7x)|`|5pknguQgii-}dLF~I`W2c8(S6E}cx18f)0me)`d1Nge zb%?-u-w(SOm=}u`E64#iyWsx%3AC6~5_#`UlKWlw)}7o_H1U}}-Z7nH1f_}&NqnYb z<&1aZqj0JoIh(Clg(t6^Yx(b7_0inEa~CU19UdL>BN8C_V>!Xm@&Fli=gcTI5cy8r zR&i-PcMmz53I52=Z9g-^WFC1IzzQ~!YY7rl$D zr^Tz)>h*{Ugc?8-O=?EuN3SBc1Zv;I0LSOh0U`s{&GXs;un=5_0J{K_0rfq3v7%dp17X2# z!|h8m4ax}tNmg)LrbOkl=(;Guw7oVo_2H2a;d9W|28rGh?ubP(u}W12sQ zd=1q}FVupDS|>w~{Lrj{yxvr)U))}BXNR*A5|1WG7BX-lrtp#zCQ0JFuJ@tGN0J&l2;hxC zoDWQ3>w%iP^PsUK_O0*M?o6a-yTXPNQv+b1LEU*j15h4`*Jl7&?OM_MyuC_t4H&+E z&tn?kRKz`x0F^Wyf5rt8&jP#}5E)n)toIcwIozy;a}KYsudrlb7EdtP+ft2lX7{_Z zp!#Ag?(2$|+Y6ipEE7K7U-4oV&|(!GD(3(?QkcNYf-UD9C=g1{IedVHF@Up#kFOsS z*+igF-K{gm*5n08@5zxakcoFw19?5*O;fBf>Xg#13o|j6CMN9xf~7~<2#A`I!r&kydzF2Nx$JOX$hJYPuv=0e}8-bm}eO<9w1Gf+? zfKPXa+oF-+91$3!_;uugV*7KJ9lq=K0iWC}oMVu&;PnnRE0)`m3N&Z-pBX^@yoA-9 zwAyIDJQ{~RD*l~`1&+iDNB4#i8GS^S@h!-Yp>%7)88^H_uA#CEB+6UmIiTCEyDb8w zmQSwhnstH1-*+SkT=sZb=-u;A?t=d%mfVxWCOy`Yu9MsEcUeLE%EjL(Tk{C@=7yR& z!>Hh?@AWz!$5nD;Bu7n36ZE4S_A^P4D?u*}&=R4>QR{vSq-lXs<;2krgxVmF0ewk+ zq(GnR-5*9Un9Ph78w)BY$?EDRJ`x~1Q+ZyJ9~yF~3hwbFF@U@RxV%@rAfqHe`UyV0 z<;2;>u+U=P_c8=9(QF+YO$saMYHv0kB!KBdY4iFcaYTfS_7$ycS*_Dhe|@*} zD1*uom^<1xTZIug6HWZE#W zx)shCSR$DjS12+O9D)o8TXYzWMCNhh*uakcrg}a4BUN%17lfk8F?}S zy3WKIT9E!31V{_C)PiptAW7+ zTFJ|wg!T57*^>iR!bkr;F7r2>?*LoxjK$tS3t(5^P7e2#v3&6*+&{gF_^Gvhoa>+> zG6$}$s8GfopPbJLnJnDu@M1hxbH^RT=3(+nSFBB~%Ttr=9pPkW%#gMB>+I*B&QA?> zCkG8A^hcc^v%YZid(HDDu&RZ9aXoA7Q7x4n47@?g4v-QDlpP$h`=k8MSQFtgB0zG9 zDbpkjY7?v^ad<#}l(Bbwzia?T6fLQ(Z^WqM1>hB6hN%@(Mu}$Lx|PB!)B4!6z;Nyw zkEoW%X4!$a!!5J~$k~l`R4Mn!N%fY;uNrsHnw|}$S9<4B>-rcGAhIelnYA(FE=Y~d z{D-@PkuL!JukZ}njl~J+nL4XD4aS|wQ&lsPGxPHd#v{r* z6T-qv;B;zn$WZ1-(t|e8Btx?IW(l&?Um?3O(C7l;l3>Ul=j`X$SrldK6Trh8B@@XF z@kq79qYjA%nJ^abTj4@xy(_LJKF)xLyT|zK8jg4I@6r3!)j@t4VAQ$}XFj{E=ou0J znnDb%1eSS#S!8QJtN}oui0~x>ECuPC#bW*V31kUO7G~u%PLGY(Uc8_=UhDONRA2-j z5Qe+o@x{vv-2D!FTk!GqBW|QO3Ej2??t&>L5S#gZ6xZm}4MA!VSc1oj2_1#J-ZO~| z4G}V9Lf=Y4dI{&53PDY5s39^Rx4~n4}vI<5&f#Ho>3QRBvCmYL&X^ zfV;iiaKGQNtPBI-?p7?JgN~hlZj^lc^yw2`zW4xs{iK}h$L8N?4Rs6Q_g}w-7i)mU z&#zZr@xd;>o7NpOSHEfdIkZ~Tf@#ueDy%S*6Vv6wKIU=sM}RTM$F!W@?2{GP%Tbqu46bRy{CQ6 zeO+O!fn$a-K~u0AOMruJR>TTG->Y#Gfw&CL=c;|Pwn;WYLha7IDz1h z#y2KPToJ<<9~j)Mf8NddB*5CX1lAT{_-p*St}rfMbMKwO&cRqh#Bh_GNd#~m1J)#c zJPVr|LfJ7K6D-@N|A;4JwyI7h_F8k|KY|HWbCk5~m^Q>dR%mzwcONh@T!cVS7+j=; zG**VQ};C?RI#kYC`sw6a?1Qp=os$)5 zlq!$QF230IPcDp4tj)m87~@Ha2&yL^IZFOf#+0qqOEwqX`s%N?@xc~3e^1xd2aX@u z;LZ*ls*(9M=+QHK@Q_>+^cl^C*<`K(QFNcXT9@`sYb{oGK-kY-j8%6Sv_bdy_jL%; z*XGyawtXR1D>0#3Nj5`5XbL3Cz(4<)(!7>C7ad5#Ti2zRU}|NoMxcZlc>;upuU%c; z_hG7!=`jGf{hhnW*RXP*`>2_UG>g|>u0!F>967M{oiM!KaU;N44)HQ=5)Kw{yn?LX z`(JJrSnsC`8AkJO^v^P2gG`KZjFo^F^19LspF5{nf^IbCWv-Rt3PZSsDws7$i!p$e z?`f^q0HdSiy*1x@^RJZeswMbml^90nQ!8*7fepmFs(W0HSjIX zit}6%dz#WDmbN_u8^K;)21oU%ctN?otl952swrf-ofAa9Y2-@r7`8Fyt1rvsolB|b z{53JYT!9etf!81p?{Eu6X*?tXM};uwDu68+tn6UP;J*0%bG5({uFGhx7|oxVLY^b@ z&fYhix1H2LgFnHl3-6gX`tW(X|D~a7vd@*y+M))8P2)fuI)GCB>gKpVTcUZ)q z@=myXecMe^2>IPcF5B9Fy0KVg{jSL`)#fknI#t4VLwz)0uD1loJS?klJ<(yS-5=2ey{pB~+hg})fn15Ou3SwJ8F`DA_H)gTrNLO>x!0T-Z!=&- zi#VKr@BY{s`JG4^EF;K2?ooiHMj;m)qwvo_N!m~#B&3WJSI#>wnzVInB;rHS2zFPD1@^9yfG3EFhTyHZm7az55KcaG9lmAEptmO;Pk__reZfU#3HREQ64Abnt zSAcm}NVy!5mC}%fno8$0vUW56Ge-f;na+q=&yL+S>Bx2fz(Tb5c$B$sD1vKwGBw9z zEGjWM0K&Ad(C$^(R!Lc*d_Y{Dhc}Wfch9_-v%bG-=buJWXXO2{{f(LuCYtfYJQ@>6 zV*cy!pttC{o{jg~pN*Zy+qAL~^vDY8l!YGsUBmoDOI_wpyxcJW<%u;Ag-E))hemFTJm$)bbS>P#M;65gE>0msSGU`~4^ZRekS+iPXGTj*jS> z9Xl;k;QhOA)!ba5>MW>+@?1G{(GXn|gyeCNXbK7=BI~3mk0n`&K8aEKbbw`-1XZsw z7Xf+RwZVC(NA}#E&{t;C&XrACk{-ZTMH0O|{CC=za6nWI$fLS+9+_`RlFUNp>k(>9 zLpMiF+j6U-&j8*NGH++dkCu-_YaGvz0=>QENYH<@>QZZxr!|G2B{XJyq=wZZ#Xci{ zj$Mds>K-6X0;Cd1IzfP}v8smphS#;upHTohYa&=)9}_zc%fMZp)9yNUG<>Vz*<(%2 z&k!I)l$ms@s?drm`0}xRtWDzHk~)FXB+43H`w_r6>HzEM$+y;k9Z)xsr0apL*4@1p zq^8bi1n}k(gqkrj1KJ!RK{VHQG`45GN3`Q+wlm~P3AZaGgXTvU001BWNkl?2-0KrJ+$-nkpzf_ zJnrq)tqzc@@7XK?d}I&PN&;#n2+v|+kGkihIHxHa+Q9jw3c`%3c5Q7gk5}sw8To9E zFmz^yro1y#ERlq=<6X|UGf-FL0xkcPd_Q$NTv$8KdQBYl>!MFkhWXSWzuMz2e9Q!W z1Vn4w+eQ^`nj}JV+z~+5GVt!n8l2fMXPDsH;}L+`8=VJTOiQo}d986vSPa1!PnPro zT;BoWJWN40`GCaNtn9#Ss*4C=lX$5Gf1@O;MKtw*ur85uC^=>IcsmlH_N1y>fU!o~ zz6Ff7+VVKGGe`L^5&%_g5u%KkkUbuhksk)geJ#q)3F!?|*$}8kgw&XjlI-BU3>EK^ zkv$m##fG${0=(<^V8OKP|0by(7V=jcVZy}uYZA#JA2*w!dOVsSIOIkWfkP7J@=;!m z0y)FX)h?VzfK4+7=(V+>R>9K)|HqZ8$HCYRSP&Hu*~9d6AW!-2go)Cbl0aGL)!b$+Lw5cSdx+eY3bi;3IWbkuyZL< zp#aD;5~va`j^}5$zpxWM*SkPwW2fF&*AN!Hq^!5!_BueC`nVJKvv*$2xcFpTI;u1s z5g<6|;c+$S+tVmM1DD~O&mIdq zCVf@xWVN2d$HaPQvCenwW|iE*T!{C13Nob;h|KU7p=r-##H*4JeQ9A(2_yg zwPWPP)#@0jS4HFLp=rUPZMz>AjCJUH1jr}>mtJjU$Jxk( zXmn25SZZi2*UzhxJPwiwb8_Jyc7QZ0u3GWd)kMe)fOWPru(sX|yEdpkFKR^Xth__- zoV8@fqp!b)m^pL&vz;ARs%2tXu3drmuT<+;g&aM zjM!bVerhB-w^x}S01CiT5nC5=f&uU5_x45E`NaZ{+?c+<-p&wT+P{yguSZ~Xaj^!I zUZ2y>tREv^nyWCJD<$r(nyZgG*E9R;mB-YqZ@tetv(MDxEk|2%hr^cNl+R`5d(Qy3 zkKTiyF=l4=JZ}B1fwH;%nPG z1W3U6{2|vycSzV-S*oc-?<~>WJX2u}$vYpWVGutR=DYBmP^;i?5OOnduOjS*T}q z^0dEeWfG2btjr94?o_a77U~)}mCIf^SnIn!ZYFep1Os$q$P*C)oG~bknT(J0h=U)J zCqan4!LoG*jyPjWTCxzm_OP>+RYZvcM(sf}{0(*`2`%Qfh*jAng4tSeU-P**~vA{;#{n6Vic7UY-$ny>XWe3O!;_-^$@@g&B9`LW(Q}*|z-eDLCkXC01 zQ7}jAbUSFgz$}>tpiGsqI+nnw?H#q)Ak&>~+%M^I#RFsHY>zdjzMq_wxHv+9M3ct( z*XebRTL4Q7fbQ+n(GSFbcSA{_9+(%$Z*P6l#%!&`pgk6J9U#%9Q+I!4Y^7Z|)=LxD z*80{Wd5Dj#bK2Zs2B3MC>@J$|)HqH(D`}zantqFaXS}ekxId2qdycKkG$hwFdC^%= zb`-D7`ka*WpRG5YPo}LQhKPU9s!2tKmPI5$WQFQJ29Oz2BtKe!o0oJ9zlYZ^#_WNl z6q`iBS#gfV{V}M=U{Y>a9(yA};_uWg(wxbmTM{!p5@bYj9L0573*Z^wyJvbiT?sz7 zigdMDR_{4y*R(4DTAFZmBp2O$%T+N!m$ z2i|o*AOqlYVuA}3@g&@o8G(Cp!#M}X4$j4&H*H4eDkMlrQe3y71*^3hgNbo8ysoDqa%Ud6~xEPzL8yz&OIqRKr|j8mWRqyY#n2m3k%h_lGJwz+>rsZPs<3A-_sW7d}! z2D~qroNv}jZIbMZnL+D*|0n@kP4T9-tLy6de0F~J_ShqHYSig5`}ebe@J!diS?Q`- zvO`lHf0aboOm3vTUn7%royXPSTJCVZbN67TtMknGe3o?RqX>}gz3NH?Os3hvt+{@) z#f(iwl@0*{c!{lE=Nz3_b7lV8%KarKqP;#l?+>ncSGm1JR)e8P)Ixb3nYr3wdDR}& zl3(u0O8Wx;&*a~c_TnoqvS$SQ`lVL}8$D*a^%a4soADA@iRBVw@GMSe=lbWq-A_v z5)`e+qm8hnHo+x~}--91Ls#nHiucN8`HJy$9O2KD#_dx!#o5+f=mYC8Nwm zz`U#6W9-1X?7g@S?v)jytlj0t- z12JN^Er&wKLb8vrXHb(A8*`GlN^5C|NeoJPDF-5kHJ&(JMaNe!p^7GVnxMA4HrCqo zH!1s-y_f4(y2`-V7y~$$Rz^bx96hu`tQ4QSjXl$(ER8v)_gwlp9Z6JMF^{$aYxKQ5 zza&54;(p|I!E4VLaF;}ZL@E!NPEXyI(^`TMu7YqbJ9dZg{ghRF!9G}b4s zeG6=#>2l)}5>$Y%oOWfhxrG;?8tGR_P&EWdFXkClvuZ$S4M5!kQ%0Us^%Kn3L_)0W z+v|w?IHi~`#%4Oq`&nI+xRF0Q^}2Dyqhk!Bj^cnGU;@Cc{nytBWNw^)8Oz7mu#>+! z@Q}!u@!9C@RlQ2r(KYYo-o5iJ$2aY7NJawe;-^OJm12~Rgl2v|F3DbPMQxNU$fF-f zE-y(~;j%8*{XS6fpriKwZp!t9%8u3i`IfhHUWs>|f@E)DFS!d)&u-6iet)xxNRYW++z*yz>0*JmqQIx+kl38C)ii4AgGDXAXg&&~U@n258_rKH~VaL~vMltywk3 z)f}i^d(=j)(M7$Ibv^Pqj$Vgq(A>HXB2}acK$4bGrb=|c^}IV7PUJxO)|nB$L~OJV|5G{Iz8@!{8$6|v91nlL5>+RnU=7u1M_5tukQRJzaW1d+pwAEyA>`2&z{# zKX#vJUz>iVSxfV`Wt4cv4{HRx9Whqy0cSJPC_Ru~f4wCrV$*`z@)VH+qun99@0QK} zUJ1Bkq7%vIlH}TfTqpGRN1erwHhC@IV;3(D-fv`XOb5?LPw?=mzxURz836f6_kwy- zG>+TLaa!wFFVVcpBO^bj`M4sx)(wE;$QpVUggl!Q9tA`-_pY~wjK*+pohS4wvQ5Kl zDXp{RdRusa^hlv7d$s>e1jDgI#B|rAApwFm!0ro(ibBPTVXf>|$@UIk#Z>v6A`Vbi z#7}iSD~R$L!sJwE-ht!Pe6NlG$5-b%XWsMZdNoUsjO0tNmH@j719{{*Jo0_d5@3(M zu08Yax9Eo2k>nyyH)g|iN(rp7l-68)7yrq8pd==oa~?|(g^{uYaVHy9A*4uoAJywa zf&K7cO{@_gt)lAfXV)Z-2<`HlVX<3BO{bUl%=nVmURM^jFPaIWon*bu_8DN2$_N+w z*0!UjR!3S&N7oL>JwANbhs`=Y$PgBaRpzEC^-u@JeK44+Bx4_daUkaj6s8hDj6XZy zo{UD~G#L1gYQx;laZVSt?5^nPDc8n}w%TIkm(pud>n$$Bd4i~+n^(CSYck-y6jNf^ z(IMClj#^Q)(I;tXcH3uIlYa*%vLJPOMAD-qJlvX|le|CRyDF@;FxJ4@1=gCBOmOlN z@bkb}lQvf>dScR<&oXyQ$mb&1(>`&;>sHtf<%CXZY`GGCJv4X zh8>*q=gH0i#@E6#<>XP)5Ki4Q$j#41GMI5Dg*3p`T39`Dp;e`#tuCn^r!=V(nwKNe zy9LnA1f&G&u4A7g;UT}+jLqxIFDvNOUfXzieQT}7#%;uV9z5oqF2+#S5psoGPH)fG zB$6|U==M2G<||PP21h{f$XL5Yz|6!lS`uUoV72$Heek-O!urllPl9wSWNAOHW&C5U z=@KAiA%{$KxFSVZ5+t>j_?aXSgNp4@hxU~TcWYd?zuU25)$G#Db+VtM4@g-0O{Ie+>+lO5wq94hat)~8b?CIal!j zIa}@8>i~HMLDH)btX8!tlDru*q%MI#>I#qgg0UrN#uym8{k)LD5{Qe%81F4${UWlY z4vu(?vL(J~lNax4L0BmORTQfp*9}Y{!U`E=x=rGtc1=6?M$1f&61Z_vP<(Gr{C+?= zqb;4krv0}WQf8X`7#Yb4{X8U}i@e%8f$`V?c`0udJIHIE8A+Ncb$SHyW8J(xA_=la zQY0FmM;WMW(cffiZp#fXw;SxT_^K;rIJbhGKPPLfCj$*7Lvjh$ICd~AVWkz$ah9A( zVq|p=v;xE=jM~K}Ddi=Exw?rRC^6x)(mR3D=W+mu9ZLBXxzXiPWyoc?VrK{E6#={P zax!@85r3_9FH3@ziCZlZXXNd)5qNC1#P-(WLkSG)K}l^eJ7tphK=Pv`L243MWrv|H zIyNl!G9=O`$f2)89*s!}1kN;J3#l)6jdt-&frA8)YGZZekATK!mt(l6+pY2F&=Mmv zb5QfW7o@j5V9I$~k`4^c5bKLJxF!pBcq_ts;>l`NIrJa|E>1nsArvf+4e;E82T_6rj7T`Wt9^IcY(@ zy+_(OHktYRaK8jic`v*b_*d&f)OPh~OjLWvZ>_tfmU}HGq;!AVv0O=f^zyacxkv)M z)~#qN#}Ypq?t@3UUx?cSPG*xv+2p%&sm8Wpt4;#2zkZKjH~O2lVDX9$vVA;KzXn$o zA3dUz@`~8=s^8y&PmXa6gXh`J>!!lzVP_!oC9}#@elXr{-~STU(x4vp-$<1lekSFN?pj^>>OHx?IyFHlT2a?{OJy5j~Jo+vi&4PPb%VavI4M^!F z%uON$ZH?$&3wN(ty!4;wEsP@ubat+=a{yVfSW)ujaK7Gf2c9R7i_poy&L<8YyZ6`H zRb;R{nXySlt!tEv;*=O0V*&C^u5kvdb1>n{xy@gL;fal9S@3eZ;lqa)+?E^25ZHN* zcIQ?QHs6iX4<-KYn6VmzJDJ1~Q!sdrFL2IxIIZFNwN1jyTX~nAAOPSuata+NX6wv~ z8@!Rm>?I#p-Gm|mm0w$~_rE&uCr11M+=M?foo;U=?F;Df>W*igA~c3 z7EFJuYOU73mVv}YrMx90d=%u~6M?C=$+oO)nke)uTA}N zI%F!`GKW42{A!L_HGw@y&b5H;(bz5TPs@aF``iXm>ME;OrhMOSdNnjEfNP0Uk06nW zjWkwtg(px+e9VC3N9OkTaIH z&WwQnwL0^wKNo~YmMg(4KxpQv1~=(Fr-}0q@@`*rkdOav2Z%;{YqU{3Qv$1X;c8t5 zs)TMrE51eYXjuBv#lF052G~^}`2pxab%mW_df zgI%|ZT`DHQ$mp-e?)8&WT>zKe59A#nrL>B+im+F;+B00v$6@`m9cdNQ0szgiE4qGI zc)+mi0O8!&h}~9o^%}r<1TK!& zP3QO+YYC7u_iyxmM~=IDt=&XEs6%??*F~7vI=7cZ65WL4 zC>f>t{?a`GGCQX8YUBR6E=g1=Q5H{Qq(xkdH&dMPfC|kiSsh&80WwOg9}(ZzlC%*( zthr8_D!g8v^hmJCn{dxpaOcNp-|H*Rd1T%^BxpyST?ZwwjsQEOj=t94M{;J52AFDl zSL?A6aNFwQpULY-YlS8z@^N>Cz)N|p&pc3eVMo%XVV>*flmwSdWsZn(Z3SuXw%%4s zph{k71UC6&3E$1p9$`ne7FE5NIhgu%qTa(!)4= z^F13cfy|HFnDl7&@6S7<@frct?7R?uRGas$#2`J2*OJPTq=y?^YX?^6*V;9GxIQWi zR^)NNEltpSAk~q?Vj3C#!$pu)9&a;7cd1$> zf&!KaE7%*Rqut7{=`OmuDuH(QzHaW>BNa;4wFS@~-8gy@SyzxB+2Z6F*2+qzcufRK zPSFURcjo903=_IK$OZbt7*B=-kbVzFx*UoL8t;A#8Nu{>`4e`W2$0nM5gv;tXpF(K zEWWEEwobAEB|>NG!YFl|W2c8VEDR|Wo3v3-Mh$wWyW0w&RVg7Zk-UD&;=B3xz6_HO8NN617rpS(NtHD z?%#}rT)ci-kiDKy=z;!cnEdvD@M@tLj)5LC<96WjUjP6g07*naRKDB64jy)U9hFEM zJ$8n~?txLW`L3p`eQcYq?GnuBfN$CU-*`_6pdAC7X=s#tW!!hgxSl0Jj;;^0V5P`jQ3vdb#E?=zD(g26(z8Gd)N_wts2qM%FF!zZ+5Y#e12NzipS1i z$GtHy;|=Udd+f*$NrHH?UXmikI>Ljzx3VWXx^8?A)qw^Ch?Fyqk1uaEA)eK~SW8x} z*pxH__-d(>%y@RErA2bYdNSpjn81`%6~^Uv~} z&GRa6n@cxS$6hjuMYl&Z^#FUe+sKX%r0*W9@|w0@-ilzuYhC6ilQqqOD2zozX?*$Q z#3bYK1Xc*bBev>o@>?Mpg(opA5ezdZ7=#;&OR!IxO>r(Hzv3JbRQiQa90^M@0{{>)JMIYgbnuB|gpoXxZx&-7U2_B#q6x=aM~ck|YUL2#{)rLLpkU&qkQ+#9V$I};ciE^LWO76&#|`uMB<_* zrDcqPV|@W*bzfHy%DH4ehD1m!H>l;;lI&;`Ao8`P2S}~!0{eZkhFuNjanHAVHa>0T zWwqkM#nJ-DF4qgIe2vU+%Os;Vp=uh?@?T~+*#V$5$xQ8on@TIJCJ>Voqy-phlGT>f zLb_hab>PzZ2M+;uUJ}GDfV6z^j~m=zVPKM!2n7Ik4Wl_$fwrz8`w!`#8w{(Rb8rMW zLvXJfGs?7r-3rI6mmMMo=;lFQF;#L6R-?Xl^#Sj)WNte|G_;Nyd8;o53O*Gsv@u(R z-+r8)S`=%XnxotthBTMM<_~HD1$!5~kxOKAf+gtQjq%Bo zNT8BrPB;w3YXjcM6$5}xFnKr0fZm9)OpHWOZQl`+KZ+L$F3cT=&8Nk8&R`?0*cPH% zuAA7DKN~`Kom{L<=Jd<5`0gBQVZ-A!P_HHfSKCMY*x^7XMXwgWDI2oj#o&Iw!-e&Z zLZ6c7woIxp^dH}bb1`XLw!o8YEq80x2V`pzEjX!Du z00tLv0F&E+)Xbu_7-Bh#k}hK1h4D7(a0FvEGdW@pAehDawR>GXnHmCC4qal^dm{Fn zc)Z%*0bpI%bPwcSACGAaL&mbD%#n07@q~Yn>kB%P^JCupdx=D#oJl~(z6EZha>V{9&x~dFU%B>hALKB`^v}_B zz)VOf(p+*Y#+-)w8r^l$w4MK!$8gS_szM)|z`9)?kk8lB<}{bTb3DlTkrx*kIq!); zjuGph42Lh#*<;LYKUlX!66?D8L$TZTStFKD3Dz)Cit(8NyWG+~mFBK2>J$4i75N4; z1M3D1L3ohF_k5L=!2SYw`D*rg+sZ2(MURuH55oFc9AF725xCXPwF_|fC+qL~|q`ES~txG>A8AFs3QRIS8lOtdalD*EW zj&Q(XKrUfoD>E4Dwm-y}&}`U}gG)rddkxo@q76a71>^bn1U=vDB4!SNt*OK{V$9s{ zmGxr#T36Q}bE8@4YUUQT$W;`|=){%B#-lQ56A?I<6+cFar`{ zw7}Lt7fllMEdQ2A9oO*u`_C9?YOed0^yMHfm4zM1Sb%li354U z)uTt?i4A345=249Eg6+lka|J`9M8$0O`ZrDxe)VMYJOg%ZkNbnlg#2!8i!Mo)nd`b zVHmL_a1TM~NY4i zMQgl1+huW7rJ>hBQ4-0mwXIcPRO?XR_7?*eNRliTlfD}V_SI1gTq`V|iJLWK>AtXZ zyx))H$a{Y~Lf|elgXGx@>U-MMuF{8WB|w_bIwC(bgSz*e?740;vK}R$G+{uiAr+1i zE(TjQ9z+Xsi~QisgtbzEPD0;KA>rl902;`=R?2Dvnv^FRwI0u2GA=ahw|4S!j388U zZ?ahqzT(}F5!zUjBtIpq31R{oO#yR#-sA-m+c^TckjNEmvR7bnO|y=W4T6=OL7nZj z7&}6vKm6Yx%b$l-P~$i-{T686BSB2X1El_0NqOl5QZq;I$&!tX7q6BV93`kTQd|4+HCKsv)Gu%L z^<`^%`Fl@~zLne^S>umZ%hp=!HF6K~@tT(OVW7VSXf}Y`N92E6ll77Oo945Q?q52t zxeiF`b>p4QJCA}mXH9&EU=*mkXU&d}BS6bY=R7}te~pP9AlmmZ(7pF8=vJ?mvwPYR zxzSeq@vQ41yMZ;uRhsi1#pNw&?EcNeI$eD&r}`S+)LfXn~_M>e@LTDzl4!I@xKo8Zm{;nI@6dk1=u0Bw&ttJ-MSG@r+d4?EGo#<#m{jTHsjxk`XsT znu}A{Lh$2=;1vbmjTn3fX&y-&g=TbwKF9R4G@gy}SBWeMq(bVnNT%$<6g-eJNkRw} z;~7C_RM`gkPy~dT8l*(=oi};n8ZqJGWe2jp55^`-;l!zN_P+oII-vtlj9>YNHII;O zZx!7s4+>^_#D`q7YAxQQ`ClV)Ti{Xt9yB!Fji9SmL-W!9M%vG<>v4uO7?B?tK@#G6Tw$YqCZ%Kno)E&R?1f*4mo$LT%a+AT49mno0T54iHTR?WkMpvLtaLcD=%zsMn1#J6C#I^1Ya; z?EKIa@@PqqBNbxZc(;;Z9sw+RmC_@?uSclv;=@T$e>PTa-GknJKjWR#T8o}xdM!@VCk@U;fF~XVQ;+FK#CR!EWBfcri6N$u4 z_nzw2+DHZevuEA6LtD&B(;$=X5S$)fi>B&MgILSqDdPy)XhDod6m31kUEe zb@vyaR2$Bikk zd--~o3OP1kLMwnb?yoOLB-Av;hNw$m_10#MT;rMjraKQc-LTcQ>^x9DTS5O!K=%qi ziqU$1g-qiW=IUoV+%)^~Bb90D>nUG){@VLH8WUOq;oCuC?5Mn5tqZr8ht>A^(qm%x zC5*%4mwf)#Vc;@+0Xv+=6)~3adz1V;?s)t)>XPi?FWTRa#NV=mZ`4_$>G145Z&Vl) ze_tNi20cTBXaeLTi&`sbpCw4TiOm5Lq|}hsyf#%iv#GZD)+TO`7-`B`!5i8*L4foI zEhXT3pkbV!7y0$~8I$4FGAF4X?`h`ui05RGg7>w1YyX>-8QEgd$V^)b5+hr zj!Yg)k|S>K3-UV$jB52tWv%Rb5ir15w+;~ItlNWkpviL++FALdvq?_Bn~$fGpP7Vdc3zLj z4-IgoiE{|PqRE@Z7v`xInW`RGq^YLXb_vW@&h1DV<+ao3wQJ(yqp^Is7Vk+AIy8@F zz~>eyKhvJCy#_~QduG~3mRH>m(? zZFP2lr{XVJHJpt#=HWf>$uZ7&fQ(|4-u&vV4Lx#XW}WTHIB7jVuJ*{AS=)QBpIwVu zgikLvn8C^3nmF0X&vo|0Uh&VP&VQz8<;=NUA<21!2pi4aXZ)+Fz@&K7)E_T9Yqc>^ zi~MNqS>?|q(ZTC$_IQa`loCs&BtBN>i-|iptzp#nj863J3aOG_F?LU8{EB#T|GBq-&1(GCfKmNDkd;_@oA(CRb6UW? z&j%Gm2z#O=5@e3RCJ-XN7i7;NWnCV$*K5zYl5EZ7NU(|S9x8Yed3{@SP(Ed-wKf-o z267p=tTPJ9Yi1)OTxkAaxU6-4^GRV*Y_bEldDDZ;Xq9kZWCuw7{5d0E7|$iOdm8*R zl}xn`kkNV?*GB)i6QmHSjdPDCKWDF-PWFnr>%f)C!LEa-BHgfi&yi_!bxn1_Q9Bkxxwmx^`H*tQ@n@k@8 zCpFSntwILPb<%1gx1>ZzYs!q2*4YjatxogEQ(&eAUn8-52AF6Obj2Z~b^jUo)l~$;)gQP8?b)oYy-A+no^Q%438N#X>F@_6=Y2uILM70>w@wazFb`Is~^OM%AktEMZ_k1+QYbNNuD($#N8e_!unFAmm z+5OS0Vyy)nxm3ipdyH0_eFLD1Ys5P!x+%M)1DISzw&MLHL8Gok0uFbrY79cPPc}y#h zH3CFu^Nh1`Xb;%F60B+w3cW#cpjd`$67{HJ$LTFIj$d&E`8K6|Z>tYvTc?+Tny+x7S!{=K#IdQZ`z z7w4XhDYQin>$+xSh;t6>x+b#2z-97Ly+ZODKC=<=brPf}Sq04LA!x{unYdY-@5~mq zoQcU>svt9Se8~a;W12?UTr=S<0GitCdl#q1z?IJ{UEF)E^P@zhlo%<$YOPka*N<*! zH06!YP4X}9zU#!0=bm?WpjpjmWu+r;L7lZWlbCrNd}2?;Dm0m$Y3`K9B4 zabH%TM*`i%uJIPRw+E^u6 z%RyeLG#M_zcjsCrf;_CgBqEUG05FMb8tyfNVaULQAU_fz-p<=bVJDCS3^AA-obySk zu^za$M8X!MZoFOsSLr*opCwJiMe78l#FUhaVo8YX$dC*Ms1P3|iNbqR`105&2$8IM zp5Z|LddMD?@LGqQxJjKV;vAwCeI|J&#@9tm|4$p5$Y_fJvSQun{0JufE-GiOln3pQ;IXnMAe%r=x&j z>pDvSpk_|Zg#=&T@v`0E+VTDC9ZX|wFck^Kau2a~$=B}=NG4@-;yF5UQg|<)b|^X% zLzkJCrU1wSe3#dJ>og-afh1j<-Ht>AGNuVO_qvqg7#;;B1HBh^QzDKFxI-?W?_ectnCrn;#w_UCO8!Nmh``Z${%J5r&GAQAm{1?wkY2?D8`U zljUNq7{0dVX(W%z{Ju3VnJEw;cTb97P54_I8%JspE+*tyr{`_w>k^MZ+BRg04rg%{@b?E7;2`+K5LL z5v@wM*@_OL`Y|WsK;8)j<*%wyw$KS zS-e8FW_rA%F2@ypDWr5)0^Xx9NW5-_LZ^b4yW+y5qVzTa?S%^nZEl1+zd;fkk}${; zjqSX#GYj7c3yeB$G6E#;0LkV=+SrQYlI%WkaLK8iH%}2s+GL$p@^d5>B>8%j_U0_5 zu>z@;`GT~r<;8Qcwb99BS894*t?63oaBqO^9-#boFpRqr{F_-vwDK>t`;t+g<=QIR z;7T%af45wBzj@1U&Y8HO7wc&6YY+I!f?U*PT6((E^6Mvm?8opQ{DprL|LuSG-{XJ! zm0!NZOtY0xWl5nRdMJ0&eb`?4oqy+JYmID^h6s62_eb-2&Q_Lcx_>l=;%t7r^|ijJT($T+HRB9IgX@Tz8%($D=IU4W3dHBs691mxo4yBsC7NXuXs)M9Qo@n6}gLSux*RAAjb4evY62J+5irIp^n(kI~%M z5V5_Y>#;=u5&`0zO9TkHmXC5ER+6$u1H9q1K%)NsyL{Hg8MnavAk z$M}duuc>K_h{dI6EV==3s@gxtV7_)ubV+J?AN!T< zH6p#XM`-rONJPob5i*5OAC?1N9PuicN(N7ra*&#dQXHMx8Dv9jD& zNstzS@`u0s%lO(q`$PD*fBes7^GgGM)BugzzSjcAl4N3IoM+Dk9jY#RZy@`(BX~OU zII1P2+63&q00kqn?imx^mXzEG9MH!1y`;GZWFE7`2oOG{4CR6 zBNS75UbaVkF%~eLMJtM!` zM%@m$+IqMnkgW&$X@Zy*3DN`a+U?h95+6}+rj(qK$Ca&L)ppsI#0xkBw_|{k{q2c> zL3Tegpq}^D`7S4BVgOYo9SB2R(Oo+o?H3#=;pW1zZG#BmW^450bQ-0U07=lO><8hz z9Z-5(WMl$uV7z7W9WXF(3>Z@+5WELmH*u>?;)+_!|H!)o<#<5Ww&)5n1cKD#L6DG> zAF{^Gj~zam;eAE07*naR2wGkx={S_-F|EUyD`g-let#b2~rr; zOUW#a{`-j3h*AONn%I-Vk*}5Qkuf37C994FS1s1xC%O5YtC1|9Q}QtMAlh9Q8t!f7 z-)1Xld!7refF>jNWZ;+9r~TaXAg^^bNP48RvlS0$5?J~BU;6X^D*nBH z<1f6wf!LY*J@B>#w3Kb_tt4oa_-J+Kk8~~7?(?@30Qx8rpjY+XON3i7(x3cee++;A zU-*~sLqG7(;49zzefaJ#e;2;=@&#_o0-MNghx_XAdcWiMzV$8q1{PyqsE`IAD z{sa8-|MU0oKY!!r@&B#s!xH`)fca>%)tR+tcK_>n{%F_BGl1^U+oa>GHS_s2UD==W zoc}NW;$Os1|LH$FHJAUL|N6f=6|2mUMx(9~|NA^f5eoOL08k%pss%x5y9wwb#&-12--(vhw*PkwCcxGeeLVTQBkU5To+dRjW2Md9beXrO)8v;(%ao^AHg6NN_gnN*E;aJ;M9%{OYgaul?N5;m>^atN8Ml zzVv<){8q4B5G1wN)soScCyDl2kF>NkF`_2^bD~ow`n=`w+jj_%76~#+aC$M$4}AAO zjlcA-{{;TUKk+B=N5AqFMIvSKVk};6H~dpy`V#)g_kACJ=m&lfz@PF!@L&1M_y_;! zAK~x){oleje(_iEKm4t~iH{#YUIw;23MAKbG4@C&#&LN)nP6(;h1y0R(Ie>O``A?Owf&dX5YaqntBDshYoU*)`kL!!Nf0d|+ano|7Aef^kL~w+ ztmM^uCqFfX7monW9|@43>53T@-f2mOXN{jDF;wgKD~|c7v7z;%X_0lYP;uvR33O$w zO0|dHzAkZ+RtL!b@to+`k?5lhq}MgU{phT94QAvFwIoREeM^sHi7C$z+`au@)9u`f zGqfEb^8A<423=}M&m=BqL53qbVKWO~t1?j&oQ;e&M@Hto_h=2mp7fRP0HG=YA{Ufu zSm|8#8p%5^&Eh1Okxi@z=K;*T8;Bk&qpd6CfLubY#jZX+xSNpn0@mmU(d+(b1$x(S zPE-&gxz;+1aY5E>U?oK&B=~|9!~!|r8Dlp6CpZKF8;UK?J0ulgSM>cwzl{BTufh7< za1N1rjHM?=T{pPgr;2V7L5ie``#|(aM*@%4Zuafvm`HRAZyqbYYbZCi2ba=T+qvu{ zzv5iyerL-p@S)u>YoLd$t|$#&k0isj>H|$TU-=YG2i)gCg!D{eYlO%C`q#mNCdt(S z!lT)-Zmk_Gj^1zx~^n0S>Ke)B`wb@^L*-bF|*{qziic|Ey&1 z2n^QdfZ6#$m#2>INv|-Ymp6Rw9bbR*mwpL9`-}fSdtV+VM{%D2R`tvt(ymtb>efoD z6_P+FNFWIix5RxK4EQ9*cW@HtiF5p%#EzZQPJASBY{zkIgAE1)#$Y3Egg7O1pj$#h z_kHh5TJ20%{r>2#?&|8Q>h9T@-4$``nP*o!GksK7f8ST%`+e`b9(Nr%iVx18Zylq* z{huG9wY^=L%h~*-`qBxXXZ5|Y`$t$nkw_y;HQn*WdWVCMc=s_yw8$-fj_GKz<57}o z57d39)3&fBvC3V5ngoKFax}II;>4T^NMeGovz;$pmB21%0=cstfjx2SDq9+zJIQ{p zr^HW{I=@O%IhIOK8CHptTRdZ<&{FfDy8J{G>`-ERm}#dX9fX8MC>7J#7Za6L z5;auTdu&>PnbyxX5Jet8wJRhG_>q<}If-6fjxW*xAR@OJ=>SRUc1Qv`Dy{#K1=vWM z7+DNU8lWOg6|FrHMXVL3;-^UiM9^P3K_Eyax)DFX0>Gt&lRO^U>(GeSBEq+=K4`p4 z9E3y>?|~mua*nam!4Dm(oF<51kSM~aR4J`F7p_T~m|9v@p8m2qC`s{LBpM@N2=}V5 zIq|w0WGW%i@xho+M*|NSVWJBJo{nH3{_V>Kh1C8$tmGyXz%iq<<-*<)zHG zLb2GxR%aTOdK;7w_SEc@b^Boz45I_epwcKkp=K5Wv!G%JC;U3I*GD3 zZ3l?W2bHQPA=7y#U7sxpl5`%nPXG7AMhHQBp^z}+?dL}&W* zTFPgWVx69HEm_Vl4Xs|99Hp^Cp@(USmHWQw;)6>2HZy?AQvn-Ewod+R62-NyfKmlU zM1COB0Yc>biUNK}YtoPpT^x``ya2OEIB?F97X{J;$-b{7`>2m?k|?80AX8Q#&89D^ z?mrE)f?8PNI8H3S(8aHEUMgop^kaW#+^A(x31eA_{botRbw+S3ZIGB{0cBd8q!9;B z)9n&@pM*)_H0?;FiyQ;EPMd&BItx5i5-M%`ax|FMh~ses#~?)jf|!hn?p#EmSgBwo z03$>aD@gJS-~%Bg6GGu)VVId;2_|#%3r<9@6UV2@6TkvjKoAmk6NzRI0gl9ghyWOf zNT3J6NObOz5MT-A#sjJ^5?hq;2rxlFw4Eez)s(=Mgy4-2CUJ>gEC{IN%HRm)mJc8) zV(k$SL>8OpD#ceg7LksY$o|V8(c<^eFDe~ zwpX^xzvs>2$^>`CKlSvj)oQnAy!M?c0C~=l=NvgsK?#jiVsda42|y_UgLh1qxsl1ky|R5&F(+&bqtg9j z3}75IPrQnMCMy2LXBY@$pl||8ATPPjq(Bs!_Fo>W3YEu5<>7NAF(NmRjg~A-&QG{A z=|SP)J$2y*iJCy8n}y=u>I0&l1E)kuR`ba9a+d|CLqGr;eV99Z;mw#q_n$%UapOU^ z4im=&17`%>uLSml$>n+H-3MJeni2epB$)hkrsIz&p&*n3Z~@|Jg1Efsk0rpkZx;v$ zz~CYWkLZf|FAB#8LP}IB#9yAwu_rZI)zV-@-ps8~ZHmk_(4sP7BN`vK4Cm3XzYA8gBXiz#QSNn4S zE@Po5a9#htkl@7u|3d z@18TpATo^1UlyKs(e?cX2$*<22oGL?))aHSb0_fZmmeo^ z;zq$9)jsfS!qPG&jA=0#O|XaGucH(#qekMx3$DglqnmK;U;KIW@GR6<3*%=I4@TP% z)x@Q#sw|BF@@*H*!v`+EB8b(yYkTgkw{W~zOjWgN>zb4A1tp>XP}e#pkU@^$oUm+N zZ%@Scs8_5e;s$YFxu#j05CSS91xJXJI-cEE?;)oEXU2OPRQfA+H!PM3pIPq5IFYVS zLkD&+4zb`BAyp#r);GeNR##VJ`q;7f=+)PvPhD?(20wV@ zQ7m4!T6>R^I`p$7`8emec*+!f@}^sGvi%f3`Op89n6Qq<`HuG7O!FqbrSDMF0dtWK zP0f80Yjh{lX%YHU;ve5*D3I@|N~^5?6v05w(;TGwPX99`Sjv`3Q)&?FX#KCLP-f?dHijg6BO2wK$B2>hY*4yXR$<_jdI5H ze3*fw1TdH-iQ1bB7|S8>T&~10=NvUPHJI7bf{$N!1NzkU#s~i2UzK$HG@3(c?UNc` zrV&|=_%BL332=25P*Kl6`cteGqlHtY>0c(rDoLI7S>~6?{_8}-ZTUwvfgO7unTS7W z;5_9+hWFP*=SqzU_B8WL_6O1Rmw#OjMNpV3XprRuH{@Im7i|@RX<;f=mGXawO1UV` z!HJj8lu~*A%LS#f4y$1HkkzDx2VpHI#x=TkEiA|vchy%4C-APHQ!lTViw4@vimIwN zpff7a(LM+Qd9Ey?G?^wnWdMvC9_0uKN~v@xX>8R{)VGkb5%qqT7d#};|A=%Oi0{gv z0YX|UF|mj`)?Cn25g)(_6SslgXDLFMAOS|gb{1)|5x8^-%O!qyO9+1WhM0sMCrs*! zalECB-<_c>)(8(12*ghkgtZKTBjy4$k&^*Ds^1X-*3{|%*yyi#42I4c{FxU25t~(F zw}$-uSi8tlRD78h1bSOq-U^n;$Ywad&f2{$OKX?0GAON%R#am|pP=Xt0H7RxKBRX&gEe9i|# z7z)KAj-NP*qix5qYySbP-Le_aE?bWFQ>Ve$}*AIjG4aAsXjTkzp5hDi= z#*l#nQCnS|>O2k{K7#K*@p$H>_xJwv&(J(#g!MBoELnnYKk{&=#_11lyA5-vOtpSy z{nq#JC;$H42+gUjvl#&X@l&70xf3U)I)@jREycHg`LG0{*tdWD+-EVdX>7NES*<5e z7;V#lJ`MPbdp_Rf=XA3D6ngSz>PE`qCv6%afxXp-^nL+L_)|{4sa?N+b>|(JFgl$- z`Q=M5h|`4*96xaaJNNIy()Ang(yG;Ei)rNb zV?Lk9jpv<-HziYPT|P$W7xibKi=8= zE*7s{pP0l?V@mDXA?Yffb^H9cKfDhU$8?|lDaSUbPaj-3WeQqGjmEHngE62_J*ujz zP?gW4DxU{9M~6RWItm3GI(iJd_V2@nZCmlunl)%^Yb%>C|Kc5Y;L7u7mvx+qu8U%^ zh>oI*))TEbcd$Z9wG*HH)_1xjo~vY+M_THmQfd55xlXx&B-pn@0uY3z?2t%0wy9W+1^!5U zhnJM=vS`-bmWyH8=;#wSv0jB>S#2-^l^;1j$E{o z%|KG_76<=?}~78T)*ZVoTOkefB`taF-Ms?{Rrn3DfEZ3TfX zd0c|0^t&{a#Rr5G2v;ibIT&XkJOoA<;LjWG_j34JAfg35MMf+6!NVFkB6R|Iz=s1)B>fJ^bZlW4i%h}Axh%vU zRweL=)`wCh7Ib+;Mb5)h41p6SiJpfd>74*LkRW<$sqQt2jzws&EP`953VmgA$UL3@ zNdh5Co%P1DB#w)b8+}Yn|5BO-S4KIyHf!mM_P|#!;bBdKwJhk!+FCa@kbB<`?gakH7pP zo_zgvqrY0++6rvnju%&k?^jn>%aTR9i&VfBVL()^&ktTe4;ih7KHv zUNtp(VCBeREZ?*t^MYADmlYc}U}94f`Wy67+D@LtTkFH4);vU)x8LE@KbY#xoo%8QpTN0n2B=8+?ML{k4u0Ut^|_s%B4v~*^c z7)Y+XlskV3rNJuzHZ61;aT`Ik6d|(R*tBz3DgfkYTPwEg+Z%KbrvX5Kkh@){cDZ=f zDoh*KjJ|dCWuF5gv0dM*H---yjPuW)jN2}`1W&y7DxP_Jd8g+HAq100kH9ULT#A+v zBaC)SzGwMd4z<Z#OgD0v>dv}`$UZD>G!@7~()9d1327nUr^biRw1twGb!VYp(}ti;cr zICTok*Kh2yn5+^YNGX2FR%J zZn}1+?GTRMFKWoPBBmRx{uDW0tv!X;O%t=7h*Crmu8zN?b8FEKNu%A7B!F&`DB#li zPA;a93o0n3$WgV}BARR9M9ohDIdxHhj^<6 zIFy7Wc+#TVXZeqIB#F+8AR)zrF38|qgVsL1C_M4O6e0_}`=aHX$b@{v2Qg&PbQ0;F zpx|CBwx9-#=ytGBlS3$$aN$M-I6?ew8Ul&nDlTp=15MKWV%(#c;|dKE76*Sc7K=>fjSUEYhO|bW~=j_F$UMCej`vQ2{*id9g>Srp9d=^9*c&XgDsvTOf-Jn+mjCB^su^Sh@orKJUv#_B7L-&nl{i&nmqXiF0lFRNGM ztftYpV&?hU_ut*I0}s9MLgKTnK2uLGc>@cVzKO5j`$=Ob$lL4I;XfXIRH7H~7VSh4 z9AgmljUGMY({C-o?!!m$H-GR6{C=w(@KH$+B#r-8yFDT_6_OabI_DV)6GtKvPg)y_ zZQb^rxPET(^&CFlitR^^2FF+TugisSIVGhr1rNUdCfZK5k`>NU++;{zTm@#o;Svpwid-ukamT{QUG7h(0aT!)@+=zv5ya~=ZEN8zp7l-yAfZMLT67$YI7vFv4mw3bPI7*v~ z{P}awV#>H?%$P7i`~I@E>+qw63p1V9uC^m+s87B(TXyciHy(NjoA>VTvN$cR-fcP8 zj>3L3ZChWIo{3A~gDtdQJ7_qp3ALo8m#+Im?f~I10}fO*$ePn6%)kE< zkQ1roCuaU(kpS1tg{*v$<#-0lhVmPzIYKm@gq-5tO?= zKq7h_L2^1kcLP;%=|1{UL!fCx0x@-PMfX6^ZV{bmxiEkvO4X|=>*6%ZBN<#XNE8eM z2WJui6_;I_auBY7ATbB5`C9}m;SphU=6B-=uq66uq-#4hC4Y@ndxiwL$?gj9Lv~<7 zYsqvxla02~-kEHxTq&MrA!XyhjSHYuYHA@h-hYrx1qinBwk0vTJc*kD z5J{UzOj@{iCW)Wsx{^4Wljg3e6JFCe?SEh7H5`p+m7@$4+Y;Mp8a& zl!xFxAp|#HI1krecyVfKq%2!abv34qKMT{wp9KKuC={@0`BH0vjX32Kq}XGVG7)N; zG6_&~&T;+uvr%K|%4j=z5?{anr)9Z@J#B~a_doj?rjH+wFMQw*3>`Qyc<+ftFIijg zlQw4gToOlrru*R9^oUp{n-|_!pUc`cpQp=NNLea4q}5Jpgn9!)OOkUAw^-=bdE3L_ zjzkK<&RnC;##C`_C^`TDAOJ~3K~!=qO#-FV@BHwR5>7OkCHt8`Gs!F@OO&o6aW2!w zr=vC+)!2yP{rh3hu~u#3h$u@Tp3pj&@0I|N{EN+%uJStDN7PLZPF=;8Y`*Fw===2 zItkRt6y+IB-oMIECkw?h#sY&700?DBI@zjWNd_tu-QRSmY(xm1Fzxq(<8xxo|C*9d zB4=(A7n3Pk(j-4k9D_5EXS~fnX(bLBQckpazq{4ep5z z1>)y~Lr9-X{39`r!pPA?>$6lf8}1Jl5JdW$1fY0}b1pn`pyW>Vs@oQr7FJV;8En`W2{mg|!7CV<;S zD_H3Tf(i7So3V+hwFROt@+{Z@LCDXaaB7S)w*!)>6xsRKlQ!J(cAt6(zFBtnv6HXQ&00Mj%0 zlWS+3hyQ)$6}|sv(KTV(`#>@j9+Y#taLQD?v34DnZhAN6{RC<$#h-uZZVVkTu*=SK z`<}gca_Q2t*~a(tcE=@`;qGg$Ms>cb;>ViMG#Y>R>CfWFPdtuazxLW0Ge))5)wt*S z8}Qot^*D8^Ju$vdXG7B)$5H+I;>-8^0Y(oUV*E@;p@7F;dI3LL_*|EcjY$Ke-0Mfv zn93jsC$J{LgXDG2@%0!yjXkw{P)*QB*5e3sLnitwQ?6EBdz$q>{KP*kTGy<`IVOP# zItncK*TAI4aG^0`D#(^8e7U0aq26y%sKOBkB`BeK07Qx#<)X0wj0kAMNNTN;G!$4# z&#;XGE1pBrYg)^qlWx!Z$;y_8f+l)+_>iJR<_vKz>$`!!6?wHOdzjVnH zQ*x3K*gGXS2Pln?qokq1!80dD2#~3QHLWvB10d)suqoGzo0bwhG4NCYeyK@M&O;!f zGjmfX?%b)Qt8gHMME)=M0(r!E2*GfV3X6FUdGM}>&~lGPihE;91H@i>`iV^>n1?G6 zf}k>t2gd?PL}Xl$PsJ?^_Yo07#5D#pC!oy=#*fSU^sY|^ESOJ!<>{OF&l00xKI9Y7 zUm@gSWJ-Qg?$ikBucG_+XttCt5rm+VI8Lmaq>O^+xhn)xZ;oY4(arne>>^pK4C<66$wHVsBKSm55gi(z{F`{v>RX60_ z9ozApM;-yFGInQJQaIIOuf#dpySB#q-M;npsIIO?dwY9XuW9$egLq}dO5AYq#dzd} zXS;oTO}4hw1V&J-BCqdA^mxHSnWu{-9Y-v*9q-wq8ehmcT%YnX@b^7%PPd*of&Y5! zS9odVN@L<*yuNhT-MDb-H0^#CuUvtDv;ehYpO;Oaj!)fuOG)dZte{7^p4HIKrWZVq z#Ey;tLL5CcWDu2W>^LXZyuhq6O&HYBH}!R$-82dVSJdNJdwblj`JGRuP88EPQp@;m z+_?k)`kUW+9Z-d0&=t)X1LJP+f0r>(=2g_^^LaE48i=t&hGO3IX=oWaN`GAH;F=3& zrv^X(;IlX1Xazs^A31^zTeo7<&YjqI^au_fIfCs+j$u^a1`McgKtp{m3?DQYBN~Tb z=)nFM+^;|Kxtw(#J^sqeWsTF`uOP^smtT$#Uwv()L*BF@Y@ zXD6zvsxWNOAdDG06yryY!PwzL(LdqY=v7mLPu_AHIH&lHq>|^pndXVD14QirBLv80F%segfnu&N&=uBFSy{X*FJK zNN`dT%a(LWnzv^}z@{v4xCDX-W9SeXbWcKzhW2g_uA*NU(n< zzRoBZ;h>y=`NotG(e?)k@{p(>Bv>Ns3<>G30(}tq^D!!{@HpcP~6%;qN0L-nq$#g{+) zQT){pzhCxwz3|P~!8ynC%a?asf+ES6W_(hWbpbEs>t+B%T8L6^Ubi`%1l_?&`#sv) ziaY=Iul?j1)5Zx&U8C}Qb#-+(uelj_&tG5^bbs{4=TUIo2>4Oy?SHEl)G7GY(zj#R%XpZ?%H)@A zv8MzAGSfO<^+AOKHtpVnO}qDC;j(4;@`pZzDTXeWvBQR?whsep>u}yAy|$0*y7+5lTOA9`<;2QMqRh#(vi>FM%UGuL_1V7&0u>()P_Bx(?Q{S<% zdGB7lvMNlx-*(9*xN7G47&UaL^_lpCn{LF;!w0Z@m;q*T7lbg2|&a*2n`2a2VvkV7|+z*q5hPaicE2rpmvu*kTCD!_pm!t95Z@OQSD}%-ILcsYQefK-xC8V4C_@>acbHQkhF1wsn9TqMl0S8 zqIQ6gH~^AXpoIH3J`yna^d_$B#yUUrCur|5kpo{9R1xnd4Vo!H7EWHRYECkg@_yCp zSGzTAfxFD}ZyIanx)F{y&N+(A1sH)tfIJ*2SmSWP;d0lb72*VrllMRnZ?HnXya2%r zfe`ShQ4k4mF*aU>3X6=tt8hN5V*svC7>bFkj=2%YQK_#GB6wCL(Pi2&-A}i}RRBB_ zPn|mVWW#Byay2=bs8NPd(?#uYQOATaUe@Gl#5uyRV)8+cfNRj7yV1%)UkiwkKx)Gi z;HF*@g8*QzZ`m0Lqu>N^7zfGu-~^F5VNoU&6H4ZHz{$+jq_M%Gt~fuCj_%P>La=8 z-=(kuSD|`doO8IYt6fZo&ms$+w6mZ@b_zJD^$u5)tQB}9FWTto$@&7 zKsp;uSX3KLAD>XA3lqxmDGR%r{G%F|$?pyC-w*d(H6PEswG?k|c~>7a zE7z>|VfqCKAp}!~kHDBAL$t~7hR=sI4$Po&Mk&Rjl`HYw+skpqx#!|z*IkGD zUcCVTkG=Rj*6i3}U3ioW2uteNlH-{6(;awa&06px$Mgy2L;~bFN%S4JCi-04VqATl zIC(1Z`evPT4u0{KuVV4?75MFIi?L+IIaW zA8P}uOy^BA0QvG_Togz|V|~Q9q$#&ovj_X;5=})UKh32IPy$Yv*U{?#ODfRNQR|kv zoj7pYnBJ_{ z2AMp1G@g8CHQEbBsT&UqQ&xc8=8jQ0irPMvDU6N_KQkAL^OOxN=8i!b8g7hlBZZn+f;E|_gRMs0O9 zK6lHl_=A7=`}E_Kk)k-Q&kE+`=FRxl1NY;rpZT0;Ta<0sph4C-kZn$IYvT3uH{OJ6 z=ghGJR4X=Yz~BAPkI`z-Mo|;+S;xtgKePD*RqNMm+hNRe$(j=Ob5{I}Myo<-LW!=`Lu2!SQj&R&=@^MjAWAg5fD8OoFMeZGi#0EpyhEO!vZN1Xd2 z?<7W<4>-{Ra5i^ZXrttq+Vk~w2 z8Ue(l&&c4Jt^%L4yJpdL&}p7W*ZV)Dq`QMBv={HdX)}KPI!3+ zMdBIsvLOL{AQH`tF%aJ#h|UqhI2iSRhv?AYL9YjqlXy}ao_|7N;*hYYn0UZR&I3v* z5bl4)2R|tFIza+Zf(Y3T@0dd5UDnSKe2KARN!=L1al^kO`jiEqX?be z0VLTkBz1h~=0`afSLKW!()u_Z1(xY~Dwi+Gy7jB>g{Gl{arG>(dtt?<%_YY`N!$FH z=W6%0W!EnJ__^nC_LwnRLGqgFYTS9*<@nB{j|Pdjq+nUy^7$%!?Aq(J3uyp2bo3~` z`HTB;^yCR^$7j;9o?W^WeR|d6qu1SlcQ$RnPZloh(ROF?hILrHVO`h78HTyNWB>kC z`xw}_A8xwzQrs}_VjMVf6o-!=!@(m*(R%76j$ z{v_Zd&3x<$*AOh6Nto=&F`x+6ZRaKKe<`thcgGz@AU|cNVRv0a762cF z-G;&a%(S4bCr{uT58RJ8*Ol(4|KrhLVe|HF`1EbJYhx?`7}+=kpS<>Z{NSnI^q70{ z_U6slwf}%tZ=G~h zaatkU?h4eiBz{b7K;;OIOg!kaSU|ipBCG%|QU)rL%|u#g(0D?h8?-}$&v6)m5!3nV zIw_Kn=yD|qDM%zqtv(=e5X7D|OymzF@rSpwT<+2Dn#Z})&yp}0+#grL0~mHB@qoh@ z^1LU+@30URhSaZYa^;}8q>Uf4YC5Gj zvXQc()ayuNd$QOmfLHXH*U_Y^R9D_Q%!}`X`9d6DAT}+9q=P}dYcYPraP8;b*suww zU50nIZo{nc`tG)AW16sV{iaw4kgYR;n8w!nFcK?eN7|&L>63+G5jzeXOqa~<)yoWy zG&ZKb&$f7T$I)Y0wRtmUO`3#gQy30=cL^j1%l@Z?!|mdoL$3@D!ux7raRDyL^2yk#+T6b8e3j6X=#z z76foZF;0q@F)I~usd-I%{$9N<<+Gaa=7>SqL?2wS%t^EE;-E`oSZv7%eKjYn$^JC- zNJ(85G2jIxCUWjD0v9eQ@z7`Hi}w^Iks-M8$;AxkVoFvfRT-NSO*$Z~>>CT)?bVh$ zGk}pa?)rAPG*!__)!5(oYX>r-b+vRVp`cuqprt1Gq=a#0l}m z%4yKjO~Apa1Hy=JbUYA*@KBs7Kwl(>>3~MS3IY6a#zFvrF@X3WF83W|V2ndu5iSzQ zstyj5I!r{nAM=0@@25w-#kh1#j^O_?7y{_T%Y7;z88q?f<%0b(9(IBF$K&7;x~!mU zL;`CnZ6o6%S4dm{nVt!+^)S?oGVy}SPFd%VIs-z7`!FX>yXx7~C8Cl7J5ykkR@W*1 z9TKZ@RP~~`At|M8w^e|YSO6zccbPgsY~3H7?Vv1cq9@^fTSu&19HOHKQpc`qH$BBe zXSeImpQY`-IB?`BUS7W*0PyJIS8(2h38>c4G}QI#g^yl&C4TVKQ}Ho3oNH)1fD0y@ zx#E|sU5g$2cf-l&J$fI73qC1!W6BU6JboO1{evIC<=t2L-ktGvDGT^RZEaZl-g}tZ z(o)v*smkY3mCvJ3Z!h^LGwFZ6y&c>4?!mJ4>+rK@pY67>GIczflAxIvj7aF%=JBMh zIh`9;V%n%QJDyI0&rWX}|-(Rn6tv?&v6H<#QM_Xb5^4bO&}HIFR~YIn;cjv(K4~`%a(61J6B=gKZ}=&2e?^ z{oVZ!pnq)*4xehTc>boGF<>e7rL)@yuDS|!7GP@O8*kwC^=ry@yr-8g#nkZ=aM{e6 z+V=;#d351D>joNGh_ zjN8}8wj8hdvm)of!C28qhixoAbfhuh@f>ha6HJ(PU(5}2T{53}kO#5li8B_{Y5jD@ z`5XVfIWMlu-(=R=L}|}M*ku~Om$@`Muyq3HIJ2{~>-Gc?M13Gk4qi9u(j?;2&`O1g zClcXnQ>&)|z;yu!1VulgC^T4H2>{WZ3qwM+EMwM(yi~f9vIpBdI&PFllQ+5~q4$$% z&skUXqvf?TJQGPqGED-sE1nhg8IAqUDSTe2Nb-mPfi?({li?&xqI!uS;`0P@5B#8^ zc7nrLkW->?!3f}ZiW~t*g4iO8hQN!gV?!B;(5N8*Wz3Tw7h@>8B)~y9@j(OE zk8Rezw`@}=y1D1rF|6FQ5wj+pt^MqrDd)rhkZ{~cRAUQa3-npTM`3XP0or{Qi$y&8 z>~pc}r_AHzjm%Tm@Ai}CpbOrOU{(5U+Sn#=&aq<4mM(i%Ocm;;Mfwk)cpQKK>Cd1~ z@47BI$6hrxn9wu^6Pm_g{_MGU?yWacbF7yW{LtwV>I%q6xsGkBnY1AzlhD2|>kV$HVgMlFyTW18^7yIUhzOO#gG zqS3>VdS1vNPjtP7M6EbN2tK;tD&sv|l%b35xJ75laU5JZ>wH`?<6P`KupirY@5Yv0 zd$45vI&3|3*cd09;;=)SW4&LQY@3G+0plF+`I=N&wsXdr0smbG_TziMeyr^0`>kI+ zjHzd}U_hU~+V{_$G!c)z_DYW!+Z*OwghBoF^k8kLPU2LVK{f#R#Dc4F%cYlEyHVF~ zeGgyz$xpHGcx#ueHL}nNrp-y3a+yZonL*=B2%O7$Pmvcwoe%Go185Eq^jL%jniRss z#xy96l!fYb+H!)j{c@!akevT{NtoQBQQ>oC%^mFkVSa8>x4!qaoZ&|Dx?Ju?gab$& zBeposRyYy`PZHRV)b)FcoTx3QQi)i}bpCqkGQ~e3p4ZOVf_(#Em0v3H}tS$@7r5%BRATIyppF22(mTxcZqG_`#%35FY6U;T&+m00v1E zorly{U7Y;1CF@NITwV3QYV%}4W}RS`O;9%}z_TScOjY+bCtiuuPASv5>3pd67@CTCO)Ij=E+>IPX?;++C>YBrQr(k457Rs;$GF`%bC&aC zD^LIcAOJ~3K~$D^y1k3ev z`&{RxR)!{ZCD1hMHWKAmCeni63kIW<$`k}HvWdi}U5nN^4kop<;E(UT3x|#!!ykR; z+nLs%N$Zo$6^fSbk8(ZJX|&h6A~w{50tsCp+UnlO{+t9%!JAu`Pn@9D_Gs@Y;KdD_ z!D+Zcd~VGKoYOQKc}=%SL+{?0-82HPZ`~P-sW=JOnYuZ`Nm$>NwlY;mEgnf4`hV|L zTZ>6UhT)uXV=-gm1PtldU%S6eyLRHqx86$at2gi5nb={M&*d;?=rD{KIt-Vb3*2+V z^*Gtyj@A=xIMUjRBgb2D@aR!&-+usatY3%y$Brk)-S5|}-f=K#{CNDyU3cTqv19n$ zH@}g2AHxR^Hoo`j$`utk@6)GGW9gc8m_K{A_WcnT-B}-$L|-iD$1C z8{}~14i+!B>%gOy58sbmA8|k=4H4aXJEjvNUw6WKLgcK(?^O91mp-Ed4@`4DO{{5R zOv<``*3oN+_lU=Qc68kaeoe7Rn*8vhwRHYvu8?ca$%7aILNH>&o zjw1H}5C%{CLuh~m6N{2qdwW{Ge)-|ZBDBkqoV@F7@K2(0E0iAOWCs;g7^60_2_);Q_f>P%FBpjUj6juV>fP!Ev0Ehg0sH?#wz{c;+5aQ+m zIKicE3;|BC5Gax6B9nj-8QgGL91!6$_`!HYON1c`)BwDqGekwu)!%hNRvIxY^|@4a zKy>~@aBybn0s3>OC;$HIC4Kk6 z(ZgL9Pm~(>y|8>a3a*QLZ@3u)`!;lWEHt&H1z)-MQ@HQj|5o;W-#Bj`Zk#u-%kDuI zzmf$w0JvYFDZVGsyMjduHMpR-ND^7S4%cFa2OY=s2nwzFxp5=wcN z)US6(k)bV77S#-luOq0Y`y&7`LC(I5e-=J;db3{iXZ_AyXfGBc`#Icx8tZrN!sO9< z{i#{aWAXado%)V7<+BVNB;zd{H+(q$?PDJ*`+eAZ=n%f~;DedI^XMCI;__Lu(9pYg zW}nlmrUs3QhSp~}$MF*uML0T1z_IgkE| zI}Rv94G^I>21WCxAC23yDKUHngSX@sWqe!~Bn8NYb-OSg<)t#gagt*b;%4>{b z(SB_v>Qq&?SNbmFELK>~WsP2u!;-**NY{$8{!zz4hY^?xuuGlqk(?f)I-@oKgfVy> zAZh5IY=NEWy)$7;+a^|ygi5I#=BDJ4jgJmIdw>vo@JX^UNjgSS7ft3wz2R?ZI#xjR z71E|wUR#HUj!K4{VLiUa1uv(1FjF`s2O!ju5NOX(vw#fU)6wu&3qBndCxFX*;KK!F zKHY*Fwum#ID>|gH68Bduuziom^^;r%Q$j99NQOLauo>eKu#ag))*;basahe?PLe1{ z!U6{(IzB>85h)v}0 z_gr@a&YL*V%8_1)ZT#rb`189ygnxM8XZZbQj~jL3+B&&y!n^;RJ8PqR()g!kYv`&Z zT^b6N7yy#V_Ib&#i^h#cgNB!%bB;x8*K5D|{OXOEG;#zSjY#pp`g%+sHWVxN?2T36 z#tF#aQ?DrRckxu&eeeLj@!*3vdLmnwTCwQj=TAR_Ke+LFtu9I__r9U74h?m67(aS6 zuD|eNytiv7e)sz8`1PAhes3rfwn-yL8Yu^loj8I0M~_y_4y|}^6Hc8zt?kUMsj9-@ zh6d~}0n`bfbqCLU>pK-2yCrMZ;)RvV%eKFZrcd_-x>IZu#x&tew|@Zt^vj1UZdbc& z?ODn>1X>FuB>Yn;KE+Sb{ULsL90!cj_-8d8Ah8^^^u8{ZH{~?cJOibUSCDEbq*k+! zF^y&4OX!-Ffi%PPZp(*jEB6gRlb*o0xNQS z+PN4calUa_JAC56l)@;XfH(j_t|$;E0F>l>L1V9mhbnw(tmuXTt}oO=IQJ^CgJc~u zym%s|g)A~Ax6O*SmLiV|3`6CFlf`;8H$0y*(PT>a$+RuH2TT1wV=U0;@PttbmAHS3I0Kl^2}gpP%|RFqg{FOEmAMp-M<4_j1O*DXi~|nyc=M>g1o6j{a%j(4 zy>?l&Q@(OWJbqTfeC|504Z|a!;(qHpIKYaL?+Gdjf>30K5)x~*mnnnbC&6U{8X%kg z`8mQAkmz6ROaa;kq5&j&Xbn@N;dMQ#9n&QA1(#^Vh##DZ&^6n8wKw? zB6rHL5b_i3L6w#_cAR=06d+zAKSu#d34|XZezJ!;6b^MjiDwTer=Xm8m4C!XuL(Q@ zC=3jhv^|&$m$}I0tKf1D;`)_>+(i|Lw_gwxnc&p&&dKrZiX(9tdc#5i;`%@V37&T* zHBAND9Poh$#^Fl$p8ND%oJk!QK2QM}yny(>1aycF5k$L6m_)fIz>c8P1MoXQpwayB z_Tf4J2MNxBbA(+i@Np!N*nH!Rr|M2fLs6h}&f=#7M*_o$Hb@AaGe887vws~d=rDrh z?EQ)n0dPT0tb{&DM)lPWl7J@8e}0&-0R&(a0HvYdVkCHWyu0Yx-JGwX#5MnbsMv8* zJ0^VJDYHCqUbJ$Qn*zIF0gI5

d%d8mcrUI10~+`no!f$Fc24RFqIqP6K*25P~8& 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 literal 0 HcmV?d00001 From 6e52f7338cee3abe37e00b240c0fa71bcb24711e Mon Sep 17 00:00:00 2001 From: jh Date: Wed, 24 Mar 2021 18:26:11 -0700 Subject: [PATCH 70/70] update gan options README.md --- doc/features/gan-options/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/features/gan-options/README.md b/doc/features/gan-options/README.md index 80e77a6..45d1adb 100644 --- a/doc/features/gan-options/README.md +++ b/doc/features/gan-options/README.md @@ -3,7 +3,7 @@ Allows you to use one-sided label smoothing and noisy labels when training the discriminator. - [ONE-SIDED LABEL SMOOTHING](#one-sided-label-smoothing) -- [USAGE](#usage) +- [NOISY LABELS](#noisy-labels) ## ONE-SIDED LABEL SMOOTHING @@ -29,7 +29,7 @@ target label value = 1 - (label smoothing value) [0.1] GAN label smoothing ( 0 - 0.5 ?:help ) : 0.1 ``` -## Noisy labels +## NOISY LABELS > make the labels the noisy for the discriminator: occasionally flip the labels when training the discriminator - [How to Train a GAN? Tips and tricks to make GANs work](https://github.com/soumith/ganhacks/blob/master/README.md#6-use-soft-and-noisy-labels)