比较提交

...
此合并请求有变更与目标分支冲突。
/config/ppo/PushBlock.yaml
/Project/Packages/manifest.json
/Project/ProjectSettings/TagManager.asset
/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs
/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs
/Project/Assets/ML-Agents/Examples/Hallway/Prefabs/SymbolFinderArea.prefab
/Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity
/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab
/com.unity.ml-agents/Editor/BehaviorParametersEditor.cs
/com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs
/ml-agents/mlagents/trainers/demo_loader.py
/ml-agents/mlagents/trainers/ghost/trainer.py
/ml-agents/mlagents/trainers/optimizer/torch_optimizer.py
/ml-agents/mlagents/trainers/agent_processor.py
/ml-agents/mlagents/trainers/behavior_id_utils.py
/ml-agents/mlagents/trainers/policy/torch_policy.py
/ml-agents/mlagents/trainers/ppo/optimizer_torch.py
/ml-agents/mlagents/trainers/ppo/trainer.py
/ml-agents/mlagents/trainers/sac/trainer.py
/ml-agents/mlagents/trainers/sac/optimizer_torch.py
/ml-agents/mlagents/trainers/tests/test_buffer.py
/ml-agents/mlagents/trainers/buffer.py
/ml-agents/mlagents/trainers/torch/components/bc/module.py
/ml-agents/mlagents/trainers/torch/components/reward_providers/curiosity_reward_provider.py
/ml-agents/mlagents/trainers/torch/components/reward_providers/gail_reward_provider.py
/ml-agents/mlagents/trainers/torch/utils.py
/ml-agents/mlagents/trainers/torch/networks.py
/ml-agents/mlagents/trainers/torch/encoders.py
/ml-agents/mlagents/trainers/trajectory.py
/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs
/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs
/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs.meta
/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity
/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs
/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs
/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx
/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx.meta

24 次代码提交

共有 60 个文件被更改,包括 9233 次插入405 次删除
  1. 2
      com.unity.ml-agents/Editor/BehaviorParametersEditor.cs
  2. 9
      com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs
  3. 2
      config/ppo/PushBlock.yaml
  4. 35
      ml-agents/mlagents/trainers/behavior_id_utils.py
  5. 7
      ml-agents/mlagents/trainers/demo_loader.py
  6. 16
      ml-agents/mlagents/trainers/sac/trainer.py
  7. 46
      ml-agents/mlagents/trainers/sac/optimizer_torch.py
  8. 39
      ml-agents/mlagents/trainers/policy/torch_policy.py
  9. 29
      ml-agents/mlagents/trainers/tests/test_buffer.py
  10. 47
      ml-agents/mlagents/trainers/agent_processor.py
  11. 71
      ml-agents/mlagents/trainers/buffer.py
  12. 40
      ml-agents/mlagents/trainers/optimizer/torch_optimizer.py
  13. 13
      ml-agents/mlagents/trainers/ppo/trainer.py
  14. 23
      ml-agents/mlagents/trainers/ppo/optimizer_torch.py
  15. 35
      ml-agents/mlagents/trainers/trajectory.py
  16. 14
      ml-agents/mlagents/trainers/ghost/trainer.py
  17. 38
      ml-agents/mlagents/trainers/torch/utils.py
  18. 23
      ml-agents/mlagents/trainers/torch/components/bc/module.py
  19. 29
      ml-agents/mlagents/trainers/torch/components/reward_providers/curiosity_reward_provider.py
  20. 62
      ml-agents/mlagents/trainers/torch/components/reward_providers/gail_reward_provider.py
  21. 25
      ml-agents/mlagents/trainers/torch/encoders.py
  22. 270
      ml-agents/mlagents/trainers/torch/networks.py
  23. 2
      Project/ProjectSettings/TagManager.asset
  24. 1
      Project/Packages/manifest.json
  25. 8
      Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab
  26. 146
      Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity
  27. 22
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs
  28. 2
      Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity.meta
  29. 932
      Project/Assets/ML-Agents/Examples/Hallway/Prefabs/SymbolFinderArea.prefab
  30. 12
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs
  31. 63
      config/ppo/WallJumpCollab.yaml
  32. 26
      config/ppo/HallwayCollab.yaml
  33. 50
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs
  34. 11
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs.meta
  35. 11
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs.meta
  36. 67
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs
  37. 7
      Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity.meta
  38. 1001
      Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity
  39. 7
      Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab.meta
  40. 1001
      Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab
  41. 11
      Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs.meta
  42. 143
      Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs
  43. 7
      Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity.meta
  44. 1001
      Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity
  45. 11
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs.meta
  46. 194
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs
  47. 566
      Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx
  48. 14
      Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx.meta
  49. 9
      Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity.meta
  50. 969
      Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity
  51. 12
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs.meta
  52. 11
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs.meta
  53. 60
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs
  54. 11
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs.meta
  55. 236
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs
  56. 116
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs
  57. 7
      Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabArea.prefab.meta
  58. 1001
      Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabArea.prefab
  59. 1001
      Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx
  60. 14
      Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx.meta

2
com.unity.ml-agents/Editor/BehaviorParametersEditor.cs


const string k_InferenceDeviceName = "m_InferenceDevice";
const string k_BehaviorTypeName = "m_BehaviorType";
const string k_TeamIdName = "TeamId";
const string k_GroupIdName = "GroupId";
const string k_UseChildSensorsName = "m_UseChildSensors";
const string k_ObservableAttributeHandlingName = "m_ObservableAttributeHandling";

}
needPolicyUpdate = needPolicyUpdate || EditorGUI.EndChangeCheck();
EditorGUILayout.PropertyField(so.FindProperty(k_GroupIdName));
EditorGUILayout.PropertyField(so.FindProperty(k_TeamIdName));
EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties());
{

9
com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs


/// </summary>
[HideInInspector, SerializeField, FormerlySerializedAs("m_TeamID")]
public int TeamId;
/// <summary>
/// The group ID for this behavior.
/// </summary>
[HideInInspector, SerializeField]
[Tooltip("Assign the same Group ID to all Agents in the same Area.")]
public int GroupId;
// TODO properties here instead of Agent
[FormerlySerializedAs("m_useChildSensors")]

/// </summary>
public string FullyQualifiedBehaviorName
{
get { return m_BehaviorName + "?team=" + TeamId; }
get { return m_BehaviorName + "?team=" + TeamId + "&group=" + GroupId; }
}
internal IPolicy GeneratePolicy(ActionSpec actionSpec, HeuristicPolicy.ActionGenerator heuristic)

2
config/ppo/PushBlock.yaml


gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 2000000
max_steps: 5000000 #2000000
time_horizon: 64
summary_freq: 60000
threaded: true

35
ml-agents/mlagents/trainers/behavior_id_utils.py


from typing import NamedTuple
from typing import NamedTuple, Optional
from urllib.parse import urlparse, parse_qs

behavior_id: str
brain_name: str
team_id: int
group_id: int
Parses a name_behavior_id of the form name?team=0
Parses a name_behavior_id of the form name?team=0&group=0
group_id: int = 0
if "group" in ids:
group_id = int(ids["group"][0])
behavior_id=name_behavior_id, brain_name=name, team_id=team_id
behavior_id=name_behavior_id,
brain_name=name,
team_id=team_id,
group_id=group_id,
def create_name_behavior_id(name: str, team_id: int) -> str:
def create_name_behavior_id(
name: str, team_id: Optional[int] = None, group_id: Optional[int] = None
) -> str:
"""
Reconstructs fully qualified behavior name from name and team_id
:param name: brain name
:param team_id: team ID
:return: name_behavior_id
Reconstructs fully qualified behavior name from name and team_id
:param name: brain name
:param team_id: team ID
:return: name_behavior_id
"""
return name + "?team=" + str(team_id)
final_name = name
if team_id is not None:
final_name += f"?team={team_id}"
if group_id is not None:
final_name += f"&group={group_id}"
return final_name
def get_global_agent_id(worker_id: int, agent_id: int) -> str:

7
ml-agents/mlagents/trainers/demo_loader.py


from mlagents_envs.communicator_objects.agent_info_action_pair_pb2 import (
AgentInfoActionPairProto,
)
from mlagents.trainers.trajectory import SplitObservations
from mlagents_envs.rpc_utils import behavior_spec_from_proto, steps_from_proto
from mlagents_envs.base_env import BehaviorSpec
from mlagents_envs.communicator_objects.brain_parameters_pb2 import BrainParametersProto

demo_raw_buffer["done"].append(next_done)
demo_raw_buffer["rewards"].append(next_reward)
split_obs = SplitObservations.from_observations(current_obs)
for i, obs in enumerate(split_obs.visual_observations):
demo_raw_buffer["visual_obs%d" % i].append(obs)
demo_raw_buffer["vector_obs"].append(split_obs.vector_observations)
demo_raw_buffer["obs"].append(current_obs)
demo_raw_buffer["actions"].append(current_pair_info.action_info.vector_actions)
# TODO: update the demonstraction files and read from the new proto format
if behavior_spec.action_spec.continuous_size > 0:
demo_raw_buffer["continuous_action"].append(

16
ml-agents/mlagents/trainers/sac/trainer.py


from mlagents.trainers.trainer.rl_trainer import RLTrainer
from mlagents.trainers.policy.torch_policy import TorchPolicy
from mlagents.trainers.sac.optimizer_torch import TorchSACOptimizer
from mlagents.trainers.trajectory import Trajectory, SplitObservations
from mlagents.trainers.trajectory import Trajectory
from mlagents.trainers.buffer import AgentBuffer
from mlagents import tf_utils
if tf_utils.is_available():

# Update the normalization
if self.is_training:
self.policy.update_normalization(agent_buffer_trajectory["vector_obs"])
obs_to_normalize = AgentBuffer.obs_list_to_obs_batch(
agent_buffer_trajectory["obs"]
)
self.policy.update_normalization(obs_to_normalize)
# Evaluate all reward functions for reporting purposes
self.collected_rewards["environment"][agent_id] += np.sum(

# Bootstrap using the last step rather than the bootstrap step if max step is reached.
# Set last element to duplicate obs and remove dones.
if last_step.interrupted:
vec_vis_obs = SplitObservations.from_observations(last_step.obs)
for i, obs in enumerate(vec_vis_obs.visual_observations):
agent_buffer_trajectory["next_visual_obs%d" % i][-1] = obs
if vec_vis_obs.vector_observations.size > 1:
agent_buffer_trajectory["next_vector_in"][
-1
] = vec_vis_obs.vector_observations
agent_buffer_trajectory["next_obs"][-1] = last_step.obs
agent_buffer_trajectory["done"][-1] = False
# Append to update buffer

46
ml-agents/mlagents/trainers/sac/optimizer_torch.py


def forward(
self,
vec_inputs: List[torch.Tensor],
vis_inputs: List[torch.Tensor],
net_inputs: List[torch.Tensor],
actions: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,

"""
Performs a forward pass on the value network, which consists of a Q1 and Q2
network. Optionally does not evaluate gradients for either the Q1, Q2, or both.
:param vec_inputs: List of vector observation tensors.
:param vis_input: List of visual observation tensors.
:param net_inputs: List of observation tensors.
:param actions: For a continuous Q function (has actions), tensor of actions.
Otherwise, None.
:param memories: Initial memories if using memory. Otherwise, None.

if not q1_grad:
stack.enter_context(torch.no_grad())
q1_out, _ = self.q1_network(
vec_inputs,
vis_inputs,
net_inputs,
actions=actions,
memories=memories,
sequence_length=sequence_length,

stack.enter_context(torch.no_grad())
q2_out, _ = self.q2_network(
vec_inputs,
vis_inputs,
net_inputs,
actions=actions,
memories=memories,
sequence_length=sequence_length,

for name in self.reward_signals:
rewards[name] = ModelUtils.list_to_tensor(batch[f"{name}_rewards"])
vec_obs = [ModelUtils.list_to_tensor(batch["vector_obs"])]
next_vec_obs = [ModelUtils.list_to_tensor(batch["next_vector_in"])]
obs = ModelUtils.list_to_tensor_list(
AgentBuffer.obs_list_to_obs_batch(batch["obs"])
)
next_obs = ModelUtils.list_to_tensor_list(
AgentBuffer.obs_list_to_obs_batch(batch["next_obs"])
)
act_masks = ModelUtils.list_to_tensor(batch["action_mask"])
actions = AgentAction.from_dict(batch)

torch.zeros_like(next_memories) if next_memories is not None else None
)
vis_obs: List[torch.Tensor] = []
next_vis_obs: List[torch.Tensor] = []
if self.policy.use_vis_obs:
vis_obs = []
for idx, _ in enumerate(
self.policy.actor_critic.network_body.visual_processors
):
vis_ob = ModelUtils.list_to_tensor(batch["visual_obs%d" % idx])
vis_obs.append(vis_ob)
next_vis_ob = ModelUtils.list_to_tensor(
batch["next_visual_obs%d" % idx]
)
next_vis_obs.append(next_vis_ob)
# Copy normalizers from policy
self.value_network.q1_network.network_body.copy_normalization(
self.policy.actor_critic.network_body

value_estimates,
_,
) = self.policy.actor_critic.get_action_stats_and_value(
vec_obs,
vis_obs,
obs,
masks=act_masks,
memories=memories,
sequence_length=self.policy.sequence_length,

cont_actions = actions.continuous_tensor
q1p_out, q2p_out = self.value_network(
vec_obs,
vis_obs,
obs,
cont_sampled_actions,
memories=q_memories,
sequence_length=self.policy.sequence_length,

vec_obs,
vis_obs,
obs,
cont_actions,
memories=q_memories,
sequence_length=self.policy.sequence_length,

with torch.no_grad():
target_values, _ = self.target_network(
next_vec_obs,
next_vis_obs,
next_obs,
memories=next_memories,
sequence_length=self.policy.sequence_length,
)

39
ml-agents/mlagents/trainers/policy/torch_policy.py


def _split_decision_step(
self, decision_requests: DecisionSteps
) -> Tuple[SplitObservations, np.ndarray]:
vec_vis_obs = SplitObservations.from_observations(decision_requests.obs)
obs = ModelUtils.list_to_tensor_list(decision_requests.obs)
mask = None
if self.behavior_spec.action_spec.discrete_size > 0:
mask = torch.ones([len(decision_requests), np.sum(self.act_size)])

)
return vec_vis_obs, mask
return obs, mask
def update_normalization(self, vector_obs: np.ndarray) -> None:
def update_normalization(self, vector_obs: List[np.ndarray]) -> None:
vector_obs = [torch.as_tensor(vector_obs)]
all_obs = ModelUtils.list_to_tensor_list(vector_obs)
self.actor_critic.update_normalization(vector_obs)
self.actor_critic.update_normalization(all_obs)
vec_obs: List[torch.Tensor],
vis_obs: List[torch.Tensor],
obs: List[torch.Tensor],
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[AgentAction, ActionLogProbs, torch.Tensor, torch.Tensor]:
"""
:param vec_obs: List of vector observations.

:param seq_len: Sequence length when using RNN.
:return: Tuple of AgentAction, ActionLogProbs, entropies, and output memories.
"""
actions, log_probs, entropies, _, memories = self.actor_critic.get_action_stats_and_value(
vec_obs, vis_obs, masks, memories, seq_len
actions, log_probs, entropies, memories = self.actor_critic.get_action_stats(
obs, masks, memories, seq_len
vec_obs: torch.Tensor,
vis_obs: torch.Tensor,
obs: List[torch.Tensor],
critic_obs: Optional[List[List[torch.Tensor]]] = None,
vec_obs, vis_obs, actions, masks, memories, seq_len
obs, actions, masks, memories, seq_len, critic_obs
)
return log_probs, entropies, value_heads

:param decision_requests: DecisionStep object containing inputs.
:return: Outputs from network as defined by self.inference_dict.
"""
vec_vis_obs, masks = self._split_decision_step(decision_requests)
vec_obs = [torch.as_tensor(vec_vis_obs.vector_observations)]
vis_obs = [
torch.as_tensor(vis_ob) for vis_ob in vec_vis_obs.visual_observations
]
memories = torch.as_tensor(self.retrieve_memories(global_agent_ids)).unsqueeze(
0
obs, masks = self._split_decision_step(decision_requests)
memories = (
torch.as_tensor(self.retrieve_memories(global_agent_ids)).unsqueeze(0)
if self.use_recurrent
else None
vec_obs, vis_obs, masks=masks, memories=memories
obs, masks=masks, memories=memories
)
action_tuple = action.to_action_tuple()
run_out["action"] = action_tuple

29
ml-agents/mlagents/trainers/tests/test_buffer.py


b = AgentBuffer()
for step in range(9):
b["vector_observation"].append(
[
100 * fake_agent_id + 10 * step + 1,
100 * fake_agent_id + 10 * step + 2,
100 * fake_agent_id + 10 * step + 3,
]
np.array(
[
100 * fake_agent_id + 10 * step + 1,
100 * fake_agent_id + 10 * step + 2,
100 * fake_agent_id + 10 * step + 3,
],
dtype=np.float32,
)
[100 * fake_agent_id + 10 * step + 4, 100 * fake_agent_id + 10 * step + 5]
np.array(
[
100 * fake_agent_id + 10 * step + 4,
100 * fake_agent_id + 10 * step + 5,
],
dtype=np.float32,
)
)
return b

a = agent_1_buffer["vector_observation"].get_batch(
batch_size=2, training_length=1, sequential=True
)
assert_array(np.array(a), np.array([[171, 172, 173], [181, 182, 183]]))
assert len(a) == 2
assert_array(
np.array(a), np.array([[171, 172, 173], [181, 182, 183]], dtype=np.float32)
)
a = agent_2_buffer["vector_observation"].get_batch(
batch_size=2, training_length=3, sequential=True
)

[261, 262, 263],
[271, 272, 273],
[281, 282, 283],
]
],
dtype=np.float32,
),
)
a = agent_2_buffer["vector_observation"].get_batch(

47
ml-agents/mlagents/trainers/agent_processor.py


import sys
import numpy as np
from typing import List, Dict, TypeVar, Generic, Tuple, Any, Union
from collections import defaultdict, Counter
import queue

:param stats_category: The category under which to write the stats. Usually, this comes from the Trainer.
"""
self.experience_buffers: Dict[str, List[AgentExperience]] = defaultdict(list)
self.last_experience: Dict[str, AgentExperience] = {}
# current_obs is used to collect the last seen obs of all the agents, and assemble the next_collab_obs.
self.current_obs: Dict[str, List[np.ndarray]] = {}
# last_take_action_outputs stores the action a_t taken before the current observation s_(t+1), while
# grabbing previous_action from the policy grabs the action PRIOR to that, a_(t-1).
self.last_take_action_outputs: Dict[str, ActionInfoOutputs] = {}

self._process_step(
terminal_step, global_id, terminal_steps.agent_id_to_index[local_id]
)
for terminal_step in terminal_steps.values():
local_id = terminal_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)
self._assemble_trajectory(terminal_step, global_id)
self.current_obs.clear()
# Clean the last experience dictionary for terminal steps
for terminal_step in terminal_steps.values():
local_id = terminal_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)
self._safe_delete(self.last_experience, global_id)
# Iterate over all the decision steps
for ongoing_step in decision_steps.values():
local_id = ongoing_step.agent_id

)
for ongoing_step in decision_steps.values():
local_id = ongoing_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)
self._assemble_trajectory(ongoing_step, global_id)
self.current_obs.clear()
for _gid in action_global_agent_ids:
# If the ID doesn't have a last step result, the agent just reset,

prev_action = self.policy.retrieve_previous_action([global_id])[0, :]
experience = AgentExperience(
obs=obs,
collab_obs=[],
reward=step.reward,
done=done,
action=action_tuple,

interrupted=interrupted,
memory=memory,
)
self.current_obs[global_id] = step.obs
self.last_experience[global_id] = experience
def _assemble_trajectory(
self, step: Union[TerminalStep, DecisionStep], global_id: str
) -> None:
if global_id in self.last_experience:
experience = self.last_experience[global_id]
terminated = isinstance(step, TerminalStep)
# Add remaining shared obs to AgentExperience
for _id, _exp in self.last_experience.items():
if _id == global_id:
continue
else:
self.last_experience[global_id].collab_obs.append(_exp.obs)
# Add the value outputs if needed
self.experience_buffers[global_id].append(experience)
self.episode_rewards[global_id] += step.reward

len(self.experience_buffers[global_id]) >= self.max_trajectory_length
or terminated
):
# Make next AgentExperience
next_collab_obs = []
for _id, _exp in self.current_obs.items():
if _id == global_id:
continue
else:
next_collab_obs.append(_exp)
next_collab_obs=next_collab_obs,
behavior_id=self.behavior_id,
)
for traj_queue in self.trajectory_queues:

71
ml-agents/mlagents/trainers/buffer.py


import numpy as np
import h5py
from typing import List, BinaryIO
from typing import List, BinaryIO, Any
import itertools
from mlagents_envs.exception import UnityException

class AgentBufferField(list):
"""
AgentBufferField is a list of numpy arrays. When an agent collects a field, you can add it to its
AgentBufferField with the append method.
AgentBufferField is a list of data, usually numpy arrays. When an agent collects a field,
you can add it to its AgentBufferField with the append method.
"""
def __init__(self):

def __str__(self):
return str(np.array(self).shape)
def append(self, element: np.ndarray, padding_value: float = 0.0) -> None:
def append(self, element: Any, padding_value: Any = 0.0) -> None:
Adds an element to this list. Also lets you change the padding
Adds an element to this AgentBuffer. Also lets you change the padding
type, so that it can be set on append (e.g. action_masks should
be padded with 1.)
:param element: The element to append to the list.

self.padding_value = padding_value
def extend(self, data: np.ndarray) -> None:
"""
Adds a list of np.arrays to the end of the list of np.arrays.
:param data: The np.array list to append.
def set(self, data: List[Any]) -> None:
self += list(np.array(data, dtype=np.float32))
def set(self, data):
"""
Sets the list of np.array to the input data
:param data: The np.array list to be set.
Sets the AgentBuffer to the provided list
:param data: The list to be set.
dtype = None
if data is not None and len(data) and isinstance(data[0], float):
dtype = np.float32
self[:] = list(np.array(data, dtype=dtype))
self[:] = data
def get_batch(
self,

) -> np.ndarray:
) -> List[Any]:
from the list of np.array
from the AgentBuffer.
:param batch_size: The number of elements to retrieve. If None:
All elements will be retrieved.
:param training_length: The length of the sequence to be retrieved. If

)
if batch_size * training_length > len(self):
padding = np.array(self[-1], dtype=np.float32) * self.padding_value
return np.array(
[padding] * (training_length - leftover) + self[:],
dtype=np.float32,
)
return [padding] * (training_length - leftover) + self[:]
return np.array(
self[len(self) - batch_size * training_length :],
dtype=np.float32,
)
return self[len(self) - batch_size * training_length :]
else:
# The sequences will have overlapping elements
if batch_size is None:

tmp_list: List[np.ndarray] = []
for end in range(len(self) - batch_size + 1, len(self) + 1):
tmp_list += self[end - training_length : end]
return np.array(tmp_list, dtype=np.float32)
return tmp_list
def reset_field(self) -> None:
"""

return len(next(iter(self.values())))
else:
return 0
@staticmethod
def obs_list_to_obs_batch(obs_list: List[List[np.ndarray]]) -> List[np.ndarray]:
"""
Converts a List of obs (an obs itself consinsting of a List of np.ndarray) to
a List of np.ndarray, with the observations batchwise.
"""
# Transpose and convert List of Lists
new_list = list(map(lambda x: np.asanyarray(list(x)), zip(*obs_list)))
return new_list
@staticmethod
def obs_list_list_to_obs_batch(
obs_list_list: List[List[List[np.ndarray]]]
) -> List[List[np.ndarray]]:
"""
Convert a List of List of obs, where one of the dimension is time and the other is number (e.g. in the
case of a variable number of critic observations) to a List of obs, where time is in the batch dimension
of the obs, and the List is the variable number of agents.
"""
new_list = list(
map(
lambda x: AgentBuffer.obs_list_to_obs_batch(list(x)),
zip(*obs_list_list),
)
)
return new_list

40
ml-agents/mlagents/trainers/optimizer/torch_optimizer.py


import numpy as np
from mlagents.trainers.buffer import AgentBuffer
from mlagents.trainers.trajectory import SplitObservations
from mlagents.trainers.torch.components.bc.module import BCModule
from mlagents.trainers.torch.components.reward_providers import create_reward_provider

)
def get_trajectory_value_estimates(
self, batch: AgentBuffer, next_obs: List[np.ndarray], done: bool
self,
batch: AgentBuffer,
next_obs: List[np.ndarray],
next_critic_obs: List[List[np.ndarray]],
done: bool,
vector_obs = [ModelUtils.list_to_tensor(batch["vector_obs"])]
if self.policy.use_vis_obs:
visual_obs = []
for idx, _ in enumerate(
self.policy.actor_critic.network_body.visual_processors
):
visual_ob = ModelUtils.list_to_tensor(batch["visual_obs%d" % idx])
visual_obs.append(visual_ob)
else:
visual_obs = []
obs = ModelUtils.list_to_tensor_list(
AgentBuffer.obs_list_to_obs_batch(batch["obs"])
)
next_obs = ModelUtils.list_to_tensor_list(next_obs)
memory = torch.zeros([1, 1, self.policy.m_size])
vec_vis_obs = SplitObservations.from_observations(next_obs)
next_vec_obs = [
ModelUtils.list_to_tensor(vec_vis_obs.vector_observations).unsqueeze(0)
critic_obs_np = AgentBuffer.obs_list_list_to_obs_batch(batch["critic_obs"])
critic_obs = [
ModelUtils.list_to_tensor_list(_agent_obs) for _agent_obs in critic_obs_np
next_vis_obs = [
ModelUtils.list_to_tensor(_vis_ob).unsqueeze(0)
for _vis_ob in vec_vis_obs.visual_observations
next_critic_obs = [
ModelUtils.list_to_tensor_list(_obs) for _obs in next_critic_obs
memory = torch.zeros([1, 1, self.policy.m_size])
vector_obs, visual_obs, memory, sequence_length=batch.num_experiences
obs, memory, sequence_length=batch.num_experiences, critic_obs=critic_obs
next_vec_obs, next_vis_obs, next_memory, sequence_length=1
next_obs, next_memory, sequence_length=1, critic_obs=next_critic_obs
)
for name, estimate in value_estimates.items():

13
ml-agents/mlagents/trainers/ppo/trainer.py


from mlagents.trainers.policy.torch_policy import TorchPolicy
from mlagents.trainers.ppo.optimizer_torch import TorchPPOOptimizer
from mlagents.trainers.trajectory import Trajectory
from mlagents.trainers.buffer import AgentBuffer
from mlagents.trainers.behavior_id_utils import BehaviorIdentifiers
from mlagents.trainers.settings import TrainerSettings, PPOSettings, FrameworkType
from mlagents.trainers.torch.components.reward_providers.base_reward_provider import (

agent_buffer_trajectory = trajectory.to_agentbuffer()
# Update the normalization
if self.is_training:
self.policy.update_normalization(agent_buffer_trajectory["vector_obs"])
obs_to_normalize = AgentBuffer.obs_list_to_obs_batch(
agent_buffer_trajectory["obs"]
)
self.policy.update_normalization(obs_to_normalize)
trajectory.next_collab_obs,
trajectory.done_reached and not trajectory.interrupted,
)

n_sequences = max(
int(self.hyperparameters.batch_size / self.policy.sequence_length), 1
)
advantages = self.update_buffer["advantages"].get_batch()
# Normalize advantages
advantages = np.array(self.update_buffer["advantages"].get_batch())
(advantages - advantages.mean()) / (advantages.std() + 1e-10)
list((advantages - advantages.mean()) / (advantages.std() + 1e-10))
)
num_epoch = self.hyperparameters.num_epoch
batch_update_stats = defaultdict(list)

23
ml-agents/mlagents/trainers/ppo/optimizer_torch.py


)
returns[name] = ModelUtils.list_to_tensor(batch[f"{name}_returns"])
vec_obs = [ModelUtils.list_to_tensor(batch["vector_obs"])]
obs = ModelUtils.list_to_tensor_list(
AgentBuffer.obs_list_to_obs_batch(batch["obs"])
)
critic_obs_np = AgentBuffer.obs_list_list_to_obs_batch(batch["critic_obs"])
critic_obs = [
ModelUtils.list_to_tensor_list(_agent_obs) for _agent_obs in critic_obs_np
]
act_masks = ModelUtils.list_to_tensor(batch["action_mask"])
actions = AgentAction.from_dict(batch)

if len(memories) > 0:
memories = torch.stack(memories).unsqueeze(0)
if self.policy.use_vis_obs:
vis_obs = []
for idx, _ in enumerate(
self.policy.actor_critic.network_body.visual_processors
):
vis_ob = ModelUtils.list_to_tensor(batch["visual_obs%d" % idx])
vis_obs.append(vis_ob)
else:
vis_obs = []
vec_obs,
vis_obs,
obs,
critic_obs=critic_obs,
seq_len=self.policy.sequence_length,
)
old_log_probs = ActionLogProbs.from_dict(batch).flatten()

35
ml-agents/mlagents/trainers/trajectory.py


from typing import List, NamedTuple
import attr
import numpy as np
from mlagents.trainers.buffer import AgentBuffer

class AgentExperience(NamedTuple):
@attr.s(auto_attribs=True)
class AgentExperience:
collab_obs: List[List[np.ndarray]]
reward: float
done: bool
action: ActionTuple

next_obs: List[
np.ndarray
] # Observation following the trajectory, for bootstrapping
next_collab_obs: List[List[np.ndarray]]
agent_id: str
behavior_id: str

step of the trajectory.
"""
agent_buffer_trajectory = AgentBuffer()
vec_vis_obs = SplitObservations.from_observations(self.steps[0].obs)
curr_obs = self.steps[0].obs
next_vec_vis_obs = SplitObservations.from_observations(
self.steps[step + 1].obs
)
next_obs = self.steps[step + 1].obs
next_vec_vis_obs = SplitObservations.from_observations(self.next_obs)
for i, _ in enumerate(vec_vis_obs.visual_observations):
agent_buffer_trajectory["visual_obs%d" % i].append(
vec_vis_obs.visual_observations[i]
)
agent_buffer_trajectory["next_visual_obs%d" % i].append(
next_vec_vis_obs.visual_observations[i]
)
agent_buffer_trajectory["vector_obs"].append(
vec_vis_obs.vector_observations
)
agent_buffer_trajectory["next_vector_in"].append(
next_vec_vis_obs.vector_observations
)
next_obs = self.next_obs
agent_buffer_trajectory["obs"].append(curr_obs)
agent_buffer_trajectory["next_obs"].append(next_obs)
agent_buffer_trajectory["critic_obs"].append(exp.collab_obs)
if exp.memory is not None:
agent_buffer_trajectory["memory"].append(exp.memory)

agent_buffer_trajectory["prev_action"].append(exp.prev_action)
agent_buffer_trajectory["environment_rewards"].append(exp.reward)
# Store the next visual obs as the current
vec_vis_obs = next_vec_vis_obs
# Store the next obs as the current
curr_obs = next_obs
return agent_buffer_trajectory
@property

14
ml-agents/mlagents/trainers/ghost/trainer.py


:param parsed_behavior_id: Behavior ID that the policy should belong to.
:param policy: Policy to associate with name_behavior_id.
"""
name_behavior_id = parsed_behavior_id.behavior_id
self._name_to_parsed_behavior_id[name_behavior_id] = parsed_behavior_id
name_behavior_id = create_name_behavior_id(
parsed_behavior_id.brain_name, team_id=parsed_behavior_id.team_id
)
# Add policy only based on the team id, not the group id
self._name_to_parsed_behavior_id[
parsed_behavior_id.behavior_id
] = parsed_behavior_id
self.policies[name_behavior_id] = policy
def get_policy(self, name_behavior_id: str) -> Policy:

:return: Policy associated with name_behavior_id
"""
# Get policy based on team id, but not group id
parsed_behavior_id = BehaviorIdentifiers.from_name_behavior_id(name_behavior_id)
name_behavior_id = create_name_behavior_id(
parsed_behavior_id.brain_name, team_id=parsed_behavior_id.team_id
)
return self.policies[name_behavior_id]
def _save_snapshot(self) -> None:

38
ml-agents/mlagents/trainers/torch/utils.py


h_size: int,
vis_encode_type: EncoderType,
normalize: bool = False,
) -> Tuple[nn.ModuleList, nn.ModuleList, int]:
) -> Tuple[nn.ModuleList, int]:
"""
Creates visual and vector encoders, along with their normalizers.
:param observation_shapes: List of Tuples that represent the action dimensions.

:param normalize: Normalize all vector inputs.
:return: Tuple of visual encoders and vector encoders each as a list.
"""
visual_encoders: List[nn.Module] = []
vector_encoders: List[nn.Module] = []
encoders: List[nn.Module] = []
vector_size = 0
visual_output_size = 0
total_encoded_size = 0
visual_encoders.append(
encoders.append(
visual_output_size += h_size
total_encoded_size += h_size
vector_size += dimension[0]
vector_size = dimension[0]
encoders.append(VectorInput(vector_size, normalize))
total_encoded_size += vector_size
if vector_size > 0:
vector_encoders.append(VectorInput(vector_size, normalize))
total_processed_size = vector_size + visual_output_size
return (
nn.ModuleList(visual_encoders),
nn.ModuleList(vector_encoders),
total_processed_size,
)
return (nn.ModuleList(encoders), total_encoded_size)
@staticmethod
def list_to_tensor(

calling as_tensor on the list directly.
"""
return torch.as_tensor(np.asanyarray(ndarray_list), dtype=dtype)
@staticmethod
def list_to_tensor_list(
ndarray_list: List[np.ndarray], dtype: Optional[torch.dtype] = torch.float32
) -> torch.Tensor:
"""
Converts a list of numpy arrays into a list of tensors. MUCH faster than
calling as_tensor on the list directly.
"""
return [
torch.as_tensor(np.asanyarray(_arr), dtype=dtype) for _arr in ndarray_list
]
@staticmethod
def to_numpy(tensor: torch.Tensor) -> np.ndarray:

23
ml-agents/mlagents/trainers/torch/components/bc/module.py


from mlagents.trainers.policy.torch_policy import TorchPolicy
from mlagents.trainers.demo_loader import demo_to_buffer
from mlagents.trainers.buffer import AgentBuffer
from mlagents.trainers.settings import BehavioralCloningSettings, ScheduleType
from mlagents.trainers.torch.agent_action import AgentAction
from mlagents.trainers.torch.action_log_probs import ActionLogProbs

"""
Helper function for update_batch.
"""
vec_obs = [ModelUtils.list_to_tensor(mini_batch_demo["vector_obs"])]
obs = ModelUtils.list_to_tensor_list(
AgentBuffer.obs_list_to_obs_batch(mini_batch_demo["obs"]), dtype=torch.float
)
act_masks = None
expert_actions = AgentAction.from_dict(mini_batch_demo)
if self.policy.behavior_spec.action_spec.discrete_size > 0:

if self.policy.use_recurrent:
memories = torch.zeros(1, self.n_sequences, self.policy.m_size)
if self.policy.use_vis_obs:
vis_obs = []
for idx, _ in enumerate(
self.policy.actor_critic.network_body.visual_processors
):
vis_ob = ModelUtils.list_to_tensor(
mini_batch_demo["visual_obs%d" % idx]
)
vis_obs.append(vis_ob)
else:
vis_obs = []
vec_obs,
vis_obs,
masks=act_masks,
memories=memories,
seq_len=self.policy.sequence_length,
obs, masks=act_masks, memories=memories, seq_len=self.policy.sequence_length
)
bc_loss = self._behavioral_cloning_loss(
selected_actions, log_probs, expert_actions

29
ml-agents/mlagents/trainers/torch/components/reward_providers/curiosity_reward_provider.py


"""
Extracts the current state embedding from a mini_batch.
"""
n_vis = len(self._state_encoder.visual_processors)
vec_inputs=[
ModelUtils.list_to_tensor(mini_batch["vector_obs"], dtype=torch.float)
],
vis_inputs=[
ModelUtils.list_to_tensor(
mini_batch["visual_obs%d" % i], dtype=torch.float
)
for i in range(n_vis)
],
net_inputs=ModelUtils.list_to_tensor_list(
AgentBuffer.obs_list_to_obs_batch(mini_batch["obs"]), dtype=torch.float
)
)
return hidden

"""
n_vis = len(self._state_encoder.visual_processors)
vec_inputs=[
ModelUtils.list_to_tensor(
mini_batch["next_vector_in"], dtype=torch.float
)
],
vis_inputs=[
ModelUtils.list_to_tensor(
mini_batch["next_visual_obs%d" % i], dtype=torch.float
)
for i in range(n_vis)
],
net_inputs=ModelUtils.list_to_tensor_list(
AgentBuffer.obs_list_to_obs_batch(mini_batch["next_obs"]),
dtype=torch.float,
)
)
return hidden

62
ml-agents/mlagents/trainers/torch/components/reward_providers/gail_reward_provider.py


"""
Creates the observation input.
"""
n_vis = len(self.encoder.visual_processors)
n_vec = len(self.encoder.vector_processors)
vec_inputs = (
[ModelUtils.list_to_tensor(mini_batch["vector_obs"], dtype=torch.float)]
if n_vec > 0
else []
net_inputs = ModelUtils.list_to_tensor_list(
AgentBuffer.obs_list_to_obs_batch(mini_batch["obs"]), dtype=torch.float
vis_inputs = [
ModelUtils.list_to_tensor(mini_batch["visual_obs%d" % i], dtype=torch.float)
for i in range(n_vis)
]
return vec_inputs, vis_inputs
return net_inputs
def compute_estimate(
self, mini_batch: AgentBuffer, use_vail_noise: bool = False

:param use_vail_noise: Only when using VAIL : If true, will sample the code, if
false, will return the mean of the code.
"""
vec_inputs, vis_inputs = self.get_state_inputs(mini_batch)
net_inputs = self.get_state_inputs(mini_batch)
hidden, _ = self.encoder(vec_inputs, vis_inputs, action_inputs)
hidden, _ = self.encoder(net_inputs, action_inputs)
hidden, _ = self.encoder(vec_inputs, vis_inputs)
hidden, _ = self.encoder(net_inputs)
z_mu: Optional[torch.Tensor] = None
if self._settings.use_vail:
z_mu = self._z_mu_layer(hidden)

Gradient penalty from https://arxiv.org/pdf/1704.00028. Adds stability esp.
for off-policy. Compute gradients w.r.t randomly interpolated input.
"""
policy_vec_inputs, policy_vis_inputs = self.get_state_inputs(policy_batch)
expert_vec_inputs, expert_vis_inputs = self.get_state_inputs(expert_batch)
interp_vec_inputs = []
for policy_vec_input, expert_vec_input in zip(
policy_vec_inputs, expert_vec_inputs
):
obs_epsilon = torch.rand(policy_vec_input.shape)
interp_vec_input = (
obs_epsilon * policy_vec_input + (1 - obs_epsilon) * expert_vec_input
)
interp_vec_input.requires_grad = True # For gradient calculation
interp_vec_inputs.append(interp_vec_input)
interp_vis_inputs = []
for policy_vis_input, expert_vis_input in zip(
policy_vis_inputs, expert_vis_inputs
):
obs_epsilon = torch.rand(policy_vis_input.shape)
interp_vis_input = (
obs_epsilon * policy_vis_input + (1 - obs_epsilon) * expert_vis_input
)
interp_vis_input.requires_grad = True # For gradient calculation
interp_vis_inputs.append(interp_vis_input)
policy_inputs = self.get_state_inputs(policy_batch)
expert_inputs = self.get_state_inputs(expert_batch)
interp_inputs = []
for policy_input, expert_input in zip(policy_inputs, expert_inputs):
obs_epsilon = torch.rand(policy_input.shape)
interp_input = obs_epsilon * policy_input + (1 - obs_epsilon) * expert_input
interp_input.requires_grad = True # For gradient calculation
interp_inputs.append(interp_input)
if self._settings.use_actions:
policy_action = self.get_action_input(policy_batch)
expert_action = self.get_action_input(expert_batch)

dim=1,
)
action_inputs.requires_grad = True
hidden, _ = self.encoder(
interp_vec_inputs, interp_vis_inputs, action_inputs
)
encoder_input = tuple(
interp_vec_inputs + interp_vis_inputs + [action_inputs]
)
hidden, _ = self.encoder(interp_inputs, action_inputs)
encoder_input = tuple(interp_inputs + [action_inputs])
hidden, _ = self.encoder(interp_vec_inputs, interp_vis_inputs)
encoder_input = tuple(interp_vec_inputs + interp_vis_inputs)
hidden, _ = self.encoder(interp_inputs)
encoder_input = tuple(interp_inputs)
if self._settings.use_vail:
use_vail_noise = True
z_mu = self._z_mu_layer(hidden)

25
ml-agents/mlagents/trainers/torch/encoders.py


return height, width
class VectorInput(nn.Module):
class InputProcessor:
def copy_normalization(self, other_input: "InputProcessor") -> None:
pass
def update_normalization(self, inputs: torch.Tensor) -> None:
pass
class VectorInput(nn.Module, InputProcessor):
def __init__(self, input_size: int, normalize: bool = False):
super().__init__()
self.normalizer: Optional[Normalizer] = None

inputs = self.normalizer(inputs)
return inputs
def copy_normalization(self, other_input: "VectorInput") -> None:
if self.normalizer is not None and other_input.normalizer is not None:
self.normalizer.copy_from(other_input.normalizer)
def copy_normalization(self, other_input: "InputProcessor") -> None:
if isinstance(other_input, VectorInput):
if self.normalizer is not None and other_input.normalizer is not None:
self.normalizer.copy_from(other_input.normalizer)
def update_normalization(self, inputs: torch.Tensor) -> None:
if self.normalizer is not None:

class SmallVisualEncoder(nn.Module):
class SmallVisualEncoder(nn.Module, InputProcessor):
"""
CNN architecture used by King in their Candy Crush predictor
https://www.researchgate.net/publication/328307928_Human-Like_Playtesting_with_Deep_Learning

return self.dense(hidden)
class SimpleVisualEncoder(nn.Module):
class SimpleVisualEncoder(nn.Module, InputProcessor):
def __init__(
self, height: int, width: int, initial_channels: int, output_size: int
):

return self.dense(hidden)
class NatureVisualEncoder(nn.Module):
class NatureVisualEncoder(nn.Module, InputProcessor):
def __init__(
self, height: int, width: int, initial_channels: int, output_size: int
):

return input_tensor + self.layers(input_tensor)
class ResNetVisualEncoder(nn.Module):
class ResNetVisualEncoder(nn.Module, InputProcessor):
def __init__(
self, height: int, width: int, initial_channels: int, output_size: int
):

270
ml-agents/mlagents/trainers/torch/networks.py


from mlagents.trainers.torch.decoders import ValueHeads
from mlagents.trainers.torch.layers import LSTM, LinearEncoder
from mlagents.trainers.torch.model_serialization import exporting_to_onnx
from mlagents.trainers.torch.encoders import VectorInput
ActivationFunction = Callable[[torch.Tensor], torch.Tensor]
EncoderFunction = Callable[

else 0
)
(
self.visual_processors,
self.vector_processors,
encoder_input_size,
) = ModelUtils.create_input_processors(
self.processors, encoder_input_size = ModelUtils.create_input_processors(
self.observation_shapes = observation_shapes
total_enc_size = encoder_input_size + encoded_act_size
self.linear_encoder = LinearEncoder(
total_enc_size, network_settings.num_layers, self.h_size

else:
self.lstm = None # type: ignore
def update_normalization(self, vec_inputs: List[torch.Tensor]) -> None:
for vec_input, vec_enc in zip(vec_inputs, self.vector_processors):
vec_enc.update_normalization(vec_input)
def update_normalization(self, net_inputs: List[torch.Tensor]) -> None:
for _in, enc in zip(net_inputs, self.processors):
enc.update_normalization(_in)
for n1, n2 in zip(self.vector_processors, other_network.vector_processors):
for n1, n2 in zip(self.processors, other_network.processors):
n1.copy_normalization(n2)
@property

def forward(
self,
vec_inputs: List[torch.Tensor],
vis_inputs: List[torch.Tensor],
net_inputs: List[torch.Tensor],
for idx, processor in enumerate(self.vector_processors):
vec_input = vec_inputs[idx]
processed_vec = processor(vec_input)
for idx, processor in enumerate(self.processors):
net_input = net_inputs[idx]
if not exporting_to_onnx.is_exporting() and len(net_input.shape) > 3:
net_input = net_input.permute([0, 3, 1, 2])
processed_vec = processor(net_input)
for idx, processor in enumerate(self.visual_processors):
vis_input = vis_inputs[idx]
if not exporting_to_onnx.is_exporting():
vis_input = vis_input.permute([0, 3, 1, 2])
processed_vis = processor(vis_input)
encodes.append(processed_vis)
if len(encodes) == 0:
raise Exception("No valid inputs to network.")
# Constants don't work in Barracuda
if actions is not None:
inputs = torch.cat(encodes + [actions], dim=-1)
else:
inputs = torch.cat(encodes, dim=-1)
encoding = self.linear_encoder(inputs)
if self.use_lstm:
# Resize to (batch, sequence length, encoding size)
encoding = encoding.reshape([-1, sequence_length, self.h_size])
encoding, memories = self.lstm(encoding, memories)
encoding = encoding.reshape([-1, self.m_size // 2])
return encoding, memories
# NOTE: this class will be replaced with a multi-head attention when the time comes
class MultiInputNetworkBody(nn.Module):
def __init__(
self,
observation_shapes: List[Tuple[int, ...]],
network_settings: NetworkSettings,
encoded_act_size: int = 0,
num_obs_heads: int = 1,
):
super().__init__()
self.normalize = network_settings.normalize
self.use_lstm = network_settings.memory is not None
# Scale network depending on num agents
self.h_size = network_settings.hidden_units * num_obs_heads
self.m_size = (
network_settings.memory.memory_size
if network_settings.memory is not None
else 0
)
self.processors = []
encoder_input_size = 0
for i in range(num_obs_heads):
_proc, _input_size = ModelUtils.create_input_processors(
observation_shapes,
self.h_size,
network_settings.vis_encode_type,
normalize=self.normalize,
)
self.processors.append(_proc)
encoder_input_size += _input_size
total_enc_size = encoder_input_size + encoded_act_size
self.linear_encoder = LinearEncoder(
total_enc_size, network_settings.num_layers, self.h_size
)
if self.use_lstm:
self.lstm = LSTM(self.h_size, self.m_size)
else:
self.lstm = None # type: ignore
def update_normalization(self, net_inputs: List[torch.Tensor]) -> None:
for _proc in self.processors:
for _in, enc in zip(net_inputs, _proc):
enc.update_normalization(_in)
def copy_normalization(self, other_network: "NetworkBody") -> None:
if self.normalize:
for _proc in self.processors:
for n1, n2 in zip(_proc, other_network.processors):
n1.copy_normalization(n2)
@property
def memory_size(self) -> int:
return self.lstm.memory_size if self.use_lstm else 0
def forward(
self,
all_net_inputs: List[List[torch.Tensor]],
actions: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
) -> Tuple[torch.Tensor, torch.Tensor]:
encodes = []
for net_inputs, processor_set in zip(all_net_inputs, self.processors):
for idx, processor in enumerate(processor_set):
net_input = net_inputs[idx]
if not exporting_to_onnx.is_exporting() and len(net_input.shape) > 3:
net_input = net_input.permute([0, 3, 1, 2])
processed_vec = processor(net_input)
encodes.append(processed_vec)
if len(encodes) == 0:
raise Exception("No valid inputs to network.")

def forward(
self,
vec_inputs: List[torch.Tensor],
vis_inputs: List[torch.Tensor],
net_inputs: List[torch.Tensor],
vec_inputs, vis_inputs, actions, memories, sequence_length
net_inputs, actions, memories, sequence_length
)
output = self.value_heads(encoding)
return output, memories
class CentralizedValueNetwork(ValueNetwork):
def __init__(
self,
stream_names: List[str],
observation_shapes: List[Tuple[int, ...]],
network_settings: NetworkSettings,
encoded_act_size: int = 0,
outputs_per_stream: int = 1,
num_agents: int = 1,
):
# This is not a typo, we want to call __init__ of nn.Module
nn.Module.__init__(self)
self.network_body = MultiInputNetworkBody(
observation_shapes,
network_settings,
encoded_act_size=encoded_act_size,
num_obs_heads=num_agents,
)
if network_settings.memory is not None:
encoding_size = network_settings.memory.memory_size // 2
else:
encoding_size = network_settings.hidden_units * num_agents
self.value_heads = ValueHeads(stream_names, encoding_size, outputs_per_stream)
def forward(
self,
net_inputs: List[List[torch.Tensor]],
actions: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
) -> Tuple[Dict[str, torch.Tensor], torch.Tensor]:
encoding, memories = self.network_body(
net_inputs, actions, memories, sequence_length
)
output = self.value_heads(encoding)
return output, memories

@abc.abstractmethod
def update_normalization(self, vector_obs: List[torch.Tensor]) -> None:
def update_normalization(self, net_inputs: List[torch.Tensor]) -> None:
"""
Updates normalization of Actor based on the provided List of vector obs.
:param vector_obs: A List of vector obs as tensors.

@abc.abstractmethod
def critic_pass(
self,
vec_inputs: List[torch.Tensor],
vis_inputs: List[torch.Tensor],
net_inputs: List[torch.Tensor],
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
) -> Tuple[Dict[str, torch.Tensor], torch.Tensor]:

@abc.abstractmethod
def get_action_stats_and_value(
self,
vec_inputs: List[torch.Tensor],
vis_inputs: List[torch.Tensor],
net_inputs: List[torch.Tensor],
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[
AgentAction, ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor], torch.Tensor
]:

def memory_size(self) -> int:
return self.network_body.memory_size
def update_normalization(self, vector_obs: List[torch.Tensor]) -> None:
self.network_body.update_normalization(vector_obs)
def update_normalization(self, net_inputs: List[torch.Tensor]) -> None:
self.network_body.update_normalization(net_inputs)
def forward(
self,

At this moment, torch.onnx.export() doesn't accept None as tensor to be exported,
so the size of return tuple varies with action spec.
"""
concatenated_vec_obs = vec_inputs[0]
inputs = []
start = 0
end = 0
vis_index = 0
for i, enc in enumerate(self.network_body.processors):
if isinstance(enc, VectorInput):
# This is a vec_obs
vec_size = self.network_body.observation_shapes[i][0]
end = start + vec_size
inputs.append(concatenated_vec_obs[:, start:end])
start = end
else:
inputs.append(vis_inputs[vis_index])
vis_index += 1
vec_inputs, vis_inputs, memories=memories, sequence_length=1
inputs, memories=memories, sequence_length=1
)
(

]
return tuple(export_out)
def get_action_stats(
self,
net_inputs: List[torch.Tensor],
masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
) -> Tuple[
AgentAction, ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor], torch.Tensor
]:
encoding, memories = self.network_body(
net_inputs, memories=memories, sequence_length=sequence_length
)
action, log_probs, entropies = self.action_model(encoding, masks)
return action, log_probs, entropies, memories
class SharedActorCritic(SimpleActor, ActorCritic):
def __init__(

def critic_pass(
self,
vec_inputs: List[torch.Tensor],
vis_inputs: List[torch.Tensor],
net_inputs: List[torch.Tensor],
vec_inputs, vis_inputs, memories=memories, sequence_length=sequence_length
net_inputs, memories=memories, sequence_length=sequence_length
vec_inputs: List[torch.Tensor],
vis_inputs: List[torch.Tensor],
net_inputs: List[torch.Tensor],
critic_obs: Optional[List[List[torch.Tensor]]] = None,
vec_inputs, vis_inputs, memories=memories, sequence_length=sequence_length
net_inputs, memories=memories, sequence_length=sequence_length
)
log_probs, entropies = self.action_model.evaluate(encoding, masks, actions)
value_outputs = self.value_heads(encoding)

self,
vec_inputs: List[torch.Tensor],
vis_inputs: List[torch.Tensor],
net_inputs: List[torch.Tensor],
masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,

encoding, memories = self.network_body(
vec_inputs, vis_inputs, memories=memories, sequence_length=sequence_length
net_inputs, memories=memories, sequence_length=sequence_length
)
action, log_probs, entropies = self.action_model(encoding, masks)
value_outputs = self.value_heads(encoding)

tanh_squash,
)
self.stream_names = stream_names
self.critic = ValueNetwork(stream_names, observation_shapes, network_settings)
self.critic = CentralizedValueNetwork(
stream_names, observation_shapes, network_settings, num_agents=2
)
@property
def memory_size(self) -> int:

self,
vec_inputs: List[torch.Tensor],
vis_inputs: List[torch.Tensor],
net_inputs: List[torch.Tensor],
critic_obs: List[List[torch.Tensor]] = None,
all_net_inputs = [net_inputs]
if critic_obs is not None:
all_net_inputs.extend(critic_obs)
vec_inputs, vis_inputs, memories=critic_mem, sequence_length=sequence_length
all_net_inputs, memories=critic_mem, sequence_length=sequence_length
)
if actor_mem is not None:
# Make memories with the actor mem unchanged

def get_stats_and_value(
self,
vec_inputs: List[torch.Tensor],
vis_inputs: List[torch.Tensor],
net_inputs: List[torch.Tensor],
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor]]:
if self.use_lstm:
# Use only the back half of memories for critic and actor

actor_mem = None
encoding, actor_mem_outs = self.network_body(
vec_inputs, vis_inputs, memories=actor_mem, sequence_length=sequence_length
net_inputs, memories=actor_mem, sequence_length=sequence_length
all_net_inputs = [net_inputs]
if critic_obs is not None:
all_net_inputs.extend(critic_obs)
vec_inputs, vis_inputs, memories=critic_mem, sequence_length=sequence_length
all_net_inputs, memories=critic_mem, sequence_length=sequence_length
)
return log_probs, entropies, value_outputs

vec_inputs: List[torch.Tensor],
vis_inputs: List[torch.Tensor],
net_inputs: List[torch.Tensor],
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[
AgentAction, ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor], torch.Tensor
]:

else:
critic_mem = None
actor_mem = None
all_net_inputs = [net_inputs]
if critic_obs is not None:
all_net_inputs.extend(critic_obs)
vec_inputs, vis_inputs, memories=actor_mem, sequence_length=sequence_length
net_inputs, memories=actor_mem, sequence_length=sequence_length
vec_inputs, vis_inputs, memories=critic_mem, sequence_length=sequence_length
all_net_inputs, memories=critic_mem, sequence_length=sequence_length
)
if self.use_lstm:
mem_out = torch.cat([actor_mem_outs, critic_mem_outs], dim=-1)

def update_normalization(self, vector_obs: List[torch.Tensor]) -> None:
super().update_normalization(vector_obs)
self.critic.network_body.update_normalization(vector_obs)
def update_normalization(self, net_inputs: List[torch.Tensor]) -> None:
super().update_normalization(net_inputs)
self.critic.network_body.update_normalization(net_inputs)
class GlobalSteps(nn.Module):

2
Project/ProjectSettings/TagManager.asset


- symbol_O_Goal
- purpleAgent
- purpleGoal
- blockLarge
- blockSmall
layers:
- Default
- TransparentFX

1
Project/Packages/manifest.json


"dependencies": {
"com.unity.ads": "2.0.8",
"com.unity.analytics": "3.2.3",
"com.unity.barracuda": "1.2.1-preview",
"com.unity.collab-proxy": "1.2.15",
"com.unity.ml-agents": "file:../../com.unity.ml-agents",
"com.unity.ml-agents.extensions": "file:../../com.unity.ml-agents.extensions",

8
Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab


m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 1
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &114492261207303438
MonoBehaviour:

m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 0
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &114850431417842684
MonoBehaviour:

m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 1
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &5320024511406682322
MonoBehaviour:

m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 0
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &5379409612883756837
MonoBehaviour:

146
Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity


propertyPath: m_RootOrder
value: 8
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &774084574

propertyPath: m_RootOrder
value: 11
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1177695920

propertyPath: m_RootOrder
value: 5
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1325062279

propertyPath: m_RootOrder
value: 7
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1348885204

m_Name:
m_EditorClassIdentifier:
gravityMultiplier: 1
monitorVerticalOffset: 0
reuseCollisionCallbacks: 1
--- !u!114 &1574236051
MonoBehaviour:
m_ObjectHideFlags: 0

blueMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2}
randomizePlayersTeamForTraining: 0
agentRunSpeed: 2
strikerPunish: -0.1
strikerReward: 1
goaliePunish: -1
goalieReward: 0.1
--- !u!1001 &1606160104
PrefabInstance:
m_ObjectHideFlags: 0

propertyPath: m_RootOrder
value: 9
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1748755984

propertyPath: m_RootOrder
value: 10
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &2043067438

- target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
propertyPath: m_RootOrder
value: 6
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}

22
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs


public class WallJumpAgent : Agent
{
// Depending on this value, the wall will have different height
int m_Configuration;
protected int m_Configuration;
// Brain to use when no wall is present
public NNModel noWallBrain;
// Brain to use when a jumpable wall is present

public GameObject ground;
public GameObject spawnArea;
Bounds m_SpawnAreaBounds;
protected Bounds m_SpawnAreaBounds;
Rigidbody m_ShortBlockRb;
Rigidbody m_AgentRb;
Material m_GroundMaterial;
Renderer m_GroundRenderer;
WallJumpSettings m_WallJumpSettings;
protected Rigidbody m_ShortBlockRb;
protected Rigidbody m_AgentRb;
protected Material m_GroundMaterial;
protected Renderer m_GroundRenderer;
protected WallJumpSettings m_WallJumpSettings;
public float jumpingTime;
public float jumpTime;

string m_SmallWallBehaviorName = "SmallWallJump";
string m_BigWallBehaviorName = "BigWallJump";
EnvironmentParameters m_ResetParams;
protected EnvironmentParameters m_ResetParams;
public override void Initialize()
{

/// <returns>The Enumerator to be used in a Coroutine.</returns>
/// <param name="mat">The material to be swapped.</param>
/// <param name="time">The time the material will remain.</param>
IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
protected IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time); //wait for 2 sec

}
// Detect when the agent hits the goal
void OnTriggerStay(Collider col)
protected virtual void OnTriggerStay(Collider col)
{
if (col.gameObject.CompareTag("goal") && DoGroundCheck(true))
{

/// If 1: Small wall and smallWallBrain.
/// Other : Tall wall and BigWallBrain.
/// </param>
void ConfigureAgent(int config)
protected virtual void ConfigureAgent(int config)
{
var localScale = wall.transform.localScale;
if (config == 0)

2
Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity.meta


fileFormatVersion: 2
guid: d6d6a33ed0e18459a8d61817d600978a
guid: 71d1487c63f604ff6985cc2f23c7afbf
DefaultImporter:
externalObjects: {}
userData:

932
Project/Assets/ML-Agents/Examples/Hallway/Prefabs/SymbolFinderArea.prefab
文件差异内容过多而无法显示
查看文件

12
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs


public GameObject symbolO;
public GameObject symbolX;
public bool useVectorObs;
Rigidbody m_AgentRb;
Material m_GroundMaterial;
Renderer m_GroundRenderer;
HallwaySettings m_HallwaySettings;
int m_Selection;
protected Rigidbody m_AgentRb;
protected Material m_GroundMaterial;
protected Renderer m_GroundRenderer;
protected HallwaySettings m_HallwaySettings;
protected int m_Selection;
public override void Initialize()
{

}
}
IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
protected IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time);

63
config/ppo/WallJumpCollab.yaml


behaviors:
SmallWallJump:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 2048
learning_rate: 0.0003
beta: 0.005
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 256
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 15000000
time_horizon: 128
summary_freq: 20000
threaded: true
environment_parameters:
big_wall_height:
curriculum:
- name: Lesson0
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.1
value: 3
- name: Lesson1
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.3
value: 5
- name: Lesson2
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.5
value: 8
- name: Lesson3
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.7
value: 9
- name: Lesson4
value: 9

26
config/ppo/HallwayCollab.yaml


behaviors:
HallwayCollab:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 1024
learning_rate: 0.0003
beta: 0.01
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 128
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 10000000
time_horizon: 64
summary_freq: 10000
threaded: true

50
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WallAreaScoring : MonoBehaviour
{
public GameObject[] agents;
WallJumpSettings m_WallJumpSettings;
Renderer m_GroundRenderer;
Material m_GroundMaterial;
protected IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time); //wait for 2 sec
m_GroundRenderer.material = m_GroundMaterial;
}
public void Start()
{
m_WallJumpSettings = FindObjectOfType<WallJumpSettings>();
m_GroundRenderer = GetComponent<Renderer>();
m_GroundMaterial = m_GroundRenderer.material;
}
public void WinCondition()
{
foreach (var agent in agents)
{
WallJumpCollabAgent agentScript = agent.GetComponent<WallJumpCollabAgent>();
agentScript.SetReward(1f);
agentScript.EndEpisode();
}
StartCoroutine(
GoalScoredSwapGroundMaterial(m_WallJumpSettings.goalScoredMaterial, 1f));
}
public void LoseCondition()
{
foreach (var agent in agents)
{
WallJumpCollabAgent agentScript = agent.GetComponent<WallJumpCollabAgent>();
agentScript.SetReward(-1f);
agentScript.EndEpisode();
}
StartCoroutine(
GoalScoredSwapGroundMaterial(m_WallJumpSettings.failMaterial, .2f));
}
}

11
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs.meta


fileFormatVersion: 2
guid: ad7213222795741f5b6ca2b332f16da9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs.meta


fileFormatVersion: 2
guid: 2cdbc0d9a64fe4b12a3ed4b81a151117
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

67
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs


//Put this script on your blue cube.
using System.Collections;
using UnityEngine;
using Unity.MLAgents;
using Unity.Barracuda;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
using Unity.MLAgentsExamples;
public class WallJumpCollabAgent : WallJumpAgent
{
Vector3 m_InitialPosition;
WallAreaScoring m_Scoring;
public override void Initialize()
{
m_WallJumpSettings = FindObjectOfType<WallJumpSettings>();
m_Scoring = ground.GetComponent<WallAreaScoring>();
m_Configuration = 5;
m_AgentRb = GetComponent<Rigidbody>();
// m_ShortBlockRb = shortBlock.GetComponent<Rigidbody>();
m_SpawnAreaBounds = spawnArea.GetComponent<Collider>().bounds;
m_GroundRenderer = ground.GetComponent<Renderer>();
m_GroundMaterial = m_GroundRenderer.material;
m_InitialPosition = transform.localPosition;
spawnArea.SetActive(false);
m_ResetParams = Academy.Instance.EnvironmentParameters;
}
public override void OnEpisodeBegin()
{
transform.localPosition = m_InitialPosition;
m_Configuration = 5;
m_AgentRb.velocity = default(Vector3);
}
public override void OnActionReceived(ActionBuffers actionBuffers)
{
MoveAgent(actionBuffers.DiscreteActions);
if (!Physics.Raycast(m_AgentRb.position, Vector3.down, 20))
{
m_Scoring.LoseCondition();
}
}
protected override void ConfigureAgent(int config)
{
var localScale = wall.transform.localScale;
var height = m_ResetParams.GetWithDefault("big_wall_height", 9);
localScale = new Vector3(
localScale.x,
height,
localScale.z);
wall.transform.localScale = localScale;
}
// Detect when the agent hits the goal
protected override void OnTriggerStay(Collider col)
{
if (col.gameObject.CompareTag("goal") && DoGroundCheck(true))
{
m_Scoring.WinCondition();
}
}
}

7
Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity.meta


fileFormatVersion: 2
guid: 136090e065a8f48bfb97ea3083893d8a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity
文件差异内容过多而无法显示
查看文件

7
Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab.meta


fileFormatVersion: 2
guid: ff1a5743be49d43f08378dcd76451821
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab
文件差异内容过多而无法显示
查看文件

11
Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs.meta


fileFormatVersion: 2
guid: 506de7b261f374159a5cdfdb0ff48c0c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

143
Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs


using UnityEngine;
using Random = UnityEngine.Random;
using Unity.MLAgents;
using UnityEngine.Events;
namespace Unity.MLAgentsExamples
{
/// <summary>
/// Utility class to allow target placement and collision detection with an agent
/// Add this script to the target you want the agent to touch.
/// Callbacks will be triggered any time the target is touched with a collider tagged as 'tagToDetect'
/// </summary>
public class CollisionCallbacks : MonoBehaviour
{
// [System.Serializable] public class BoolEvent : UnityEvent<bool> { }
// [SerializeField] BoolEvent boolEvent = new BoolEvent();
// public void OnBoolEvent(bool value)
// {
// Debug.Log($"OnBoolEvent {value}");
// }
[Header("Collider Tag To Detect")]
public string tagToDetect = "agent"; //collider tag to detect
// [Header("Target Placement")]
// public float spawnRadius; //The radius in which a target can be randomly spawned.
// public bool respawnIfTouched; //Should the target respawn to a different position when touched
//
// [Header("Target Fell Protection")]
// public bool respawnIfFallsOffPlatform = true; //If the target falls off the platform, reset the position.
// public float fallDistance = 5; //distance below the starting height that will trigger a respawn
//
//
// private Vector3 m_startingPos; //the starting position of the target
// private Agent m_agentTouching; //the agent currently touching the target
[System.Serializable]
// public class TriggerEvent : UnityEvent<string>
public class TriggerEvent : UnityEvent<Collider>
{
}
[Header("Trigger Callbacks")]
public TriggerEvent onTriggerEnterEvent = new TriggerEvent();
public TriggerEvent onTriggerStayEvent = new TriggerEvent();
public TriggerEvent onTriggerExitEvent = new TriggerEvent();
[System.Serializable]
public class CollisionEvent : UnityEvent<Collision>
{
}
[Header("Collision Callbacks")]
public CollisionEvent onCollisionEnterEvent = new CollisionEvent();
public CollisionEvent onCollisionStayEvent = new CollisionEvent();
public CollisionEvent onCollisionExitEvent = new CollisionEvent();
// // Start is called before the first frame update
// void OnEnable()
// {
// m_startingPos = transform.position;
// if (respawnIfTouched)
// {
// MoveTargetToRandomPosition();
// }
// }
// void Update()
// {
// if (respawnIfFallsOffPlatform)
// {
// if (transform.position.y < m_startingPos.y - fallDistance)
// {
// Debug.Log($"{transform.name} Fell Off Platform");
// MoveTargetToRandomPosition();
// }
// }
// }
// /// <summary>
// /// Moves target to a random position within specified radius.
// /// </summary>
// public void MoveTargetToRandomPosition()
// {
// var newTargetPos = m_startingPos + (Random.insideUnitSphere * spawnRadius);
// newTargetPos.y = m_startingPos.y;
// transform.position = newTargetPos;
// }
private void OnCollisionEnter(Collision col)
{
if (col.transform.CompareTag(tagToDetect))
{
onCollisionEnterEvent.Invoke(col);
// if (respawnIfTouched)
// {
// MoveTargetToRandomPosition();
// }
}
}
private void OnCollisionStay(Collision col)
{
if (col.transform.CompareTag(tagToDetect))
{
onCollisionStayEvent.Invoke(col);
}
}
private void OnCollisionExit(Collision col)
{
if (col.transform.CompareTag(tagToDetect))
{
onCollisionExitEvent.Invoke(col);
}
}
private void OnTriggerEnter(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerEnterEvent.Invoke(col);
}
}
private void OnTriggerStay(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerStayEvent.Invoke(col);
}
}
private void OnTriggerExit(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerExitEvent.Invoke(col);
}
}
}
}

7
Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity.meta


fileFormatVersion: 2
guid: d6d6a33ed0e18459a8d61817d600978a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity
文件差异内容过多而无法显示
查看文件

11
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs.meta


fileFormatVersion: 2
guid: f7451777d89fd47418f0e1c3e2511919
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

194
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs


using System.Collections;
using UnityEngine;
using Unity.MLAgents;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
public class HallwayCollabAgent : HallwayAgent
{
public GameObject symbolSGoal;
public GameObject symbolS;
public HallwayCollabAgent teammate;
public bool isSpotter = true;
int m_Message = 0;
[HideInInspector]
public int selection = 0;
public override void OnEpisodeBegin()
{
m_Message = -1;
var agentOffset = 10f;
if (isSpotter)
{
agentOffset = -15;
}
if (!isSpotter)
{
transform.position = new Vector3(0f + Random.Range(-3f, 3f),
1f, agentOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
transform.rotation = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f);
}
else
{
transform.position = new Vector3(0f,
1f, agentOffset)
+ ground.transform.position;
transform.rotation = Quaternion.Euler(0f, 0f, 0f);
}
// Remove the randomness
m_AgentRb.velocity *= 0f;
if (isSpotter)
{
var blockOffset = -9f;
// Only the Spotter has the correct selection
selection = Random.Range(0, 3);
if (selection == 0)
{
symbolO.transform.position =
new Vector3(0f, 2f, blockOffset)
+ ground.transform.position;
symbolX.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
symbolS.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
}
else if (selection == 1)
{
symbolO.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
symbolX.transform.position =
new Vector3(0f, 2f, blockOffset)
+ ground.transform.position;
symbolS.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
}
else
{
symbolO.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
symbolX.transform.position =
new Vector3(0f, -1000f, blockOffset)
+ ground.transform.position;
symbolS.transform.position =
new Vector3(0f, 2f, blockOffset)
+ ground.transform.position;
}
var goalPos = Random.Range(0, 7);
if (goalPos == 0)
{
symbolOGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 1)
{
symbolOGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 2)
{
symbolOGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 3)
{
symbolOGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 4)
{
symbolOGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
}
else
{
symbolOGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
}
}
}
public override void CollectObservations(VectorSensor sensor)
{
if (useVectorObs)
{
sensor.AddObservation(StepCount / (float)MaxStep);
}
sensor.AddObservation(toOnehot(m_Message));
}
float[] toOnehot(int message)
{
float[] onehot = new float[3];
if (message < 0 || message >= 3)
{
return onehot;
}
onehot[message] = 1f;
return onehot;
}
public void tellAgent(int message)
{
m_Message = message;
}
public override void OnActionReceived(ActionBuffers actionBuffers)
{
AddReward(-1f / MaxStep);
if (!isSpotter)
{
MoveAgent(actionBuffers.DiscreteActions);
}
int comm_act = actionBuffers.DiscreteActions[1];
teammate.tellAgent(comm_act);
// if (isSpotter) // Test
// {
// teammate.tellAgent(selection);
// }
}
void OnCollisionEnter(Collision col)
{
if (col.gameObject.CompareTag("symbol_O_Goal") || col.gameObject.CompareTag("symbol_X_Goal") || col.gameObject.CompareTag("symbol_S_Goal"))
{
if (!isSpotter)
{
// Check the ground truth
if ((teammate.selection == 0 && col.gameObject.CompareTag("symbol_O_Goal")) ||
(teammate.selection == 1 && col.gameObject.CompareTag("symbol_X_Goal")) ||
(teammate.selection == 2 && col.gameObject.CompareTag("symbol_S_Goal")))
{
SetReward(1f);
teammate.SetReward(1f);
StartCoroutine(GoalScoredSwapGroundMaterial(m_HallwaySettings.goalScoredMaterial, 0.5f));
}
else
{
SetReward(-0.1f);
teammate.SetReward(-0.1f);
StartCoroutine(GoalScoredSwapGroundMaterial(m_HallwaySettings.failMaterial, 0.5f));
}
EndEpisode();
teammate.EndEpisode();
}
}
}
}

566
Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx


pytorch1.7:��
Q
vector_observation22Slice_0"Slice*
axes@�*
ends@i�*
starts@�
Q
vector_observation23Slice_1"Slice*
axes@�*
ends@o�*
starts@i�
4
22
2324Concat_2"Concat*
axis����������
�
24
/network_body.linear_encoder.seq_layers.0.weight
-network_body.linear_encoder.seq_layers.0.bias25Gemm_3"Gemm*
alpha�?�*
beta�?�*
transB�

2526 Sigmoid_4"Sigmoid

25
2627Mul_5"Mul
�
27
/network_body.linear_encoder.seq_layers.2.weight
-network_body.linear_encoder.seq_layers.2.bias28Gemm_6"Gemm*
alpha�?�*
beta�?�*
transB�

2829 Sigmoid_7"Sigmoid

28
2930Mul_8"Mul
K
action_masks31Slice_9"Slice*
axes@�*
ends@�*
starts@�
L
action_masks32Slice_10"Slice*
axes@�*
ends@�*
starts@�
�
30
5action_model._discrete_distribution.branches.0.weight
3action_model._discrete_distribution.branches.0.bias33Gemm_11"Gemm*
alpha�?�*
beta�?�*
transB�
134 Constant_12"Constant*
value*J���

31
3435Mul_13"Mul
136 Constant_14"Constant*
value*J�?�

35
3637Add_15"Add

33
3138Mul_16"Mul
139 Constant_17"Constant*
value*J ��L�

37
3940Mul_18"Mul

38
4041Sub_19"Sub
*
4142
Softmax_20"Softmax*
axis�
�
30
5action_model._discrete_distribution.branches.1.weight
3action_model._discrete_distribution.branches.1.bias43Gemm_21"Gemm*
alpha�?�*
beta�?�*
transB�
144 Constant_22"Constant*
value*J���

32
4445Mul_23"Mul
146 Constant_24"Constant*
value*J�?�

45
4647Add_25"Add

43
3248Mul_26"Mul
149 Constant_27"Constant*
value*J ��L�

47
4950Mul_28"Mul

48
5051Sub_29"Sub
*
5152
Softmax_30"Softmax*
axis�
153 Constant_31"Constant*
value*J���3�

42
5354Add_32"Add

5455Log_33"Log
156 Constant_34"Constant*
value*J���3�

52
5657Add_35"Add

5758Log_36"Log
:
55
58discrete_actions Concat_37"Concat*
axis�
0
55
58action Concat_38"Concat*
axis�
< memory_size Constant_39"Constant*
value*
J�torch-jit-export*OB3action_model._discrete_distribution.branches.0.biasJ��� ��;ۺ���#�;�U<*��B5action_model._discrete_distribution.branches.0.weightJ�`�����=�}{<�'0���_];�{�:��*�����鼦G <>�ջ���� �ܗ��P��C�_<Yj����ֺǟ����;��w���ʼr�O��y�<���e��;��케X�<Bhļ8d�;�+<����滯����d���V�ê�<Vp��s ����;�^6�"X�|��G;D<��4�����kB�;�5k���$=����
e<�V��<�D;<�[^;d=*��r����m<13�]m߼}5[�v������� ��֝<��ϼ�Jռ��<�]�����<����C)�eж��R�n��3G<̲X�Lz׼$uǻ���<�5n��;λ5�;����q��T��������94׼&�����t!�<Y��==F���;B>���6���x��{�:��뺁S���%�뼛�=�,�<�༘�ۼ&��$����v�;@�:��D<:c��ŗ��?Ĝ<� ���� �::AԼW_*���6�>��o��:V�߼��������<�%�hD����=<+-�=�ۄ��G=ͣ<| =��=��= �����v�<� �=���==Ͻ�Wy�݆ʼ�׻��=UbI=���=`)�<�Ѡ��5���{�<�҉=��J=��(�I�E=�of���=OK=��q;��p���g�t��=��?=�8o��K�<[k�;fs �RT��]�׉c<s���R��]����=����> =����y1 ���м�`D=��
=vU��A(=AQ�=ԚJ= ���!��� >h�ἐlۼEॽ�a)=ڒ�����<wؘ=����f�p0�<��5=� h��Ț�K�������� =|�<�!�=�
&�~6�=mO����j<|Tg�#f|=��(�4�=�.�#<�7[>���D�<#낽:�����˼ӭ<qq��}�����=����+Դ�6:��i7�f$5=(P;�S< �K�{�=�w���h�W]����=_jg�%y=�V=L+<���<�Ӏ=�������<z=迼=+�=�<�k�����=�R��d˃�MRu��y�T��<����k�;<罻���<^ͼg2<�q���:t�;����&�<{��<C2?�����m��^�Sc��*���H��������<2�U���k��R�'\3<Q�H=B;��伓�H��b<U��P���`��,�<�)
�if��o"�<��Ҽr3�:��ֻ��f<���:���=<?�=�R���9�;p*�<]Y.���������4d�3r�G������۬���`��\�0<����>=#��;= �|<��K�X�Ir4�sd¼�*<��'c=�)�<G<7��<�>���o=�,���=jo'�po�<#��^v< ��;;��<�
6��`e�l�<oJ�?��<%��<c���pIo=g���>���m�<���;������<�/�eG+�D�J=d
<�.{<�z¼�ؼ���`�<~��<$'����^� ���;�5�������̼���<rT`�D�|;r\<R2��@A$���>��0ͻځ���1�,��;�B=�F<��
�;��=�#���굼��;ת=z|`= �=��»�U����F=�ʊ��m�=�$�<C�H�2�p���M=��qC��}���i��Bک<֣?�DH<�S���r6���o�H��=v�׽^����(m�B
�=�Pټꧽ�^�{��=���1�[=O��=�+�=�O�=��e<'(6�2��;����m�<j��=H��<Yf�=���=�i^=J=� ω���9:��l�<�d�=�-�=Jwr��K����=Xy����}=����A�=(�p=�"��J꒽���<����HЍ��҄=r�>��=���=���=M�=�M���=(���8s=�;��=E�����=)���2Ľ�]e=T�
��|=G��=}���C�<�<�=�懽�\ >�%=X ��gAN=�}��]��Ǡa=�?<��S<��<)'f<}�x<r�'=s ==�ɺ�@l��0X�#���ׄ4��W���á=ө�����=��n<r�N=�S0����_=����r,�$w�=߹�; �_��j��ܛ��7�^=[�-<d���A{ǽI8��[�P�][�=V=�<�Ґ�)�A��~���/�V@>=�ʪ=< �,3o=��:����,�=Be�=��׼-V��>H=��)= � ��H�#z�;�U<ӌ=c���QҦ=��*�p�h=`i*�Q�=�փ<?+���ݎ��Ô<%�<t�4=*Uq=`,�=ߢ������nR��t�<96�<{���U@�:i0"=��=���=� `�*ڽ����i�q=�Ƽ��Q�;o�=�!��C6=����A������`X�=�H=��=2D�=6:���u�d���YF̼�,��)VŽ�!ǽHI1�`Nz�z�I��~:=f��z��n�"�e>:���=v���ܑ�
��􎔽|%�=8�=[ap���x=��|��� =TZ���̠�ͱ�=��=��8�J|��?�]�<))k="T��0o��/���q�=$=N�=��C=�E�=�f=���T=Uj>�� ���ཐ&��� μsb����==rk��J��*CB3action_model._discrete_distribution.branches.1.biasJЕ?�Е?<*��B5action_model._discrete_distribution.branches.1.weightJ����f�<�m����;øP<��<��;�x����;�#����<��<1�� �軝
���Ԗ<�4<�� ��( ����;�V��"}{<j�~��ze���A=s���,<C ��G"=��?�mu<Q~�<NU�<a���\�� (?<���;��޹Q?;��ڼ��/<Y7N;��~��|�����<bE�;4E��$D���D��ɰ<�6��j�����;�������!�;o*<=��������3k�<䍖;ӑ;��v<{����~<������#;F�������":��+5;�/&��<� <W�x<�^Y<Y��FOm<�J�<�� �~�=�ą��nѻWoϹ6xl:%�<��<�꼻=��<+��<�Z����_<1����0&߼L�G��_��(�l��Q�<<1'���!��+�����<�oǼ\�;ל�;�!�f_�����;Vx<��;�L�:9)�<%Z�;�&��Ѡ<D�r;D[漨�F<���#~�<�r�;��$<?���Mژ�-*���.�;[�?��;���<���5)�T`Ѽ]�<Jd< ��;e�ü������W<m��;&2+�K����,�8��`ѱ� X�;�\߻Ӱ�;[�;�J�<�<���*�9s7�� ������L�s��A�ټ/AѼ���<���;���˷�L��P�;�ܫ<��Z�<O��:$<�.W;����z�<����e�A�;��� R��c6z<��X<�����"; �!<)/�0>1<������x<��<�/���޻j�:�+����;�懼�z/=_<Z�<p+Լ��]<������$>�:����a��+�<�B�;,���Q�W�@<f��0��;�X��҄���w�򻥼ɯ�� �<����kn��^X��{��E�<�==�^�<@x�<v��9r����P����U<�5�<Rސ<G��� =�ja;b ���.<�O�<� ;������U�;���8򰼘6 =�k��i���y�<[?���;8J��]j����`�<���<U�<*Baction_output_shapeJ�@*(Bdiscrete_action_output_shapeJ�@*!Bis_continuous_controlJ*��B-network_body.linear_encoder.seq_layers.0.biasJ�B�#=ŌE=��<�$c=�U=g�1<��V=C�=��9=h�=Űn��N <C� =�r=B.K=g袺~G)=t–<�!�;_z%;T < �Y��G=���<��*�cf;���<�S:<�["=�Z�<�N�<��$=`��<ɷ�<; �<�#t<���;�k�� %#=!A=��H<^b�<l�ݻ�=�a%<�R�<��<�����3=(�<R@�Y�*<ɨ1<tDH;e[�< �< >�<�'�<��=�'�;�hM<��&=��Z<I��<ٳ� �=��;� #=�&�<� �<�����x�k�>=��<=�>�<�~Q<.�<���:Nj�<�j<� �<>��<���<c�=oC=�˻��=E\�@2.<��;97=�&J��W1<PÕ<���;��<_j�;+!=U��<��<�8�<>�=���<7�<1<Z2+<��C<|�=<�}}<�6���m�<��};#��<9��<l ;�=��;i�=��q<9�$<�&=���<O�H<G�=&�p<�_=>�;=���;*���oB/network_body.linear_encoder.seq_layers.0.weightJ��s5>�J)�I��@G&=c��=1��=�] �Y��=�����5;�3/���A=�����h�<H�=���#tܼ��,�S�]�����ٮ<IM<�ݜ=E��_L�<�ཽ�y���?>Kis�\h7<������T>q�����=��}<�yg>B��<��=.�dž��W#����= &�=� �<��̽=8��9c�<R�T>�y�=�\h>��[���p�P��=�(H>X�,>�ܑ=�=�M4>� >��;T��� ��> �J�x��=dX>I�����=<� >�����=_0�>�2m�{f�@
P�I��đ���o=.�;;?#=��?����=�.�=��.= ��<�(�<с/�gOļ#* ��e�=���ĺY=����mtE>��]=A��=%�e==��<}ξ��Ž��C>�M>��ȼ�ɽx��� 4>H6&>��r��2>��ʼ��h�<�f>1��;>�AF>~cͼ-8,>�����<'@S�(��!��<�<=@�ۼ��=�hN<Cԗ�Wx㼭�;=�A=���= ˍ����>�*�=�8P�t��F�=�s����=�ގ�F���C��<W�(=�k�=2��z�>ʁ�<�
/���4=�y>�*�T���4w=��>Pd�g�W��-���!��B�">��=�k۽�Q�=(�l��6�=������=��ݽ-�(>�†����=k*��������нj�b�D!�'Ƨ���=%�%�l񘽮�/>o㜼YS��q#=�F�=&c<��\=���0`�=6�>B�#�SX<>ؽ�s��0/>�zV=�Ǒ�WJ�=���=+�R=��=yuʽ���={S�>L,��$[4�jy;�+�5����>��1���5>D��:�\�<CBZ=����R��)����8>w���q��?k�=����l ��!e��n�0A=h{�N�>5I=��[=�
�8/�=@�w=]VY=[Q;Oo�=r>n=0���$�='Љ�Jp��e�߽��˼�q�<���Ch>#��/>�jL<�2׽�����0>sC�=�?�=�̽KK�<�� �A5>�����E>@�;a��;e��<j�=�6�<���=�`V=_��*%�<�ټ=�=��%=��}=��l>�;d= �E��=��&�ས8>0��=2� �����t�]=� ��������=������>�v���\y=�>��Y>��/��<h=L� ��3�;�x=:MC=ޥF>k ����d>����� �Ѥ{<��=��H� �+��o:>���=ޝ���{��
�<;�R>����cV>�
�=�vV=�2z<�Wi��?��">�0���e>=� ��@�=_��<t�We �ݑ�=F5��i��[' >:�G����<;F>����=˯e<#�!�ʊ,N�"r�>�ev��'�=� ����8١<T��=���>�����[=5�|����=��=+-��T �΢V��?�=��b�.p<wm>�|W>F�6=M�L�c>���:���=R���?/f>DE�=m�E����=�L=��=gظ����=������L>0D�=�q[��{��'>�%^>xX����@=w)�f�]�($>�=ֽr;�=D���n>2}=˒�����=��P<�nV>@2�(�W����<��4� J<��ľS@�=���;�Ӈ>�I>���<��=B�&�7�F>
�����6�=�_������N8�=� �>�ԗ=����\�>H�;=�Z���h�=V>������6��=%�<���>)��=6X�ge�=�7��Z��=�<=���=0XE��"�_�
�����_I��w~+;���N��>w��*/���/�&�� �=�$>���=�f*������n\���Ͻ�Y'>D�9>��>/�������wb�=lW�= lj��y�< %+>?eA=��>Դ=�0M�~��<��->;^ջ4�����2�q9w�>�g���c��OR�'�>�Gӽ��=���=m���8 �b���`>�f:�g�!=j,Q���;;Q3=��>
��`^�`́<e�>ޕ�<�<�PK��P�< p�=��; �����(�J����=̭�'�=8��<�9住0����>�����s�铂��!�=�t�=9��=&~˽�(���0>����?�6< ��=�$����/��=b�������4n= lY������W>t "�J(�=�F�=>7Q�Ā=Hot��R��?(>KD�=��=6���!���7�>+<���yR�5�<t�=��E>Q�i=�i�;}���1�y=�ɘ�H�=��=ʈ�<��O>���Zz�=JW�M��q�P>sٝ=��;��B=S!b>�_(�Y�Z= G�=8�]=�Qa�q ���H<}�ڼ��K=l��=�N�=�`m;���=t��=���� �@=�;�=KQ��u/���9>-֍>���=�����&G=#Ҡ�f(�~}O<���=�8�����;h>����:5H�<>�=������I�������覽���:���r�=>��=��*>����>l�>���=I�8=��Z�bw����V�k�����X������<4菽T�X�Y��=���= ��;��𽗳�=e��Ĥw=�䅽h'��1��<�;��h`+��4��� J��N����=����A��<���=�=$cq9rkże�:>#�E=�D>�Є=���<��;=�ٮ<Ͼ����'=� �=w�9����=�}�<ĭf=�U>�-1��~�=���="�������ż��.>X�׽;2_��É;�7�;ߍ�=���<�v�<�=rΚ<x
�=�Q�=Ԍ��my=��A<�蛽OI�;tni=ˉR>�թ�<��<ϖ�<d��0[˻-�[=�}����м�D6>��G�7�S=�b�<�����I��=VJ>�q�=��l�α>{c�������=C�$��%���>j�d���˼�^=R�q=;3=��k���<�fK=��ڽG�&=���:߭����=8�轡��=S��=�I���F�=`��>T�>�G;��ZY;>��=U ѽE����[>a ��6T=�y@��0���M;&73>Z֏=�'� ���9ގ=_r^>7J�]d�=?yt>�?>>O��>F;�H_)��C�;x��r�Ǽ/��=?��<p�=�!ǻ�� �q��<��=� >�4=��;Kec=�bq>.b>:���?���6E=��P<O�I=�������=��^=9�=p暽���=��>�#��>>�� �{>Ws\�Ok�������=�?= �>Ҥo<<�=�-�<��=YlȽ��U=�>D�'�>@�>��ӽ�����[>?������W���\J���E�h�m=昝=�J�<��a<h�l�5��=A�n=MD�pn�="���0'Ӽ�)I=��?={P�=q�Ƚ>�+=>�=r\�=E&>;>s�S>�k�=�V�,���V8���W>�߽��; R�>�F2�$:=6���L����"t�MЊ�o� ��i">�r�<��=�ok���X>���=��O>WH ��W��厼�L�=܇���l�=�Q�R{)>j{��V�z����'8�=��O�� �=WV9>��(= ]J�_==>�zE=i,�=���=��~��>�V0>���=ړU�D%>d-f���>^�����;�Hl��ߚ<����s�A;F�Ǽ����`Z�@�b��B<�Z����=��G;)w>N����>>���� Y��[X����=z��=d^�<�wB>K�=ph� =轋��8��=. z==T����=�v�=�́>S 6=��W���z���f=�G��$F�Z1�=�� =$y�<��%�)�ν�ȍ>�د���=�d=������=�� >�غ��� ����>z�����W��:=���<���=yW/�[�d�ƒR���F����Fƒ�Q4�= 2=�B>���=�ʳ�`�=n> ���b3:>a�d����=€!>��"������J<bF<�ţ=|B���fҽ�<�*�=��]�J.�=]E�=Ґ �E,<�u^���M�?�=��7���e��� ���#=n����e��>D��=��;a,�=���r0�<��=Y䣽H���ӏ=��==p^�]礽Ko/>��ĽO�=1�>Gg���$��|�<���=Z� >7<׎<� �����=�6s�� �<�H��D'�<Ӯ�=�<�r���pZv=7Ĝ=�����1���:� =۱�����="߆=�C�<y����e�=����W�y<�p���b.>]�нC�&>޴z=lk����=�1>^��>Z�p���'���=��:=1~߽ԁ��]� >��4=Ɋ��qFa>�Ž�����Y� ��:�e� ����=��鼀�"����~x޼�}ڽҸ�=ڹ'>�+= �ӽj.���R�=�Z˽TW�{@e=y�|V$���=��>�c��o^����=r�G���2AV��W=G���ǰ<)�Q>�Ҧ=�^�=M�'>t����N=򶩸$�3>��q���=3ei�x�-�1 >�A�<su併 ;=mUٽ���<4�:�e��:(�<>׿ڼ�`9��~����v�,�:,��1ҽbC��2P�������=i���m"�x >�a�9��x���N5�)X�<%>n�<�'�ny��N>��=Z%���Ƚ�>�S=����%29=���=K�2�f{�Ƽ�=s)�=)�
��̑��.�=+ =y8p�n-#>�d������$ʠ={ >fi>�.=����$�S=~I)���սp��=��-��"������E�B�#@t=V��}F��>}杼�����<��w���m� �<B��=u�ݻ�#;Δ'=M���*¼N�=���<H��O'�=����y� ��>��-%�=��:���`����=�H*�ײ�<����Q22=�p����=�i���7_�J�i�8Zi=���1̽}b��_��=�妼o�2>t��<P�f=2�û.를��c<��4�V%���>Z�Z>-�<��%=�V��u(D>�+�<[��[6�]�\�� *�,�y=Ѡ�F����T�k�&��ʥ=�����=��<�>v�X�8�<�2H��0�q�=�޺=:z-�'����=pn�=�+�=�\8�/�p=x�ȼq�����=v��=M ���&>���<kn�=ac:��`$=�D=š黎u>ܺ#�(���� >��> Qм"g��}��< �H�x�i=xn.�\�=�L�C����>��@ܽЃ���޽�hy=#^b=�NN=��l=9>��l��a޻�)=��]=���<��ٽ�`=> �=��Ľ��>L��<'�½�����jv=|(Q��c>:���)>�.��`���E�<kϸ=�q��L,�󏙽���=���{ə=�$Ͻ��9�4��� M=k�=��<f*��3@��4>�O)��1r��`�<7�=r���� >ن�<*&=�=4pY>�9@�J����>���n鼟��=�=j�<j��''=/��`[��γ'>�@���X>�)�԰�=BH�<y,��4q=V >:fg�M���F�>G�<s7=�5����=�~����������ID=���<Si(>�Y>���M_.>z�>.|���>x���t =��ĽϜO���t�
}=�>#>$>���|�=��3>||�=��{�ь�<HP���݀<6���轎>;=N5���������=�G=��=C⧾n�>��|=!�.>���=n/����=I�5> ����m��q���g<��C�Y��=ݑy�Gq,=�lν8S����=>2ơ� �=�÷= �ڽgi�ˎ�=�짽1kh=�O2>�z��-�< ��=�=�Q�>�e�==�q�m۽�s����8����<�r���,=f�޽1@ >S���Ƙ�<rf=l#����=�Y7��(�ಧ=� /=�Y=�O=}�q<�[�9w��=�K�=^6$�IY,= �<ɟ&>�`���3ܽ�������=�}r=�0=��ѽ������ս^' >�:= ��;�쇽�ǽǕԽ��=V��<�vL>��:k��=P"f>��� L=��?= �=o*�=F�E��O���>̟����%>�#��by3>�<�=��>Cݸ�a���od���F��\�����>A�=��X>D�=�]����0�e R�A�仩�K�X�(�cS=-S��]G�=X�ս��]� �>DVͽ�[���ּ#g9��qR>ھ?>o������<.� ����%=Dݻ=z�J�V�8>s:�������=�Zm����=�$�=�Zľy����#�c�=U9�=S��=��=_p9<�{D;d ��ν�I��t�=/Kr>c6�=y��=���=ɡ��:�%��<[�>>���<�o���R$��=P��jݪ;V�U>�9
����<�Xp���U=U��
}����琐=BO�=�+�:$K�<�V>�ܼ��}>?�<b$�<��3=�O=��ͼ%Џ;[��=�h�o_c�����CgI=� ׽7��=��=��=�%<�1�=@�=o=
��;�ݔ>/�G=ɛ�"&>�m]�3w?<�5>��p��5<\�|=���=H�>�ͳ�
�F�2�)>|�>4��=��E<��'>N�ڽv��=g)>�l[=��F<�8"���#=!�>DY�=�� =>��=W��;� μ�8�<�����н� �=����-i'�n����N � �>��;��D��Iǻd�<>3og�+"]=�늽vY�b��=K� <��G=��&�νv��=�h����>��<ˑ�=�v9��RM>�i��K�ȼ���<�3A��Bt��a�T|�88_���ܼf*�=�ځ��/:���;B1ܽn��=A�*�� �<����o
F<�P���]=OY�=cC>!+8�������2>���<��߼��U�������6��Pۼ�Լ/=�g���=yf��O��<G(�=
�{=��T;��)�ZD5�a����M=o=���=3\Ͻ����\z��x��9
2:>ʨ@=h��<R��=P޽���4��>�(�/�f�If�=/�n��½Z���������t ���e8�i�E=��̽f����v���%=�d>��<z>.����T��k�ֽ[���&�>Q��6�ý�>܃�<�{<7�Z<��e=RS=���<�|<>w�=��>1,������h�=q,��6�w���=B���~�>Β�.�7��̄�^����Ī���뽎<E��L5��y�=.����=�_պJ^6<!>��b<ܕ�=S�O����=g�Q>���PvѽO�=`��u�>Ub�=�H_=��<UW�9g�꽳@>Z�>:��y\>��7$U�(:=)�<X�=uN�=��=lOa��8=���=��{Z��Wi�>s�=�r�����6�<w��=�Ў=�Y�=~Fu�L��3���H<)�����X��!�I�y=Αu=�����
>sy> 2�=��a>ٖ=Q�:?a=s���gi=x��<����9�=-F��>b��==����ɼd��=����q�V��`��=��=���>��<X1�;�Y��ܽ� �=t��<�y�id��e��cr��hp�9��!�C��<�����'�Sv�~=�1�A��=;n�=If�^{F=��=�i =g��``=Ͷ��~t�<���u�����b���(��l\ >�xG�����
]��u��3���H󶼬&>.�=���=����\��=�l=cG>?V>���R�>�;Ľ�H=�P<Mc�=���)� >a��9;���+v=XCO�}��%��=θ�:\r�=�X�<�=�F=�e�=t���=䓽�V~=gм��> ,�=�:�������<���<���=�ŽK��:A߽YJt=[�~���=h��=��d>��>8י�4�<=�0��V��u�=��=@�����=�jнQ'�<�yy>��=a��=��w>j��w>
=J�����ӽ��J�υ�=���=W9Y����;?+"=��>�=����>y<�=��=�g=~��=$w�0�==%��<肝>
�=��ֽͰ���ҽ����#��=籤��C�=����t,]<@m>En�H�S>g%�;��#�(�d�q�O�l����],<U�A=�!��x��<�a@>�=,=��?=�S=�Fl=ca3�b�.��%���86�.�D>Zwc�-bL=��<��R�gx߽G�<�໼��;�i����~>`����L='>�bԼRR�=7Ȩ��l�=�b�
�%����Lv����=|�м�M2>�Ei��z���H>Po��fP4>�f���R>JJ��} h>�����y�k�=��<�o,>6ڴ<�c�=��,>?E�D�ƽ7M��K��=
o���v�;S5�=��0�v>�=�->�c���� >��e_���=d�=�<���c��W��� �:aϽF <��=�8K���=�o���YP���>gZ��j�=\��=����)3�Ie#��L=����J�y�Խ{"�=�]�<8^���?=i<��� ���/�=�Q ��=j���B<������:>���=��=i<��j��=q��=#�޼���%v�=kq���.�z1x�+zg=��=��,���ؼ#B���)���7Q>o,�=Hʕ=r�z=��<���=q�̻�|=r�����y@=�]�=�j%��c7����=U���=i��=��5����Q��">���=� ��T��=\<�I�"�~/��K[ϽR.��=Ͻ������<� ���]-��і�{���� >���=����/��<kp��E�K�����N �1d׽\�� +>�ܻ����=�A�x&������Mм����p�iT����{����=0g����=+�׼:�=񟽌Fs=vc�;��=���{+F=�9E>�g=g@�鬿=�<>����=x��Q�<zl>��=u5�����=�;=_;c�s�%�� �(e�������L���>{8>�\�����
)e:�׌�Z��=%��=f �;��⽺�
=�z����
=�޽�����5�=w¥�& ���V�Nm���*>%��=gE5=#M�;�i>�½H>Z ����� ���t0�>�>F-r<q�=�g�=5iA�4���
ؙ�a�>�i)��ϽE��<���%N��5>c('<�X<� $=���=G�����=�o
=�����'� )> ���.�V��=L ��`�)�VV뽔FT>�h�uUX�Z��<�� =��#=(ѵ=Q���s�l��/S<�w�֘����,>� =`Լ�W�>�r���8�����=��*=��*�;>N)�|��;ȅ�=*L��fh�����t�^>�D�=��������>N=ZP�<k|�=ּ�=�:=�<>�yZ��$�;ɤ뽤��=Pˊ=�-t;y 7�Mb�<�l����>4P�Wtw�e����W���S�=}���Z�����r�=%������=P��<5ۭ<A�̼�Yh>(�< �%�E�]=�$@=x;�=Mi���=g�0=�a�=%� �e�V����=� g�ۺ<pJ�qi�=��߹_>G��=0�6>��e����<NH��.�P<y�=<��՟�=�ҝ��%����g<�w1=��=aUϽ�!��I ��O�U��;������=uM�=�>,_<���=���=��h��c��n���̒�����$
��Y�=�l�u\q<��x=o�><��?
�=]�=RyP�MG�=�t��2����=5�e>��=Z��bA(=�YH� �2>�ʘ=sн�;$��d�=�d��+c}� �~>rZ��X^g�вR��!>�8˽ ;>?
���^=� ;�S<<Ӊ��ϼ���=����W��=��<q���.]>*=���=3 �ΰ켦�~=dr�*�>R:�<�� =�Y��n@>q�%���m�ӊ�;7A�<r=�d(�Rr>f���ͼ���= �=P7>�O8�|�;e����*��a x��/ӽ^_/=$�����Լ0t>��r���=��;��a=9(��M�*��~��JK���z���<G�I=
�>��0�}��=.�����>���V*=,��T3�=M@O=�}>�>�t =.�D>�松 -���8ý�)����н��=e���}�=�0�?��>\y���ކ�x��=���=�s��_���*<������`��->Vq�� �<9�=��z�;�cݻw���[> >�,w>sa�=��H��>�P�=~.����=O�=��]�&Bb=�g><���,6��^�<>%4O���=4��=|6 >�x >���=���;��o>�=�R_����=oZ���ݤ=��V�_J�K>��=\֜�� =n��=b���պ�=��H�>=�Ҝ<G>�V��7.���J;��:���S>�½ՠ==-�6�[ >%"�=1�佦h->��I=~^׽ux=`�=��>���=���k.�=��?9�<�`��Zj&>o���(��=J@D�k��<��W=���>Lx�=]��=e˜�Ң+�u�罫��=8�>��N�ܷA�O$�w�F�H��=rc=���=y��=�)e����=��<P �
�����b>J ��=�{��͌��H=�� � M�a&>PLj�*5��Q]��������=�w���z�LJ�=������>������u=���>�ܽ��=i�ʽ�햽pW>����X|���R=��<�ϗ=f�=U���Z[�=a��ӓ��������=�` = "%>��<�����> ��^'>�(>)��=[6��\bW=�$�:��%���9> ���!>*��=�a�@<H=��h<����%��,h�;Is<�ф=�`��w��=F��<�[�?���i˽�d2���X>s�y=��->j]�=]��=Ԅ�b��=X��=X븺[<��Ĭ��L.�k�=�q5�Q��=�����sx�f<��cK�=`xK�y��<j�.</X/� c���Hּ�Z�=Ǣ���y�� >R�����2����;�k�:����r�h���>�.�=�J�=t���[��_������<��I=��=��Ͻ�h���)�MW4>%e ����<c�0��j����(>UE��͠'�p��;�l�J��=Ǎ���?�:�>D�+�� �;#\q=���=��[>�z=�%>b6 > �n�����*��g�Q=���=�]w�r�(��>-,=� �=\�����=���=�9�=ͼ��ҥ����R�R<���=�;�=��߽�������<-�`��>2$�=����}��=1�>1�C�%I���ͼ�w�0�e�����f�=�{A��
���]
�B�&>J&ƾ��`=8^�=�===��9�X!=�铺n�(<�ۉ�m�^��=
��_D[������mq<�y���ѿ=�!�S��=��Ӽ�t>>��� ���&&>�Q/ ;+�ռʞH�F$�=G�7>B'�<�F�= �; <�����!��>�s��&_=R�<�⫼�>e̮=Ŷ�<�mm=ct=(��=��(�� �<�@�Ae���䎽Z�>E< V�;A}���>pj=��#�)�����o��Y
�s�}�����>�=��=�����zw>�ܼ�T$>oʔ�#�=n��<����4>��=�7>�0+>h\?>��w=�ڽ�� >�2��؎|=���Rzнv)���9�S|=�����1`�D3D>&!���� =�Q=���<�OD>S�:�\!'=^�>&��<M�D=ƚ�����=�i�=�
�=2���'���v;�Ȇ=�e�<��0=I��t5h� ֽ��ü&��n�=L�=�'Խ����9)=�� ��䯽��e=���=q|#>Z�F=� u�"vֽR��<��<#�ӽ��>�I�=�i=�Z>� �=��\����=�z�=K�[���ֽ��<��<<�S:�M��<t��=s��C�I=ƒ��X�=�D1� �=�=<�K= �Խ;1.>؍��~�>Xe��|r�=�E�<������=:=�n������ia=���<���:=mE��Sq=r��;k>�4�=1BM�y�b��=��3�I�M�z�ʽ[��=� �<� �;y��=/��=��¼)�r>e�߽�&�<�,k�m�V���Y��[�<�@���=�����
>���~m�=���=�yּ�\�=����ᆽP�=�>���=�s=�c���:>���<j@�>p}�=j�Ƽ�sO�/�� a�=1��t_�������Z>��#>�>+�+>�ۗ������=2�>��h���~= ̈��< >����X<�@�=����p*��:�<�>���=X�Y�s��='@�>d7����>e>� �n$O>k��> �=Np=��U���<D�=X}Ž��l�okQ��<">���<x��=��e=���=��>���*�G������U��0���=MѼ{� =�W��^.�=3�=j�=�������+=5��;S~>�[ͼ놾=K>��>���<g�@<Ӡ�=BO�����=; �����{Ҽ�Z����=���=�2�>裏�����|g8�өw=+0�uc�|��=aNX=���� yr>�<�;��=,%���ji������H��HH�5:$���4=&�}��=X�����=���������=�f�=v����=%ܛ=�1I�� ��9f���*u>���<n��>m�=A��fU$��ļ�̻�<�)=p�M><�J=%#���6��4�ǽ Lj���)�奊> o��Xd�;�] �V>������[{�=�I��b̽2�>�<#����֦�DDx>m�>=
z<0(E�ʄ�<&T�<�D(=��Ͻ�S�=i|\���:���w=VD�OŢ=���=��ټ����5�漢�>#�=���=��-� =�oS=_ >�c="�=Ƕ�=T][>T�(=Q�8Ƽ��<P ��L�=�8�>��=���X�\���漙5�=�*��,���\=>^�m@>L0E>� -����=C��>Ї�;�d�[q���f<g$@� �>u\����>UTҼx�`�6�=��=���]:�ލ.>��J�t����>��Ҽu�v=d�>��T�,`�=���> z�=rE������O�4�s<^�_.p;���ýL�n55<���=��;���P;�(�O�=��y<��-;Z��<H��<�$:>�H�����
���6u<%D�[��=�=���.(��}�W>]ԅ�.��<QAV��9��@�9��42>�>G�L��Nڽ��%���6�Jք;�����=V��F�@�}����iO=bV������c_=�tI��ƣ=��tdh<B/�<����\����:=r���.��0f�=g�d=|`>e[=贍;�9f�D/k� ����$�=���=��=�@V�n�6=�H�=���>� >�e�3�=i�R>J���漯p;=�R��$Ž�I���'T���X=�1b�Kc_>M��;� 1��!>u,�>ASF�)�ļ�-Ƚ�C>Z) >;�&=�\ ��~���ϽWԈ���'��*�=�F=���>(�=�c{���,���lx=ӂ���9�=�����4 =�� >��< ަ������=>�i>�?\=�S�=���< b=�LW=�I5�s���!x�^�=>|潧j�[���]O�.�<K �=����揟<���<� �a &� �˺8���������<,C�HD�=Q��=�,���=�p�<�=<;=j�wR�=�?=���=�L7>��!�p~�m>��\>q4Y�������<̈́����<���z���>�����<�w�7�8إ��3 ��>J� ��5��+��=�c{�?����ݽls��`��= ���=�.>��<�q�e�w�K���T�3�H�D=�_P=��|�������>[N�<t�=���!
�=���=6T�=S�;l�Y=_,?>�Ž��;�j =�8߼���&�I����=�9#>��[>�u>�R�>TT+=o3��U��l�<e����(�;�k����޽����)᥽*��=����s\�=hJ�>��#>,}�>^k�,�ں�K2=�Y,>��=��f�p���Z[>ƅ�-�.<+��=W��<=���=D ���׳�(M�X�Խ���=��;��=F�<Q9P�u%����=E��>�����"=�ܼ�5J=š>P5�<U��=�5�b�E>驷=yn<\��=�—� �=�RνoT>��_�=\��?�=6��=��T>_�W=�g���� I>v����=����*>��^��^|<�4>'Ӣ=�`=?\?�~ƽ7�="�= T�}8����C_!>���= �T�1��= s<っ�e?�=w
Ӽlp��)���(6w�)���o^C��U=���u�)>9`�s���AԽ�+>(R9�b�½�Y�='1���0�>K(>
����}�=�1>�o�=�\>z�Ժ�<��0w=�JR��Zǽr9��#+�<.���\��=mL�ߦ�[��'4>�!�=�Џ�U�|���Z=w o��n���nv����=����u�=�)=#%޽��𻨏T>.��<����_��=@t��R��K��c�b>�9�=ٌ�=~qE>w�����;��;A>�V= �_�>�L>�^���,���@�6Ի ������=�^�=���=�R����`�:o��U-��p��}�Lo$>!�>��>����g�=�*�=pE�<qD.�4����L=��&=}�v��O=�_�&�!����#;>h�u=�T�^�>t\0��1=�!���t�=su>>��;��Լ���=@��1��=�P�=�h=��!=�M�;��#�5����gI���id���}�����a�8�.���m�j����’�
�=+�\=^�o=���>=�S>5q����z�<���=nV�I�?>�.W��E��j>7֫��\������8���D�>�䗼ԗ<�e3��^�<l�j�Q�ս'E�i�����;=�^�=,�*>�=��I<0�S=��ֽI��=���=�A'��c/;D�n>Y�>)���.�k=MA�=��<�&��Ր=J�۽� >sD>������&<��)���.�qv�=x:,���=D�;���θ�Y[Z=�>��-=�\>T,��tͽ�� ����=��s�T��;]�0=K�T=��9���>eRڽg�=�Nj� XB>c/�=-��:y����/��<����g�i=����'=��<���=�]���m�lW,����=BF��\<=�� �&LA��Cr�514>F�P�q�CU&=��b�c�^>�ǎ��b��KVb�)�>��(=���=�<.�=OV�����v/=�X�=gg)<^.�=Ŧ����<��=!�j<a|�>Q��< �=:&*>p��+���E2>}�=�ӌ��ֽ�5<��ս�[=e� > =ݬ9��EG�I|=�3y=.�л��=��>�* �,ɼ���~#��ܧ ����<��=^�%��B^=�\�e�j�=��9�La��Q��OC�<�a�=�7$:>.<�ü=���<8S�����<9���?4�����t��=M5��9F=H[� >�8;i9�<��=�vH��i���V=�Z�� �=~-�=+������:E�V��,�=1R�=81��/Pͻr2�2(��Ee=x���
����ʽ �D<���>͗�=%}B�I�.> >o٦�rp<~����G>� ��->$}�;���Z�<�a�V��=�.t�n+/����Zj=w����`!>��=}}��J:=�T�<���=&����q?:<�I�#놽��^=� c�*k{�Cح=FU ���>���<6国.��=a�%�7|>-�5=���� ��]=q��<��<K�>S�6>a���EW�f�X�LBP���&�4Ʒ����=��= C;;�&�9y���R\>���=jɽ�`T>U�5>�����=���=�>=��ؽ�f <l뒼����p��;��p��4�=���>���Z�=|�Z���=���=@-q����2� �U �<��׽'�=��0��1�,=���;�m�<���=:A>�:�=��2>#�_>��=������=_��=�N%<��p=K�J��� =A>׽%B5��_�=O�ݽ��V�f��=��=�N6<{�F=%�8� m�=��U>���=�C޽��:_�j��?<1� �%O(�s�|>���=�h �"x">�P4��@ҽ�d >cu��M?>3O3=��\��g>A�=e64>BW=Y�����=�J=T#�n:�=y� =�8�<&�B=&M�="�&=">��\>q^� �=='<��p��V�=$#�����<�D� ,�<�ޛ�,}W=�� >��<cl3=�>�P>^����1���#--�sKʽXc�*�<S�>3��<L�`=r�=<xM>8<��8nK�7�W=Jq�>M�f=E/P=K� =H�<0=,��t=޾��Wm<,�ɽ�i ��l)>�8}�� ���7��!�>p�#<��W>�=���������<C�U=ݤ> �����=�b��G�+=�[�=/B>ت����c>�s(<E��<��=� ���� �7ճ���-=��$���%���� 9_�����v��=�������j] >U�>>Ҳ2��>�E= �x>��= �d��߷=M;��`��dN�;=�0�T6��2w��~�=�o��ij��4.<�G=Q7t=�h=>���=� ~=�$��=��缱��>� >��>����>=�>,�]�*n��"聽�`I<:�<S2�= ��>���k>*BO>�1�;���=��">Ь�=��^������⽱e�<��t��2;>��XH<����&�$��2&�)�[>���=��μ�Ù�4�1=XRȼ$����K�*�����p��,��r�K��E�=��K<�[�����=[�m�ֳ���_F=R��=������/��x�=r�L>oxҽs8� �?<]L���U=X>I<`�s<c�����;��ҽ}�:>)�I<k����<ˏ��Q>�d<�
��uԽ�Z�=(�=��?��� ���C���7=�M<�ַ�f��Y�<Pݢ�& �<T�J�(�ܢ;�N�8>��ν��&�j�?=4��<qǽpn >y������=� >�"w���=f��@g\<��=�Pm>��_��J�;���=;&�=.�k�aʃ<z� >�M8=������Hu�����܁��ژ=)n`>�-�8ڀ=0O�d"<�0ļ9L�=����ã�myH=Ղ>��4��N<��k����=��7�ߑ��o���5�<! ��s��^(����>�a���ؐ�Gf�=� �=S�4>� �:�窽a^l���C=�F0��� =ˍ�=�>&1����t>�� ���P=A��=�ߚ<u$C��y��;}��%�B�6}��CC�����i���8[� �ج�s5.=���=��=�q���f�<,_(>�έ�f��=��4=ジ;�ּ�䁽�r���=�#��}�=�V�徊��g�=Mݐ=�=�2>�U�=Xۻ��=C��ݜ;�:>)!����> ��/z>M� >!��<;����Z���мeu6���c��̅��[������&��x�>>���=NjU��,ǻ�܅���-�y��;�|��T����_������ ��v��=�����E=�S6���>8.C>{g�=����8�U:s��=�$�=q��<C5<�7�=�{!>X�{=@k�=��=���=����>u>�=7��=Ec#��|�=S����<OC=�pH>$���=�_��mܼ�d��7��;�UR>=I�[�=���=U�ҽVA>W k>+�<����ǒ�:�>p���MZӽ�,��}0>���=d���nV<�A@����93���W8���j�=�B'�R�v=���=�b>�G>,pM=�.��R�����2<5�� ��;��Ƚ�%>� �<�Jj>���=L��=��p��s�>��t=�sg�A����=(�=��{����<И>����T:=��8��9[�/vj��7����O���x�<�=���<H�`=�����
�=�ʀ�7b<��E>�$d=t)νm�h��=d7��F����9>��׽&c�=��:=GMS>:��=���= ����A�=5�&>��<�>��޽�s>�#��,J<����Ƀ=���
q������_����:%��{e&=w�>�KH� >�H�;�/l�.V>��q��b>�ټ��Ǽ��� �8�N����>Mr=� �=A)�=+�,�zJ0=u>ܨ>��|r�__����y=e齁1,=uCA��σ>&CP>��S��|o<� [<�};} V��ӕ��A�=�aW�g|���
d=��?>Om�>�~���ངWҽ�=��K�>� ��D��=7S�6χr�G�=���k�=n��<�%T=�_>�Ё���Z��bE=�m�<{,'��/> �_>�ý��H�'�=Ѻ��� ;�ʺ� �=�">����~X��9���i���o=LZ�;sB�=Hw@����ؽ�Wy>�lԼGi�>~�*�������f T=2vk>��K�9G�=�I�=�^=�]=��L�;��=S#a=�Z=�p�=�ߺ<���=�v��<�=�������<u��9iS=�(�Y�=ْ/>Nb3��P;��!>>QݽM�<^�f�U�'>)-�=*��[=�u��a�>�>�:;>�1(=P�E>C+<�8�=#Tн���<'�u>�d�� a >+��;�/��� �=�E���<���~)0��~��&.�<�8+����<0���׊<�=�<�(��;�g�0�D=I��͑�=%� >�J�=�o>0�:=��'>�♽�R}���Q�ز$��^�=���=��_�y9�F�.>N�=J��=&c=��ܽ@�߽�t�<d齇f��\�0=׎a=!#=�d�<���7Ѧ�p�p�5����:� ��KDH=
�=��g>��ֽ%x�����t�=����سR=^kн{�;��ֽ ?�<BDS=���:=v��=�� >�=�N�;&O%�dS���<(�Ϛc���\�ܲI��#o=$N=��"��R�<���=$
�<��.>�7Ӽ��>�ҩ=#�=��;���6����=j�=��7���'=i�k>)="�*>_f�<�o�����S=���<Z��g�Żb����=��$=]'%=R��<I��~�:�J$=2�ɽQf������ ���k��%d<!����K���=y(6<:��>��u��*[=4�����f�S���>~f4=�%+<ٿ��Ş&�t�=�q�Y;C���Q����Y�#=����К�������=��������_S=^��` =Ph^�Y@��V����r=3>8=jȷ��Ʌ=g�<X+5�D=5>�S���nN��oW><=��ü�>�=�g��)�P=֔ҼJ}���ά���=`;ڼ��=�d]�(?�����L�� Ƙ<LI�=�.�=�b������0T=��d�D=(���!����y6�ݐ/�d���Go�f�t=���q/|��<���� �=k齿���q|=�!��S��b�>���>�ר�T�<��j=��%>|%\>�WH=p=�z:;��˽$?O���>�=�,�����=a�������њ<�^i=c������D�D<��A>h)�<��t�1=l�=>q^�=���n��#E �6�G��F�<��ٻ��<��f<2��`u>(\>��z�=nd��<5#=�T�=�
��ו�Oh]=J7��&=�S�aG~��$5�]W>O > ��r�=o=2���]>vk�=$� �;Yڽv��P�,��G��sY�=� <��ۼ�;'�社2��<��6�L�������v�ar�=mp��^+=�+��=(!>�?�ڼ�"D>�Z>�&5>�]��y<�r��m&���z���=��<Y�t=�p��Rb�<��Խ�G���kȼ>q��
Ѫ=��=��ܼ�I"���+>����]��� ���˼נ����=?=����Y��E>�cV�|W�G��CӲ=D� ��p��Og�=b�>찻�}�<p%��0���=^d>l9�����������A>+�j=9R��7>��B�yS�=+;���N=.��=>�z=�y��@��=e7�<k�I���/>�*�!3�K�����=����Q >:6�ţ��}�<����[��zs(>v ڻI�=(��q��6-���ם��t ��s8��e�;�<g<Cc�=�|��ҽ_|��yX �:*�<l̼�߽��f<��?>��Z�ʛ�=ۉ�<�D��̆���m�=좽�6l�� P>�Ƚ3�=ȸ+�𹬽&�Z�I���z�������K�<�<����nw�w6�=���=N�ʻE��<�n�<p��=�_I=oc��g������ =���e����=�$9=�Q
�g��=HЬ='�����<=���=>2R�7Փ����e��=^n�K��<�/��&��=o�w<�
�U�= _-�6伽���<B�=+�f�É=�p!�
c�B�ؽ~v�;{�<"X6<���5�>>�"6��!@�����2>Kg�= -�=Uކ>��;μ=n]>� �=&�w��h���R�<�!��Tw�=�,�,��;�;=��?�m�^>��L��u�=VG�w<��=��=>�~�3=�2O=���=Cʧ=���<)_=��G=!�\=��7����� �q�/>h��=��d<���=�X���%=z�>�ܢ<�]����L>f�:�<�!��g�5=������\>S�?�y3ٽ46:����Iv��D)��B,��5���`�=��>Xk��en,�k��=a�]=�A>���e�U><����\�<��ͽ�ܰ<�
'�P�
��ۖ=�=�/�=�S�i�<>�i����g�m� �՝�җR���W<�$�R�f�r�Q<#�
?+��U=����:o#�_�D>�ݼ82�=X/[�~�=s��=B&���yK>�g�=�F&��fƼ)0g<��ʽ(ݩ��t�;���=���=�P�U�|>��n>YL<}E=�2=���<��_��u
���j<�ta�c����N�6��>�Cr� 2�<����h��� >IN��QE�0�=!(=����f��;���;Bq�=r0;=��v��w�;�㙽|����7#>%)�<㖽l&�=�v�~��:�%н�^=�d�=f������=�� ���b>���=o7��l��A�p�>�bR=+>d0��,��=� �<�=WS�=op� #��1ħ�2 �=�@;=v��� L�t4�<�a ;�9ݹ��!>� D>���=�w0>�~>}�`�Qd);��'<�n����;�ȇ��s�n-�=)�*�L�F��=��>ɞ"=���k��=p8ʻY[�=�U�� *m�*&���.��a=����(kb���>Y�3��!R>!�=��μ�OV��ђ=���=��'��D����1<n��=1g�<�� =��ͽsz����'��<�=���=l��=�^�L,�<�;�>�0�=���P��=@�=r�3=�0>c��=a��<3S-�D�����=�1�=X>��.=�˜<�*@���=>~�P��Q
��4z�QȎ����G�����"��=�w���y����=�P=�8�|�=�B�=��=MZ����=���=Ưk=�ٟ=y)�ǘ'��]=*��=��7=�*���\>+��=��%><f��b��=���=�U>Y���X�l��H%>� �,΢��<���$>���+��=h�'>��Խ�8->�a>���Bn���������=�O=�����=� ���D��-@���6���=��=;���1�9)�S<>PrX�5.>e_�=|$~����=+=�E>�A���dp< O&=��(��خ=HT<�����Պ��^�<F��=����j�k=�+�q�0�>)p=��.>���/l=C�jt>8w����d=�Qg�60!>!��J��؛�=[}�>����#��=̆=��X=���=��=��F>�ɹ=��<b�=[���U=d�:>TF��}����<>�m��5v=" E=�%d��ү=��8=�\�<�“��u?>躣��t�=:HP�Y��<f>�8<>&�B�0c��1�C�d��>3�p<���=�5���~=Y"� �->��ý�n>G�Ѽ8߻=���=1����=��=X۸;�R�=?��= �`h�J]��̆�s%��pF���m�=��߼yȽ��D� ���&=M�;$ָ=i=ш߼.Uv���������=>��=�G��!f<���A�*�%�>>�{J=�n�<}{��1�">�3�� �4Qj=��;� ҽTl>%���Dzu��e ���Һ-q�<IR�=�a��3,{k�*i��Ųb����=e'�<�.�NnF��9�=�WJ�+sϻ �=��Ǽ�Q�<J?%���;�w3��/�={��=v"W��=^!G=fs>C��<򛽱x���m�u��=��<SG�iӽ���=����">]�]=P��=���>�2x�.�X��=t�C�D£�b�潷n= �-��}���7�Kٽ��=�<���„�؇E�î ���ؽI���Žr�<i�@=�>�=(��<iT�=�B���c�<��';5Ȭ�tn��"�����=K��=0�˽9���ڠ=�3�=���$f>�\�v)>����[V<B���c]>_E== n-�3����۽C�|=r��;�-q�c�=WΥ=5��=��w<೰<����S<#>q)H�Gs���.�8Uj�u2A=UC��)Ap<} ���9۽��=��d�V�q���;�W���<���=�Z�; !��TK�����;�d=}@���[<A��=@ư��U6>�^=7ɽ/�<������m��~�=�솽��k���B��}�=0J=1����zn�<]�:g����%L��x����3�����d����V:�����@��j��]��=��<=�B=�o���/��@���-�@��=t\����=�k'=�RĽ���<%
#=��=(��3o߽��=�f�=��齷�<�2���;r>e�<b;=��4=�� >m�=�(��Q� >QT��O��=��}�M�h���=�FS��� ��g@<�Rj�����K|����ɽ����:�
>3����o��O{<��b=�y���q��?��M�����6=(E�=u]O=m��=�\���=>��<������= �n=�I�>en2�eL;-Zj=�!���I��;�<�[=��JQ>� �=�O��v����I=7>�9�����>)��=�S=�� ���=�����r�=���<2�;�Q�=6� >�e ���f��Q$=��>��>��ս�nO�)��>�a��� >R�z�$`[�ԩ= �">/�o<_��=Z>rit=�\>>�`:��H�=��X>i ��+G=��B�Ъn>p�W>� �=bd.�u5 �\�8��'����k�O>���Y ��+!<ؤ�>[%�= ڵ���㼻��=@�ἋXk��n�=6>��G=� �C���N =��j>�l�=J'K��ؑ<��4<'���l� ��Mn>v��<�����<Ѐ����@>�YɽV�P>��R>$>L�-=���=�˄=R۞��.�<����_�������W�=ҜM=� =Z�:�l�<����؈:> ����o�� T����̸ؼ)+�=��߽�B6��=���T`=b��=��V�o� ����=�$ �G�%=`N4���>%lM�S���H�E�z^ƽ��o����53>�Rl;`��,�C��!��<�<]q=y��=���2:U=8E�=������e=�1��U$�=��E=T��=�j�=�/ܽa�����>�)F�i����Ͷ;kF���;G�;�+�����;!l=ۻz��>���;�>3x�=�X!��z=��o<#U��C�������Ձ>��̽x�ؼW�M>1 Ƚ���=޿5>~J*��B�O>�
ּ�<ѽ��4���=�}b�ގ��R���6=��>�N=
*,��
你��л2>��½��-<�ө�"%�=��==�&=����$�J-$;?�=�̽=m���wU>�=�'��Ͱ����̽�_c�����^�;���+<�3�=n��=<h�=�~��"��s���|���aO�=���=���
/��y=03=t�����C�\���ؠ�>v�\���c�}�N��=�3>��T>�-Y���ͽLi
��>k^��� �=+B�<^T�����{�<�>̹W>cS>�|��J1>>ݬ�Ѱ7>���{�����=b>�^/��% <Q�����=|��;`��=��(=�Qk>p�E��.���>E�= �=��=�#��lq��.����<�[���!�<� �<��F��c�;��2��'ӽu��=�=D���">�<Y:]g7�R�=ԁ >nC��[�><����ܻo��9@��Qm>`� �{�k=e�>Mӯ<"%�)5��3.�ʸ4���՛�<A�/=(i����C��`���)��@��=�q�=d�1�I���S�~H%=��w>/�%��D��tN�=����t)>���;n���E���=��=��=|�� <�d|��E�>��r�3��:8V�=n:=�Z����=�߼ɢ�=�j�=��>�O=�mw��2ͽ`�b�#�>��@=� �<#���a�����=�Q0>L�%�af�lI�< ��=��I�h���"D�=`u>�̼U�����=,������=?E>�Y=
bǼp�i�=y �<��;=��j)F=��=��_$�=��a��=h�j�+׽C��>^��`�'��U��eE�� �=?\4����=���>��T=�*2<�}����>Z@�=�;=�w�<�S���B>rD��b8��w閼�i�==�&E�u�=I�&�^��=�X=��"=�_�=���=�F���1�=�ъ���m=��\>�{>=�d�=Z��=8 �S#<p�>���<��9=��>��۽׋3�ݪ��:��=���Nx�-�;�=1={���~��=+8�= ���B=�?����=h��=�����_������µ�&ҽ�s�>w���P���@A�L��e<��=��Y��=�vq��y��Q�[=(��"�s=��Ͼ�F�=��=�M\���>J ��y��t�>�C>��a=� ý��;�-�K�b�F>�s� =�=�1=�a#>ӗ�=����61=|~�=<�u�%��&p�����˒>���=�s�=X��xɼ;S���_�=�Z�=��>��=Ϯ=�Y*=�'�="h�=��#�KY>/A�=[�=\��6�~>,ͧ�U�����=���=X�>������=��&�+z��ˁ>B p��߽����� h���۽=��;>�諼� �=�U�=4j@=��>o��>���(�ͽ����c�)>�x�<X��C�+<E�3>�I���#ӼM���H�M�����ku��/�=�a��U ����ɼ(a�=�T�=lG>��R=�z��B̦�`w=K���ľ�� ���ն=� ���V�<l >��Ld�=�+;>�j�v��<.���`l����|=a$l=���<���{>42��հ������#<>?P��!��>��=��s>u*>Y���a<>�΅>~�k�δ �[:���Ǩ�~j��~ች^g���S��:B�=S�2��>�<������=��W>�V+�(��=^�=V[1���F=e*���ý��o==?���7=���������<\����]>~> >��R��h=�.�=�6e���W��-k=��=�c=���<�sQ>����@���=K�>iW<��k���y=�F>`a1=�1��(�};�����w>���r�=Ą~=Ŋ�<��'��� >E2�=*��=I]=��z>kR>�=����`=�����6��zR"��|3=��=���$�� � >7�=��ϼҸ���G>χ�D�>�kM��r�=~^��M�=�H=�Tڽ�cۼ^O$=� :��2>��U��Y�>�bY=��j��s��EH>�����;x_ >¢x���a�a�@�:L>&�<ŗ<a�=A7�= )=G��p&Ƚ*��<����']�=�I=������=�d+>��ں*ۮ=�I���.���������4d�����Ǩ�"��5���l��n�=Z#P=b'p=�6����"����;�4�:�F}������0�C�.�.ĸ�0����-�5�K=�N>ζ��JV�����<���=�WC��#=��ͧ� �B�WL�=LL�`�!���=���=�3�=~a+�]�=b�=i\����Q�C=LG> Q�=�T�=+s�=熽b�=��4�m�=����Y�>i����ku=W�J��8����T<���bT�=��=
��/�=���4ż��S=���=ՍD�D=���cY>0��}�ǽ:����:���꼲�3��܆���f=���;#��=��>I��<'�>DM����>ʅ=�?���1�&��հ��sO=���� ���p�<�r��} ��II >�Dj������vڽ�P�<��=�[P�����ǰ=�3l���F>ƀ~��� q8=�M���U��%>C��<�q=n&�=U�=�^�=�~�=CO�>$ ,���A=Ʃ����� $�� <<�Ʊ=VY��D���߽78�_7`��9~��=�7���C?j=`ۀ>�H�<�#=�+>��p<���"Kz=��3��=0>�8x�a֮=g���H�-��?�=I� �>�ȶ�r�&���E���p�;�\=���������>ɼ�=� I�mt��">꩒=�wV�KV�=�J�=#uC<&C =R�<'iY�'�8>bk�<�r>���:H���֫,=F� >� �o��P����Q�w�=]Q=��e=ࢩ�׋�:�L��h��=nv<����dƽ���+C �O%=-;_=0�=�hԽ�4W<{(��Jy�=����=%.=�
<���=�6 ��X�=�Tx=��>�n >*��v�������ra�;���=vT�<������=�Ð=���<N5=���;*�;>H(�N����=�c�=nd�=�'U�� ��ibѽ�f����=-�,���Z=Uǽ����]O=8*H�v8>(ڏ�a>�ף=F>Y��<$+L��\����;[
�<�I��:����7=ʘp�0�M���Y���.��K���vS������=��<��6=lʃ����<� =ѳ��oY,��4����ʽ���>+-1�W:��uL<��O�=<�={ /�*�<�Ѽ��U��z�<~���hK�=^
:��f>��ý[N��%��=���<\�=(1�=����ݺ�>)+>۽����N<~��f�Y������<:�R=c��;�!��Ug&�� >='=<�w:��S=�9>` ����7W<�+��c �Xg�<v����Q��O�=�$M���F��Q�=F�;���=�/>ji����������t�e��=5@ ��N2��O�<�z�<v�+���*���r��):��g���'9���Ĭ$;��>�� ��;��r= �n��
��׶��-��g*=��D���(=�9�� ν(������:�{C� ��=�V>�W>�=�����<K?>�@��$��=���<%?=s�J>�i�=�o����=��Ͻ h5=�[�=w,>H�>f�T����Y"c�:���P�Z> c7� -��6*�>��"����=�� ��u�'�>q�n���_��T��`��<��V=1�^=6�<�>���>r����H�A>���{E�����\�PL��EIǽ-����ׇ�t3���==i�%��+=w�N>���=�@�=|O�=.�⼿>T�3��� >C�A=&�۽v��=\2�=݅վ9�Q>Ξ=�yǻ�r��(=p���'6�>>���EЩ�$��= 2Y=�4#���>��Y�:�[�<:�;�;�=By�=z!��'XT��z��y�a;�ߐ�u�9�7�>��p������}\��h�="�N���=Д�S>U׮=�D=�'�yM�'�=akZ=��<�Q��wd>��p=
�>]C8��i4<���O=>�Y�<�� >�;V�\8��5�5=��O=k�>�&��$��P��=�F=eؚ=Gg4>C͌���Ͻ�rS���#��&:�o=��={%%�6���b��F��ߙ�=H�:>�Y�=f8�@�Kn���A<ܙ�;��!���=6��=M>����׋Ž�ƛ=���<3^"�n%ȼb��=G�e�B@>��>����߯>U�H�����~����J�x� >��b>i��>�Q���(>RJM�_K;�>Ԫ�=~��!==�gD>�F�=��=�`���g{=�e�>I ������f�'xW���=a�>��#=��=�|�<}=��/<#4Z�#�=11�=$p!��q-��)�:��J4>O�D=~��=y6��r�=��7=����2�=��<>���< o�=�/���;y�8=��%������M�;p2�=ϔ �ۘ�=Y)�p{V�ٍ���_!=� !=��=9^;�ƽ�(�<f= �=d5�<9�f>ޟ�<�5=2I�==_��<�6c��7�r�>�l����N|D��5�=�C�����<�dH>��=�P> k�=�H��i������NF>}����=xk@��c�=Y1��r!�=3Һ�T1Q���=��<�K�[�#��~��X���R����(� �(>�.<���Q@m���R>�Q�@�"�V�!����<�8v��"�;��=�"#������Ͻ0����+*�+V�<���ɽ��(� 氽�L�=��=Y�>�G��¼������5�(=ڽt�e=/�<����J#���>����<�����<��f8M^<���=qE�=*==�񗽅��;VK�-�+=e
_���M�8�s�mE�=&�"<��)�� ������[̼w��;Ѯ�=�}<�Ԟ�U =eɽ@k=>��� C���/�=Y�=�|��.���=4��ͽ�c�=��>n�+�dH�T�a=2�q�����"|޽�]��޻��X"=C=X����2��w[=7�ݽ�v��*�U=z�Y�rs⼑h)���F=]��=�q�Bn���h������€=\��=��y;� e�nF>0�˽�\��q0==�ꏽ�'_���r��y@���<.� >���m�=չi�9��<7A>~�0����d����v>n�нݧB>k����;��O���켛�S��O\=�u�=C�.=ť�<Y�m�I��=���;=���T�ļ���=����w@>D�.��:<��'�NQ<Xq)>F�ڼ�v����=��=���=<R���I�=Pe]�� ڽu)�=��"��T_�ձ8�el1>�#��b�=���������3#>��U=z������{���<���=��<l{�=DS=,ʌ�Q�`�B=�:����=�V�H��=;>�y>�b>��c>U�>��T�=�J>�)w��t>a��9�^��N�=rx��C�Y>Vt���!=7��뫒�dΦ����=` �=��h<Ť5>�)�dF�;qK��^Ə=Ku*>M���/�z>���TH>p >Y��=��_��)>~�S��-6>�p>mb��o�j>iVg>��%��r�<�nw=�<��
̽/�=�&�>���m7ڽ���=?Z��3{=��t>��[=j� �����y�pg�;
��H��=��>]�>�S�a̐�9~�;��=~�!>�N��^>B %>�f>�N�=j|=��]�V=� ܽ;��=Js =4��=���=��=�O��;߅#�-�U)�<,S���ɬ�-Lнͫ���=�p=�=�<x�����>��j=�<�V;���>:%��!�ƽ,9>���=��Ȼ�x���@�=�>�Q������5���:2�$��=Lcr=�彡��=��^�Vq���ف���=FI>���>�<���+���4Y�Y;����(>�>���eȽHV�x�\�há����=0��;���<�=;��ȳ=�`����={�j��E����[� ˆ=�g̻R�(>$�Ž\Ң>�����ѼL-�=�<�P<��&X���J<��q��~��F�/>�,�<��+>�Dٽc��$��=wq��{?�=�N�<�k=PY(>,h�#��=v˕���=���=s���?6�:�|�=u'W���(��1��s�<+��������=�,K�a+g�{�<�>��cӹ:��\���e���=#�y=���L|/���t��鸼 �z�<U�=LuO=Ι`��ԼA�)���л��=>qυ��ۺ-Sn=1����ͽ�!�=u�9�� )>�&@>��\��<�@=��.>8u~�$��=�P�=@=��1�Rܽ�Q ��X<��彪�!=�-�=Sp >Mv���)8>0�;^��<^!;��N�K+��f�3�B��<gx�<8`��p�=?�X���r�>={ ���;������ =-�Y�P�=�O�=�u��؏=� �=9]�q�5<7Z�<�pJ�g%�eN�=>c���>0�����\��Qs��i=�=>̍W>V����v�t���(�0>]�>����Q ��=�3=Vb����ӽ�S6>�C>O���C�[����;��/<��'>�%����=�K �)<�=�� �b�@>4Ŷ=��3�W�F�ۈ���?��սׁ=|�>�"�2=D�F��n}�k��ݱ���0>�S�=��>.�=��=���=�է�n� :w@<֮=�λMh�=�춼1%=��=i���g��=���=-�<�W��<CF=i"�<��@&\=Z��: NR�������=_7�L��=��=��;����D�<V�&��� =?S��7>�uX>Q�Խbs.�1'� ��>���軻��<
z'�Ue@>��T=� ��Xm=��>8���@C�=�g�=W��=���=nn>�B�<¬�=���I�<��;Vdѽ�>���=4vz�kID=���=TY��Xv=�8=e"k<cO����g�kh�=Jf> �>u�}�6����ƽv�7=�=L��<i=^�l�n��=�=V݇<�~ս��=��\>x?��ɘ��.�>��ҽd,*=m0�=����f��<�G�j��3��=?d��$`�<�>9w�=Jj��f�<� ��4Q|=���=��� �=�����OD;j�R�Oٗ=����3_��=h�!����<,���M�<Qֽg�d��<�����=L�m=Hw����L>�0>��+���<F.�<��U'<=��'���>��<�"&= �A>^h>G&���c�>M�<Nh�=�$�<��<�xC>��\>���=ce�����=|�*=��={A��k�>&&I��=5:�22=t�O�E��=`��Y��;�aV>Q���i�z~����=���=��n>�IT�,tf�e�;;T��;�}ͼ
��=��P>>�k�q�ӽ��R���=h��4� � /1>sjz�åx��'��-S_�1PȽ{#���3�V��y=�C=���#�F>�B@��P'���w=����4ŽW���q%
=����>� 9�{�,=N셽 ���ʺ`^;=q��=c5�<��=h =���<��>��ؽ���;�כ=[��=���=�顼�B��g��=�Ix=(��;t);��[�^B�=��r���Y����;�(;�s����=����Ǽ/> ��;�<r=� �;���=uI>)ED=����#�p�=<�>�2��]��=�O���>�(Q����=^��*��<�D���X����ѽ�=s��O�=�6��huX�u
<Ƚc>L�;>�c�<��N=��k����=BŽMw<�v��Bsu�%ټ���=9*0���Ͻ^��=�8>,��=�6�=�od<u�弽�<֍���S=m��>�����z$���3ս��=��;��t�l\>��<�P=<�9�c}���
�<Y���)�d��N�{餽ʏ_�"��㙽K�ʽA�>¶ռl��;y�= 5�=��N��C��a>��V>d�>��ǽ�˃�m����<3 >�lR��]F>Ҽ�A�������<�У�׊�=���=�=�޼=4��>
5Y;�-^>����
�<r��fW<�<p�3=�<)�����a>k���A�V�z����Y'�H]C��t��C��xjk�cH�<�8�=j�<�����I��
�.>j�6�о/<�������5g�=h�->�����ɽ�r���X��_G��e�=�� ����v>Iƽ=�ƽ��۽`�=Ӌ���L��+�>Ri����^�^| ���
��T<�:w�>�<��I�����7'�< Jf=����(=�����<�:��틖��=�Gd�.�����<�B��au����=9����<(у=�g=��[>��8<E��<��:���������0ʼ#7/��4�>7�>/���@K=T�X�|�����Z��\{��l�=�>=͎�����=0��<{�޽с>60O>�������>9��N*����=���#��|�>I���2�=��"�p�=/A�A~<�0=��<�AG��O����
� V�;�=o�#>� �={'�=�{Q>��"���#=��@��������
�<gU��T>��Al�Dݗ�"�E=�s�<�s>����$^1>���=i�i;��=Kz�<�3���>A7M���s����=�o�����<�������Y">!��;#>PZ>�9i=�$$=^�=Q���4ϕ=?�=�VV���_�=���4^<����n���:>��Ž�ݙ�/�i��0�=�3= *޽�(#>V�To�=� a>w��]���l�ո�������;=ZKu��N<B<;`�h��2 =(<(<-��r�V>�l���?@����=������=RI�=�6%�(|>5�V�٣�<�z>�EL�/3ڼ�Uo������4�=��};��~�c�D>��d>��T>�����ֽb��� � ��Pt>��7>�{s=�#:t�X=�G�z=|U�<�SO>��½/_R=�{�<��>����y,��|���Ր=6��pM6�Uw��q��=��]>���=�9�<'�=�;%=�<q�hV^���">����Y8�`'"����iA��Ƌ�<�w>&�:���y�ʼ<߼>�k=� =��<��[�vS����<ܗ-<vB$=-���4�=�;����}o� X�����[2=������\>������=o>��)=1݁>w�>M�1=(��<C�/=o�=s��=xR@���/>��<PRƽ~��=�b��Ђ�FB6>D��銈��N\<I]�=@Jb=S��<X7��cQ >F:�=��"� ק��|��a,>�d̻n��$>y���8��>�=�g&��@>��>�-TD�!���ޜ��C=���8�O�=(��<�F�_Df��Z >-�;��M=CY��CY�>���;���B�=3񶼶#�=���=1�Q;o!=IJo=�>>�������=���ĝ>�Ƚ1�A>�����2Q=7t���3���@F���=~@c�u.>�T4��-�>�x�=f��=��%>�%�=��`=��ֽ8w7�G��o�>*#�,<L>>�1>�I7=C��aR>�$Ƚ�Y<�����x��<75U=���=w�����_>U����I�n���u#���=���<[�=.W=2<ȽҝS=θ����=�<�;�ձ=9��׶M�k2L>q�>�T�=���y!�>]4�Nn���2E=B\�<��1�YX'>'����/>P�,�ȽռT�=Yv5=yμ =�=~ `� Ѽ=�9>}�>Uc����!>Gɽ�p�=9���$$>�l��Ua�=ȟ=�:�=���N�R��=��{=��蚻�4<=�x�;<��}��<�d]>b�m�����w��=��������6�d=����x�����=�����H>qz<���=B�[>/���</ �ð)��/B��k4���c=T���*��sU=j���,��]�M�t4E=p�T��'$����ui�=f� >gG�=��㼈V�=CM�b�a��n&>�h:,zS>śS=����b��SJ>��>=L�K%�P����G�=_/S;�Y�ZD��Jý�<>�;�>1@����U`U�L�+=-��=��>�����+X�1��o!�a�P��!+>��<�ȳ<Ԟ�>�T�VF{=@m]���:ƾ.>��:=K�Z�a�=#�>� ����e�?Ю=\. =<+I=H���۽潁ظ0ě;ډ=���=��=�|�;�&��9�Y=%�C�4>y ����l�l">ș��f�=!���-۬<��^��
> �o�$<\/�����=)�\=�Z��"�]��=G��<V�G�sj7=��x��|D��ԍ�>�?�_�M>B蘽�#���\�<n4��-�=v��ʇ��䑽ŭ��E;8>s�)��D�=.��X� �z|�'��=��>@μS�¼�~�>�v#>R���m��<lW���d9���,h�=�K">1b>�V��*�]��U �m�$>qN�=�8>�k� lǼa�<ɰսq9h�K_���8k={OǼ��%�� =�k���ey;���/���K��>����8𼇿���ü���ǰ�& �=�OͽM$�<kN�<��5=z|��
�����h��=̍�e*=�fk=m�>����=B >�-�Hc}�w�v�zA�l�꽖v��x��= i���θ�9սZ�!�Xk=Ѡ������ýj3=[� �A�>+����= �=#�]=�+�=<咽z��<�� ��J����>����l��=m�D=�O&��Vѽ��X=��ֽ�>��t<���3>�@=���<��T�qb>>k��}�_]�=��B<��(�1�u=��F�0�=x�=�u >����j�7=,��=�g�<�U>9ν��{�]�2<$�,>�v�=�I��7��=�5����z���:�����=q�v>fJ<B�g=I9;=M�Լ���<��+<�q%=�y�=���=��=O�$=�3��lp:>�ؼ<�W��Bn�>m���n5>�9���OV<Ht,>F�=�����=�@�< ^>��� ���O=���=��:���H�Z�Z��S�����=�Q<"��jݏ�$��;{a��[Ђ=�n=�:�=�C3>�= 7=�n�=jTU���>�Ͼ��{P=�^�<G�;XG>���<;�F>U/��/ޟ<W�1=���=��t>�
-�X��=UY��<��7p����C����=<$�B�0��=���<}�'�pĞ� �:���=��^�V�T>K�=��&>���<[��:E7�=޲9>2���o->!��v�O>��=��#<o$>pد=إ�<>�=8�������(>��b<��{=�f�=�"~��F�T�E�q��;�.F��K=�[��=<� �[Z뽹�>t�A=���=���=�-�=�C۽���� }>�!k=���(����=s%+>p�[������=���=�{�>>P�<� p<��f=2�=M�㽢_W<�~�=0�P=�0Ƚ���ɨ<Z�>��C�aR6���x>�6�j0��i7`�US����<�ؑ>g6��ky=�'�=P�Y>T3>%�¼�]�sM0=K�ֻ#�����a>H�}����k0>�T4��b ��2��;> <��S���{�Klv�6 9����:�†=�{7>8'>S���k�=�-�;u�E[n<��.�d�&=>�>�{�<���=�����=���=yG<��(�~�3<?����P�<�/�<8ӿ�Xߡ��כ=�@<���U>~�.=��1=p ����W=^eb�q�@��+�G��=��ܱe<��C>���=������cV<��]�U��=2�Q�1��=�y��ݙ�� 0=\��y���m����;=�HD�Y��=h��/t��˽�<�����N>P� �M����<V���H�<U �<aJ���p= �<�>|��<XI�=Z�>qN>�6*=1�><�;N��{�=n=�Ժ��8�=e���[=��4>�-f�F��=�'i>ו���K����c�=u�>,V~�O���އ
>8� �Lg7=P9S=��l�X��y*>�|= K>���=ۖ��I�'>˨=;�#=Rk
���>E��<��b=�u:=ts>��->v˳�Oe�b� <�F�=&�<.�K>.����H��i�=(\ ����=��*>�Ӟ>����>����i��=:1�<���j�=����>�=騍=cm ������>\?����=���ה�=7��=�:��.�=�VF>M��=��>k"6�� 7=)�-њ<jQ=��>e/ >����o��<��k=x5>\ڻN��\0>�OH=:�F��=�=�_��� <���<=�p���9����ì�=�[���Z�J����=O$>=�b=��:�� /��X>�&_<��@�=E�>@���DWý�l4�?G2>��=�C�>\H�������r����;��Ͻ+x}��f�Y_8�� �����;�6��?0
>ſ�=NQ�C��;�z�=j=-�Q<d�=�=H>@z��AM�=�근�u;���=�G��<�r�=�>�=��<���=p0R<7�������
�u^
=b=�nM��lL>pe=�6� �>� C�{�������Iv<�o�=����aY4;5Z�= v=��>�d=
n?��6.> 7�0��=���<fKp;QT&>�|>#LD=�d>y��=�J���-����=L��=��I�|���G=/�=V��<��=" >�)ν��y�‘#>���X}}=��>��='a =��7=V1>.=��=��Y�i�z��{�=c≯>2*ὼ���~5<B�ʼ���:�=���<!�D<��t>�b>ȡ>(&�=]���[��&7�`��<��4���F<0�-=�R�=�M =v���%���B>�� ��p�������>_�>4��=�D���=`0=GN:����<�:����b�ZB=�ͭ���*���@>S�= ����x�=�����7����M>䁊�ɾ��t��=z#�>Y
�=�-��Q4�*=9`��7��(o>Y۾<�\ѻ�ٽ<��=K۽[�.�!����T=>�=�N=<�|�j=���M�f�-��1�;}�=�)��HN��a1<�G-Z�b0���G�8�F�O�=>ʍY>��p>���=���=L��>�=�Sl�#ڔ=�����[=ﮏ�>��=�u㽐�O<�����>��* >�!��N�*=N��3�����;@:�=l����n�<��B���9<!2>�O���)��Խ >�i>0�������ׄ=7��<Rj��%2:>�M��)=�н �<�g���� ����<gς>���=K?�=�ޔ=�C$���z�n=#=,?S�=����������=G2���1<�WP>��=�>��༃:��)*z= h�=0\�����I|
>��<� �;��=�V�=F3�<���=�7޻�u�=it�=F���+���()�H�<f�-�/.�<���N|_=}�>�I�K��=c�ڽ�$�� %�<���> P�<����2�Kk��U9��ҡ��{�q�>�������=�L�=�0>>P+����9>��=�|�=�� �©�=8ֽ����0�>�/��S���F=K� ���T�鯾<U��|m�=ګ�&����5#> m$>�h-=� I=�{������=<N�={�.�g՗=Z�W���=���=;�;�~8=$�5=#X�?a:�#4>~�Ѽ��R>���=��[���<镧>3
��E�ܔ���a@=�7�=�A>��>8�>��^&=n�=>b�=��u=�[D>�*s��^+����=��[���û���>�{��GY>��sU޽�H:��WX�wn?�du<�{>!�<���=�����~���=i��=����[;}p���[d��_@�u����<P�m�Q��<VU>=�G=�'=����e'��T
=C����V>^�;��n<ӊ>%���J�9�;A��=?ˣ���`��8]�]�4<���<gւ<��-��G�= �>�*�����6����<<�A���_~=�x�滄=�_������<�V>�̽�M�㲏����>�㩽���=_�$>�$�< S�J>0*�=�܀�{L��1w���"B��g�==�r�Z>��< ]w���>$ ���>��s>���<�6�=���=w_�X蝽�tS�,$�� >��v���g��)���>86<9� ��<a>"�[��Ed>�
�<�H��i�=[�=�}��M�j=�Z7��ߩ=ÿa�Rn���⑾�
Խ�->���<�N�;n���3��<h9|>������=GQƽe��<��V;{��=&��=ȉ>6��e��-P��vc���K��9��<��>n,=���a�=�IM���-��̼+欼QM��� x;�f���f�=K�ռ��3�|���b���<?����<Y�>g�:>5�=� �������T<d���E_G�Y��=_��={�ؽꚁ=�>:$>t+㽛�>�"���>�j�;<�q-<I���ρ=80�=�=9��<����ֻ� ��h�=p襽FL�=�O>��Lt�B��=�8�=���=d�;)`n=���l�$��&�=����ޭ�=b�=��ٸJ���>� 㽼����(>�Q�>�Na�* `��r˽C���������l�'�#��^^���{��1��=��l��->p��(I��� �c?�_�%>e��=� ��s7�=ؠ�=�` :�d�=�o=A� �M��;�-�=e5�=�8��]��=�\J����=�>Y=�=��(�g���i�=%�;>��=��F=�:����^��=>��YS���=�(�;A����8 ���-<�=d<z��<)��>JC�A<�;�����=��"=�J>q�!��@>�����?�v��=��E>�ꁻ?#0����=3M"���c�������n��9���!=[>,���c>��w={������;� >t >��=�5;={߆��Zڽ�d�=P�=��;��<N�=������+��=�g�=��>�X��ۺ=�n��٭�����=��?>ei��(�x>+�d��,R�֩���)˽�F����>^�8>�Č��%�=�,���.��8�=�AI>�+H�p�����=Ma1<���=�M�=���WN�= � �Rm�<
�^=���=B�`��Q�>�+�=o�C�fa�=IkԻs�=�ݪ=\�O�Ճ >%��=M�x>L�3=��<*��=`rK>}��>ҭ;n�߽���=�������ncU��p����=��}�&�%����M=���=���%m�<�%P=�hx=î5�:�6�ޢ�=
�O��<p=�� ��$��4�=�y���eg=2�K�=l���V�=k�⽛na�C��=���;-C��䠽{;�C�=�s6�=��������0C=+����V���iA�ѻ���U�=y&�%d�<2������1�4��=>��<�?�� ٽ+�H��1����ҽ;�V#�<��ý�%�<�����J<�<��}�=_*�=%~�=B1^=��A��==#���=�.9�>D�>a�H=�K�����Ӕ��u����=<!�D����)�ԙ��퇽���=��B< �@��}<jR{;�1;=��>�=p?���l������,���սZР�u��~��=<n=�5�=_���+
�<�*��NB&>������=����^�8=�����X�=��9=�h���q��{���\"��a>�=d� >im����.�2��=F���^)���1b>5���� ���=�Ǽ�e���ׄ�"R>2ɼ=8�{�[��<.͒���1<�h�����ἵvr=X��<oS�����=���;\+;��T>=.� ��5�=���<���=&�:׽ݽ�Ů=����=��>�ɕ)�rUr=-[="N���酽�7=����x�<�,�=gkK>�q�=�+����t���U� -����p>`�=��νV��>�B=�w#����=��=Ia��a�)=���;��E�X�Q�]�:�K;��LC���l>�^�x >�ϝ=
�TYG>���<b$��E�A�;j?>�z���׉<u*�� �>�y>R">������=�v�<Y����U�^=�Z*>��$��Nk=R�;� ��|�'�J,�=x ;{�=ذt����<!����'0�E>���=�pQ����������=���ҡ�=�]��>�%'=��8>`�>+����G��=uV>�����d��p��.5>+}8��N���j�<wV ��n>��
<D�M>orػ�ft���>.5>& ��t�=�g�u�̽���= �,=K�Ἥ����Ƚ��;i���8"c���=?)o=�r���]������͓�f �=�P�YP��V�W��)2��| >�J��<��`=_y>�Y�=���=ퟚ<G�,�ɔ<�&�����=o�K>��彌{��$���!e�=�m�=� \=v?����<� >��d=u1�<�ܰ=re��4�R<�ZJ��)�a$=&�U�n{�=L�r> \�8�4=W�M>3/����=񑏽i Խ�'�=Rr��E8�6=K=�=�Q��G�<��><+p��uμ��ٽ;�?>��{������?���y�1 2��ˌ=4��=��g=��<��� =w�6��<7!3=�&��>T[�<���;��5��;���=���8��� �<�&>�:K�L�=g���1A�ҫ�8�q>N�����d;y��= #=�
�=��N�Z�ؼ�K0��><�߄>[�,=�[B�2a:>�y���C�=oaF�����Z���C�=�H��:>������ �]= ^>� ҽ��ý��>pH�=�ؕ����= �=M�N=�2p��{>�D �S =��(�i�$=���=�܆=i
s<x��Z# =R�=�(=�r`=r#)��=$e>��]�?s=LИ=�����)>8ʽ-Y���~�=�H>\J>���;����Q�A=�S�=�^�C΂�j��v����y�M�`=W�S�Ru�=b�a����=y>��ȶ�>���=ٙ><2J=���=)����!=���<$�Q�6��=ǟͽ�@����=��ޢ=4��n�����>>�/>���=p��=��l=�ܽ�%�=�z�4��<���!Ac=�n��
�=���\�=E[���KT�2:P>bt��_��=�l���L��[˺�t�o�D��<Y�>����� >1��
�ؽ�����m>|�ͽU�=Hqg�ٍ=�<�M>���Ѐ8>����~%>t�{��Yx=�e�����=��=Sƭ=P�,���"�^�:'��=j�Y�j;�'}���߽u�B>|���crʽ@��=�fh��殽���;�=m�9T�d���ڳ����=����6���Y>@p��@<WL˽�k���w5��mR��.>Cdн�~�=Np����ɪ��Bښ�9R��B<�~�Y�X\��2����W�=�ug��+,>��������2�d<dk=l�5�R��=cj��K� �0��g��gW��Z�;���=jB��Ħ�/����?�}2[=�ڥ;�E�<60�=�p��r��=|�>��><�=Z5�)�C>n+��́=��'�=u�>4��̍=z�����s=ŧ�Us�k���)<:��=���Q7;Pp �����R��7�*>�5V��6�>q'�=n�><�8�[J*�ߌ����=�\>���|�����=��,=��6��c>��=���;�c>�����Q�j>ɘ!>�T��e�ǽ �>"�r=�������=�C½�y��8(=C��;�@��������<��q��ͽ�j�����=9�v=���xQ�<�Z����<f���-��F=��=]��=�Aw�b���̼a�Խ1� ;�����G=1b����AH{�ƍ�=�>R��0�8����
>�0�<�{>?��=�E\<� Ỿ��< <~���߽���F8=�y����=�e�fo^<��4>��Ӽ�f1>'+�<K��8�=:���\�I���>�
X>Z�C>r�>xJ'=�f>���;4e�<߳$=��e�[Y��n�=QgؽG~'��1!��A��Q�<�e�=��C>����-�rcs;��4=zb��;S½�
ӽ�=�;>pU���!>��ýR�= �
=N��< �.��*��k>��>�T�=e�(��C�]���=���P��b'<T���3t���=���=KR=��&>�ZC=�����=�9���|�=���<���>�1����<�Q>�M=����\g>CL=> \>��>��'=�n��Z�c>���<����x�~R��5�ݼ��\�&�F��>?��=ڢ�=4Y>+ȼ���w}}=ȡ��Ύ��^ >�ߤ<��=���<�0�=d>�����U;=�]��NƇ>��;}=4����^=/[���>G��p;<��.=ed�;��罉H������l�=e����@#>���;}_4�1��=���=�ݼ<��=(� �۠�=���1=�i[�M�G��#5������Q1���!�D0��Tϻ��� w�=��F<'R���1q�F�=H_��_�������f߽��=����c,~=8�����L���ļa�o��ı��� �\�=�U�<Z"�s�A=�s�($��w��r��`z��(u���`(�pKC����= �4<��=6u�=����i��T�=�<(_(>�"�2 x=�����=
�����<�<��,�-׽
�<�c��Z�<x
.>u��<�=�?=�A�<E5�=Xu�=-��=�� >|�=̶��� >7���n�н:��>!A�qZ9<��=�̙=^��<+�v<�[3=zIG�s�<��������>kȲ� S
=|��=����_=�M"�\�=P�{��
���Ԁ��Y�ov�=h�o�� >A�9�y����
=bh#> ��=�֢� �t=�Pv�#n> ���p�����q��ҼtG����>�~��3�=�V(=�ޯ�k���E�\>��J�y�<�i`�<�~��I�=yFѾ�*>��'��X�=�s�U�滊H=�և�z�=A�׽r�<W~����V=�#G=��V�l��=긽�/S� �p=Hْ�����ÏH>�@>���=P�`��F����Խ���=�d��KW@>7��=Pkʽ��=ˀ*9���=`1��$�=>���=q�E=�Cc>SR���:u<,��<�\>�t��Ƚ�z���k�g� <^���`�>�5���4��N�=e�
=��'�ȴ�<�U������¦��P>� K�N����d��މ�<)�U�h�_>BI�=N�L���;ޖ=�z���~���o����Ow�=�"[=�_X�gC/�\
����=?�=b���C!=8��<5-����*�����,��H˽:A�0s���&���9=�v�=��+=tŽ E>�o�=]%�� 1����� !��u��|���}�>�$���a=�!�=b`P>�w:=��U��<t�J>8=��&=`����W�<;��=�ow��@�}���8= 鲼�0$�N���²<9>|X9�rws=�5��Y��0>?�I>�+�����;{�<^�X����
*����_��ѽ�_�����=|��=mq��C�����&>��K�+w ����>R0���{�[��=�l�=�-!>�!�� �߼�m�=HH>�G"���>>�f>�½�w#>��J=;O�<���==��<P W��7�� j����<��Ľ���=l�<�ӣ��'0>�>uO�<�D�<{�\=�39����1>.AS=�R�y =�5G=�uu��������=ˠ��t�=�D�=�����& =u�t<1���,������>T�ۿW=t~޽ǭ��6#q=�q�=�]�=�"O>�?�=��&�� >�o,�����F q�6= ��<Mҙ���Ľ�9> z��eUD<gW�=~r=<r�S��� Ҽ�����T��/�=ֱ=�jj<.��=��=��y�*�/>m R=A��<yۼ��”:v��|�T�٩>>�3>��*=m P��_ܽ��E>�Bļ�[F>���>�+���E�\`�s�|=�ȷ�d�Լ��.=���;NS=Q��׆=
*� ��={�=��=��7=���<M�}=ȬT=���?�<�6k=��<Ż=��<�zy߼����j#=�Ҍ;��J=�Q&=��;>���=�=�S�;έ=괱<��b�;�x��v�<4!|<�pJ����{lY=�>���0>=g�k�ĩ=�^<>�&�<W���,:;���=\� ���=��ut�� ���t>���=�+&>�s.�Ԩ=���<'=Z �<W�>ҹ���[6>���}�O<�I!=�ꎽ֢��cֽ��<���={u=�uǽ�gn�� !=��>���4��=j~���@�=ڠ�=gŽ���H���< �W=���=T�Hp�=ƒ:�Hdž>���=�m1��_ռd��Ӽ�=^�)>|��;WKh�2�'>V� ��5�=��W���=;L�^Q>�0>�b�=j��=�Sd�ڌ�<8N�=/d!=6m=��:q}v�R�3���=:���s�<,�m= >u-=�e�=F�=gb}>��������û�4�<h��<�x�l�������(=�W�f㶽� �=WP_=m��,���t��=<Y����J�ս�-(�e�(>����"�-��ir>^yD�H7�=,[���m� �v��� <�%=U�=c)>pk��)^�=����<*"0��_��oL���/�;�%���ʵ=W/��@D\<��J���ٻnۡ��m�;䓒�H��� ��D*=m(S���]�.A�<��޽yt�@Q����>�,��&�%�B�;�A�=�V�=,��f�+=\v<��*�Z,=7��=$�\=^ZE��KD�������=����gD�#�l=�'��( ��wE�mؽ��I.����Ҽ*:½��=L�9��Ծa�)>f�<�A2=򳕻�u|<G)�<��0>��><�>�WS)���ν\�>ӯ3=�� �Q�Q>��=DN!>䝱�����@�=�|>6���v�"꽇��8P7�<���=������f5�iȽ�}#>*�>f�S�V�G=��<� \�O^�����=[Q�=�[���ܽ����)�7Y>����CQh=],)>�Ps=��нq����Z��HlM��<�;�d�>��ռ�<�;b�6������?��F��++}���">5�'>�5g���y=�u��(����>siB>��;�T>>)���٬ܽ-�B>xS1>C�\�BCA�A��=�T��=1"��t����}�~Ҷ������m=�֐�>臼Q�L>E�˽�=^�&�ӹ%}����='�8>5� �5>6>��>�jO�*(9>�o=�/�;��U�9-�=���;jyH>"��<�g>y��=��{>u+ļ�!4=��Y�=~�q=>���K<�}��{�;�%��M=u����<��/:�=񊆾l��-d�>x�=���=r��=}E�=��>z�=�ʻ=�T=�!����}�et����J��.��[��$
��{���V�'�u�= }��̌>����l��=*͝�&B>��#�O-�=E�<�q�����"-�
O.>�W�<V��<~���!>Zf�=��}��Τ>�"���0>VJ�;��=x%�<^��=�=>|]>hh)�\�>������A<��Q<_1ս��T=SS��[X�>p��=�c���H<o�7>%Y>��>=�R;ˈ�=�N�=�%���;��DJ>`�Q=Z�ؼ��.;�R|� J"�e�>>s�;U���ۼ�<��Ž֌>�
>6[ֽj�m=�;�=���=ڰ�={��cý����֓�=����
>��>ߣF=� =�P�>͛���=�y��>�2������ =�)��Y=f>��ѽ��E=6>�o>)I<ogT>�c���1����=8�X=T�.>�E �92��e>���=>o��ŏ��W�=.�����=>n��>\�ý ��<� W>�҈=K�Ȼo�G>%��=[�>�� =���=2w>=7Yҽx�D>6<�^&>���= ���0 >m�:�k��[%;>Z��;8nн�L��3<�<Ҧ'�VFd=Y�s��_L>} ���s���}>�Q�����=Z��f=ڊ�=Dz��w��=4aU>�
;.��P6�=OYk��Q�=�� �%˃=��=RO�<n�k=ٻ/�� �=69�:�C�=eFX��p>(���r���
�2�':B�WӍ<m*>3�=Ш=꽵�$>y��>7=~����. �� ;G�˼���=����SMh�
����<u�<��(=��;�–Y��-�]m�=��v>E >o���u�<�I�=�y�= (�=ݲw=@=x���&>�؋�i >h�g�~�3�=]5ァj"=��>HX8��d>�}�<�轒s�g8���E���9��B��I�3�m=�tn�|ؽx�K�E!W<���=M-��d+;������=,�������&<;,Ƚ��=�ɖ=6S�>��Ž2�a=K���h�S=���� �>����m��ܼ��N���B=��6��7�=���=ת�=d��=mf�=X��=e&�<�:�����=�7l��Ae=�Y�=}]�=���= 1>��N�?�U=��9�4�6�%���<">�>=�=��=�:-�������<$��<�cǽ@�<1��=,�F���<��f>~W�='2=.�w���$<��� i��g(<� >�<ν�U�=��s�|U���7�=��p=����Ж>sz���A=F��=�k��Γ��ǻ����<!��;wj==1j�����|��>�����\q�L�=���=���=��>���=UoG=Օ>��>�l �Ž8>��=*|�=�*�=p������=5UٽBڸ����ZD�=0�>�=�vR><߭6>fDZ<�k�hc��C6�N۟���K��=�]���#>�h�= x޽@�(>.(�;���<Ljk�t)ӽXc<���D♼ ý-�e��d=�*g�i �rUx�3��p�cn>��;��=Q���=!q�=�61>dƍ�}���{�$�KS�=����Y'V>ܺн�1ƽ���>?�4�c*������t>��4<�о��<wŽ=��=��> =>�͂�U��=AP���>�=�K�%�ߊ���fI=q��=� �=�0����3�-��=�� �&�&>�}���=�荽�m����TB>&�6����<V�[=��@>/F-<X� ��i�=���= 2�=3� �]�=XԽ`X�=`_���>��=#X���VS�� @�Ҧ��n�5>Ş)��غ��G�=y0�=���=�L>�D�f�=�g)�C���f=]��=��>��9=�oڼ8U>�/ļ��#=|a>�d�=��t��=)=ҼE=6y!>IȀ=��2�Z<1)=4�W=5>��x���h����=�p��sн��������d�la�;�ν��g=��>}��=��L>gc�����ˬ>�0>�ч<�ך<�!��j<���=�W�=�R
=��AP�<���={$ҹ��:��9�*>��D��a=���<84��h����=�@>��'��v����K=�Y۽��Z�q2b�/>i<��#=�E�<$&<�ҷ��J ��q�=aB>İ�����=^���o�fA�=������'��ȟ�8��=�3�:�#<����uJ>#8�;�D˽/�<L�T=]WH=e88>������/���pѽSy`�,�u=����b�>1Ex>��i��w>?��=������8=|T��.��
K>^.�=�3= ʦ<���������=���=�v<�Թ��E�=H;�����=hv����n���#U���h>>4���\2>N��<��=/ͼ5]m=��>Oj^;ax>e�"=��������=>��1=���;j�*���<O�C<��=��<&h�=�(?�+��A>��r=�8 >d~���\�>Xi�;��*=3�u��jԽ����(m+���>ԑ��p'Y>�dܽ���=�����Ol=|�v<�� ��૽�V�=�M���֘�ˮ[�'&9=�h�� �c� ���n��]%=Ƌ�='�f���=>�w��s�Z>��A�]��<���5�>>ɀ�[������(�����Լ;佽�[<)����H�2a��lR���u�6b4>یg�\�D<Gl��÷�= Ym=�SP�x=]�MH>Ϻ�= �Q<�YB�VX >N���Ȯw=N@����#>�nL>�">/d¼�1��PL�2-��� >��#�)��=Z������d����=C��=��=�'>*�ؼ5 �=��8��/�=T|;�Ҡ��Ђ=��J�\�6�?D�={J>2U���׵�_�2>���;JE<<A�g��<wt��ͫ>���=�z =�!�<�\(>�K�<��{����.�P�=L����[b���E>m�q�].>�Gҽм�=�BE�)9����8>NX�=z���F��D���Z�=��(>��<=ܓ�=v���%��;��^=a ����0����=�� >tR$<:�+=�t=��<1'E>R�j���=�1:��Ǽ}z����=Ъ�����>�gb�9��{Q%>�x�=�0�=�T������t ���7>��=�3�=T�d>+�=9�=�-9������됽�����>�ս�>�k)<�%��tY^=e��<+絽o��=f��<�G��#,=�н<�z#���=� �=� +���=��>����%����Э�IaV=,�ν�_�=`�%=���g(<u�t<|>>�v��t���WA>���=�<�=8�z���=J]�]����>:j>4��<����+>��Ͻ��>��>���=\�=J4�=��=�����ad�=���}��|�+�P�x9#>l�3>{���'���䵠���=Ks���w6��%���M/��s|������V%���v>�p&>��2����
���l7���_��V����9>����/>��KE�=}�9dY=)�a>6�ý7S`=S7h�u�A��,�=h�;,����ڻI�����C<JH0>�[Ƹ��[�01�Q>z n�p��_%�=��=�a�=�w���d>��:�^����P�<�(��T��=������=��<��:�;�<�������=���=}�f�1�����>���=�ۀ�Bk�tSF�Z��l��=�v<�m�=?I�=o'D����r~�=.t=��=IF<��7����;��5�O��?���۽��=�����W=_�2�`ˢ��+\�J�"�l<7�K��HK��j�����=�/Z=9���q�ܠ�{�W�Y��x��� ���%�4��=�6�<��x�A����<A�+��=��Q>m���������ռ���=��>Ŕ_��M"=�g=�ڤ<ƽ������p��=1gݽ�ߞ=�z��ʡ��z������<�ۜ=���=�飼�%=wo=SIo�;��=�z2���G<���x��<��ֽ�C�<�@弲+8�pp�=82>L��������<�q�<���=�& ��V����1� ��Z[�=�Z���r���ݼ�-��Z=㮢��/���X>�W=]�=�*�?1>�.(<����_>n���D�=NVZ=EV��e�V�^{���:����<P��=z�=0�>���<n�;����=��1z=���< ��=� #>��M= �ڽ��#�kV �nCC>M*�=)ҽy� >z{ >M����.<��K��<�U=���=�r�X>������<Ĵq<�7> =�<A�Q�[�x=�C[=1J�=�E:>�K�<#|�<�ϸ��G}<�����nB�=��G>�PA= �
<��=o��=�"=o��x�������\=��;�=*k���qA�`v�==�ʼϣy������ѷ=�����j�����<xǢ<`<,>^�~<T�!=޻�
�>����s��X��%�J��nI�N�������S��H��=����ڄ�<�7��Ђ>W�={��[<{+d=_>�=k4��F+��^; ���@��cd�����%�b=�sB�m �]�ƽ�缈愼��<p��=[��<t��kj �<�<E# >���<�%&>�tp���1=W;�c��=>����sE=Ґl=+��<^���)E= -��)�L3=� #=�v轂���q�=,��=s�f�|<G7�<�U>� �=��>������5ɼz��O2۽%��u��=��?>e�����<��A<����.Q���5=F�6>p߄=S�8=l�$���<O����)+>!a���<2�G��V�=���3��� �~=��2>QI�=�U��I2�L>|�"��X#=�>�}�̿�=J�潆L=���޻��3���=���ch ��8���c����=���=p@=�-`� !�<Z-���D���˽ydf��l�9�lN=ܷ�=�Y�<O&u���<ŵ�=� ���>���=���=��>�…�x�S=�yv�3�= |ͽ-�I�h�L�`�=qNO�6g>;�5�?�c]3�7�z�"��;�1R�����5\=�b.=�7����O>�!���V����=��8��8>�{�`*D>��=��z=|K#=�n,�k�#�齡U>^4->p�����<�H1=�R�=�4��M��<�F�=�y>���=�� ���>�e��<V��=0l���w�: w
=�ڊ�v��<V?ڽ�@>�@@=���=L�>���}���Q ��x�=ޱ��2,<Nj��V��> =��[<XLO>ӹK��r[��>����BW�3u�����=�q�=|H�x�7>�����x��!»��^>"�<���=k��<ոH��S�.����٣=,+��������:�)q��扽d�����<h��:"ŭ<��ֽ��#�i�S�
s">�Y�.���$�B��?=&k=ԛ�=;;^���#=(�=�$��㼫��d��� >���<Q�>8ñ����=���=z�~����=+��<х >}��=@>���tq<��<�ҡ=�X���I�=��=��> w�/�-��,>~n�f�)<j�=�R�k����P���Ἐ ݽ�ҵ=;{>o��=M ���V�x���ؽ�P�T�)=���~p��Z�=~��:��=�NF<�]��ȋ=�u6�tp��߉= l>���=htR�]U�<՜{�Xoн%%�=�Q�F=����4>�&>�F����;��\>&��=��=֟��NPU���a>n�ڽ�Tm�t�>]���D�M>����vϽ&Z�����6��=�]�=��=�s@=A꽐�@���%=�;ֻ\��=G+>������;>����2n���xA���/��+=5>�\�H���>4#>=[�~���_=�>��y8���l>e�"�O��<���=��Ƚ'O�='���aiP�ֳ�<����A���lv���%/>�&d��į=��}=�.=9J��)iu�67y�U�E>��c����=5�g=W��:��<H�-=������=��L>�p���0>[�<��!>�7�=Sp+=�%y=�݃=U7�<[�>A�-=�������0��멍�8$�=eL �i���h�= (�=]��=L��]A��5u�=���=e�0>;� =��>��Y=@
�=���=��C>؎��\<���=���PK;��=O���B=���=E�#=,G>�n�a@�<�6���r>w��=��;C��<;|U�������J���{�=V��Id=�M��BJ��֪�b~>��^�ڶ~=��� b��!��p�`�j΂��ɽ=�>�u?=�T�<<��O@�����;�9�=|m�=�!���ݽSَ�n9�UN��%����z���'=y.��{����=�v,�y�;��=�V=]㮼ʔ����1H�="�����=�5Ľߞ=$+<-#W=�S�L�ȼ� v=���J��=b��>��(>�?�=M��=����- X��2=�ʧ�fՠ;kLj���=��>� �0=5Lý���==Z��r�=&�=v��=\�=1� >�<"r����=�y��jV��(c˽4��=�`>��N�E6<^��=�O�و�S��7��= ��=E�=;N���~��Y��<���>ǃ<(*�<����= v>�z��b�o� �_>�]��!�����!>��/��"�r^>PS�=U�=
�'�0,#>�Л���0����<%ʿ=D�d<"���p��=��S�4.��������=S��<����>��yF��aJ*=Y�#>cى�9eڼ�[ݽ�۫=^'?��½r0��=�>g��f/��"��<kP�<�D ���>�E]�@�X�ܫ�� >+��<E�I=�뒽�F�=�r�=��=4�=�b�=�-q=�6Z�<a�=O�g�;��=�'ʼ�o��+�_>E+��3̸�� ż#^)�u�=�Q;�_��<���� �@��Ә=�v=���V�=ٍ�=�x���G>*Q���녾tL>En�=���= 3�������>��8>׊�������T=Y�b�c�=�t.��#=~=�4���o=�q=ĉ��:���i���>�$����=�^s=$�l�Z� >|�<����k�9o(�=���=>�<������^> S�����=Fߞ=��ν_N9����=�]̼����� 4>�U8>�7ͼ14L�y8>�4[�&Ѐ�.��^�JEW=��J<�@ �'Z���;��N�� ���Ѽ[y >� �=:�=�<�qj=�O��P���fm��`>�-J����=�3=E��5|��� <����<1�;�Z< �c�}�2�]r>���E >q|��Z#P�}ġ��a= a[�+-ҽ�K�J+ν��<<��<�?@>�!Y�&��;d��=<��=o��=q�?>:h�����;RU�=t=W�F=�U>=�m�<-6����<�j�<�]��;i><���X٢=(`�>@(��B�C=���o�Y�F����`>��j>&��=�)u���:��.��I>K��: ��# ܼ%׫�ݾ�=�E>�b=>Q> V�����(D��8��<Ow�<����W��=�����f>��D����T������%>��<�T#���l=
�>K@@�-׽~ǯ>���͑=#�W�/0=&���>p�t=� �=c�R>ܚ
�ü�=t5�=59>ac>�3�� �k�tb��������<R�=�Q);�
��!�=2ּ�'>W���� )���%��3���I;=�Ӟ=��>C}��ʗ>��Q>$Q���QW>�k>��>>L�����Z����=G�:���?�>@�P�-�D�O�ھ���<%��;x���P�zc
���y<�ʋ��YO>z������]LT>���;����L��=��;�}������=*>ОO=�]C>5�=������!�|�s���<x���k>�M��">�N=gw��F`<�y7= >ÄJ��)o>�&��se=�=�c�u{=�����&�;g���E�Y9>���;0�X=�J����>�'�H�����>���> �>F+�)��M��ڧ�������<�J��"C>������9�5�< �����Ϡ�o�=���q�ټf�=�,O>�޽+��>�g�=.#+�T[Q;�ƽ4��
���}¾l>�=��;=}>�*#�6^p=&�+��=6<<ӫ�w��bC��P�9������{��+�=J5���=*=��`>�\�=��X�| =͹L����<j���hཌྷ�d��ԥ��-\="�!�������O�Or��i�"��e`���0>Ks�;&c����%>���=��r>�s��܊�=Y/�=��>�x������n>�TK�3��=L
�<�-���̸=���A��\��I��=[=>��=���<�L̽%>k��=���CN���콌z�=�s>��<>V��=���tzz=0Q�������4�2>>D6����=������=��U;W���uf$�/C�=� =iW�=�����{½�_ʼ��P���=��0>��b��K=�=���=S��� 闼���=SH�1�=����F��=� ��`3ѽ�2i<-"�=f�5��%.=�z�<FV>�x�� 3��S��=>�=�=cd��;��k���&=�� ��e������ϸ��h"�<��6=�[�P�t=���=�J*=�>�?��UT�Q�A��*#>t8+��4����=֯�T䙽  �+���0� =ԓ&<��S�� ��dh�=Tު�����3D=p;>&���K>
d���ݝ<��P=6 =��|�����l�>s\F��p�=� �=��=�΃=����kF��Q�=��,>1f��1�O����>�k.�'B溭[�����>y��@�=� ��2�޽�%�=}��;G��=Ç>�����>#���x=g�O>O|��G=�$�<�j,=v���찿=��'>��&>Z'Ľ"pI=�t��p$>;͔���wv=5�= 9����)�>�?�=�����齜bi=��=��=� ��P�B�_�'�ٔ���6>ez~=S�S�H��=)+\�Rkt=��$=8с=Y���٩�=5�.���j� ?M�I����j=�V�=�}E�o=x�ɺ�L;� �oͳ<� \�C�>��I�;L�D>���=��Z>����EԽz�8�7#>�y>�I&�J�>�.�Y2W=$���ɛ=� �S]�+=j �; Y��w��Rpw>֥=���>�}�=G��<�cϽ��߽V�=�~�K���^!�=a-�=�C�<�Ï=�A�=�n\��F.�T���/�^��+Z�0��&�>�\Z��%���>����b�;~u��f��.�`���t���ق����<B@[�� �=���<㪽��$>h�=0_��,;�<� �oۼ������=��u=��e�B|����k>�J���>!��=0���_ڒ=0�4��c>��K���>Q�D�]�w�} >�!�=8����}g��0<�5�R=O�s��z�=Ԧ����$>��䞀�4'�=+�Y<\����>���\�=���T�>��<�b��>K�=)��;�Mt=1q>�;��Z����;ٸ=��+� �{�.��=(T,�� ����A�½^0��O�o�Q�>�z����W`>d �<<_�����m��<����jjw=}�½��y���;B��=�.+<�����D#<�̬�3���o=<H�= �=��ཬ����4��|�M>Q�y=�GB=ѧ��Q�s�yt ��e����ŝb�鿖����=+��;g
�3�=�;���۽��:�Vt�=(PD>}�_������]o>nC!��j�� �=.s �M� ���L=Ʋ=stʽ���.yr��́��B=˚���6���\ͼ�����o7>y���rHw�%�O�7���X�L<t)l��t�������_�=M7���=>%�t�`b9�-�/�~ֽ>��<w ��"�����<=���(��<]�6>��1��kd=\��=S��������4s�=⦟=<�Ҽ�ֽ$�o�k�F��c��@a> �"��,��ʵy="�½T���*==z�9<�״��n<i9��w ����= �>(��=�� >|/b�,�=�ֽES�<�%�A`h>H�%>�N�=��j�st=�=�[��=�R=}->^�K�B��=_.ڽ��f=%%u>��;u���#K��`&n> mB��;>~�f���>�*��1���3ļ�T��s�w=��>��>'섽�耽1o[>&V��v��=��(�Fc�
��ҋ��%�p���<�ʼ�R=��M>(���rٽ_�x� E�=)��=2�z>����w=��=h!Y>եt=��>�R��t�>�r=���=9K'��&�� ��=>a��[E�=�� ����,�� y�=}=0���5*6>o�0�N�>���=N}��hsS=�=>�m$<��=\��=�q=G��<��r>RRk���:���\����=l�>;a���$+�87)>��c>n>��y�ٹ�=O��=R�m��=��.�=6 P�2�:>��<���׽"�l�)��<�=�oý)?=�X�$=j�[��Ls�bL�ֲ�=��g��J˼Z� >��i=���=oŽ��%U<''�=��=��3>�Έ�Ԑӽ� =� ��?,�=A<N�ܼ���=~�>"�ܽ�l>R\���>�+3< �/�;��=��>26>d>�=��M����K�8>���=�X7=� z=��3>���=�Rk����S{G�����C\=P���2�=&ؑ=�{�:#:����=/��<Ȗ!<���FO����=SW�=� �Ɛ'�Vzh���`��8�=q��=�W��O>-(>�*�;��e;[���z��U��;Еu��ن>=���<�Z=Obe�I���=��=���Bb�<� �=�X<>��=��1�r&�=;}7>(��=�'>�n�=��*���Z=�$��o���ڼ=��=� >����Ì�;��d5>G/^���<�i&=��Ƚ�h<�+Q=�`��2!>�����z��x��2>���]-����<��˽䵇<Uy�=��=��M>V��=q S���>K�>=% ��s�����<�G ��^<����=����]ټISν��=��!�3��=�D�=�q��_��<���=u��<�(�<�_���Տ=f��+<���J��=_V �-��=~Y�<ù�e�>�׽{(��
o����<r1>2>�mӼ�1��ۺ�<`Z�=U��1�9>��{=�b���0�2� >�+=; (>�y�;�>M �=2��=�)>{u�=�ԣ�� �(Q��Hܽ�:���H����=4S���,�Ni=y��<"K:S��s���f�J�@�:>!@�<2?=�ɼ{o��>ȨT=�̢= 0�>d����,�S� =���<�!=�&�#�Z�=��=��=�1ʽ (:>8�D=�y���ٺˢ<h�0�(��h�>.�9��n�� ߺ���>?�¼.ϕ<=��=>f⽧Sj�_[�>���=� =�ῼ��="���+���'���1>'���H
E�����=ƽEe��|��<���==]���I ��� =���=�m=![q="@`>#88�
g��*k=����t��0�( >>��=qw�=m��= ��F=o�&>1˩:P�۽ �� ���[n�=}X,=2Y�>�1 ����<Q����^�<����.��=������;>�ʊ����=,��=N����;=;�=h�u�`�B�Ē�����<��g�~y:>nI��ID�8v=5C>�a|��!>Ί�<���=�ٍ�1�M=g?J>䕻#N�;�l+>��=��<.�˽ya=]��=��.=��T<D%
=�x�������=0�=��$�Z{$>�&�?��=BoڻR+���>��2��?%��'�<X"S=���=�� �gN*>�R�=~��=�S�����=�Z\� ��=96%=�3���P�9�<���=(e%=r^�=+���Ī >�L��(o��i�<�6>���$;�KPм��=BٽX6=:&
<���:���=M$�� "���=O������=$.Ӽ����i�5�<a e��㺼�������<_'~���<�4ͼ������>�=���;ˡ7=�>K?
�~L~��,�=��_=u �<5����R�=��=>��W��=�ë���T�̢>���;zL�1h+>4�D�Л�<���=��=�"��U�=C�<�ܰ��v���<�-=��%�hB_=�ʂ��'=]�>�/Ž �⽃�����#�֤�7��"������<2H-�)��*��B-network_body.linear_encoder.seq_layers.2.biasJ��s?:�\�;]�<���< .=��^;��z��>�<���<��C<�3�<�^z;�v�<���<���;��_�<�F;ە�<�S�<' =��=�-ƻ�
�<B"=Av��e��;�p�<_�6�o����<u+<�ç:KӋ<���<9V�<�=fl;<�]�<9$�<���<��<�ߓ<nMZ<��P7�ȻB�-<�ř;K�=%� =U�V;��)< ��<���;H��<��;�&8=�%�<�Y?<&8�<�$#=�{�;���<e�=�{�<k=o�;� =�b�<�ˁ<�_�<u��+��<���<��<���<�a<��i<��:=Dκ���;�ǻ<&��`��<�B&�3/�<���C?=ms�<�q=y+;M` =�^�;S�w;�R�<?�\<�N�<���<\�=���<�a�<�=�<��<2��<o�=�;�u�;�L<Ѷ�<0̂<��/;R��<9�=�X�<OW�<�k<���<C�<u�=�Q<Jب<�<Pb�<8_c;�S*<s��;R��<�~<0�<*����B/network_body.linear_encoder.seq_layers.2.weightJ�����ݣ��+���m��Z住�>���<�� >�-�=1�%�rV@���>�� �!�<��6���3<9{=-��]���ʻ�M�</*���
=I�=4ˋ>Y �<&�=ڝN��!�=�4=@��;)'=��O=~zN=��1��Wj���=���<,�����z�<y���:���a�<@��;��<)�=��=�O#�2@"�V#ϼ����k�|<L"�<֡���Ƚ×<C��$��=��S=��=qڬ=�r潖�;��<2NH=RE="���m&�������p>�ܸ=fO3=�F�=>ʁ�=?���,�=O�мK1>��?����<d�9�nU;��ʽ�:����=�XL;]K�=›�=�-z=&�5���}=`񱽙��<:o�<���=Lk >��|�ѽ;�|����tü.�d=���(�:�B��u[��ش�d�<�Pi�����û�tݏ=���T��=��Ƽ�³��Q�-��
� =�'h=�ެ=i�*=�R
��K!>�4&=X��g�<��J�P>C�^�BQ>��`�i��V����
�Wg���7�|������=��l� ���w=!B=X�o=�h*�&�ƻG�f=�E,��ϐ;E�E�ݠ�=�����h�<��:�(�=�H�= �ʽ�/��V���J��E< �v�ƹ7=K1�<��>�ܽ:c�=reR��"j�Ԉ������q��=��O>��ԽE��<��7=��<j=&��Z�<)�׽��5=��!>u��=l�\��n���i�?��="GO��=_]���bN�m�e����}<5�S�ޞ=�)���ҽ�>>A���>�Ҽo�O��6>����@@���.:z9(<�S��\���^<k �=���<o?�=qS>$y�3�E�P���<���c��C�����<d��M=-�=l#8=-�<��>=2;U� �����R>��2��2~=�$�=�t>��s=ߢR���=� >>H�<��<��ڼ����>qk뻭g���U�=��ҽ��S>����Z����=��N>��a<e��;��$�\��c[���2=�=�S,��YҼ$d4=�������=��%=d�>6.m�6{z��=V��=��G�,}�P��=���Eצ=�8�<(�׽5����H>|��=�V�;S��)� >�E=�ׁ�Z�(>NA���WM=�i�= � �X�ʼ�]\<� j�{�=� ��<�D�3=����v=p�=�A�<�E�=�+��޽V���QٽgoC=�1��qw��N[<]?���<q5�=:r�%>��ۼta�=�:s>[��=r�����]�~���́���<=f�ּ55н��::L(��t��wv>>�.I=R4�< ߹9L��Fн��H>$�����<|�>[1=��w���彘_�� 钽�����5>�c�=7!��T����[=�0������=�c>�Y�<�™=B?߽��4<��[�d� �R���ֈ��BҦ<�>���=M;n�ԽkQĽ~��<�'�Y�$��{�^Ş=������e=�jZ=o��=Y�2���=�aٽ���s�8>[�/�x��=rR����=CD�t>���,:>_,���~���&>��>��=]�>�Թ=QB�;��q�!ȭ=ׄO�t�L>a��Wz����)='D9>B���y�����k������R;=�Eq���>��&=��=�f,=4�p3����=�m��/!>%�_��y�=� ?�,��;�p >����{�7�L7�=�=�';Z�ý�����=P@>= ��<:ξ=�e�=�v^>0О<�/�=#�z ->Q��=��e�C����=�ɽ`�'>e+>9ϵ=�,�����=���<$�:���=a&>l �=����c��� ����k_m�L���� ݽE_���\=�|�=��|�=�=����_\=�.0>@I<-;>�~�\y�=��=6C�<�W��0zz��\��
�����l9��@%����=)U�=LG�;D�=�T���'��jxO;���
���ԯ-�#"A�<\w���D��g=*�>-C���=6u�(?V����=H%齛y�������-���=�Й= �Y=�_=_<���@=6a�����=������3��@��"���i>p}�<<#�)M�N���]�o�4h'9�ʽ�g�ϼU{_=6}�;dk}=�I�=�g�<j�>�g��,������<������mն�-0�=�y�<����*r�hXμ���<��3�ʽ�_�=j����ؼ���=`n<��=�:���?<�*���Бp���Ἦ�>/�I=��=�
��U��y�@�=���J��u��<��>�=����=��C=c\e�/#���6 ��l>��]�Lv���m�=�><"ݽ��༿��=w�)>�>�h�=�a>K%�q�o=b!>��
�3J9='н,t={߽93�:^�=��2;~q�|K<[U>��U=��Q���*���&����=}3�=�8�7!Z��5��=Ġ���J��R=��3�>]ք�*��=N7f��^�=���Í=ZFi>���_��=6�p=�|<�σ�P���hU�=<� >L�J=�+��A1 =�/ٽ����z~������ф�=���=��~Ӑ<�KH��;I�Ѧ=�@�=�������=@�h�J=�%�;H� =~��=�L�=��=钭�ƂY�)�"�E=*���F�h+g���)>�X�=�T����=��/=�^=6�>ܑ��$)���a���E�!��<�н�=2y��;Ľ�@���iS�iP<~�^<B�=������g��=��l;��%��=�v����/==5>�}�.�u�4P����=�g�=��<�ȕ<݅�� 7�V���D/i�Kl&�y�@=bWS�|r>� s=�����
���v���(��� ��"���=a=,ܤ�1��|{<�� ��[=�wt�0w��2OѼ�;���J�<[�'='_)>�N��?��<�@>zT�=˭��*׽���g�=_n�=s���N��j���m���=�ނ=z��<7��%��Ծ�=q}�jG�=[t�=v�> y��\���O���R
�<��,>O�����ٽa|��&�d�=�Q��"�=�y彛�ܻr+���r�=������=dj���=z��=7��=�� �Ա4��0<�^i���%<e⽡�F�M\��HΘ=�Ͱ:<K�:�׈�S�=�8<&�����������+M��D">�m�1����R;���ܽ��z=�1��ļ�G'��ؼ�H�B�8,�$���G9��<�_˽+, ����xw��gi��&��<�i�>�O�=�ゼ�d���7>h�;̇A=��=���:=p��h=�=�A,>+k<:�#=� 9���>9�Ƚ&ZD�:5�=�����>�$����k>0�=6=�����='AY�"dG=�@ �O��j�G��_I���'��S:�#䆽Պ/<�%=�_2= G6�j�ǽ��;>y|��>v뻡o7=�=� �=�4���������FC>7�Ͻ<JW<�X(�D��=���=��B=�5.���>Ԥ >ղ��dE����w=njE=f�R>l�׽�'=�4&=Mj��`_7��J��n���V��'�<�[�8���'��i��}��2
��~ =�Vb=��!>X4�;��n=!�&��\��u���2�>�^= ׽�x��c;r��\�p �=��`<:@�:��=���=��=��D<a���� �7U�=��<L��Ej�~D�=���<g�>����0���>7N��{@>�@��ߡ��`�=5�>}�Q�xC-��sr���=E3��%�=�^�;�6c���#<^� >��8��ަ=�n��ouԽ�D
�z~> �z}�<7��<x����t3����=��=M�F���
>0�3<5��>Xe���?��u�<)��<װ�<,�S�><�B>���<7� �)9����;��\=짭<گ>{a�=*ȣ��i4>\�q�չ?�(��=�v|�B=�=*۽�LN>l5
��s�o-���a��^z�#���2�=9ٚ=�jJ�(�H>�o+=�j����<@��|)����=m{K�|�}<������нK�=&F�<��*� >���=V
>Y@��`zK<��½tż=( �:#x���K�;˚��◝�.�=T��>T>��D>��=�����S�<�ڥ=��!>��> ��<�2X����;8��=X�Y�&� >{�=�����=��<�i�=�[ ���=x8�:e��=I< �#�󾼏� >.�=���<�.=�.5���=x�q� XŽ�w>���w�8Q�=��� ��=ٝ��d�
�c4!�}���EH=�X�=�&>G� =Iy�=�ļ��>�-��M��pk�=
k�<�N_��섽@��l��=���0�>���>�:+>� ������N>ha�<�k0��;o=���^��� �>5i�=� �>��� ��=�u$�ɏ=��޻�t˽g�(>`��=�!F=.�=�V�� ����=�c5�w�F>����ً�v+����i��F=�#p�Tp���m���i��Qv�;����vN�=,� ���(<� >!b[�~˅����=d��<�n�~�=�*(>IԹ=�� =(S>\� =Z�U=#R�=�C>k8����#��-�=C��<�������=�*=�t��s�=b��<��)�ľ
>�� =T��=ם6��:=F:%>��q= c=��D�@���u>}� >��'>�a2�x�D�y��=���;���j�<{<>p��=��=���ʹ/��0�=�GM�(����S�T��;���2�B��~�|����y=�\K�&�y=���=b c� �R=?�D�����p��<�>&tɽG-�=��<��u=b\��l������A<J�����<B���=�E�<>�Y�w���� >�n�=:>s
=�M�ʚ<�S>gUĽ��=┍�hq��c�4��[�=��;�&���"V=y�=�6C��M>����TlO����=&3u��Z��j!��B�g����a��=#�R�����I������=|�ἆ֧;M渽�0�=wiͽ�g`�N��<�r=!��<�J̽�M-�N�=�� =�Π�J�f��������;���<=���fh=L���q�Y��}($=�b�����= {��UX���I��E�<p��<R�� �=%$S=�Ic���ݻ��#� ��<Ŋ=�d�=.B�=`�:�Z�=U��b4��A=C�2=ۜ)�Ԥ߼��$�/�1=5��;4���ȷ�;3O�a[һ�,�=��>+H�h�D�����}�=�j��i����-��o=J��=����#�+�j>8 z=�0>o��,+H��t��Xt;>p��Y�<�0[;���=^�̽kB>^��=��;>�K�K��B�=�D�=�O�=TD��L����:�;ͻ�<k=a�K>N� �`���4ܼ"�ռ����t�=�[�h�d<a<ὲm!��@<Iݼ�'?�U�Y�ECM��ž����; vM=զd���|>0=�|��v=�p�;�+'�� >O^��S��Y��X�4>�����=�<M���q���Z?>�5�=?�սv�=ȼڽ�v�=H�]��Ǝ���=�zz=����%��ς>1/>���5���@�����۴��B=�=��W>�\�<ιc=�3Y=XVn���#����=w �<1�=�L,>�w]= �p<�w�=�m> % =���=P/d�t,=C=<,
�=��ƼC�<��;��$=Մ����󒶼�,X�|��Rab;�i����֗>����;j=%�=�w��=������;��=)Ľnd=�2��[>F��< Od<�S�~�U�@_�=a�$�B�(=�1���f�U��=�����#h=+c�<�c=Ԉc=iQ��G�=,�:=�� =��i�HV=ڐ=�ӽ���=�.�����=ym��B���փ�������o��<r��=E���p4���i>E���p�q=�8�%��<#�=F=��r*>�s��d�_� ���!^K�{��=E��<����<�=�|Z<.,<3�������5����<Ix�=�sg��@�����<F;�<>_ �m@=�����z�w������.�n���>�S�<]�^�}=�(=Y�_>�����νГ�=��=��(�����M�ݽ7p���j=b@���O����<B���t�,R�=��ϻ��x=�
��o)>��Q�� W��H>�k=��8=�y�ǝ׽��H>��=ld���e�_�޽Z���r�=1���H��"{�=�"���/>�8>����<p#�3�E�2����5>&7 =��=�����{F=��:���='�ѼK�/��{�=�'�,���1c <聂����;�m�vg�=��U<���=_��=��5��k=>��ý���@��=?�>��=�"1��>��9�� �0W��o���o;<ģG=����U�����=2�V=��D>�9�=wӈ>!V=$s=�t>�d���=G����=/R�L�>>х>�[w=Ko�<�qf���>�C��^/���0�=e�}�
Վ<膣;W�½N�A<���=n���m^�=M%�<Lx =��Խ(��=�7�=��=yA&���o=�v�J�=Xl�=t{�
0&=.�=[��=K=��ƽ�ƾ��-�����S<��0>��;G�x=$
ڽɧ5�����n����:>S#�f2 �|��=��[����o�p>W��=Z4���̘�x�=*K)�Rع; L/<J���O:��CM�Wl�<�V}>�����伈
i��Zս���=U�1�=CJ��*G>���=���= yջS��<&3ʽsw>_f�>�Y�<�t&�΄9>xY>rH>�O�ʳ�;�[e>�ہ<�I�| ��W�F=c]�=y����h�<'bj=C=�<\�=ׁT�-�����;e��=��>}G�=���<&���5�>��νhmI>a� �:���R�<�߭��%�����=1)��0`4���:��?ؼ���6X���m>��m����<ȯI=��P=��S=_K��Q?&���=��E������ ��'=��;>�5�=�fB=F�;l�5>��>�Y,>��h� y�<�@p����=�^.<u52��<�<Λ�*h.>a5�= <=��@=�[=�� ����֡+>+#;>����=j��� ��=�8=a̡�"[ܼ��.�����N]>qؽ,q>����Q<�ѫ=X�B�TY����L=�>����޽���<����[>Z{ѽ2����>��a��瞽��8>�>J�>}��;�\u��Q�>_½��x>�5{�6Y�=-$�=�Â<���=A1^<>c�<w�߽~��b�Q=���<�=�G�����<�<�a{9L�u>0�"�frн����xJ/> �>��Җ=���<���=Zܪ=V�;Iy�����9�X�=�� ��A> J�U7��]�<x悼n��<��8>�?#�Gz��|Q��"�=�W��y�=kz��SH<���<��:~[�9(��;���Q l>@�=�a�;��8����=��&>P�[��'�o��=_���Z>�a�=�*p=�/�<Q��v>�I2�����Ҋ��<o<��Ӽ�=�z�<�-Ͻ�3��Tʼ�S���oƽ)�=8�[=��=Oq>��BD�m=�<�^o����<̊&>C��=հ1�`) �4~i=�Zs=�����;��n;#�e������b�������>��F��$5=�l^���U=Nĩ��bp�6�[>j�1�R�u=�J�<���<��x=�g�=\9r=��=-
h=*�>4��=�~�����������i;��R<>�%�������P�L��=8����ȟ��U�<��c>p䑽j1��L@=Ђ>��X��V�=�q>O��7=O��"<@���%9���a ��-[>�a�=��<��<�ι=��7:Z���l����>ʪ˽�͉�i/L�*u�=ߧ��*d=88>�;ތ�=�B=C�ʽ}Խ�Ƭ=Xd��SI���=2έ�I�=�=|��=� �=>n$o>5Gu<�l�<(��;z�d=E;:>DnN�s{��:�μ�AU�񬉽Z)��ݔl�XI�=�J���LǼ�L�=@`�ƀ<:xA:;�E>������
�y^=���:̓� Q�<m��<qN�=����.Z=!� ��co=_f��%V���ƽ���</Ժ$A���2
��{��E��=�5�=�S��O��=+�>�<�=8�=�v(<� B�"8+=� ����㩸=*"μ*qT���A<�[O> ������=��3>,M�ׄ�� ��;�A�=�~<SP<��=$�J;����[>����H=����l
���qY�LL9=�e=f�f�����?��f���Ì�=��1�-Y|=6= >�©�z�=���=ٽ�#>�!�Gpּ�g�;�Z�=ؾH<Rq�=�/>+sH���$�T�����+����=l�ڽ4�0=n� �� �rD��d�����=��[=ե)�G�ĽN�/=� ���W�=�=���<�u�#�R<�q���y���v>o������q#>���=l�����<�84>�N�=;9���qؼ�6=1����R�<��L<y�ͽ������sG,=/CL<:�=c����Z�T��!A=�&5��'��2�<��<C�vuX��,ٽ8�=������VK��3R�!� =
e�����=Ã�=󠼔�B�E���L햻W�н��9��⁽H�ý�޶��H-�� -=BfB>Ye�=�eb<�Q�<Ӂ>�����j��a=vsj���<�#3>y��=�*���,=����.Y����=4*&�'U�+�Ϭ�<|6ý����&|>�'=9�<�[6��,�fI�<���=���;}F�Y%�#�<��9�ȧ�<��<ڈ;��(ؼa.A�Λf=|D��==/
�= ���m�>�5A��fェ�J<<�컎ce>�>����9��?�nd�=��)>�yV>��༠�ʽP\�=6T�=v��=P�ּ���=��*<ꢗ<���ð<q��;�b�<Pn]=5��;�i�<���� ��>�g�=%���:�� ��l���j�����5��Ȍ<��8�0mf�g&�=Fb>�u����N<2y<D�E�����1!�>��=�_���.��ݨ<b%>��<7`(��KK�%>s��=6�;> ۷��Õ��r=ۃ
�q��=�T��1Q׽̏r�
���ϼ_f�>jG>��ɼ��;�]�;��/�<��b��=vڤ=�ݎ�����*������<]��<k�q=��'=x���M11>]������=w4f>vD�R��=�*�YaĻ�,W�Sq�:���*'�=m�=�,>�H�={; ��i>̰>��6>�2ɽ�F,����%��>�02>ޕܽrJ��!vѽ�6?�@�<� =B1>-� ��=δ=>N�=�qx=(B��2�m<��>Ni潄���L��[�Ǽ�l=w��=�%O�#G>\xz=\�<P�Լh�=Tt>��s>ѿ�=����7�>�/�1x:=��V��;)>��<=u�6�=>�%>��&=��;��[=݁��<�#�=�窼������=�ݮ<��a�|�@=\KO>p���!C ��2�=_>�g$�����݈=� =�P���$���LŽ8�u>y� ��½���Z�=�?�U���m�=f�<��"=��>W.��cӽh1_>�Լ�j>���<&�Z> ����k=�Bx>߷��W��W��>���=��� W�=P�=ua���<£��oC"���=?@���޽5���B��=c�s���ý�=�_>��f<-C&=n5�=C�,�ڑ���oO=���Pw�<��v�q���B��]�w=��B>D >�X8:��)�T��=���<�o-<�o�<p�^>L�x��~�=�z_����A����*�����U�<w��껁��=�
�WR�<��V������+>>B�=<R�= ��=�=5mh>���;5�<K�����='����TE>�=N�����2%���>��a>8��)�6�$�^�����!=�U}�:�¼�
�=JL:�1<sJ��P�=��"=]N�=�=۽���>N?I���>S�e��xB��9нxs����軝��;��D�?��=唽�Kӽ3D�=]�=5�>Z�'��R<�a�=u�M���˽:@�=Uݖ=��0>=Mf=�je> �>�w>���=6��;�н���;���Ժ�=q��2i�Gډ� �!>���8� >��<��=�Ye����:}��eZ>���;~/7�~�<^�t���`��U�=��>�6��?->g�\�~�)-�����9��?>|Ǖ���=�: >��ý3�^=�Q>rk
>B�����f� >��=����qT�=�"7�v)�=벽=��ѻ�ڽ=pZ��)�>�n���F=W�#=�>�<�{���h���d= i�� Am��Pg<�_ʼ�NX��V4���=1�ʽח�=��佊�нbJL��>�<dU�>��X��ڡ=�@�����(��W�/�P>���<����ݾ2�{��<�6�=��'������q�<E&��P`���">�p�=®=UZý�q==m�ƽ��=����>�(=�w��Z;> ��=�0������F�x��rn=O� =������=˖Ž������*�=߉g=&�
�=H��t�>J#�N簽ReC���l�NzX=��>|f<>�A�=ܟo>O�S>�#W��"��O�=�1��v�)�c�<x��n7���^?>�Ԥ=̺��sl׽������ ��j�=ws>]���빙�R��=]#J=m�=�9P�����
��=��,�/�=&�e��u����������m�s"�=�SD=��޽j�=�&н�t�=� M��g�=Q>��Ͻ���򳼽1�='=(W< ���@�+��=#2g=�U">M����m��!�=�ͥ�<�<�GڽF����Y�/�d�W�V<�U@=�����<)��!�WU��5T6��D=ԝ:>��H=8��=spD�y�|=�B= 1���7�&��<����L>�V��~�<"�%�b{�=���<����$�������B�=�3��=��R=���>.�]���;�1 �m�I�2bK�ȑ�<򫿽r��=$H>�`�<���|���Z�=1𧺞僻Y
=�w���q!<�:齔�����-L�=����е9�+*=�j���sý� =˱���Գ=x��;LK=R����*½�ko=�4=���Zկ���->��<l��%�=Sz=��=���<�^�}�>����=->�Ü�Ӵk���>�*�=�?H>�k<�M}=w��<z��=�vE<�Z�<Ϥ˽ޤ
>�n�lP<>V,м�j,=S��y2<N߸<�n�<�!�� �#��ܐ�m��=�{7�����U��&.c��Wq=�LP�cga��qQ>2S>)|�;^�E;�s����;á=ڭ�:q�T�/ż!�׽�bY=�3��ݤ���<- /�/�=��m�(.v���V�X����P�G� =H� >1���� ����%<.�ݺ�w3=&V�=�K�=f2I�,�o=���� _��œ�=�)��<�=���<�p�����by�=z �V�.>'!�Z���������:�$J><"#> *O=�MF�Qˇ<"։=�6������ �=l�������HB��6�z=����?4@>wu�=�)���{�<�ڽ�RL�$ ~�1���=P���3�>m:�=6�/>H u����<d)�=�u���Z>��5>���j{ �tS����l�_�������?��S��������<�hs> �=={g�@�˼�i�=q���A�<$�@��-)=�1�/Rüԩ�=���=�����I4� �$<GC�< �^">��><��;�� <��L<���<A@=C�,=�k�;2��=W��=t�����<"u�;� ��a�^=����!�9>�h�=���=���c�=�5O=0\�=�B[>�佋��>;��=�21>-"=T�)�� '��W>� ��b:>�m���л=�ˋ=���=b��=A��: O���,��슽Ƚ�K��/[���y=�Z�=��z<>��=� �<��>��4��� ����>� &=���=e��<ώ3=S8�_m�=Y�����=�p>�8���-��A=#�k��� ���K=Bt彥*h�yC�=镬= �����8N�=�н�->=SF�;�"=�;����=߽{�<6^[=��g��ļ2��;\�>��On2=A[e�|�f=���=�������=��Q>�s�<����&��2�1?$����=�Xk��"�<�<11w�D�?>�{:���I=���Ú�=Ck�<aH���u�=tPK���>���<S}��u#>�x��m =���=`�)�%̗=��.=R$�;k <�*I�m�>���>㭍=?{�=̏�=E�%���u=�4�=��`>�2�� Ё���B>�Kl����<T�?=I� �ߔ�=j� >�;��>$m�=��M��˕�h�������~>�@=���z'=�`?=�����=H/>��=j�<�ü��=07����<v2@��%����^��=';�:^U,���Ǽ"��;�4�}b =����f�ٓ!=�]<���<��M<;��֎=HZ�=�Nӽ|{L<֘���4=8�>Z��C����<�[ý����wȸ<��W<�&� p+=#b4�ݓؽ�#���3=7��c��=�Խ��A>Hn�=�;�=T>���e"� 9<��f���Ip��F�l( ��y�<9-:��N>�v�<)1��9���M�*q��8 �n�I�����=������db��/�=��B��Z���L=�� =������=��_�2�=W)��JH>���<.K�<E*�(9|<�,�:*��= v=���=!;�:V=|[�J��=?䉼�X���s:= �ɽɽO�y��eI���i/��?߽Va��I��=� >J>e��᡽���=B�f=꽅>ݶ>U�=ި>��)$�'��:]�=�#��-����Q=��$>��>4o��9��<�7�����=��U=���=}\�=Dl�����V���6�>k讽ݱ<���<�i=��yo�a��>�>R�>�M��L���I9=F��< ��;S��~`ʽ�Y����b���3�x=��n<�m�� �ͽr ����4E����(�u���;U��<>��=<\��_�<i���s�N>Z��r�>= �=�i,�:;�==����*��=iX)��;�<ת=�w�=�[��p:�ľ�=����N���=l��=�����˳=l�@>-���,b>�5�=y%E��I:>��s;*�;Z҉��� >ϲ߽��׽%7��*����<A0��ɼ���3?<� ���qn�;T�<�B�<������=�(�,��<�a�=�~�=�����=��=�L��� >%Y�=_�x=� J��븺^�<:�#�~�L>��������!=E�=�j�*=�p����6>��o+/>C��;ޙ����=������U>� ��ݽ�=1@�<><��.e>H��<�1 =(���D��=�n=?{j����=E����7�#���>=K��=c�H⁽��k=�<a^��ϲ������p >ea_>3��;�K��?������=�C�=�!���1�<�~;�\� �4|�=d`(>����ڥ��0<��eڼ5�=�I�=x�ͺڀf<��$���=�7V��~T=�� �8n�TB��=U��T�=�����v=B3��&��<U�@�we�<*2�;���=@5=<U�=*s=�'���D�Z���#�9=��l=���=�2L>,> �.>".> '�<���<�� �<�ݽ�ι�jP8�쥽��>�ͤ� Μ>��>�>!{��oG��>I�=��}=��$<�ނ<���<�u> #�=v�=���}��4��'�=;�q=qX=�Ὄ� >��F=�]=���=L��t��f��=Xj�=>{��=KH
���B=Y%=�td=�����%B�.�X=w���%�=Mp��t>���=�Z�<�g.=uH��S�}�,�?;h;��|=~��<@赼�m=;�K���߼}�7<���=���=!�=W�=�dͽX��� 7�;WNv�R�=�~2���`�<V�=B�+�]$=� �I��<F������n>�}>>����<S|�S��=��t<3�T��О=��E�~�f=_jj���x=�"/��9=�p��(k��S>�ZR>�>J�ӷL�C~�=���]�2=�3ͽ��V�fޮ=#J�5����%�>X8>~+T< Z<�7�=��y=Z[-��)<J_r="�=,=9>�l�=H���%]��޻�>����X����O�l��;\L>�f����ý�>,8׽��̽�֐=�ȳ=1�?=8�f� F���J�;;e̽�淽�̪=mM6����=���
u>4���@�j=99:��8����3h�c���>�^�<�%���C>l��=�\��;1�� �8�z�>���=���=�VX=xp߻y$�=S~�<pS�=;h�<�k>+)Q>F�u=gA=\Oܽ �n�>�ܽ�M(>?5��@̽�tF<B?=�e�=��<��S<6at=]�����|�L��=��=s�>��b�&M�<"�˽���=o��_;���B>�\<�0=���� �r >Lt<��6�7��=�˄=�Q��-�ϼUY��� w=*�N��;<���=��i=�N4;��V� ��;n\=[�i��<���<%�?>�;*=J��=�l�)��=Dr�<nS���Z>��u�b�M��ɼ7=�!�<����|?^=��=C���ҵ��p��rX��H�>�J|����f���L=��> zP;�{+��}߽����Ҕ����<.��hk�=D;;��="��<��"=���=�Å��6�=���<�:I���=���q>�����O�#5�=N�:�[�3>�]�їʽ����#ۧ=%
a=�j=Àk�}8>�,�o</�>iś�4�=y�$�,���mu��ֺ=�нO6)��� >�U�=�齾(��BO�=�[1�p������<�{[>���Ǐ=��罅V��-�<�8�<�*��<�;��,>= ?�4G���|ѽ���";���)b=kB=�u������+->�>�=��-�����{�b�D�ؼ��N=�����g>�t ���Ƽq�����=r�>Hw���v�<,@(=P �=���=6}罒�����=���<�� ��#��촼� >�׌��>���<�>4T=�C���w�o5)=��='Ĉ>U�(>~�'���H��;>-;{�`T�=����1�q�Ğ��ʧ�=���= 6�=ř�=�Y>�s->�����e��w<��4�=KM����n�
�~��=i�>3����B >)g�# �=2�V�Z>�e�=+��=�2��?.�� =>0#/�
��=mu�ݩ��o���h)�z�i�N~7���6��K*� ��=q�<��I���к��a�V�����T����N^��m�Q�^^d=-�R�r ��+β�)�����ܽ������ :��[�|�Ǽ��T>�R׽�Ɠ=�4�=m�; R><#T=غ=%���䈼��a� ٻ\Q�VfؽӠq�ˢ��ң�=�c�<� 佶 ؽ�-(��?=�y�:�>|�g<��齁`�=�q�=�`y=98����=_W0<t��=��3ٞ=:��=�XJ=���HB���f>f;>���n����V�ۙ����]Б= ($>�E>�򒽘�U>�H4�����\=�f�=Re8���>������'=�t@�ڤ�<p�罔�>�1K>z}�:�8@=`罔E>*@ �#H��*>�ś=2��=��c=��;��� �z��[|V=��>���I�<�8>b=�=���=���FM�=,���Pv;�[�<�뉽Ɓ��d�=��9��4>�/����1>��>�-)>��L�w���P$ռ���=�6˼a�K��=d���TF=Va��ު;>�k߽�����Kt=���dp�#UJ<t6<��={�=�I���A��X��<�?x���Խ!y�=Z2�<����=KX�A�>>C�=X�D�W:y�bB�<~��=����i�,>�='=HD=>�8��������m��=;n=����ڣ=���<9v�=��>���='�=p���b�<����i=���"=�j�=o���Iؽ�3>ɐH�!�=�c��渣��fM;5wY=:h�<0����/��%�h=ų(�e��=��޽�:;�����O=~C�=�.;M���h��Y䗽�>.=��>�ȶ���(=ћ�;ɦ=�g��\>�M��50�O�V��|�������~�8>2��L0=����yC��0�=���=Z�x�'�w�X8�<������Β��b�L=���=�Z�<�����=�93=GӰ���6���8=x��=/8:�7���7w�å��Ł=b�=�s���> ƥ=;⽸����U��L >�Ҁ>i��=b!L>�=��>� �=�����-�G:_=)H�=W�;`tg<�V=��=^Ӿ=3ױ<���=�>ӽ���ٚ=~��=Xsz=��=O��_ل�d&='�|�^� =��3�4��=��缮r=���=�x�<��=gY+>\v�=���w�d�ǭ�oΩ��μ�ݽ"v��8��=� ��-�<���<ML��N>�=�Ќ=J�p�z9�<�9i�^&�;eR���F=\�����=��M<^��;�T3=7#)����A3�=5�����=Х�*pB���\���G��I$=�嗽�e�=��">�y �j�˽83�<�G2>|ٽW�1>�S��o�y=s�c=�x=9HU;:5<F�9�@#?��S������= $��� �?�V�Y���E'��Ux�=
4 >��
���8=Y�;�Ƚ�@���=Tqü��>���=Ջz=�v�=�]%=�R~�A���t=CY�;M�#�rT�<Pڗ=K(_����=Xg����3=yʧ=���;5���.�ݽ�1o���~���<�<��0�=�==�����%=�� =Hci��*@�UB����>�-�����=�J�=�Q�eT>�l:J ��z檽�ߦ�C�὇s�3�¼�q>9�¼��L�F^���J�=ǀ$���>ds-�;_g:���=�c���?V=z�o>wx����=��>�b>F�/����;t�>R��=5��<o靽JnK>Y�Y>b��>O�=`�.<�Kݽ�W>���=�C���L>Se>��<@w½
��=ק>���������C��c��ro_��w��T�n=�k<k����=^�~=rN�<�ŽuV>�
>3w<���>4Z�f9>Ź�j�=�&;�(J0�? 3=�|==����a��m�=��νُ
���E>�o�M��=a�>N�T=���� ��ω�<�;�=kl,�_�a>���<&_L;5���n4�ы������+�<�VڽX!N=���<��0�_� � ��=�?�<���=�b�i��=�*��?!+=���d�{;�%a<�r=F79=����I���І�=C(/��L�;5�> V�<l���f=�o�==l����6=���V���0�<����F�rz��4� �3�=���<@wq�]̽*N>m��<B�>>z��<���<���=N�5�/�=i�0>�I
�1�#�N��,C�=�Ю=����i��|��<J�R=���=�k�� ���o�=��P=��>��B>d=��dOO���<ԙ$�b.�=��ؼ5� =e��;m�=��a��^��3��g�=9!R<2�x:�
�.M��]L>�gx=��\�L* �U�����>��q�#�=񒪽��=��,���>@��<-�H=&*<�g���ڶ=�H�=�!=�|��u�{�����_2[=���O��;���=�
W���w�X1��[6�=u;���'�<~��<� �=�%�=������={��=z��<��Žns3� �9=Jpg=0��bc=�k�=�n�;�u�=j�T�����[�:���=L��<�>L����5�%� > �>�� �J����E=��2=`�K<"��=��<mOm����=�q�����=��>U�>�m�Q�=����=�@�q�,=hd?>������=��>��h�+����&>��E�;���N��=z�=15�<rw�;G�i=_��=&m!�ำ�ϟL=�>[�=�������0=X��+1���˽�U�������=̔!>��s��D�<��5=̦�=*f���>�D=��!�����KW>���Z�½(ۏ<� z>��>M�
jO�[��=�h >)=��!%<B>qw1>�ɠ�AMu=+����Ҽ� �=�q&>������ ��l�<�&��` ��XH>Nð��=�
�k�==� ����VM^=+�x� �'���:�1�{=orE<8�<{8 =���w�>�`��Jܕ>SM��C��2�>=��<��S=dk��8互C�=��-=��r�O��=��=&{�=�Dg��-2��b>H� ��;[+�z��':�,%=��t;E����߽�� =>`>����Ͼý���=� x>�ŷ����>rܼ�� >�n�<��*=����HL���3�=w�=�d���D�����<=��5p�< ���!c��jw��5�8�Ƞ;�a>F^ڽ����1�6<�ю�GM=��f��<��]��=f�=,M9>�僽 �b>N��=���
��=��Y�Y0�^+$>Y�s;~虾b��<~o�U�{=�N��7�=}����n�=�p�;�����.�z�x>����&�<;{�;�ګ;5.ݽ}�=����I����=H7���=Q��<��<h|=iK�=`���l�<!5<�>��2V�=�н�\�<V� �oK�:}̼�Z�=Z����g>)cj��+��q��Dh=���+���C���=ZJ�_f="�a�N�$������� >�pڽ�2F�{�;S���W"��׆�= �.>� �=e>�¶�;��=�2g>���������D��-������� �j������3M�^;3��T �aF =��=��j=���:dG9���ǽ�7k=:Ys>n�3�F�=��=?��=���=Ӫ+>�—=���<�*'�^��'�>��<�w >���=Y >Aq@=圼6�G=�֛�e�x�ڭ��]�k>�=4+H>�[�:���~<��m����ym����<�����#>0L�=S#���ĽX��9l5�՚�=�
5�'�>��=��=��J=uc��� �=I"p�E>e��;����JW>�~�=)���lνF�ͽN����lD>�6�=Bb='��=6���� >�r��������=?2=�>c$M�{�W>2�H=�������=5��<G�����=�h�=|��� >�q>��6���2=n0a��u�=V
I=37�<��6��A�=����]؄=( N=�=�=?���q��=(�ȼj�!��k�=]4�<r��k~体��=W(�;s�=>İ=���=�\$>����1�s����<�A����<kf�;�8� 1�9���&=���<�E�F�
>��=�������,�H���ys���=(a+>�(�= ��=�,�Y7�<��Y=+b =�c9��< �;<ix�����=2�N���;�J�<@R�=�.�Ĭ�=4@�<s¼�� �� �����nW��+@>6�~�t�Z=���F7�s�>�3W��i��� Ӽ1B&>�f�>1�>�|s;Ff�� ���xL��C=reY��r�����V5/>N�Y���>=��ɼ�+w=4��=uCp=P6X��q�=d�=�6]=<O�D5�=�$>˽ʨ����;r����=+QT�Pb<_�0>���1��<�Fj���>>�zX���=��!���]���<.=�}���@=��w�Ғ ����઼�c+��$@>�)���>n =<�Ứ��<� ��^��e�{���=����`�P+
>��s���)=��f=j`3�S7�=���=� ��)������͓�2>x��=53;�-�<ɯ"<�=T>s)]>Ğ�=I�X::��=�D�=`����都*���b�$�po>Ӱ�<�~��=n"�=_� >��5�[���yw�<C񼡭���7K�~��=N�B>��ƹ�b�=�E> �-�oz�=dz�J.>��L��̗=��>KtM�F?�;��!>���ou��q �=�;�=6y�=ϸʽڏM>5&�=M���Y' �.{��ͭ=���=������=��:S.>��?�=��=L-�<3";=0#2<�C�=�-�;J��-u,=��˼��A������J������8>���=�����=`l>;}{��K����<�#���Ͻ�?��p{=e��=3t�<���=������>�D��΃�ϟ��V<.D��M�==v�=V蠽V��;�����=v)>��A=@��Մt������*f=��|� ས!�*��;g�T���:kB��g&�!|��;�6>o=���s��=M<)>����*�����>�H�=@�=��C>4��g0>���=B�=�����r��+�6����:U��<\�$>g�s=ʍ��}>�=ۛ�����"��<�('>��)>W�=�O��Q�y=�:=>�����k��n@��r�>�2B=��=e���6� ��n�=�`G��b{=�/t<���n�V��bG��²�vٶ���>= g6�uoz<�&��k�=Ǝ��r�<j��=�6�:�>>ܼн�K<jR.����=�,>M,=O�V���4>(�k;+�5=Y (>�aɼ��ѽ�/7>�n�=N� >7�&=�Ϭ��-\�w��E�<�N��D���ɓ=�t'>:��G�=t�< �;�l�:���)�<'^r��=b���d[�j꽘��<��4�G=h�=�UK<��T��<MJ'�7�ҽ����g�/�5� �K��<(�½�W�C�Ƚ�o8>�ce�zA����=��=�m���Q輔��=/=�秽�>�춽���=�_��ԋ=mH�=O��<O弽�H+>z&.�O�= #>�-�=��>��=� �=�;���k �l6;�n�<�ڥ=�
>"���[�<���A|=���=��=���=.�m>  >b������=5�<n�5��>���1�Ħ�<} =�Ԥ=���X.=�TF��B�<|�ڽ�4 =���C��5=}��=ͬ�:��R��#d=+&q<�^?����ɀ�`?%�� ���Z>���xY��*��̙��ܕ=�0�<��E�->���[�%õ=���N��>�4=&}��u
*>Q$�; ������=�]�=#P�=�u�=�@y=Iȉ�kT�=�l,>F.��/�Q=C��=B�=!B>螩�����#��&(=���=�_�<~��=���B��<�� ����=AU`>��ӽq�<7�A>��ڼ�ķ<�d/����=�����������"5� ��=ʹ�=��<� �D>�e�=�=h<�=�����g<$i��'D���`p� w ��բ�M2_>*��=H���Tp�<[�>F˽���=O�漉c�=`���� 9!>_�1>�����|M=��ݻ�f��ʹq� ;=N��<'�<�z�<uL=��Z<���=����a��I>�� >�5�=�s���� ��)�<�z=��0��^��>���9>q��=⁩<H�i��֤=��߽C�s�L��X2��z(� �D=���FDA<�`��k̽�%�<���<�z���>z�h�fI�<�B>hG>)b*<�Q��8����� �9>v?_�,9�=$*��i�=��H���c>i��<���>���=�D>��=D!�����<v��=%x=sS�<��J�u��p�c�]DB��t�����=�&H�i��=� �oۃ=a>�J������ �=�x&>���= ?s�� <N�ܼ�;>nwĽ��->�~=���= OL���=7�J>��=ڿ�=gȊ=p���u=Qᢽ���=�>x��=0�=#�ؽ� ��=`!���>��^�Eo�����v�=$�2��!
=|�̼��=ɠ�H:��^!��A=&�p=N��=�wܽ�!C� ��=S0��TL�;鞇=Ki�=�R�����F�8��`�=.@�S}�=��Q���
>yr>Ȱ)��)���)��^s'>�E#>���=�_��Q��=~G��I��������^���<���=��1���;�|>h>�������G0>� ����z�=Տ9�����S�=�E�����=u'�=��=ڼ�=Ȉ�=�lR=T@�;�=���80>�!>;v�7��ꝼK��=z"�<�x�����=��&��->�^��nN�����=�竽�̈́<W��=|>�1V=<ի���<��F�`m<�2b�����z�=N��=z{��T� =��N��� � �3��籽�B������W�����<�P �Ȼ�=ޱ=��V��$�=]^=Ƃ$�>=��G�� #ʽ�"�<�<��=ѽP�=3�=B�>pD� D�����M�=+1T=wv�F1 >��=UG6=0 ��F�=z �����m�.>����6�>�mw��O��=}/~=���>4�=�Q=>�����a<�_&=S^=�.>Mڟ=$�=�L��G�=[k���~�Qz��µ�=}�<�0Y>��|=P͠�>�>�S�W��hME=4�3=w6 �����5�=%}��T�O�i��<o�������U���v��L躜=��?���V�<���F �;~�)��A�������̽������=Iuý$�}�*q�k[����<8�(�`�=4:=���;N��=�D=�����=���%�Z= Vƽ朢=d����=�2�=�O̻�+<�zSl�[; �;���<* �V;�<`���j >n��=.����?*����=L=�-=(�:>v%X��8Լ����wW�=�[����`�,�=�����p�=-��$�=����n���C ��ȏ��71>
�#:�Dҽz㻼j�e>�> )j:s�R=���=|!%=�=�5�‘��Pl=��[�p�k���ڽJ;m��e �7<^��9c�|���5>�f���}�=�RX��:�=aյ��\�� �=&��:�}d�/Qd�V�C>h�
>oV>At��j�=�D �}��9���M�='���p;���L�A>�d <���=@C�<~����|<n��+���r����=���=��輾q�����9���>��`�B�/�=�����=�b�F� =m�>|�>w�><�.=Q��=q���P�N%�<��#=��[=7�=5Ee������ܽ��,>ᇭ<��=���=:)=1̚���O<{i=u�,��&�1i�9
>7$ �fJ>ȗ�D>,���G��-�����=Am=�q���z:R��&�<�:<?�[=|�Y�K�+>E�<�<��>߽'1)��O�<�>J<B��<afo��
|=1�>v��<S��<!��s"���'>d2w<g׽�a=g�>�V�,`�< x�;�u��k�=�ч�G@>>�w�)?>�!�<Ma�-#<��;{�=�5��>w���S<�����=>=J�= �=6C�=I#�� ���.�?���*�����=K�<��>p�X;cYl<�sx��� >��=�l9�*�*����<YG=K=껊�#�¶��,�HL �^���i%�=y
��څ�޿-�<�֏;�[� ����n���x�<e5`�Jd>P�a=Z���1>�<3�a=�%�L�>�ʂ<�i>=�ʓ=�C�=/��G�v=���=��=^��g\G�j9��P�=���jw=����X|��Gv=�u���0�;��=��{=�#�=�����T� �<���=�������x�;�y>�Y�=��%>�=}��k�b=Xg�<,�= S�<eF�=8n��uu6�W���DZ��,�޽ ;%=������=�wƻG|�=�E+=T��z�T=����*>���=�W��Q>�@:���=�^�:�񈾝�o>/��=S=�=,n�=t��`3��,�x��-�=���<.wS<��=��0��G�<�ʼё��D=�up�Vh>7�.>�m�>�7M=(k�]� ��m�zK.<o'�ݶ%�B�����������#��/H�HTl<1��. <�X>K��=�� �(*>_������=�.w<]Z�=6�U=�X#=+�,>9ʽ���=�NG�O� >����}9��b�<
��F��*H���>��<�&�=�a�=��G=��>�����Ҍ������ཨ��<D��=������S��̮=��޽P�d={�=պ�=Q�>�����-<�K����<<{��:Ln�����=���=���=t���f�=n�;0�W=�=Q0������*��i)�<���=�M�=s�<��J��,���>>�eX=UĻ爜�F=.e�=��y=s_T=�W^=YѼ�>��ڼlV[�BH�=z���p+�=B��=� ��k� ��Ꮍ9Ѵ=m��<�a^�U
><\>��"�<A���B�=@�|>���=�H�=����#Z���<=o=�ɐ�Ë|��㽱i�������=<��=ۘ��rC���n$�)������켽<�6��Z���ڍ�;�ິ����B �3h)�A����>?� =3��=+������<k��;5�F=��;/>1�?�$�K�=$�>�� ��0����q#>y��K��=�&�=b�>mWE>R4�=��)<�F���N�>�]��<�#��k�e��;)��=Z�/��z�=?�~��?��j>���u�=��x�����=(�Ժ�a;>��<��h������f��\l=ۇ �Ҍɽ[��=�����qŽ���=�}>7��<+&���Pཱ���� �d�">M#t�n�T�!G��Q�=���� >��?�/�����8>( �;�l=�E;a�r��\�=���=� >��w��%>ٓ1�� N>���=5޽�U;����=���=[�ν�=
(�;=�<�[=~t[������;=;$< _���;���=�q=G�><�1�=�c>�}�=H����p=�E~<4����ݽc��Ð=ۉ�Y�Z>
���r=0���~���!z�; >�:�����y>�(�)ߐ��ع�7H�=l��� �<IaC��d����q��>B�=��:=6���=1��= �=G>�<d�=�t��K(��cb=�����q�<$��=*��=���N�U=��z���N.���q�=���=6�ֽ�{X=wCJ< ���0�8� =y�L�K���p� <y. >����N�@��8��%�ã�=��\�f<���. �0#�=�}��\߽i� �x��<��P���)����%2�=
A2�d=�θ=���VW%�2�J���>�8�<YЕ�ڮ���E.�%�bBὺ>�g=�H$���g��=���=]45<����9=V�ʽ�C �I,=�~ѽ��<��=)Q!>��5=��S=L�\=�'�c��<�:����佪fR<���p��<�K>�|d��0�2�&��-��U����=u�?�~��ވ�=��ɼİ�5�D=>��=��>0{,�$2�=������=V������;!�޽����AU�U[=�f�=_�>�)C<��e=��0>W��<���r,<�ߠ����=��!>� �����=/Z����=E��=��<�á�j`�=G��=&�-���>���=э�=4���)������弊X����<����>w=!:Z>��.=�6=�nG>4�h���=Cm:��= N��]��<�������μA=��&=j��<�Q���'���Ƚ����u�">_O�s��=�\�=ť�� =�5"�a�=��E=�� ��?� �G;�)=9I�A&:=�����>Lj�:��s�1d;=��=��y=�����U�'������S�e�(�潣&�;z�ֺ�����=�� �*:>@�Q�o%d>�x=�
��i�=�>��=�ҥ=���=K��=B<�|�e<_��L�=!!>o�=�w&>�>�W<
%=����=A�oD�����=;�=��j�Jٽ4 M=�x->-Й<��Q�����<�m�=�`A=(M���_&>Q#���{�=���ԑ ��y[�S2�=<2�������U�0;噺=�i�=��Ǽ��>�=����o�������v��-+>��=�1�=$���ؽ4θ�X����%<���=}���P*<^u> ��=dC��3-��+I�=Y
��t�=�S����Z�.uO=H�h=�=�����<�ա=����v��<:l_=CS��I��<�����r >LJT=�ّ��,车�,���W=A/>�Z<�O.��3нvW�}�
=v?;��W�=�x��Ӛ���X�����={i��*m_>"�I;v�D�Y�S= ���'A=� �&K�=4��=�<=!�1=�oѽU��=㋲��� >�˽)!>�ֺ�L��=�=;2�=�Y������C��l/ټ Qʽƞ=���<���=�l�=� >iE��_=�g��>�d,<F�9�}�0��c�\��<Z�<�P�e�zf >g=2�޼|�>�'�+��N׻���wo2=��9<fxq>���0�����<<��X'.>F��=����"���>`�E>�y�=%q�W���&i7�?=X���W�=�g`��=��)<Sʘ>� >�$=�-��#�D�k��=�Q>],��Я���=12<(���X5�= �`���>�����g�श=�qǽ��N=�O�=��s�v��<䍕���ԽP-�<�H�Yd���Ƚ1 ���.�=1e>B<�^�= �~�X��;�ӭ�|��=>��<�a$a�i�<\깼��b=ث�=f�o�۽k�>�
���'<<9/>6�����"��}���L���\���"���:=����jR=�ϴ<^i��.�=;N�=֊=l>K��$*����CE`> +��>� ��b�(��#�<�?>�֗�����}&z=,T�� ��=� h�`›<����#�˼W�|=3��= ���6�3=.�d<�"�=��=�u���">�X�=�Ju=��ͼYt�$�J��~��}�D��񣽞���W�&>�r)��<+�x�=����$>~=�ha��������=YC,=)���`&t�Xd =��=���;��c=�X�=�����=�w�<��Pἇ��=ה�:��=��9�œн��h7 =���<^q���J�b�
>��H>�(=K�x=�C�=�/��^Aョ{T=(�i=����#=z�>�{b�!��������<?�<���=y�9���н�'!>��*��Vu��F�<����g���< �;K�b=W$�<�g>vzL=q؍=�q߽�4�=h��;Ҧ=�5�=o�U>���^������x!��$=�h^�
��=�i��!�Q= �ż��R=/Y�=wu�=�G�<c��=���<?�g=�{�=�g^������qa>(7����N�S����b�X�����=)�=/zW=�6�<�Խ=���=D�Z�.~>W�y>�mn>Ur�=�5�������U=���R��=sT�=�kx����k>^��<ti>�:�������>�"B�dֺ���=����O���$�<!�*=��=�m�.=:�=�&1�����������a��, >S����ռ���=���=T��<��ܽ��>p|�=$�=�W=�P�<l�#�F��;�_����=��,�W\=�8w�]��<�g�u��Ԡ�0�S�ث�=��s=��Q>�n��c.����p⇽=S���ǽ5h��0��=��>Gԙ��Q޽j�����=�x�=�� ��v�>>��<�i�=�]���M��7'J>u���,��� �� �1;b#D<K%)=U����Wʊ�� �=����`��Q✽��>ݬ�=�<3��3)>�&1���<!RT�4�`|C=uE ����=W*��u֏�Gk�=��>i
�=�6��F�>�1 ��N�2�&=��<췽/wa=0ΰ���7=��O<�H���+>)'�(zY�m}#=�ė=��/���=Y��<��q�=��=�=<����U�����F>��O2)�i�彴�=-�;=�e<�>5� >">���=o� >�Y-=�>�o{=���=vy>���=��O=U���~��pL<�����]�=�ꏽo �=�>����Zş�W����m��P�F���(=GN�<�P"�^�н0J�=����@*=�P>��� �+�^��=ÁB�C�*<|a�=/v��TX��1w车6�=��=+�G>�3½� t�{�J=�ؽJ9t=ny�=0�9<��=� =d��2=hX�=\��=f->�A(=��<ft~=��@>��=�/0���h$i<��j�����(�(����@'��"B��r��>Á����=��U�������==㽺�0��Ka=*�>ͣ�=�����S>�:E=� ���e�=J>���%����<�d=)��=�t <� >�p��/��Vk=�v� ��= ����J���,>�__��ou=�2�<������u>�P�� ��= ����"��j��=�=Ü�=Pu0��3�=ؒd=1=;�����L��{�=��">k�=��>Rb+����;=�>�׫=4�"=�bI�֞�=�&�����^�;Wá�Eg>g�;a.�<�c�����:B�t=(s�<����۾�>i��<L�G�F�$��^�=(z��d�=a07=�B��2����л(�(>�m����<Y��=��6�%��==�6 >)������=��9�s�(������tq>`\�=�(��=��~��V�o��K�<o�=~���K;�\]>�&Ľ����ּ=�JW=ͦ=��'�� �Q� >�����������|��| ��5�� CE=����/��3�<��%>�Ԛ=�b�<�q�<����eǽ���<���c�*���'>PYO<�;��-��<:�=rY��b��=�
�z#�=�zL���:��$=��̽��{��/G>��=e(0=�C��:��%�b=�U�=bQC>GI ��@J��N=ꣾ��3��\?>9�]>0��> ��<^��=�!��p<�p ��aB�ڷ>�oK�\c^>7�=L� ;l䧽2�B��z��/�'=m9��x% �A��k�*�k�����>ȇ�=f�7>�=�>�=�=�l����߽=�ǵ<���=(]��x_y=�p�=���= <*�������r'=�4>�<�<�kQ��ἂ��9Z^�<��=G�4=���=�u ����Z��EM��f����<�<�o�S;��
=�������<
�ʽ��ټb����\���6<�:>��R=ʓ��B�>��s=���: �!��pk=�>i���n�f>�IL>���=�Np=�0��Ͻ�=�pa�c�{�"Yʽ����O=�u�P���>m�`�c��=�t#�i�)�8��=�=�>�3<겂<i"5>T�=ƒ�� �<b�E>��<7��Z�y=��=M?=
�>��=b�S>�4>E>zƊ��T���A�=����?�Ko>�$�;+D=>��н��w<%��9��/��,<���7� =���<h�n>�j����[�4���!� �~�����=v��=�����KN=9�<έ�<i���n�u�[=:�M=i?=�á�>^���8�!/ =��>�ϵ�4���
�|=��m>G�>�mp>�y�<�ª����=�~����l=I?�=����� �¯���}&��+ � �V>x��=x��;�n'�v���}5�k��;��{<�=�f@=���=6��=K��=�A=� A�ϗ�;HM>�b*>sg+�.�"���0����d\1�+�=���=�]����^��c
>�4�vS��:��u
=�����޼�1=���=Uz!�,�=d�{��1�<-�
=��N��Ӹ=�}a=^�=���<����,�a>]�b��� �=+�=��鼶�����S��d�=�s>�t�=7d>nx1������*>i5�%�<
>9;��<�x!���S��E��{�y�����=�@:= '��Y_=%���$��!=�%�<E܀=~���^��kl ���#>�M��8�/$<>m���I�=�n<�n3>3@�<�� =������.<>�Ӌ>6T�;Wbߺ.f >�LD>�o��hڀ=_B�� Z�<�=�=�� <��������Sz���=_�#��s��c���Y�=E����b�޻ŋ������l8�����}hA=Y�½X< �>����=s=j6>C�f�mb���"2>e(���'���v�3�< I>��"<6m>&m����_�U>i�����<��<��{�wp�="�����/>jR9=��
�M�d=�C�;��ýr ���=]���Y7���1�������]�Wཬ�E= �W�z�0�� *=*4�;Dt><
�=I���F>Gx=r��=���8�=�U�=���o�{��ii�a=4����H���=5�� T�=�>f�˽!H����=�#��� ���%��ا�!>[�s�� j���Ѽ����m� �������c�-�I6O=��== �����=��=�h*>�2X�1��=| ��*�G>�y�=�v�=�6��N =�V�=�; >�s>O�=lj;���=�
�=��=�����=�;vI=���<ک⼞�����=�V3���J>
�=�&�=�t�:��:�XȾ<����#>����t2���ٗ<Ǝ%>����=���j�>A�p�o��<�g=i����Y�==���># [��. =���.���r�=��=[-%=l�<6=f>4<���,>�#<{@0=3�-=���;X�)��&>��=)�j=����ط�>���=�7>�'��A�=�(=�;(���A>��H=��>~�\>��=1:=�q[=�G���%�=���� �<l�u���Ƚb�ȼ�T=˅o=�:��8�=G��>/���Lm�=I��=���<h�g���[����=���=��=b$�="+j��y(>`��=���=��J� ��=9����1�����3���S��=�����>R�G�k�:��=��ߑ�,���Xc>/4>�7���X<O��<���K�=WJ ��-<�������S;��wӖ==[�>4j;>�Nw=�>\�<�9��6��=f�%�=R �=��7;$)��%�ͽ���X7ڽ��5=�W=���}�������둽 �>�6�Bg��=
t;�~�<"#=z��=Q.޽����?=��L=~��;�':���3�ȇ��s0�b=��8�.�<��2�
i<>�⋽��D=�h�<*���'>|7U����;x�=؁�B����F=�e8���J=��=J�ļ4$��J�ĵ�=Q��<�C�&�=���6�o=~�y=�H��U�6<�7 >m���*:�t+��Z!���R��� >)`3=�ĽC���4�=��==�>j��@�=Ay���*�:
��<��5� ��=��=�|b�ש�=��A>H�=�<�;Bx<4|=Kp���+8Tlx=J���}u9�]T�l�J>�=��*>;5���#��ד=f�=�p��1>� ==��J����:�z<�~��4 >jH�=�T>���<�U����v��}ۼNdѽ>��>l =D{>NCJ��&c��V���49>�6>�!�;qd�v����(��=C�&����=F���|=�$e>׳e=��`=�����J�<4���.�>�-��s�J�D>�M�= V�=XO��� <��>\�S�o�w��Wȼ�U(>��޽�$D����B�>Έd=zƂ�[� �ݽ����� �=�L�=��x*=dzϼ�2�=�d��8�V=q��<x&5�w�?�=<�=^=ַ��m����V��<�>J=��p��+F=������a=m4"� ���C<�=�N=`�����KH=@��D���R�=Pf>ǭ>�x4>�/� a�=*$�=���q��U�;ɘ�P|;@���� ����=���<;킽��D=�G=��A=���=�'��P�;��=(�>������=&r�o>��>m����<����$�= �*�׬t=�sf=%t�:W�@�*�=Z�=x��<&5=:r/>-V���=�^*��o���C ���W;�e�� WL>E�u<=�#>˪��M<ۼ=�%�=em��:�������f���=�,=���=d^)��� ��sq>qW=��X�o�]=G�F�z�D�0>�#�(4���*U�`>���=V������=LD=�wԽ�2���H=�!_2=�V�=Ӡ�<��I���<�K�D�l���">%�?<�{���׽����������e�Z=��h��\�3�2>\ J��">jf���<$>L.ڽ�-y<"RT=�Ƕ��9'<d>d%>·=���=�>����
Q�=F>�%>Ic����<�{W>�_����u� �y=f!0=����X#=�A��+�<������<;�4��G�������{�r� >{�,=�+�=[��=���Uk1=�m"����<u(��z`��T��k�1>cR��F�ǽ���<+p>�Ô��)�~��5�A<�D�=R�=�(���5��~�< ��wɞ=� M=���&ש���X>@��=��?��)>�=�_z=����=>fm �����`�X>�`���t��^���>�f��̧=1�8�%�8=axR=��/>���=]����/���a�<3�P>�,=��
��5�O0k��#�= ���aq伝- �<��=�����FC<�Yc�� ��T>8��<-�>��=�P���=�)C�o�>�᷽-"5>�;�=X�= 8�=EJ>�d��_m�<ni�:���C��k,=�o����,���J=�d0��;>�.�c��\ ��� >�B�� �����<�9A�L�D=�7�=�� =;W�< ����(�è/=���D <��<Q=�={xu�S�I=,V��?��p�=�C۽\�>��5�����9>���<x�)��KC>��=ڈ=t�����<��޽߶�T�=0�ֻ��2�J��=���=���=�E%��?6���S<4 ����;>[�ʼ�l��̐{=�f>h��P�<;��>o��������
<�����ځ� ��=7G�=���<��v=f�I=��� � >%�O>2Tq��t>��=.�A=��=�֙<:f*=��A>�_]=07�=�㮉=Hލ���4��ˈ=z��= �ʽ��{���m=�}Z=#��61-=�@�;�1A=I�J=�a���J>� ��j>�
����<J�=x��q��|㻹�p>�}$�Ω`=�@Q><z�=���<p!�Uk=�jY���B�4`=T�ӽ��>k��<��=��;>D�:��t=Y>��=`7�C�˽=��=f��<���KFܻ�=�=�m���#�>ހ�<r4>!e=�>{=5�?��)ټ�����"� ����N<v�>��?>.>=�༸� >m����
�<��Y�R=��^=�e@=�?�l���ɶ�<z ���=��p��b��<mz�=[ ���ɶ�+DQ>�d�KL��*ׇ=�Z>�� �8�>%��=��n=ڦ�;�-v��w=�>է]�/�-=xݡ�T9�.d�<(=6�B����<��'>o�u�t�?=ߪo�r�:�����e��.>W.=�;>��I<�zؽV��ux;C8.�":(=n��=b��<m~��(����<g�=��w�䠭=��>L�k=܈>��;���)�(/c��Ň=���<�>�v�=�[�=1�>a��}ҼPʁ:xg=� �=j>�����<0�-=r1>��1<��n;� �=��G=5y���E��\�D��<���=�M��5H�~v8>�4>��=���=Sm�Ҳ2��s=�;��"҂�$;>��)t����A=�
��o6�Z]�u�&��1]�s�"�k�=s׸<�m-�Fbڼ��B=��Q<+<b��DŽ=�½*o��/��>=��z>��}<,��=u��=v�k� ���‾�n۽󦼒���,�=
�!>�>s\�=@в��il��;�=@�\�N@�����)ݽ��� �-=���=^��=l=-U;���<����) =��4�Y&��3;� �=�z�=�S���$-=a��=/�-��Ͱ�gf��^��=q*�%o]�x>�p�=|>��~� }=�D!<�Ix�l$j����=���<�Q[=�]�=D����O%����>�V=��H>W�ɼ��ȽL�v=����������+4�=���=�~�>i�6>�^L�Of>r:/<��F>�h��������>�G����<۲=b=(�=�.�f�m���<>��.=�ߠ�s� ��`=4[�;Ҍ%�𦏼Hu:0m
>��\;Yx���ļj��ɓ�=�� �`��;�Y���*=�����l�X��<NUN=���= '/=G��=��,>(����8=��Q��F�<�:>",���=���<L�&��H=DX"�l�=�%�=n�=&�������<��=Lm�<Ʉ>v�v>Q��� ��o���6�su��ǻ�~�\���ɽ��D<�н=W��4爻O)���p=J�l>���=�c�;�H�;TN�m�ֽ2�;�ј�>,��=/ �=CA=��= 
=M������&=����*U���<���ϻ�s�=�y�<�E�;h%�=�M��ZA>q��=jU�o���oM�=��������`��<g&>(�=M���"<'V�=�Д=��=�<�=�:�<β�iP�=/)�=h��|<����u[>Uț=xB'=��]=x>L,>�,�=Y�1=�ވ�3,��d��=��<� ջrɯ=�Zۼ������I=��g=ć�=y�=5&�=t��=���=zd�<���J�˽L�>]$`=i��=���<�h����.�=������P�Ɔ�=�<���=)_>},��L+�=��Ἒ}�=���[b�;��׼�ds�"����=�n��&�=��:=58�=1s���#>�v��~���q��=ǒ�<x����^=��=�w>R�޽g�X��2�;o.�7��˕>%Te=1*:�Q���\�Y=e�=jH%�S�i=�Ҩ�ۗս������XG=�D�qV;=�p��E9ڽ��}�?<���=�V�=L�=���=�A���򇽈*��Ş���޼=�LE�/�����i�7���/=����|=�գ< ����<�ؼ(���v�=�?>@���V�-�<���<�8�=�Q �o(���)>�H�=�������=L
�<��=Ϫ�����=7
s������<#K� ?�=Hc�~�>��g�`�=�hV>�y]��x7>#����j��.>W��>�[�����<��<H��=K�q>�C�!M
�*�
>D;\��I����<}�>@�->�<��9���A�=��7=A��Ȟֽ(�=V��ՙ,<�M$>G�o����=��]<��|=79�=�����܋��"9=rM=� �=܀��vNe>���Γ$��]��h1> �U��y\>���>e���[�̽&Y�܀��&�>aP�= d/=wv�=��>R�̽\Z5����=\�T>Y��=����#>S� �܋\>?*���,��>Q�q��,= �h=Pջo��-�@=M��=Wݩ9�n0�"¡=�k>�vs�s)����=v��>��:�;F>>�A>g#>�>.鱽��X�[і�����' ��m��&.`=C�ҽ���;�
м�%��l�ὐh��kI=H?=6�$��f=r�4�G���(=����5���ﵽ�H���=��>�!�<�ۮ�ahq=Yvҽ��< �Q�D�<ʊ<��2k��s�=& L�r�;���=d�=s�R<���=M�1>��꽻�D��� H>g_�t�;��>4�=�e>H_�<��:=����=�1S�Ӻ5���c���z>NU7>�7/>+� >�P���>�����%=q��<f�2����.��<oR��*Oݺϵ�m���P�>=��=GN�<h߂������~�Z�C�61��C9=��/�1C��z�=�T�;_{�Ц��
�-�S.0�\S4�x5����H>l���*���mP>��=o�;!�=��_=ޛ�<��ӽ�W>܂ѽ���s�:���R՝�.�����ҽЩ=�����P*� ��==�3>��l>@=�d>)˨�D�=-Յ��� =�>"�C�r��Z�=��q=P/�<3=���x><��=��=/�=�F_>"�<@�=�L=4�>T�̽��='��=~PA= Y���q�=V��<��L<Ƿ�=lD:=�Tn>���=��>� ����S����=GGZ=^o�=��=.�=�� ���ƺ)'�2`=>�ѽ'S'>�>ٽ��4> #C�����f_@��u�<�]> Gc�� $;q �=��F�53m�-�/<, �<����h6>4y���ys=�v�={͝=JU>3T���b=dQ�=��<���=kC��;.8���3=جN�H�=���|��=��A�4ރ��Ho<��i>zϺ�;���=�r=4�<\��r�\���=ݾ�=��=�l�?
�<�ͯ��_=Tf�=� F���=3�w�?Ρ���>�bd>��u<E�=T�����DŽC<���/ =�s�=�ǩ�7��� �����=EQg=��K�C��ie=���z!>���>�����M+���=��<�2Q��F>~{�=6����֔�cOm=��S�v��=:ỵm �k�<�5��&�<��=�Q,�N
49>�֑̽�=4m�����E g����=� �=���=�ݰ<i�R>�Ľ=�g���q� 9%���;{�=��>l�D=���=ҝ��'��!��QɈ�*��k���h*�ɏ���s���1;���=��;�=է��D!���M,�ͅQ���a>�][=%�<K�>S^�<t��=Ϥ+����ɹ?<��->QE>��e��1F��+�<��>��ѽ����/�;I�-� =ȩ,>;[�������N�=`�=��/R����eP�=����k�>#sI�󰼸4��R=�z��R���f ���=�W�<5����̼][������m�ý8$�=�#��㾩�����a/>���<���Q�����<X
>���=��=�% <�v�}!�=�N�=8��;�q�d���t�; s��O� =5z½�gƻ᧼������p�M�>��>�g+��ѯ�|ʞ=1?@�z5_��>>�� > � =u>��[=m
�=���:���"��=���� 4�</�I>)�=��v=�ڴ=D��Z =�>�=�a>l9�=0��=�*�=کs>(E���<-��='=q�[=���>�2M>��=L�=2���N��=o�>;���{<n½g�5>�}��bo=����µ�fz3>,�=H���� �����=\�������u�=��]>}��<=�;=�1�>���<os����b=;�n=E#< :����C=�=� ��St>��=޸�����=4�E��*1>���=����R��ƽ$���6O��P`�=�/�6L>�1M������<2�D=���u
� �;<��<�.�=`d*��½y�<\���6@�+(���w�7��e���l��J3>B�x�ģ����^�Km�=&��=��,>}K�����=�
�=�!=T�m�
�<��<uҬ=��
���D�o��W��>�C>D@�=�<&>�=5�Q�4>ռ�a�4��=L�>����8n={ѣ=���=���=���=� �=p+>4�>=譛���ż�u��';׭<�6>==�'E;���<���=�c�=�Yh�;> ��C�<7>�=n�0> �2��$�=�eF>oш=��>�`<�.���"$���'>M�l=��b����<�]>��P=(��=�{��s���x���ɶ���/=P��<4� >���=v�<>��;G��=;�9=�)л��'�-@���+>�� �t[&�d�L>����ԩ�����h��i��9�=q����)?�sN(>�ĵ���=t�g��B�����֔�=@����=�*�x�<Ii�޻<�Z�ٽ+��=^:���b�=-׫=��>奜�?b�=��q=��=?,ŽL�:>'�'>5�_=�`�=��0����=�GK=�S#>����i���B�l�>������=3<�j,+=�c�<i����V��n�<�P�>�=���ҋ=e=`���9�����<�w1�I���������a<�F==ϔ��N��=����۝<u��=-�*<J*�;
�����=��J����ũ/�9S-=��=�нG>�z�����=6�����m= �m=��A<B=K��<��b�L]���ǽ$��,�C���S���� =�M<Y�I>ٓ�(�=���k����\<ѧ�=������{>��L>{\�=��H=�OȽ��=DiW=�)!���������d��=.��Q�ڴ��ы:��=�I��� ���r�Y`�<��>��=I=qqA=�����ph=�>}�J>G.=����$w2=�*�=L�B��ޮ=�%�����s�1���
>M�H=�;<���=��K� *>�T�<g���?��B� >�G����߽��w?.>��9<I��_Z�0M<$�j�N�>��z>�u�=��ʽ��=�\�=�ˇ=�t��wB�<��������=�0��`>>z@=�4"�:P����׼��#���=�r׼��=�5 = �N>�.�=L�½{��$�����*���3k�=c�=� =r������H>nV<w�������"���������<}F���T��i��Qߡ�x��=�e�� �=GUý�PἋ>=\��<�;>���������?����=����iA^>��
�r�/���U����=�ս���=��Z>u0 � n �\�O��C0�=S?>��=��p=�`һ[�P����:Q(�d�Ƚ2nz=^=П=�!�<��N=<���<n�,��fG�I�9��c�<�t�f����>6�=9U��#@�� j=6=�����=Sm�=S��`�<Dɵ�嘭=`]
>�o>�h��ߘ7=��ս�l<<塓<۵�=-��<4�=>������=���= h2��x�=[��=>d��
@�=,�Ƽ8�'{ ����=��C=G��=���؛=��&��">���]��=8=�XD�=�I޼ ���j��.c>������l4�@��nu���Q<�?-��ɬ��H��<L�Ի�½3�>a���/�꼁��Vt��w(x�Y+g��K�= 2>�Q=��ĺ<�=qĐ��G�Tg�=vm��X���|2�����=Q�ͻ��_���=*N =U<c��< �=�Ȫ���>`ю<4��!`;Je��^ >���=򨻽W0V����=�D1>��e�\h>���;�A�=��=T>~�N�-���=��o�->a���(4����+=��=�]����&����s0��j�
U�<�&��Y���P=.M�=jk��B�B�1B�Y};=e�>�˳;=f�=���<�X��Λ>�R?>&a>��뽳�;�4��>��2�Zِ=rҽ&냽�a�Rj�V�ý�R>��½�} >��n<]��<�tn;���=MBڽHX�<�=���:����=�>���<d�8>�|�=;���`�:���=y�ӻ�d5�E�������p$>�FѼ��j<�\4�!
�sw���R���&=��g��Խ��i��!�֏�=��#�0�= ���� ѻy�=�9O>�{C��]Ļ*�=MlF���o�&#>cs���v�>�k@>�ˈ��"��^��=���p^�u���G;`>8����3=�t^=�X�=�j�l���mkh>�x���v�.�B=�2> o3>R�ֽ�>u솽krҽ�e= ��;X�v<�u�%�m���L>ԅn>��>�_A��$½�W-��.d>��X� �=R =6T���z=���=@2>s�j=M�<i*f=P��=�.�� �E� �����=9>'#]�O�=�l���
>���<�� >���=ʌ���y>*g�7��;��x=�׽PR�=8u�<���=�lK�j^&�X�q�tTr��f�=!���j�����=�RU�z?�=��<�O߽j�>�㽼�]�<#qѽ�+<�"%�����?�/��7[<�9�;o��om�=�,����>f>��i�u�;1w>��>�1�;����q>a+>�Q��]ټ�Ì�?�3��о=)�۽�Π=�=I ��Z�<��KZ��ML>��;��qf=g�O�=\
O��G=�E�<���<��@�;w�&��=�43>*��=
�:O l=��=��">z�ټ�� ���=��w=�!�Ic���� ���*A= ��=�,��E�;���=ҿ�=���e����L��z����ͼo;�O<=@)���+��^��=�}9=�y�= ]M=�>�<�����!>�}�>j�=� �<���m��`򊽫�>�5>�z=��$�J��=gZR>!A'�݉>������D>¾�;���<�O�=�]��@a>��x����r��׼�=n���ܼ = ���{$>����^6>}�� �����;���;P����,�� ͌<"�O�J��=�#�%�='�P�Y�<��=��1>�l�*�>̲C=r���<wf:>g'�<�ܿ=��d>�G[�,���i�e= �=8��<D�o=7��<�bf>��<T��<LA~���=K,ӽh�>��׽T��=`�x���&��k���0�=��T=���;%ᔽ�����=��:D�=��ٽ����'Q��ʽ����?��=��`4˽>0���_=-1����t�$ڋ���=�}g=���E$��\�Y=�,��"3���S����=��=3��LE�=ԛ��+��=�/�=y��=dw'�����ׂ<���������!��98="�����y�)�ý>/�=y�1>�'f=���"a��=j<. 7>��>"�2=����9��u�
��U���G���+;$0U<�M���?<>
<��<=���:hXu=]$>t's=�󏽮n����;�R�=̌S�e ��:����l�=��`�<'��=����_����~�a���xN=t��=~��{Q���9�}��d� <���>a
�=���>����r�=��Ul�=���= ��<d�4��f>��>���&I��V<��=�,�;4�5>�'��]K>�b �-���SN��:�C�7><F�=A���p�#>��=���ؽb��F�ݻ����.�=J��=�*�<��X>8y<p�g�ϳ�<�
x<j"�=���=��*>(��Ͻ���ݗ�Pbz�q'��%:=��1���6�\Y����&>�8 =[7��8��=o�Ļ5r����=�?�#:�=���<��>���<z��=�>�\���='��=e��=���=��=p,���H7%=�'=l�=���q�>��F�@� ��Aż�*�礵=&��=���<a�A��1=,�>Z�Žj޷�`��=�6�>_�S;=��> %>=f=6�=�p�:C�=WK=���>n��=��N��0>�����oA<�1<��P�/�+>O�)���=<��{;t<�><U�=m C���7�;�y�*>�!�=/�P��N>l����c�=Ƅ=h������V�������Y ��=�;���=���<��=-�=����2=�:=�� ��f��U|=:��;)2\���
����=�u�w����N�;�e#>�!8�%f���#�=�@�<͂ =�H=�3��%�=�`*��I�������=�_s=+��=S���W�f9�=� �=H ü�xl��>5��<u��\�v��ߊ��^��jy��<Hn���ʽ^O��&=<j+�=g�Ὀ���ay���;�=�!��c焼wM-����X觽E�=�3���)�=�� >�<O���=O�����=7�ҽA.�;�J8���W�1��=eؽ����g�=���Qٽ�*-�v`��=��=���=�*�=_�A�):�=�T��w�y�=��A�����[�(W��▥= *��E�𼋸���~׽�>v;�/={���)<�����#=��&� =�����=x�Z]�=�8 ��t �Q�< �=�����߽��ҽ6���aɼưq��m���oZ�7�<��W=��&>�p�<r�[=N�������[���^=ݧp=o��9܅���>?��=M�=<6T��h> ���FK=-�<����Z�ؼ��>D>vR�=�Y�<�G=K��<G����F=�Qb=�ɼ����'�=�V�=Or*����=Y�����=�ȍ=�=��M����=Re��!?��*k�<���;�B�<�+�<92�=_���d#d>�Aݼ^����?Ͻ���;I����={r�=�SƼ��;��=��t>��R�gUڽ�۷;�ͣ=�DZ=��=�T�CJ�=�4�=nX�<��ۼ��B����=c�'�������ýV�ż4Iս=i���<o� ��� �=��+��6>�$��xȑ=�J��K@2���ʻΔ�=iټ۰�=5>��=�m��-=\p���l���W�<��;�V�ڼ��g������ (>3?�=��#��������)Q+>�>�=s�=�䧽­�����Ig=)��=H{�=�]&>��M�7#0�����kI���>;���Ž�k��r��=`�<��4�����+I=���=�)�=H��=㨅=�� ��݋=���;Q >�X=��>+v��)⎽���{�C=`U�=TAս>���}�=���=a�?�W�=����"f��ݰ����=���<"�S=��/;`�P��7��}��������V=^u�=A�-����<������=7��<BԂ����=���:�G��d�/��������FӽK �<0ӽM��P6>�>��&�ط���͟��5�]�>< �
�T�[�rg"��>�+��9� ���>%�:�� e�u{�=�_��D>T� �d�r=��y>#A=�j�<�����Tƽ�63�]-=���=��;%�=>6Do��G�<��0��½�8��i�S��f�<���=��v>Vソ�`��銽�Խ�k��������X��G��k�`�=���=���<!�=���T=�b��f�^=�7��o��=�����&��D>������:����=����`�*��P���=D�=�b��X��<�'����=&*)<��;�ч�æ̽�B�:]�=lȽ='}�=�i�<@�<���]=V�3�_���Ry><w�:@�Žq�z�CF.>���i���D2j��Ϋ<VA��g�= SQ<�\����=)o��c>��9�E�����=G۪=�6��O׽��,����=��޼����l��=h�=����aU<��:�ϻ��>�NR�ڒ^>-��=��ڽG�޽!=<�q�<j�]����=������=c3V=��=3��<�"�=9��;+xż��,��;�����=B��=���=�U(>K�W�4����\&�xU��� �=F��=;���0���<�ߋ<k�0��会��>�Sa�"��=S��<�ݽ�D>`6~�\��h� ���Q��k�5�@=�W�= I ����=�a��1���Pս��9��c>B�;>Q�;�|�='��=�����ݿu��z>Q��=ݮ�<�kz�ܴ�=(�>R�8ý����'�;i1��^��ɕw��F�=t ����2�r
w����� ='(������ݛؽ�[[� /�=� z=�w�=��ݻ1N>�8�/_='{�=�2c==�=���;v�`�(}D�e�ҽ"���$'�=���=�Gd�)�
=�H�R�罚�L�k���2��aP�I<>��ҽ�=��-�<��������M�Z�R��=9�2>)�)=ٻ<y;_<�ۯ�� �>Р��Mx*=��=Ӄ=����&|�=�ݩ=� @>X$>m�5�w�'�N�=�>m�4>\���Ǵ��7��e�<f>�T�=��R=5!>�Y8>*�>E �=lu1>���=�g�=�)�!��:�����2=�=ԋ�=���=��=F�ӽ�, >0�<�sp=y ��ZП�JH�<���=�3�< ��<u��<�P�=v1�#j��(2F�w�=�~���x�6>o=�=[a_=��O�n�>Ԅ�=�&2=ݑY�ѱT��D=q�>�Ǡ<�>��y=�3O=R���`��r>�6�;�R7�'�-�h��;���no>��V������=�[��8ώ���w�� ���[��U�=:7����Ͻ��=Ǔ�= �=�����彳6�����6x� �~<�7�=ճ�=���>s��<S�=q!ν�; �E�='J=��Y>���klR��H���([<j� O6��c���b����H�?�<��s��f�~��=a�����`��.>셊��Ղ=x�� ig��z׽[��=�u =1��=e��<�9(<Քn�B#�G H��G���w=*缽��>��(�]� ��UI�+4�S����4�xo^>���v���搽��n>�r~� �����=˶�=s���aRt�� l �L��;N���֫���7=§�=VΊ� ->���="��=M�"���=1�=Slȼ���;��=�ar;�m=`�9=�ҳ=~A�<�@�<S�����>z8�n��nn�=�P���,�=:�'� ��=r��A2!=��4��¥�!�=y���R!=�F�<n� >��t8(#�;��>��k�=���=��
>��=�<>�i@�t�>��<���=�7�=ΐ<<G��=2ǽ��)�&��=�q�<�K�=����DA >�����Ƚ!+=_6�=$��nq�=�g��޹�������Z=��=5������=�z�)\���Q�=x&>Ҽgի��.ý$�L�nc���J����Ⰷ=3齘�x=γ7�*h��##>)�>�7���p�=l[+>�dh>�=޽�[=�ci�jg�=5 ��+ߪ����<C(*��%������<AV>��7�N>�] ����`�������[=m�H�
$�=�=-�����=N�������Y����a��Dǽ�>��1<7���W����A�\��<� ���>.�\=U�F�c+;�7e'�/�?�J��=l�<��m>a�h<�A������:���������i�)<�\����L� !>>'6�<d}�=�[����_���i��<L����*M<���=�4�=c�=�]��W$������<�y�v�����nE�<q>�p>�4�3Y�=̃3>��콴�=h���hB<�?�`�o>�h*<iO
=�-ֽV=�=�;�<����Kս�Z��:�����<nI >�К=VN��QMD��E��Z=���=/��=w�>� �Es۽"� ��i!�o�w>[�����9s���sU><=�w<E%
>�k�=�$=��:;<h=�I=��>>gaP������W�=[�2<��K>�}=1�=��G��O�=��<=� $��� ��;����WP=��G_>�V>��>d?�<Aƶ=]7>.�S=� ���)��
����y�;V��ׇ���I����=�J(=5Ѽe)�=��==���= l��v�Ľœ�YƓ=�T!�k4F�ʲ�=D��<�ܒ<)����>͊�=�ց>{s���fŽ�妽8�D���1>�a��/;$�~c0� S˼*��m��=Ar�`�⽅m>��=(Mڽ��ʽ�d潭�6>���=�-��pߺ<1 �5�P��X$��?[>��=*œ��F�;_K�� �]>��������˽l5v���<S�=M�(�b���27����=�T��ی����&<�[w=��m>�@��l�<�S��$>���=D�0>9�6�1Y<���G =�T�<���=���B �D�м*ν�=�����=V�M=��=B!���N<ݎI>sܽ��;���<�.�=!�>@�+s������S=�XF>
����B�QL>�m��<����W?��t �}>#�=m�+�/�>�[Q>s�4=����<(�= �J��F��Ma ���=%tv:@I2�n�'>�e6>e �=
���>�<�� =��+��lI;��>4��<@��=zm�=�=�Gϻ\��=AQ�;T? >dq5<�<�<�f>���<4d��s�(=�J����{%���+��
��;� >r�=bo���U��-m��l=g�]�M�>��;>��]<B�w=�tG;���=A��=�|<Z�w<�+ ��t9>~��K�(�`�w=�Ӽi�>���K��2=߃o=B;0>�$ټ|���P�=�"��~�������4����� �N�Z �<o�
����
>�
>�N-�Ҥ�����=�-O=ҫ��
����[���\)=��}=�J8>.>��(=ٟu<x�<dO��r��=[h�<�W<��u�U3=�ԕ=3�4������n���/㽱���ӟ�=��=e?�=��b�R������t=v<�=E�ؽ�CT����='c�w��=��D>��<?(�K2ۼ�d�=�q6>W.ڽ���<E\�={Fڽo�P=
K�=;��S�Ƽ�gF���=�����<�
5Y�:��������=�X >3�S��X�=���<FF�=IJ�=������:��T>T��=K��=� �xP⽆��>W�<|7���”���5>P_&�����s��=�w =�a=q�C>�O�=�v�<vb^>2��=N�����I���,�>�>��i�@K>)A�������>)����v� 4�P�,>d���f�m=��4>�)�=ڬ>_9�1G����=��2��s�<��ӽܙ��q^=���=9�f�(�=�A�=5݀�n茽x��؄׽���<X��=���=$����$;�>��" �=��5<�J ����=�ɽ#�>�{J�jo��� Ͻ�U�<�q��14�=��>���=��\=���=^���:>�C�����=}`1��$�U�h�:F=��u6M�����1�˽����v`�<�]�<���=��V=�^���>VYZ=P���?Gp����;�5�� ���)�7�>�Rg=/�[���(>��>����'f�٫V=">�WM�$Mv=����t�=vq���� ����(ҟ<�=x���,tG=�R�����+��=��<}�<�%:��P�<�8�ۼ� ��=/>{Tb�m����r>K���]��������>�<h����%��:&�=���"���i�=�M���49=%�U>��>�a��T[a��� ���X=����hM=�M����<�>7>pW\=ϻ�=~��ޮ���<�Aս�b�=m�+��ོk�n=��ٻ8�=�;Ƚs�V=���<a09>��8� k��ط��)ֽ�j����˽T���B�<d9�=b�Q=\��;�L����;�C��G�=��V=�$�<?$��D�=c�T<M�>�ݕ<���<xN��# >� �̖�=�Ǚ��>��W�5L=����=���;k-�<�d�<���P7����>���=�轮������&���B��<�('��>1<ٌν
v��H<�qq<W��=����h����v��;7�=k9<B�콎��� �M>�h�����=Т�:.~���_�=�����~��%�=�B_�l(ʼ�A��@�=��O=��(=�=��|>����n�=���-f��d:����=� >��8=�� ��oV�b���>7�=�q����;�>�=&��;Ʒ+�aC(��ج=:y>G <�UN��c�=L��M����@>�U>n����׉�غ'=�᲻ ��_e�a�1�}��=b-�=����p���)ʹ��=*.��v����-=�g��� �=3ڼ暽Yk=P;���½V�;>\�=����<� � L��Z6�����\z� �i;13<訆�.�9 �=����ւ>=Q =
b>�-9=��=�(�.n>��9�1�3�&���=#f/>�_��L�O<��=!��= 락s���#V=��]; A�=E��=�[=����7����Ž�� >��!�쬼�!>�>�=Lԧ=����$y�r�{=X7�=K�=�,#>��>t.p<�Y�\���>m��H3�=�+^�2�뽡瀽��P>:��=�3��I=851>k-�$+�����=�`=m�x=�L���\<�@�=�=��7�!�=�!���\�=E��<��>���l=��> i��CC����ټyF�X����D)��C,�;������=��ս�l>\��=���=)'=7`=�z�<�>�}�=T��VM��
D��� Ǽ}�H���;S�7��є=s,�=Fh5>�`j�$Y�DM����=��7>ЈZ��F+��}Q���<��=Q ǽ��X��j���C��W�=Y������'>� >�(�=���=��=�bB=-�Ľ���=?i ;���^5�<�5��:5�0���T@>�lS=���=�2{>��i�Uѽ�Zֽ%xi�g<���D��N ���!�
�ػ]3���>ഩ=X�+����=�4=]�=��o=h��b�E=CQ<V^���q���`�=y��=�3�B��=yI��Yp���B=c�=duٽx ,< 舼.؄=��,�f.�F�ؽ}��;3^�KP>��
==�\=^=�>�=`f�x���ɒ��vŽ�Q>Kb�=BA~<r��<�?�У � i�� ���1�<u�!>a͋�<8>����FR=񩬽���=cB�����=���=��=���|�=��N>�m�=omJ��F>�������=��=�t�=����yE<��u>�, >���^�N=�=�;�=�*�=D�'=BE����\=� >$G1>(6�d��=Zt]<6�U�lQ,=��I=o�?>�6��X�:��>>��>h? =�j���.
>�ѽC�����<|[<�D=> ���6=��=GY;��U>�
����=���7� ��!���W�=��Z>�B�=��p����Xf=�,8=��>e�K=�|����N<�f�=�伿�j�> �=�ὈZ˽Z�d>K���%�׽��>9x<��= w=$�<o � >
X�=�U潛'����1��V�5�r�v.��9B]=E>�=�N=���3=o�=ښ���!�A3>���: I���Q�R~>wR.<�{�<`YV="Q�<\X&>�A���ý�ʽ�/>H��A��<8JV;�'��Լ�y�����=��=i�<������:���)�ڼN���x�<�D὎����(R=��]��[�v��<(�����=<��U���}>�5F<ط�=]�w�O�G�T:#�,�H<F#!>�R�=ʶ�=]r��_c>�">8�ν9�~���>i��=�p�0L ����=�.$=\8Ҽ%9H�cL���w��|�<8QA��\�m�W��0��c���1<[���-\p=g�S<��==Ͱ9=&V��Dx=�e*�>�`����"��1;>��ٽb��=d��=��=�g>҂���-�=ݿa���O>�� � 7c=DG���0=\��?Ľ[��i{=
�>�v��e=עF=�򭽸‚<� >�C�=��������j��<`ew���w<C�Y>\��=bj=��=�
���={ü2�+�u�=md�w4�C�>z��<�)=���<���= Ѽx>� ����>������[f�=^�>W6>�W=t�)���<�]ƽg[G�'q%�ZF��8�T���O<�6��K=��u=��U�e*�<��H��.=Up��h��=�p��VL���S�5fɼu�n�$]j>A|�=9��=y���S>�
> �%�YVY�:�o>U]
�U�1>�H¼����%os=h��M8= ����ك�^풽�c軓v,�B��!�0=���=���Aғ��'2�6��|�/>�w�=�}:�7���m��=&�Ny߽��+>HP�;�⩽<<�)����=����Ԙ�<$�>������<�N}�0�=bι=p@��5�=8�z���w<p+�����=�^h<��%�K7����$=��(:�׊�N�r<{Y���J���9,��� �������8�=�:��7���Q>� �=�.��n_���9=Q^>���R�=�~�<���=�3�=gc_��"e=�p��Ƣ=�m�=�>;e��@�x�"dؽ�]�<� ż�[t�����e�������H�<+�R�l; ��=g�<�J
��7I�����M >r�R�A�a���'�f��=�
�D @=s~�;�K�=���=M$<���=n7��?J�kX�=�\g����FF�=��2�<E#<�l�=Gs>�/�>��r���o<��=�H�%xA��Z�>�0=x�>�����>�=ع4=�ν_6�=���:���< �>��=ƃ$>X޼�{w9�4���>K��=�㔼Kt%>�g�<m�=�$�����>iCݽ�^���T�1��c�\= �'�F�z=X��f�v>bo��3��:����=T�@>}Yl<� �����Տ���6S=.Bڽ��bĽϞc��kA=R��;V����->A~m�O�>� ̽T'L>�[-����=����T��=�u�;ڧ�=!�����=�A^����>��^=�ǟ:���9B������.�L��d6>�D<�qG�=m��=-�=�{���8�{コ���.�*���׽���d�m��9<򧐻B]��<m��Og�;�A7>�G��k�1�2=1���m�C�⽣H7>�z�=��`<��D�nط��N�=kWK=^�p�BgS�;��=@L����=��I��I`�� }=��w=۫�=�]���r�= 'i<�5��C����%=zG�=�z���f�<�&�<��=(�<���=��=��׽�!�= ��=� /�@��< >��<Г��KU>�L�=hJ�ޢ���JD>Z��=��P=f���� �aC���Ww=�%��u��=
Q�=�cK=|����Y=�'�!��r������'=��K�:�����<1v�=����&O=����Ɏn="8>V�Խ�.<��6>�>��=b���^�+=����WU���싽Ǎ�<��= ����S��B��=X���Ke<���=LǪ�k�L=}F�=ţ��*�=�6��3k�=� �:$I_���q�������=�k�== ��p�޼ӽ�=1�=�V�y9=�;>�[�=J|��׬<I.o�󄧽�
1��4 �j|�=��&=���<w�s=)��1&u=�s��.�=��;<���������5'��h�=��%>ڑ�=���=�������u��p�~;�׆�=Y<`=BL=#K�='��<�1ͽ�´V�L<W��=�`6>�=��=�J(��$>��<OR�=�Ӆ��MI>Q�='>4=�>f��=��y����=�0g�ңƼ�K�څ ��`ǽ@p�=�`�>2 ^=������>���=8� ��5�ζJ�P3v��m�b��=���cx=�|�z�=���l�A>}l��
��!|��/�>� �=��ɽ�>=v>�s�=��<Wa<��<�� >Q�X���,��>�=��>=�s�$ї�!�N�ߊ;��3�:<�=J�2>-#��$
H��E�LՐ<���f]��g�=3�@��6"<����,��ϡ=ݏ�:_���_ ļ�J_<�!��Y��>��Ž��/<����o�x���<��U=0߽���=�n�=X"���!���J=�;>3��=u�u�4��=�F�=��>�mj>1B�<�خ=�O<�^�<A�<�%�����=� ;/W=�� � _�[z>GgA�x٧=wa�.w>��B>$ѽ����K
�=�o>F>�N=+�=^zP���x>�u����=&HI��9��.=[��<���=X;5�;
<6����̜�>��<#��� �/F��*=��-=� �7�i�^=�z�8�)��R=Q��'�ս}@�b�<�����'=��< R>6��=�c���\������T��2������u��h3=�P�Y�p��;C��}�=Gɀ�#�<,G�=�Y=!�޽�t >�$˼�`
>grؽښf��-Ӽ}μ*0>�I<<>j>:�(��Y׼�=� ���<`���<�=6]V��<��"�/�����4ꊽ�|�<`�����=D�Y=W�I> <�=���=\���VQ<���=.�=s��;֣>��ҽ�#:�X��p]�<�K��Da�<m �,��C> >�`�;Y�ؽF>�=L� �t�s��<K�k�=�&�uQ�=q�
��T>�V�=��x<��Ͻ�6<Z�8�!U�<����8��[���b���V�8!��ǰ�=0y��R >� >6X1>G�<\?=��<Y���$�@>�^�<�5ͽT$�;�<��Rh=�<�=zi��J�=��="��=!�U� �>�=�&!�}���� >i�A��#���3����݅>+3�;_u���<�#��z��=SN���Gz��Aw=��1�u��=��)<JӠ=�i��f�!>iLj>��S=��F=�'���v�=Ǿ/=��I:��=PS/�| $=�p<��z=m��=f���GTF>���=_�e>�Y3�:�׽�wV�A�8=m�[�&�=P��=�==vޫ=`��=��Z����=d(޼�%9��+��v]<�ǽv̽����G=��>Ξ!�S M�Y���kl�<$�*�j�w�>��!��e+���>e��=���*pq<3񺼍������x j��]+>7�q=�ʼ^Խ��h>8tU=!M�yZ
>�9>ReU>u�+>2������=q\/�4,�<ćν>��<砽6i���Q!��<.+e>��>�>���<��
��'W=B�Ȼ�|�<�K����<���=����D.�H�J�ۀ��s�����;��>|�ýW��=���h�8>2l��������<R;��ٽiYI>q�I<��,<Ӑ=MO��0� =������EN&>�O >B�H��\c����cٽ v�=$�='G�;��=E��=1�=m�N<���= ��Ф�=�Fh�B��=�����%ν1����r��N<>�H��7�u��)�7׽N�>����=<z >4��:1DA��D�<Xݫ=�|=A��9�j�=>9ʮ�2~��k8�A����;���� ��5=v�}<�X>R1=�����<!=s�t=�O�=�a�<�N�S�>��-=����;��=C�=����3UU=��B>S��N�=��ĥ�=��=(�<��>d]M�aQ�>^��=�J�=�e�>9��=ZT=� B��٩=0��=��5��*�����=;�<��;�=�;@��E���"�$���<^��=9誼�)� �5=�j!�؄z�b�׼��Ҽ? �=� >�?�l������=k�>�4=�#¼=���!�=/{�=�N��&�">j�:>*�I=ό>��Ƽ˂=�m�<�܇�˼
> gм�m�=��<�l׽�%=�>�e$>GD�=aܒ���v�-�4=^Vd��b����Ľ���<?�O=5>��+>za=">�<
�=��<�0$�Ҩ ���[=�F1<��>TS�S*û��j���ht���R=vIR�}S��'��\�a=~]�=BG�<h����+>�r ����=�0
�J���.>�DZ=N�_>��/��<Ӽ��<Ok+�pg�=n*������^�<��t�V<�νTl=�즽W��<�?�L��뽰���<6���X��\R�=��= �a�-�=�=� >���!�7����=�=6) ;�u>���<���=6�=��<�߽�q���창z�"={z����L>����ET�<1d�<&��=�� ��T��3���=��
�`���1�#���4�=X8|=`0�=����T���n��y �$�<�b��.���Y�=�a��{.*�$��:����nY��&h=̓�=����p8�<�v��&T�=o��; /����?=W�+��֦�"��<���=�8R=/7�=���=�&�+�_��d%�Y4��E�����>�/��P�8� �is3��U��n��(�\=���=����k�,>QN�=��n8\
>��<(:W=�v�=�����c������7��*>��a��
K=�m����=+��:�����;.�<���5=B��=C=��x�<����d{� �>�?�=��E;P��<y�q=fb���z<�&=�@0<}&�=�AV���D� ���S�;�u$=�;�<-����`g=5Ǽ��>"= T >}~*��o+=��e=�'<�LT�|�-<z�>��!=ֲN�~��=�1�)��=�J|���ӽ�R��˻+�ʽ��� ;����=���ӽ��;�I<+�L>�F%<�0���
��CS��E���J޽ �=����G?�5 '�cY�=��[�A٪=��鼄��<W=�u��5r=��> b6��3Y;�n��� <����,ҽ�玽$�;,��<�!;��3>B᜼h�!<1j�=��`��}��YL��k)���)�E��=�#�YMz;/^���L�bR���h=���<�����B!�y�� ��=���Ē������;��E�iE�=*+C>�<;d���Ӓ=7���&c��`>ծ�� �2>��<���=��=�¼���=�x���*�����T ���� �P��<~,&�.���2.������m�J;�K�|�@�[t�;4��W�;����}�=\��=����T��=E��=��=���=Bbv=�9v<Le���=q�8��-�=��I<-���!K>��h���t=Iò�Ȍ=�̸��"<��`�=v�l=.�g�̳=J��;0�;� Y>��>�q�=��O��2���M���r��m�<zH=}S;�;����u=V�<�C =~M���a��H�� S�=�c��$x��!6^�u��/R��e�}=T��MJq��8�=\o��� ���E�ܗ<p[�=���=�(�<@�M=jK��{�r�m����o=��=^�Ƚ^�*��/����ܽ]]= �>��H�<����
I)>�c�=������軍�:����2��� [=V�<��@���S����=:��=���=� <�=7��X-�=되����bI�</��;]��/�=�iϼ}Hl=�n&���˽��=O�ĽЫ��„%��HI>�M�=��0;._>:����<��j=��>��_������I�Id�;���6�エ8$=ؓ:���;;�=f��"v=M} �S�i��>߬s=j �<��Q�ØV>��=� ���5[=��=5q=�f>�u�ѽ|�O=���� >��� V�=Y�V=4��;*|g=J>��m=���r'�=��E�e���C����eZ�� ������=��s�==о�=��m;P\5��z�=�|����^=Y/�=�Pd=q�=�K <�U>�����<�O��Ȣ�=�uc�#�μGC0�����:L�<I`">�`B���]>��4>@�ʽ7Tؼ>+]� ��/�̼��޽ݢQ=-��=�@�=���=’D=4���� =�����H�<�ϝ= �>��]=�^`��T�<�ԽU�=2yҽ-�&<���<��>����(�0>J��41����潿����è=C�$=ԮG��a�=�w>n��=� ս7&<1��=�\�=:� >nI`>�!���<1v>3+=�y�=@ᘽ��= 2>}=>�d��H�=v_�=�m��>���l��ULl���b�Ȼ������:�=���=��=��׽O��=�LJ�0=6=]ֽ�5<=xe��FG=��ϻ��འ��;|�Z���r�ء����ܻ�2;�d�<Lk9�٦.>�К�Ȱ��/�=�6>'�}=��J����=?�k�:�E=f��=��#=qнά= V���(�= �~�M������=��(��|]=��|=]���Ϛ��~^>8�m��n���V=)��<�QO�F�<B�#�O��=θt=3@��N����>�K�����9�=��:���H�K�=#�;Le��鸽P:M�b= ��~��<����M����u>1]����=8�*>� >]�
�����ܧZ<��<\��=!�=��=vlh�l�>��>d3��E�պㇷ<O��9=�=�L>W����ֽ
���`.=��=�G�鮜=��"=Q��=�&������5!�&=>q�����=f>�3�=���=�߻=O����d>E��=��'�=4>��~>뛶�����:H<�6m�mxN�2���x>�q�=����� �h�]�E6,�Wx=�� >�y<C� >!!A>c>B��K����ɽ����ͱ�<Ǫ���P=���<߱���h;q� =��>�M�=!8�=W�>=?#
>=<=�-�<��O>�X��H:�<��!�=���~0>-;�X=�d�� �K>|z���=���=�VӼs�o��L�1����;�y(=��ν$,�=��l�nF��q�7�4<�O>1N�;�#��ã<�1>X>SA��p=�b�>I��=�"=㍹�j��Rː=g����4W=�_L>��r=� 齣�9�"�82�<�H!��A�=�څ=��Z���齭(�<5h��SSƽ{C
=�e�����<ױo��U�=h⽃�j������Dɼ`{)�џ ���=Nӌ=v���_=��ս��>�e�=f�&>�ؽ�s�����."=L>.�*�O<M��=�қ�T�`;�p�<���+��<{U�=�"��D�V;�'�=I�]� ���9aٽRJ���
B��-�7wڼ0�<>�Eżm���#�x�0����P�w��!�>�R=�?Ͻx“���1=���=��"�=aH<���<�&@=�H�=P
�=q�;�lj�d��<2�� �q<)I�=��S=1�>=- ��i>$�==�C�=�ߴ��4<�9��(�=ЖT=�&��+�= �E�.75����<�ȕ=�z���dN��E�=�&�F�:.��oI>F%�=�C���g�= ��=\�>��ѽ$���[�<0�=l�/<P�����=��=(m�=��ּ>=Cմ=���6+˼=½4��896��� �Jv�<��Z>�s�;��c=���*��<&CJ����=�ㄽ�7>�l�O_���s޽W�ۼ�̽"��=� ҽ�
�=�Mv�%D6=j���9�Ž�->>W����B=�o�:=e>�'�=K���������=�><A���9=�茽|}z�EҎ=���Y�����< |�^+<6�n=���]�M���޽�ZνO�B��5>@m]<x�o��v=� =A�;���*�;�DZ=\�a���6�ѴX�� {<� �<d�������1 ; �=��<v�=M��< }���4=�<�=�N�=�␽�:��l��r G< 꼥�2> #�g��=�rb<`��=%J�ÇL��Tս�E>�n>Q�'�>5=?a��">�<��1���м�FA>.�\��l�<��=7��=�|�=�L��J��}=d���=ʼnw�XSN���o=�>�}ּ��5=� ���<f��o�Ͻx=:�=n���ͥ�K��=��=��ǽ2�=QE�.�c��Z���"��{��:o�/h=�������+>a������q��=S;�i >�l���R����<V�/���F�e�>N�=5����� ��=�0��e��/���T��=}��=�oɽ�s�;8%����=bp�<�J= �J��H|�c�4>�I��K�0�u�����=��o=f��=�' >�. ����=�o3��
>J��=j]�<�xE>)ڼ��@=Ph���½�(=K���쐄=Z�g����<G��=6<Cy��3��=�5 >n&�¨ �cQ�=�Y�=�ݼ<���Gٴ=�� ��ý1j!=���:~���*��=�jH>�I��md�<.��<r<!7���Z$���1�I���2V�.�J>���;7=����>�ߝ��s��ɏ����"=Z<+��>P���U!�={�������.��=�g�N����K>ϸ�=����������<�������� И�a�>��<���<Dr>-��<M��;�j�=��Ļ���=%�ɽ�P=�r��ޖ=ر�<�����冼�8J�z��=zb =s�ԕ�=�oH=���pU@>�}+=Y>�����2=xn��G>Fy���n���W~=���<��k;q� =Tz�=��;Q�x������=�3^=S%x=��#=�� ��MA>��<���p���48?��G]>���=������=��=����g�0�‘���Ѽ�r�gv}����= 5>瞻�ᄑfY������ǽ!����w���r#>����/�<����1�= >?b�<C�m��5ڼ��q:C�{>ү9;Q֦�$=��e1�=������ϼF�= ��=��-><@�^B�� e�<�P=/ʽ�&:eJ�<����;Di���t�=T�y��lS�;BQ~=�f=���;��'�F�<P8>yJ�����`�ͼ/�<�Ǽ˄:*�b>I>����;>z��@g��;*=�,��x�=~�]�&������|\Y=���<Gd����=_��=Wk�=�9p�+�G�A�ĺc.P=���a������=[��=FQ�<����fT=eX%>���>�<Y��$߼���Y��=�L��Ux�=��>$�=�{X��)�=���=�;��ˋ�=��<�"�=+��=�9��{����޽��/� ��=G�=,��=]���Z��=Α<�:�b> H>)��2����[<l,�=u�9�x���5?���W<*�z=���=G�`���B�S��s����:T�;>��=o�>J���4� >o��<T�*�:�>�D�=�]�=02���� ����=̗�=m�����J=Cc=�(j;:Z,>#������.�7冼
>Î7=�Q=D�o���&�&�>�<>�\">���#b
�خt���K���w�v>�<�oI�X16=G���@�l�T��=M�.�C�-�l�}<% ->�hؽ�.�=����A :=0�Ƚ�RK>>`=�Hɽe��<��u��1Y>�;�>�ʽr����N�=Q���_R<:�����=洐=��>�g�>~`2>�ܒ���"�o�����<Z��=��T>����JY�=��&��J4�l�$>dpn����&���}���!�=�(����L=���>����_�1=�,,>�>O=���=���=ID>�<�>�`�=a4 =�Cw����=|xH�ا��A�� �=���:��e��<����9 >6��=Y=�;Վ�;�U�:�gV>��7a�<�^����,Y>�=r�(]���n$��7�=�ͷ��J�<��߽�״��Ǐ=�[�E%<�-�=� ��/�5<�_*���n>i�*< �W>j�j��5�7��x�=�`=�R<�l�=���=$k<Tz�>"Ø�:s/<tio��=��}�=����0p=-=�+�<!�������ڥ�&��={��ˬ=3M^��-����<�9wz�v3m�S��=M����q=�4->�~!;� �<УU=_�ҽ�5��
�����=Z��=K�->�<�w�=�� >RZ�=� �ң ��������<9�(�ƽ��I=L��=St�=\���=A��=pR@=#x=���=�k,>i�<����Z��<ʹ>��=�
��d�6��=I� �h�=]��|)��J���+���[C=+&�&1>�$��J�~�����
Խ��>YR=��
���B<*�=��A�0�5��&E����s�ټ)�<���=�N���Υ=�˕=/*���������=Ʋ���S���g>3
��2v�ղ<=���=⡼�έ�B��=1\����=�"ֽ�[=��=?Y�<]��<����?�:��*�RxU��y*��x�=v�>����j���}UX:��w�[3f��,'>)@;��W�=x�X�Է>�>�ZO��d2= 蹼���<J�������д�=�*=��L�?8>~�ڽ �n=M t=c����t=���<�Qy>��A��S�=�m=€�;�۔�(���=/=&���뉽|Wl�-5���]=�M��4N�=N'�=j+�4+>�PV���K=G�>_��=Cc���:�<�������;�&>�8��h�>�? ���)�)�&��.>�ۦ�t�=ɮ�O��vgн��j>3�J=`�|<9�)>���>�C��F@o>B =r�</L�ȕ��9�1>�P"�wa� ��>Q�>���=��'=����r���=��=�j�<�p��F轄c�����=]-�=�ؽ>���}Ӈ=idw=�W >-�k�ʟ���޽���=�����;,�w�*�ソO��&��&��=#\>�;=��������]9��C�=��=h�����: ��z�=W����˻Vi�=���G��F"�=���=���=�1=�Ἅ�`�m�ɼ�yK>�sH���D�b��=��E��˘=4�彫x˽���<3�'��� ����<���=��<c�\�A�J�̤=V�&���>r�<:q'�L���ؤ�=�V�=���=�Ն�=�_�����=�*'����� ��� r�=�����S>�g =r�>M�A����=�,½�y�=~n>)�J<Kб;j+���/�P��=,��}���Xܵ<��3>"�A>������d��h��=R�����=�����0��۔=��m��P�<�g��K/�=���=M�=P�=�!��{ɽWƼ)D�<��>��B<��2=�N<=Spo>+�伷u(>G���q�Y=er>_�[=p��T4�9�{��J�}�(��=7�=����{���>�X�=�d'�4#��,�c=|�O���=l�>���;]ن=sY�=���=lI%�����N*���"T���<�38<���=�޽UΡ=JT��̭�=9��<�+��� >u���x=M�¼�^4�����%��=�p;����1��m�ͽͿ�=�`��ˬP<
�^=�� �6-�=P�
>�N;�[����=>���� ~����=ۯ�=ȮD� �>�9�Rw����:�q @>X�-=�;��_Xýr��=ht<����`M�=�=v���=e؀�n=x��=PE��po����\0���� ��Q����=5��=ZQѻ�Q�=��2��r=!��=����!)���G+=��>>�Ѫ����<����� �>��t����!_>v��=�����ǀ�t�>��j<i[
=��E�DL���Ȏ<���P_�-y��u���� %>,v��xE�S
=0<=�~�<�����:�S/7���N>������^tn=�~�=�2�<Q�ɽ4ī�;��=pr���A���M����=T�b=h�.�W��=Ⱥż�(ټe�y�]��D½�b)��$\=p�=.\弿�0=r,��|s��Z��=��M�kG"�N&?=�$%�b*(>~�[=?ل=KP==��=�@ =�t>?����8�;���^e�=�>����ܼc�q=��3=�+F:�i�<d����A,�ź=��=�ʼy�=��ڤ�=�~����<6썽K4 >�����y>�ȧ�d�,>�����"a��1=�[=�Q>e�W�����`�k.�<2\���=�>J�?=N&<_�=Q��;�^���b=a�>|�?=�D���6��JM>.$>C��:�����5?>`Ԗ��,<�&JS�))���̽p2<{�<Z = x">��hK>&���ey���;>�%S>��8�A��<�>N3->h�=�X�;�f <�9�_��=��^��"> ���<��s�=u >��D>f���t��;z�<=c�>�M5�i�!='�ܽ�ƚ; !>����XR�;�,2=�>�=ۭ>�>�=����>������ �9=���<=B�<où����>$Z�<�Y�[ �=ږ���5W<YJ�fL�<�t=p�=Y��^͂=Ub���
>�x�<I6t�֨9�}3�>s��:`�j=9t���`<�j=�1l�3��?�۽|L�=S6�=a��<���=׻?>5�=Jw]��{B��A=[�<%��=iK��D�\=�J�=}l�����=?�}���>�ur;���Ÿ>�q��73�=J��=&6>�"����w�Xh�<���=��=kn�+0�=��~�'u��[�>ǧ$>��C<��.=R۽=�qG�򒤻�(�v)n�� h���A���f<Xx>�L>�?�=��9;?�1=�c2�I�>d��=5ǎ��a��y�A���ν��к��>5g�=̭�=�4Ƚg5��RHU>�T=�� �y2;����e��<g��= KS�*����J��A���H���-<dn��Ο=bˣ=����+��=jL>�\0���O��e!>��1��T��Y�k�Q�]�U�h>�^ ="NZ��%=��=�� >�&���G=G]��<�ؽA�5=I-j>o>ZO�=k0<>�'��4�=ǡ���]��^_��u)=�ګ=������:'>=��н�צ=�$�=!żU�b��Ɵ=��+=�g
>�
��|N�<��}=ǃ\=�t�=/6��[V�N�7���W=�H��&�Yv=Iн�f�=���=����"<��Q=�Mν ڧ=Dr�=�>ݻ���<��=F*�G`>A��dv���_��k�$=�w:<�AB�Q��<�j5�o���n=���=���9W���_��X=)�&�=F��<S3�;����BX"��_<).�<� ��%�$P�=\sf=��<=2n��� �=Y��� ��->�߯=�U[�� �Ͱ�/��=9紽KZ�=4����B��P���(+B��$r=��ؽ�� =0�轀���\�:ɞ=��<�Ii>�X����ֻ�gd>��<����*�<�0=��<<l�m=���=-�f��6��)4뼋p޼]?�=K�>#VF>������*��=���=}�=T�H�S��o���4��������i=宑���f����>��=>V�%�˽`ͽ i1���>sHq=�
��8� Ƽ�0�����=b="HU�7 �=%����<��=�S>�#>˚�=�ͅ���y� ��=�b��@���c~>
&��6.;�(�<�Z�=��=�wC=�7/�Y�������N>x�=�'����%'�=��*>6�=���F�=����~�a�U�=a=u>JW��q��3�� >9-��!��<��ǽ�4>d��=���=#Z�;�㙻Wb�=>���&�=@�2=�W9>x6e<��7��i����>�V���)V=Ef�<���=$�7���U:I��V�����"]��t4>�1 =x!Q=��� >Z��<e V>O��;j��<y_>䳽>��<n����0�=\𐽥������"�>̱��� =Tm�=��=�mb�f�G>E�;�]�d�Sɔ�0Ѩ����=eM-��E >���=�������}t�H�z�PȨ�,�z=��c>������<�p�-=��`�Q�:<0R���=U*5�'B|����=�Jż�u�=Ѐ�=�i�=�
6�1_>�G��[xi��D<�q<ћ=L6�=���;|�>Zh��m��M=I���DO�=!�<��=��\=52n��\޽�),�`�(��\�$H׽f9�>=�� ��=����t��;��ѽ�`>r�l<<�c=d���L��<�ힽ�6>]O彌u�=N絽T.S����<v7�=���=�=L a��GA>��`=���=�w���"<�Δ+>��I=��=Ԉ�=@��<a6���\�<f� >���=n�=I~=^�L>7�̽|
(>��<^�ǽD�_��k!�fG�=e����>V��8�'�,*��
�=�=>�j�*�T]>9�2>��=>�R=!@��=�<��=��d=��G=$���0=�5�=2x�o���ω���d�=�f�?�i>�J<g������=���ͱ��"vP=�Ľ�����=Du�<��=������=�} �H� =O�!=�]�=���>�a ��C�=���)o����3�:�|�H=Պt�q�=ۉ�=���=� ��L�L�c( �`I.<z��<�<�u��m�?��h�=T��= ���>=jE�=�����<
>�Le=��=5ǽ�� ���=�]�=#T��TD:�q�ɏŽ"A>'�x=�\&>�X
<<c�<#�c�QB_�v����k�=�J�=�$8=�4����;�t>�Gs��ҏ�)�+��7N���u�� >S:@>��i:o�\=��6�]߼��=��>��t<���=�޺��Xʼ���0R��=J�Q��>.�?�Q=��!=ک���<$��#���z|>f]Ƽ�U��5m �q�>Eg=��%;K�ʖ=tcu=��=^�Ⱥ��=S�V<'����̚=�d?=���;6"�=��Ž�e�=}�>��(��=�<|�������Aȴ�_�)R�b�W=�� ��<�'̼o�)=�Qy=�~�7���ǂ�<�A���g=�綠�q�=m(O=���s ҽD��<q2/=��?=@����G���A��廟��= LY�� �=n8�<�����U�Qv:���μ���5�>�=T=�'�=KJQ=�+��@����g���o��h���B�_ \>��(>��=_�3=�~���k�<tǼn��<��4��u'�N>L����u&<=�=��#=�O=�GV�=�!��'6�����sl>f� =z} �|O �M@h=��>��U>`����>}�=J_��̭=���q�3�����Y!>0��W/a���=�. >�s9;ϝ�=��=O� >��=*��l����
=u2�=��K=S��=0}A����=?�4>3��=�5�=޿>��=',m�ܛ==���=��)���/�ΗE=g�'��伽Ԑ$���h��$>�<¯>#|9�b�[���4>��V=��*��c��,�=�M=�c���z�=$(*>�޼�(��9�z���ͬ���'>��>��;�P���k�*{���VE;� ��������S=�1�hW����=�~>�ѽd���=`Ď=�W>zH�=KI�����=e"_��==^�Lwv��f�<�+a=��������=-�:<(�$� ! =#n�<�ϼ� �� >I�<@B#>��\>��8����<���:�r�=jo�lj����S=��J=@B>��8>q��=�,��lr[��ƨ;k��=ӻ�=���<K��4Q���$�vi>X���H�������4V=AuԽ���=��!>�Y�
+���N���=E)=&�)��g�=ݍ�� �<� �=r����>=���l�� �>g<�<�ϡ��v⹳ˇ=�^ϼv�ƽ���=�����Ͻh=L��������=�Z1=���<y~����>��޽n����.�<����Ѝ�����7ï< �5\���W.�Q���a?����=7�m��?r>�$�< n�=Q$;U<X=�����޽sV�=��ra��6�=c ��쿼�SY=�����d�=�����^����<���3G@>< >
m�<%5��]Ҽ��=�ş=���=�[�:�R������(������l!��Dp=�?��_��=O��= �Ƚ����H��x��g�X>��=n�=K(���ē<��e�S7�=�%/�W���G>-4��Ƚ��a6�=�Md���W>�1 ���6��n=�_��3!=��r+=Q�)��ӽ�7b�)�����6='b=>�V�Y��=e�k������n�<rz��ՌY� �9>&߉=���=���;%��'�ƽi������9>�<��U>�+�2}�;8�=So�;輽�;��,X�Q��= ��:е�F&�=���;�6�R�>h=aG>��7>Ia>��X<�}���!�=���=�K6>���jn�=�;��P�=qU�=x�>����xA=�u�u9ս�����=>o>�Φ���|�B��;K>���=iW켺��~�ҽ �=���<о�="5��Q[�� �<1�h=��<t�:����;��t���Ž\K��v �=���=B<ͺ>Ė�<�Z�<T.�=
; <;��=����qĽJG=Y����������6=�M�΄�=G��>�����G�Tͥ=��=��%�����ސ=T����'>\�ŽΗ�RJg=ȽI<��A��ր=��<��o���=�I=Q�B�N =��7�/m�=��9>u� >�
\= [d��*�<1[?�q)>���=MfU�Z\k<�p���;�;=t�=O��<��>�h��� <<�Rҽ�ϻ�Ar����R$<�ɻ�=φؽ�c�>y�^>i�-������>+��<]̗�؃�=�<���=��d�J >Y�[>�}�<h��#�T=R1X=ؼ���� ��[��N�@��=��->a���.�a<s�=�cE;?J!>HY=�31=Mb齘��=�B>��9��aڽS����s�h�+<2�B=pH��B���n>����8">7G �y!��a��� ��>&�w������=�d��(����U���ͼ���<sD<�a >>@>ʬl���>Z�&���G=|�<= �>��+R����*Bversion_numberJ@Z)
vector_observation

batch
oZ#
action_masks

batch
b
version_number

b
memory_size

b'
discrete_actions

batch
b*
discrete_action_output_shape

b
action

batch
b#
is_continuous_control

b!
action_output_shape

B

14
Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx.meta


fileFormatVersion: 2
guid: 24bf45e63f29d458f812c1702e665803
ScriptedImporter:
fileIDToRecycleName:
11400000: main obj
11400002: model data
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3}
optimizeModel: 1
forceArbitraryBatchSize: 1
treatErrorsAsWarnings: 0

9
Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity.meta


fileFormatVersion: 2
guid: b9c81cbb0f0ac40649eddfef0971e81b
timeCreated: 1506808980
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

969
Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 3
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 1
m_LightmapEditorSettings:
serializedVersion: 10
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 0
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringMode: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392,
type: 2}
m_UseShadowmask: 1
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &255077123
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 255077126}
- component: {fileID: 255077125}
- component: {fileID: 255077124}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &255077124
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 255077123}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalAxis: Horizontal
m_VerticalAxis: Vertical
m_SubmitButton: Submit
m_CancelButton: Cancel
m_InputActionsPerSecond: 10
m_RepeatDelay: 0.5
m_ForceModuleActive: 0
--- !u!114 &255077125
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 255077123}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 5
--- !u!4 &255077126
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 255077123}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &318490716
GameObject:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 318490717}
m_Layer: 0
m_Name: UnityEngine-Recorder
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &318490717
Transform:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 318490716}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 365376271}
- {fileID: 1265651286}
m_Father: {fileID: 0}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &365376270
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 365376271}
m_Layer: 0
m_Name: Settings
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &365376271
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 365376270}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1257687049}
m_Father: {fileID: 318490717}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &502449554
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalPosition.x
value: 106.38621
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalPosition.y
value: 38.840767
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalPosition.z
value: 34.72934
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.x
value: 0.31598538
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.y
value: -0.3596048
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.z
value: 0.13088542
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.w
value: 0.8681629
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_RootOrder
value: 4
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
--- !u!1001 &687199677
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2313762877161590336, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.x
value: 50
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_RootOrder
value: 7
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2416678558414254088, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_Name
value: PushBlockCollabArea (1)
objectReference: {fileID: 0}
- target: {fileID: 2416809913911815199, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8689a8cfb0ac742bfa27214909ebb1e8, type: 3}
--- !u!1001 &768746187
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2313762877161590336, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.x
value: 150
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_RootOrder
value: 9
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2416678558414254088, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_Name
value: PushBlockCollabArea (3)
objectReference: {fileID: 0}
- target: {fileID: 2416809913911815199, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8689a8cfb0ac742bfa27214909ebb1e8, type: 3}
--- !u!1 &1009000883
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1009000884}
- component: {fileID: 1009000887}
m_Layer: 0
m_Name: SingleCam
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1009000884
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1009000883}
m_LocalRotation: {x: 0.5, y: 0, z: 0, w: 0.8660254}
m_LocalPosition: {x: 0, y: 20, z: -15}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0}
--- !u!20 &1009000887
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1009000883}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 2
m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1}
m_projectionMatrixMode: 1
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_GateFitMode: 2
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 56.2
orthographic: 0
orthographic size: 6.98
m_Depth: 2
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!1001 &1219049691
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2313762877161590336, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.x
value: 200
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_RootOrder
value: 10
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2416678558414254088, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_Name
value: PushBlockCollabArea (4)
objectReference: {fileID: 0}
- target: {fileID: 2416809913911815199, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8689a8cfb0ac742bfa27214909ebb1e8, type: 3}
--- !u!1 &1257687048
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1257687049}
m_Layer: 0
m_Name: 50bfc0f4c3d6f46df98d3c66ceb89209
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1257687049
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1257687048}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 365376271}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1265651285
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1265651286}
m_Layer: 0
m_Name: RecordingSessions
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1265651286
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1265651285}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 318490717}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1558468742
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2313762877161590336, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.x
value: 100
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_RootOrder
value: 8
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2416678558414254088, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_Name
value: PushBlockCollabArea (2)
objectReference: {fileID: 0}
- target: {fileID: 2416809913911815199, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8689a8cfb0ac742bfa27214909ebb1e8, type: 3}
--- !u!1 &1574236047
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1574236049}
- component: {fileID: 1574236050}
- component: {fileID: 1574236048}
m_Layer: 0
m_Name: PushBlockSettings
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1574236048
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1574236047}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3}
m_Name:
m_EditorClassIdentifier:
gravityMultiplier: 1.5
fixedDeltaTime: 0.02
maximumDeltaTime: 0.33333334
solverIterations: 6
solverVelocityIterations: 1
reuseCollisionCallbacks: 1
--- !u!4 &1574236049
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1574236047}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1574236050
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1574236047}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5ed63dbfa25542ecb8bc013adfba183, type: 3}
m_Name:
m_EditorClassIdentifier:
agentRunSpeed: 3
agentRotationSpeed: 15
spawnAreaMarginMultiplier: 0.5
goalScoredMaterial: {fileID: 2100000, guid: df32cc593804f42df97464dc455057b8, type: 2}
failMaterial: {fileID: 2100000, guid: a1daf31cdf41e484ca9ac33a5c6f524a, type: 2}
--- !u!1001 &1900462655
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_RootOrder
value: 3
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_Pivot.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_Pivot.y
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3}
--- !u!1001 &2416809913901764614
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_RootOrder
value: 5
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2416678558414254088, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_Name
value: PushBlockCollabArea
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8689a8cfb0ac742bfa27214909ebb1e8, type: 3}

12
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs.meta


fileFormatVersion: 2
guid: d94a85eca2e074578943301959c555ba
timeCreated: 1506829537
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs.meta


fileFormatVersion: 2
guid: 4bb2bb36bb51d452ab58d30a868dfab3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

60
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class GoalDetectTrigger : MonoBehaviour
{
[Header("Trigger Collider Tag To Detect")]
public string tagToDetect = "goal"; //collider tag to detect
[Header("Goal Value")]
public float GoalValue = 1;
private Collider m_col;
[System.Serializable]
public class TriggerEvent : UnityEvent<Collider, float>
{
}
[Header("Trigger Callbacks")]
public TriggerEvent onTriggerEnterEvent = new TriggerEvent();
public TriggerEvent onTriggerStayEvent = new TriggerEvent();
public TriggerEvent onTriggerExitEvent = new TriggerEvent();
private void OnTriggerEnter(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerEnterEvent.Invoke(m_col, GoalValue);
}
}
private void OnTriggerStay(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerStayEvent.Invoke(m_col, GoalValue);
}
}
private void OnTriggerExit(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerExitEvent.Invoke(m_col, GoalValue);
}
}
// Start is called before the first frame update
void Awake()
{
m_col = GetComponent<Collider>();
}
// Update is called once per frame
void Update()
{
}
}

11
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs.meta


fileFormatVersion: 2
guid: 9dcea692df32b46b4a884cfcc150aef7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

236
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs


using System.Collections;
using System.Collections.Generic;
using Unity.MLAgents;
using UnityEngine;
public class PushBlockEnvController : MonoBehaviour
{
[System.Serializable]
public class AgentInfo
{
public PushAgentCollab Agent;
[HideInInspector]
public Vector3 StartingPos;
[HideInInspector]
public Quaternion StartingRot;
[HideInInspector]
public Rigidbody Rb;
}
[System.Serializable]
public class BlockInfo
{
public Transform T;
[HideInInspector]
public Vector3 StartingPos;
[HideInInspector]
public Quaternion StartingRot;
[HideInInspector]
public Rigidbody Rb;
}
/// <summary>
/// Max Academy steps before this platform resets
/// </summary>
/// <returns></returns>
[Header("Max Environment Steps")] public int MaxEnvironmentSteps = 25000;
private int m_ResetTimer;
/// <summary>
/// The area bounds.
/// </summary>
[HideInInspector]
public Bounds areaBounds;
/// <summary>
/// The ground. The bounds are used to spawn the elements.
/// </summary>
public GameObject ground;
public GameObject area;
Material m_GroundMaterial; //cached on Awake()
/// <summary>
/// We will be changing the ground material based on success/failue
/// </summary>
Renderer m_GroundRenderer;
public List<AgentInfo> AgentsList = new List<AgentInfo>();
public List<BlockInfo> BlocksList = new List<BlockInfo>();
public bool UseRandomAgentRotation = true;
public bool UseRandomAgentPosition = true;
public bool UseRandomBlockRotation = true;
public bool UseRandomBlockPosition = true;
PushBlockSettings m_PushBlockSettings;
private int m_NumberOfRemainingBlocks;
void Start()
{
// Get the ground's bounds
areaBounds = ground.GetComponent<Collider>().bounds;
// Get the ground renderer so we can change the material when a goal is scored
m_GroundRenderer = ground.GetComponent<Renderer>();
// Starting material
m_GroundMaterial = m_GroundRenderer.material;
m_PushBlockSettings = FindObjectOfType<PushBlockSettings>();
foreach (var item in BlocksList)
{
item.StartingPos = item.T.transform.position;
item.StartingRot = item.T.transform.rotation;
item.Rb = item.T.GetComponent<Rigidbody>();
}
foreach (var item in AgentsList)
{
item.StartingPos = item.Agent.transform.position;
item.StartingRot = item.Agent.transform.rotation;
item.Rb = item.Agent.GetComponent<Rigidbody>();
}
ResetScene();
}
// Update is called once per frame
void FixedUpdate()
{
m_ResetTimer += 1;
if (m_ResetTimer > MaxEnvironmentSteps)
{
ResetScene();
}
}
/// <summary>
/// Use the ground's bounds to pick a random spawn position.
/// </summary>
public Vector3 GetRandomSpawnPos()
{
var foundNewSpawnLocation = false;
var randomSpawnPos = Vector3.zero;
while (foundNewSpawnLocation == false)
{
var randomPosX = Random.Range(-areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier,
areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier);
var randomPosZ = Random.Range(-areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier,
areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier);
randomSpawnPos = ground.transform.position + new Vector3(randomPosX, 1f, randomPosZ);
if (Physics.CheckBox(randomSpawnPos, new Vector3(2.5f, 0.01f, 2.5f)) == false)
{
foundNewSpawnLocation = true;
}
}
return randomSpawnPos;
}
/// <summary>
/// Resets the block position and velocities.
/// </summary>
void ResetBlock(BlockInfo block)
{
// Get a random position for the block.
block.T.position = GetRandomSpawnPos();
// Reset block velocity back to zero.
block.Rb.velocity = Vector3.zero;
// Reset block angularVelocity back to zero.
block.Rb.angularVelocity = Vector3.zero;
}
/// <summary>
/// Swap ground material, wait time seconds, then swap back to the regular material.
/// </summary>
IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time); // Wait for 2 sec
m_GroundRenderer.material = m_GroundMaterial;
}
/// <summary>
/// Called when the agent moves the block into the goal.
/// </summary>
public void ScoredAGoal(Collider col, float score)
{
//Decrement the counter
m_NumberOfRemainingBlocks--;
//Are we done?
bool done = m_NumberOfRemainingBlocks == 0;
//Disable the block
col.gameObject.SetActive(false);
//Give Agent Rewards
foreach (var item in AgentsList)
{
item.Agent.AddReward(score);
}
// Swap ground material for a bit to indicate we scored.
StartCoroutine(GoalScoredSwapGroundMaterial(m_PushBlockSettings.goalScoredMaterial, 0.5f));
if (done)
{
//Reset assets
ResetScene();
}
}
Quaternion GetRandomRot()
{
return Quaternion.Euler(0, Random.Range(0.0f, 360.0f), 0);
}
void ResetScene()
{
m_ResetTimer = 0;
//Random platform rot
var rotation = Random.Range(0, 4);
var rotationAngle = rotation * 90f;
area.transform.Rotate(new Vector3(0f, rotationAngle, 0f));
//End Episode
foreach (var item in AgentsList)
{
if (!item.Agent)
{
return;
}
item.Agent.EndEpisode();
}
//Reset Agents
foreach (var item in AgentsList)
{
var pos = UseRandomAgentPosition ? GetRandomSpawnPos() : item.StartingPos;
var rot = UseRandomAgentRotation ? GetRandomRot() : item.StartingRot;
item.Agent.transform.SetPositionAndRotation(pos, rot);
item.Rb.velocity = Vector3.zero;
item.Rb.angularVelocity = Vector3.zero;
}
//Reset Blocks
foreach (var item in BlocksList)
{
var pos = UseRandomBlockPosition ? GetRandomSpawnPos() : item.StartingPos;
var rot = UseRandomBlockRotation ? GetRandomRot() : item.StartingRot;
item.T.transform.SetPositionAndRotation(pos, rot);
item.Rb.velocity = Vector3.zero;
item.Rb.angularVelocity = Vector3.zero;
item.T.gameObject.SetActive(true);
}
//Reset counter
m_NumberOfRemainingBlocks = BlocksList.Count;
// m_NumberOfRemainingBlocks = 2;
}
}

116
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs


//Put this script on your blue cube.
using System.Collections;
using UnityEngine;
using Unity.MLAgents;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
public class PushAgentCollab : Agent
{
PushBlockSettings m_PushBlockSettings;
// Rigidbody m_BlockRb; //cached on initialization
Rigidbody m_AgentRb; //cached on initialization
public bool useVectorObs = true;
void Awake()
{
m_PushBlockSettings = FindObjectOfType<PushBlockSettings>();
}
public override void Initialize()
{
// Cache the agent rigidbody
m_AgentRb = GetComponent<Rigidbody>();
}
/// <summary>
/// Moves the agent according to the selected action.
/// </summary>
public void MoveAgent(ActionSegment<int> act)
{
var dirToGo = Vector3.zero;
var rotateDir = Vector3.zero;
var action = act[0];
switch (action)
{
case 1:
dirToGo = transform.forward * 1f;
break;
case 2:
dirToGo = transform.forward * -1f;
break;
case 3:
rotateDir = transform.up * 1f;
break;
case 4:
rotateDir = transform.up * -1f;
break;
case 5:
dirToGo = transform.right * -0.75f;
break;
case 6:
dirToGo = transform.right * 0.75f;
break;
}
transform.Rotate(rotateDir, Time.fixedDeltaTime * 200f);
m_AgentRb.AddForce(dirToGo * m_PushBlockSettings.agentRunSpeed,
ForceMode.VelocityChange);
}
public override void CollectObservations(VectorSensor sensor)
{
if (useVectorObs)
{
sensor.AddObservation(StepCount / (float)MaxStep);
}
}
/// <summary>
/// Called every step of the engine. Here the agent takes an action.
/// </summary>
public override void OnActionReceived(ActionBuffers actionBuffers)
{
// Move the agent using the action.
MoveAgent(actionBuffers.DiscreteActions);
// Penalty given each step to encourage agent to finish task quickly.
AddReward(-1f / MaxStep);
}
public override void Heuristic(in ActionBuffers actionsOut)
{
var discreteActionsOut = actionsOut.DiscreteActions;
discreteActionsOut[0] = 0;
if (Input.GetKey(KeyCode.D))
{
discreteActionsOut[0] = 3;
}
else if (Input.GetKey(KeyCode.W))
{
discreteActionsOut[0] = 1;
}
else if (Input.GetKey(KeyCode.A))
{
discreteActionsOut[0] = 4;
}
else if (Input.GetKey(KeyCode.S))
{
discreteActionsOut[0] = 2;
}
}
/// <summary>
/// In the editor, if "Reset On Done" is checked then AgentReset() will be
/// called automatically anytime we mark done = true in an agent script.
/// </summary>
public override void OnEpisodeBegin()
{
}
}

7
Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabArea.prefab.meta


fileFormatVersion: 2
guid: 8689a8cfb0ac742bfa27214909ebb1e8
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabArea.prefab
文件差异内容过多而无法显示
查看文件

1001
Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx
文件差异内容过多而无法显示
查看文件

14
Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx.meta


fileFormatVersion: 2
guid: a051c5abff78d40c586086c42e713e18
ScriptedImporter:
fileIDToRecycleName:
11400000: main obj
11400002: model data
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3}
optimizeModel: 1
forceArbitraryBatchSize: 1
treatErrorsAsWarnings: 0
正在加载...
取消
保存