{ "policy_class": { ":type:": "", ":serialized:": "gAWVMAAAAAAAAACMHnN0YWJsZV9iYXNlbGluZXMzLmRxbi5wb2xpY2llc5SMCURRTlBvbGljeZSTlC4=", "__module__": "stable_baselines3.dqn.policies", "__annotations__": "{'q_net': , 'q_net_target': }", "__doc__": "\n Policy class with Q-Value Net and target net for DQN\n\n :param observation_space: Observation space\n :param action_space: Action space\n :param lr_schedule: Learning rate schedule (could be constant)\n :param net_arch: The specification of the policy and value networks.\n :param activation_fn: Activation function\n :param features_extractor_class: Features extractor to use.\n :param features_extractor_kwargs: Keyword arguments\n to pass to the features extractor.\n :param normalize_images: Whether to normalize images or not,\n dividing by 255.0 (True by default)\n :param optimizer_class: The optimizer to use,\n ``th.optim.Adam`` by default\n :param optimizer_kwargs: Additional keyword arguments,\n excluding the learning rate, to pass to the optimizer\n ", "__init__": "", "_build": "", "make_q_net": "", "forward": "", "_predict": "", "_get_constructor_parameters": "", "set_training_mode": "", "__abstractmethods__": "frozenset()", "_abc_impl": "<_abc._abc_data object at 0x791a617ebe40>" }, "verbose": 1, "policy_kwargs": { ":type:": "", ":serialized:": "gAWVUQAAAAAAAAB9lCiMDWFjdGl2YXRpb25fZm6UjBt0b3JjaC5ubi5tb2R1bGVzLmFjdGl2YXRpb26UjARSZUxVlJOUjAhuZXRfYXJjaJRdlChNAAFNAAFldS4=", "activation_fn": "", "net_arch": [ 256, 256 ] }, "num_timesteps": 100000, "_total_timesteps": 100000.0, "_num_timesteps_at_start": 0, "seed": null, "action_noise": null, "start_time": 1698322213186748147, "learning_rate": 0.0001, "tensorboard_log": null, "_last_obs": { ":type:": "", ":serialized:": "gAWVhQAAAAAAAACMEm51bXB5LmNvcmUubnVtZXJpY5SMC19mcm9tYnVmZmVylJOUKJYQAAAAAAAAAHzTiT4Vyxs+mtQCvdzqRz6UjAVudW1weZSMBWR0eXBllJOUjAJmNJSJiIeUUpQoSwOMATyUTk5OSv////9K/////0sAdJRiSwFLBIaUjAFDlHSUUpQu" }, "_last_episode_starts": { ":type:": "", ":serialized:": "gAWVdAAAAAAAAACMEm51bXB5LmNvcmUubnVtZXJpY5SMC19mcm9tYnVmZmVylJOUKJYBAAAAAAAAAAGUjAVudW1weZSMBWR0eXBllJOUjAJiMZSJiIeUUpQoSwOMAXyUTk5OSv////9K/////0sAdJRiSwGFlIwBQ5R0lFKULg==" }, "_last_original_obs": { ":type:": "", ":serialized:": "gAWVhQAAAAAAAACMEm51bXB5LmNvcmUubnVtZXJpY5SMC19mcm9tYnVmZmVylJOUKJYQAAAAAAAAAFJGhj4wkrE+lUf3vE7Es72UjAVudW1weZSMBWR0eXBllJOUjAJmNJSJiIeUUpQoSwOMATyUTk5OSv////9K/////0sAdJRiSwFLBIaUjAFDlHSUUpQu" }, "_episode_num": 3595, "use_sde": false, "sde_sample_freq": -1, "_current_progress_remaining": 0.0, "_stats_window_size": 100, "ep_info_buffer": { ":type:": "", ":serialized:": "gAWV7gsAAAAAAACMC2NvbGxlY3Rpb25zlIwFZGVxdWWUk5QpS2SGlFKUKH2UKIwBcpRHQDYAAAAAAACMAWyUSxaMAXSUR0BUnzE3sHB2dX2UKGgGR0A0AAAAAAAAaAdLFGgIR0BUoPHLidaudX2UKGgGR0AyAAAAAAAAaAdLEmgIR0BUo3mRvFWGdX2UKGgGR0A2AAAAAAAAaAdLFmgIR0BUpTKoybhFdX2UKGgGR0A4AAAAAAAAaAdLGGgIR0BUpyhN/OMVdX2UKGgGR0AzAAAAAAAAaAdLE2gIR0BUqhl+Vkc0dX2UKGgGR0AxAAAAAAAAaAdLEWgIR0BUq3MdLg4wdX2UKGgGR0A2AAAAAAAAaAdLFmgIR0BUrVMdtEXtdX2UKGgGR0BgIAAAAAAAaAdLgWgIR0BUucPWhAW0dX2UKGgGR0BcwAAAAAAAaAdLc2gIR0BUxaPS2H+IdX2UKGgGR0BoYAAAAAAAaAdLw2gIR0BU2T6BRQ7+dX2UKGgGR0BgYAAAAAAAaAdLg2gIR0BU5xeXzDoAdX2UKGgGR0Bt4AAAAAAAaAdL72gIR0BU/bor4FibdX2UKGgGR0BWAAAAAAAAaAdLWGgIR0BVBj7/GVAzdX2UKGgGR0BkwAAAAAAAaAdLpmgIR0BVFmepXIU8dX2UKGgGR0BpwAAAAAAAaAdLzmgIR0BVLQJC0F8pdX2UKGgGR0BkAAAAAAAAaAdLoGgIR0BVQq9PDYRNdX2UKGgGR0BUAAAAAAAAaAdLUGgIR0BVTPPPcBU8dX2UKGgGR0A2AAAAAAAAaAdLFmgIR0BVT3QMQVbidX2UKGgGR0A0AAAAAAAAaAdLFGgIR0BVUc8xKxs3dX2UKGgGR0AoAAAAAAAAaAdLDGgIR0BVU+PJaJQ+dX2UKGgGR0A7AAAAAAAAaAdLG2gIR0BVVv/aQFLWdX2UKGgGR0AkAAAAAAAAaAdLCmgIR0BVWEVSGahIdX2UKGgGR0AmAAAAAAAAaAdLC2gIR0BVWg+hXbM5dX2UKGgGR0AmAAAAAAAAaAdLC2gIR0BVW5SFXaJzdX2UKGgGR0BDgAAAAAAAaAdLJ2gIR0BVYFXeWOZLdX2UKGgGR0BcQAAAAAAAaAdLcWgIR0BVb1z2exwAdX2UKGgGR0BuoAAAAAAAaAdL9WgIR0BVjwb2lEZ0dX2UKGgGR0BgYAAAAAAAaAdLg2gIR0BVoY8ZDRdAdX2UKGgGR0BbgAAAAAAAaAdLbmgIR0BVr+fI0ZWJdX2UKGgGR0BpQAAAAAAAaAdLymgIR0BVzJ1eSjgydX2UKGgGR0Bn4AAAAAAAaAdLv2gIR0BV5z9GZuyedX2UKGgGR0BjQAAAAAAAaAdLmmgIR0BV/OHnEETydX2UKGgGR0BegAAAAAAAaAdLemgIR0BWD7nX/YJ3dX2UKGgGR0BtIAAAAAAAaAdL6WgIR0BWL/Mr3CbddX2UKGgGR0BbQAAAAAAAaAdLbWgIR0BWP3D7655JdX2UKGgGR0Bu4AAAAAAAaAdL92gIR0BWY4vzvqkedX2UKGgGR0BhwAAAAAAAaAdLjmgIR0BWd8qWkadddX2UKGgGR0BqgAAAAAAAaAdL1GgIR0BWlRhc7hegdX2UKGgGR0BXgAAAAAAAaAdLXmgIR0BWogyZa3ZxdX2UKGgGR0BuYAAAAAAAaAdL82gIR0BWw7onrpqzdX2UKGgGR0BuQAAAAAAAaAdL8mgIR0BW5a/IsAeadX2UKGgGR0BSwAAAAAAAaAdLS2gIR0BW7KnFYMfBdX2UKGgGR0BnYAAAAAAAaAdLu2gIR0BW/c+7lJYldX2UKGgGR0B1sAAAAAAAaAdNWwFoCEdAVx9Vea8Yh3V9lChoBkdATwAAAAAAAGgHSz5oCEdAVyWC7K7qZHV9lChoBkdAcRAAAAAAAGgHTREBaAhHQFdAh7mdRSB1fZQoaAZHQGOgAAAAAABoB0udaAhHQFdQ8Rcu8K51fZQoaAZHQHRQAAAAAABoB01FAWgIR0BXb7GrCFbndX2UKGgGR0BvgAAAAAAAaAdL/GgIR0BXiMV+I/JOdX2UKGgGR0BooAAAAAAAaAdLxWgIR0BXm+q//NqydX2UKGgGR0BjwAAAAAAAaAdLnmgIR0BXqv1xsEaEdX2UKGgGR0BWgAAAAAAAaAdLWmgIR0BXsxwAEMb4dX2UKGgGR0BoAAAAAAAAaAdLwGgIR0BXxUpqh11XdX2UKGgGR0Bk4AAAAAAAaAdLp2gIR0BX1NmcvugIdX2UKGgGR0BhYAAAAAAAaAdLi2gIR0BX4yon8baRdX2UKGgGR0BvYAAAAAAAaAdL+2gIR0BX+wRChN/OdX2UKGgGR0BugAAAAAAAaAdL9GgIR0BYEUPDpC8fdX2UKGgGR0BkIAAAAAAAaAdLoWgIR0BYIi925hBrdX2UKGgGR0Bz0AAAAAAAaAdNPQFoCEdAWD6nYQJ5V3V9lChoBkdAc/AAAAAAAGgHTT8BaAhHQFhcfsu3+dd1fZQoaAZHQGxAAAAAAABoB0viaAhHQFhx5tWMju91fZQoaAZHQG7AAAAAAABoB0v2aAhHQFiI4hEBsAN1fZQoaAZHQGZAAAAAAABoB0uyaAhHQFiaLcsUZel1fZQoaAZHQG8gAAAAAABoB0v5aAhHQFixoakyk9F1fZQoaAZHQGPAAAAAAABoB0ueaAhHQFjBTZxrBTJ1fZQoaAZHQGsAAAAAAABoB0vYaAhHQFjWr30wrUd1fZQoaAZHQGIAAAAAAABoB0uQaAhHQFjlAMlTm4l1fZQoaAZHQHZwAAAAAABoB01nAWgIR0BZByKJl8PXdX2UKGgGR0BmIAAAAAAAaAdLsWgIR0BZGKxLTQVsdX2UKGgGR0BqgAAAAAAAaAdL1GgIR0BZLaRuCPIXdX2UKGgGR0BoIAAAAAAAaAdLwWgIR0BZP3NHH3lCdX2UKGgGR0Bx4AAAAAAAaAdNHgFoCEdAWVwwZflZHXV9lChoBkdAY+AAAAAAAGgHS59oCEdAWXEZbY9PlHV9lChoBkdAaCAAAAAAAGgHS8FoCEdAWYlWCEpRXXV9lChoBkdAaWAAAAAAAGgHS8toCEdAWaKOCGvfTHV9lChoBkdAcCAAAAAAAGgHTQIBaAhHQFnEjxCpm291fZQoaAZHQGiAAAAAAABoB0vEaAhHQFnedxAB1cN1fZQoaAZHQHVgAAAAAABoB01WAWgIR0BaD2UB4lhPdX2UKGgGR0BgoAAAAAAAaAdLhWgIR0BaI2DL8rI6dX2UKGgGR0BwQAAAAAAAaAdNBAFoCEdAWknl5nlGPXV9lChoBkdAbgAAAAAAAGgHS/BoCEdAWpCE+PikwnV9lChoBkdAbCAAAAAAAGgHS+FoCEdAWtTn6l+Ey3V9lChoBkdAZGAAAAAAAGgHS6NoCEdAWu5mcvugH3V9lChoBkdAaiAAAAAAAGgHS9FoCEdAWy8cNpdrwnV9lChoBkdAcGAAAAAAAGgHTQYBaAhHQFtUTFVDKHR1fZQoaAZHQGzAAAAAAABoB0vmaAhHQFtqXY150KZ1fZQoaAZHQGFgAAAAAABoB0uLaAhHQFt4JVsDW9V1fZQoaAZHQGaAAAAAAABoB0u0aAhHQFuISPEKmbd1fZQoaAZHQHAgAAAAAABoB00CAWgIR0BboaH9FWn1dX2UKGgGR0BgoAAAAAAAaAdLhWgIR0BbriwwCbMHdX2UKGgGR0BhoAAAAAAAaAdLjWgIR0Bbu2qo60Y1dX2UKGgGR0B0kAAAAAAAaAdNSQFoCEdAW9rhrFfiP3V9lChoBkdAZYAAAAAAAGgHS6xoCEdAW+rHZK3/gnV9lChoBkdAaQAAAAAAAGgHS8hoCEdAW/33Dej2z3V9lChoBkdAa2AAAAAAAGgHS9toCEdAXBLCBPKuCHV9lChoBkdAcGAAAAAAAGgHTQYBaAhHQFwruscQyyl1fZQoaAZHQGiAAAAAAABoB0vEaAhHQFw/g8KXv6V1fZQoaAZHQG2AAAAAAABoB0vsaAhHQFxV0iQkond1fZQoaAZHQGrAAAAAAABoB0vWaAhHQFxqpsoDxLF1ZS4=" }, "ep_success_buffer": { ":type:": "", ":serialized:": "gAWVIAAAAAAAAACMC2NvbGxlY3Rpb25zlIwFZGVxdWWUk5QpS2SGlFKULg==" }, "_n_updates": 12500, "observation_space": { ":type:": "", ":serialized:": "gAWVEAIAAAAAAACMFGd5bW5hc2l1bS5zcGFjZXMuYm94lIwDQm94lJOUKYGUfZQojAVkdHlwZZSMBW51bXB5lGgFk5SMAmY0lImIh5RSlChLA4wBPJROTk5K/////0r/////SwB0lGKMDWJvdW5kZWRfYmVsb3eUjBJudW1weS5jb3JlLm51bWVyaWOUjAtfZnJvbWJ1ZmZlcpSTlCiWBAAAAAAAAAABAQEBlGgHjAJiMZSJiIeUUpQoSwOMAXyUTk5OSv////9K/////0sAdJRiSwSFlIwBQ5R0lFKUjA1ib3VuZGVkX2Fib3ZllGgQKJYEAAAAAAAAAAEBAQGUaBRLBIWUaBh0lFKUjAZfc2hhcGWUSwSFlIwDbG93lGgQKJYQAAAAAAAAAJqZmcD//3//UHfWvv//f/+UaApLBIWUaBh0lFKUjARoaWdolGgQKJYQAAAAAAAAAJqZmUD//39/UHfWPv//f3+UaApLBIWUaBh0lFKUjAhsb3dfcmVwcpSMPVstNC44MDAwMDAyZSswMCAtMy40MDI4MjM1ZSszOCAtNC4xODg3OTAzZS0wMSAtMy40MDI4MjM1ZSszOF2UjAloaWdoX3JlcHKUjDlbNC44MDAwMDAyZSswMCAzLjQwMjgyMzVlKzM4IDQuMTg4NzkwM2UtMDEgMy40MDI4MjM1ZSszOF2UjApfbnBfcmFuZG9tlE51Yi4=", "dtype": "float32", "bounded_below": "[ True True True True]", "bounded_above": "[ True True True True]", "_shape": [ 4 ], "low": "[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]", "high": "[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]", "low_repr": "[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]", "high_repr": "[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]", "_np_random": null }, "action_space": { ":type:": "", ":serialized:": "gAWVgAEAAAAAAACMGWd5bW5hc2l1bS5zcGFjZXMuZGlzY3JldGWUjAhEaXNjcmV0ZZSTlCmBlH2UKIwBbpSMFW51bXB5LmNvcmUubXVsdGlhcnJheZSMBnNjYWxhcpSTlIwFbnVtcHmUjAVkdHlwZZSTlIwCaTiUiYiHlFKUKEsDjAE8lE5OTkr/////Sv////9LAHSUYkMIAgAAAAAAAACUhpRSlIwFc3RhcnSUaAhoDkMIAAAAAAAAAACUhpRSlIwGX3NoYXBllCloCmgOjApfbnBfcmFuZG9tlIwUbnVtcHkucmFuZG9tLl9waWNrbGWUjBBfX2dlbmVyYXRvcl9jdG9ylJOUjAVQQ0c2NJSFlFKUfZQojA1iaXRfZ2VuZXJhdG9ylIwFUENHNjSUjAVzdGF0ZZR9lChoI4oQqZ5/eW47OcpJEx5wQGxLVYwDaW5jlIoQgdI10wBd32KtC0nqQUyVMnWMCmhhc191aW50MzKUSwGMCHVpbnRlZ2VylEr7BG8MdWJ1Yi4=", "n": "2", "start": "0", "_shape": [], "dtype": "int64", "_np_random": "Generator(PCG64)" }, "n_envs": 1, "buffer_size": 1000000, "batch_size": 32, "learning_starts": 50000, "tau": 1.0, "gamma": 0.99, "gradient_steps": 1, "optimize_memory_usage": false, "replay_buffer_class": { ":type:": "", ":serialized:": "gAWVNQAAAAAAAACMIHN0YWJsZV9iYXNlbGluZXMzLmNvbW1vbi5idWZmZXJzlIwMUmVwbGF5QnVmZmVylJOULg==", "__module__": "stable_baselines3.common.buffers", "__annotations__": "{'observations': , 'next_observations': , 'actions': , 'rewards': , 'dones': , 'timeouts': }", "__doc__": "\n Replay buffer used in off-policy algorithms like SAC/TD3.\n\n :param buffer_size: Max number of element in the buffer\n :param observation_space: Observation space\n :param action_space: Action space\n :param device: PyTorch device\n :param n_envs: Number of parallel environments\n :param optimize_memory_usage: Enable a memory efficient variant\n of the replay buffer which reduces by almost a factor two the memory used,\n at a cost of more complexity.\n See https://github.com/DLR-RM/stable-baselines3/issues/37#issuecomment-637501195\n and https://github.com/DLR-RM/stable-baselines3/pull/28#issuecomment-637559274\n Cannot be used in combination with handle_timeout_termination.\n :param handle_timeout_termination: Handle timeout termination (due to timelimit)\n separately and treat the task as infinite horizon task.\n https://github.com/DLR-RM/stable-baselines3/issues/284\n ", "__init__": "", "add": "", "sample": "", "_get_samples": "", "_maybe_cast_dtype": ")>", "__abstractmethods__": "frozenset()", "_abc_impl": "<_abc._abc_data object at 0x791a617cd9c0>" }, "replay_buffer_kwargs": {}, "train_freq": { ":type:": "", ":serialized:": "gAWVYQAAAAAAAACMJXN0YWJsZV9iYXNlbGluZXMzLmNvbW1vbi50eXBlX2FsaWFzZXOUjAlUcmFpbkZyZXGUk5RLBGgAjBJUcmFpbkZyZXF1ZW5jeVVuaXSUk5SMBHN0ZXCUhZRSlIaUgZQu" }, "use_sde_at_warmup": false, "exploration_initial_eps": 1.0, "exploration_final_eps": 0.05, "exploration_fraction": 0.1, "target_update_interval": 10000, "_n_calls": 100000, "max_grad_norm": 10, "exploration_rate": 0.05, "lr_schedule": { ":type:": "", ":serialized:": "gAWVxQIAAAAAAACMF2Nsb3VkcGlja2xlLmNsb3VkcGlja2xllIwOX21ha2VfZnVuY3Rpb26Uk5QoaACMDV9idWlsdGluX3R5cGWUk5SMCENvZGVUeXBllIWUUpQoSwFLAEsASwFLAUsTQwSIAFMAlE6FlCmMAV+UhZSMSS91c3IvbG9jYWwvbGliL3B5dGhvbjMuMTAvZGlzdC1wYWNrYWdlcy9zdGFibGVfYmFzZWxpbmVzMy9jb21tb24vdXRpbHMucHmUjARmdW5jlEuDQwIEAZSMA3ZhbJSFlCl0lFKUfZQojAtfX3BhY2thZ2VfX5SMGHN0YWJsZV9iYXNlbGluZXMzLmNvbW1vbpSMCF9fbmFtZV9flIwec3RhYmxlX2Jhc2VsaW5lczMuY29tbW9uLnV0aWxzlIwIX19maWxlX1+UjEkvdXNyL2xvY2FsL2xpYi9weXRob24zLjEwL2Rpc3QtcGFja2FnZXMvc3RhYmxlX2Jhc2VsaW5lczMvY29tbW9uL3V0aWxzLnB5lHVOTmgAjBBfbWFrZV9lbXB0eV9jZWxslJOUKVKUhZR0lFKUjBxjbG91ZHBpY2tsZS5jbG91ZHBpY2tsZV9mYXN0lIwSX2Z1bmN0aW9uX3NldHN0YXRllJOUaB99lH2UKGgWaA2MDF9fcXVhbG5hbWVfX5SMGWNvbnN0YW50X2ZuLjxsb2NhbHM+LmZ1bmOUjA9fX2Fubm90YXRpb25zX1+UfZSMDl9fa3dkZWZhdWx0c19flE6MDF9fZGVmYXVsdHNfX5ROjApfX21vZHVsZV9flGgXjAdfX2RvY19flE6MC19fY2xvc3VyZV9flGgAjApfbWFrZV9jZWxslJOURz8aNuLrHEMthZRSlIWUjBdfY2xvdWRwaWNrbGVfc3VibW9kdWxlc5RdlIwLX19nbG9iYWxzX1+UfZR1hpSGUjAu" }, "batch_norm_stats": [], "batch_norm_stats_target": [], "exploration_schedule": { ":type:": "", ":serialized:": "gAWVZQMAAAAAAACMF2Nsb3VkcGlja2xlLmNsb3VkcGlja2xllIwOX21ha2VfZnVuY3Rpb26Uk5QoaACMDV9idWlsdGluX3R5cGWUk5SMCENvZGVUeXBllIWUUpQoSwFLAEsASwFLBEsTQyhkAXwAGACIAWsEcgiIAFMAiAJkAXwAGACIAIgCGAAUAIgBGwAXAFMAlE5LAYaUKYwScHJvZ3Jlc3NfcmVtYWluaW5nlIWUjEkvdXNyL2xvY2FsL2xpYi9weXRob24zLjEwL2Rpc3QtcGFja2FnZXMvc3RhYmxlX2Jhc2VsaW5lczMvY29tbW9uL3V0aWxzLnB5lIwEZnVuY5RLcUMGDAEEARgClIwDZW5klIwMZW5kX2ZyYWN0aW9ulIwFc3RhcnSUh5QpdJRSlH2UKIwLX19wYWNrYWdlX1+UjBhzdGFibGVfYmFzZWxpbmVzMy5jb21tb26UjAhfX25hbWVfX5SMHnN0YWJsZV9iYXNlbGluZXMzLmNvbW1vbi51dGlsc5SMCF9fZmlsZV9flIxJL3Vzci9sb2NhbC9saWIvcHl0aG9uMy4xMC9kaXN0LXBhY2thZ2VzL3N0YWJsZV9iYXNlbGluZXMzL2NvbW1vbi91dGlscy5weZR1Tk5oAIwQX21ha2VfZW1wdHlfY2VsbJSTlClSlGgdKVKUaB0pUpSHlHSUUpSMHGNsb3VkcGlja2xlLmNsb3VkcGlja2xlX2Zhc3SUjBJfZnVuY3Rpb25fc2V0c3RhdGWUk5RoI32UfZQoaBhoDYwMX19xdWFsbmFtZV9flIwbZ2V0X2xpbmVhcl9mbi48bG9jYWxzPi5mdW5jlIwPX19hbm5vdGF0aW9uc19flH2UKGgKjAhidWlsdGluc5SMBWZsb2F0lJOUjAZyZXR1cm6UaC91jA5fX2t3ZGVmYXVsdHNfX5ROjAxfX2RlZmF1bHRzX1+UTowKX19tb2R1bGVfX5RoGYwHX19kb2NfX5ROjAtfX2Nsb3N1cmVfX5RoAIwKX21ha2VfY2VsbJSTlEc/qZmZmZmZmoWUUpRoN0c/uZmZmZmZmoWUUpRoN0c/8AAAAAAAAIWUUpSHlIwXX2Nsb3VkcGlja2xlX3N1Ym1vZHVsZXOUXZSMC19fZ2xvYmFsc19flH2UdYaUhlIwLg==" } }