From 188a73bcc7693ea4fa1badb517dcdfb387bfbcf1 Mon Sep 17 00:00:00 2001 From: Rory Lipkis Date: Thu, 10 Mar 2022 09:52:26 -0800 Subject: [PATCH 1/9] added baseline q-learning solver --- src/solvers/Solvers.jl | 2 + src/solvers/global/QLearning/QLearning.jl | 149 ++++++++++++++++++++++ 2 files changed, 151 insertions(+) create mode 100644 src/solvers/global/QLearning/QLearning.jl diff --git a/src/solvers/Solvers.jl b/src/solvers/Solvers.jl index 555f3d2..362057d 100644 --- a/src/solvers/Solvers.jl +++ b/src/solvers/Solvers.jl @@ -47,6 +47,7 @@ export LocalResult, SoftActorCritic, + QLearning, MonteCarloSearch, MonteCarloTreeSearch, @@ -56,6 +57,7 @@ export include("types.jl") include("utils.jl") exclude("global/SoftActorCritic") +include("global/QLearning/QLearning.jl") include("local/MonteCarloSearch/MonteCarloSearch.jl") include("local/MonteCarloTreeSearch/MonteCarloTreeSearch.jl") diff --git a/src/solvers/global/QLearning/QLearning.jl b/src/solvers/global/QLearning/QLearning.jl new file mode 100644 index 0000000..7c5446d --- /dev/null +++ b/src/solvers/global/QLearning/QLearning.jl @@ -0,0 +1,149 @@ +# ****************************************************************************************** +# Notices: +# +# Copyright © 2022 United States Government as represented by the Administrator of the +# National Aeronautics and Space Administration. All Rights Reserved. +# +# Disclaimers +# +# No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY KIND, +# EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY +# THAT THE SUBJECT SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY +# WARRANTY THAT THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, +# IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN ANY MANNER, +# CONSTITUTE AN ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR RECIPIENT OF ANY RESULTS, +# RESULTING DESIGNS, HARDWARE, SOFTWARE PRODUCTS OR ANY OTHER APPLICATIONS RESULTING FROM +# USE OF THE SUBJECT SOFTWARE. FURTHER, GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND +# LIABILITIES REGARDING THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND +# DISTRIBUTES IT "AS IS." +# +# Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST THE UNITED +# STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT. +# IF RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN ANY LIABILITIES, DEMANDS, DAMAGES, +# EXPENSES OR LOSSES ARISING FROM SUCH USE, INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, +# OR RESULTING FROM, RECIPIENT'S USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND +# HOLD HARMLESS THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL +# AS ANY PRIOR RECIPIENT, TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY FOR ANY +# SUCH MATTER SHALL BE THE IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT. +# ****************************************************************************************** + +""" +Simple discretized Q-learning solver. Should be used as a baseline for other global solvers, +in terms of runtime performance and overall efficacy. +""" +module QLearning + +export + QL, + solve + +using ..Solvers +import ..Solvers.solve + +using CommonRLInterface +using ProgressMeter + +""" + QL <: GlobalSolver + +Q-learning solver. +""" +Base.@kwdef mutable struct QL <: GlobalSolver + state_mins::Vector{Float64} = [0.0] + state_maxs::Vector{Float64} = [1.0] + state_divs::Vector{Int64} = [10] + + act_mins::Vector{Float64} = [-3.0] + act_maxs::Vector{Float64} = [3.0] + act_divs::Vector{Int64} = [10] + + num_episodes::Int64 = 1000 + alpha::Float64 = 0.1 + gamma::Float64 = 1.0 + eps::Float64 = 0.25 +end + +""" + QLResult <: LocalResult + +Learned Q table. Associates state-action pairs with estimated value. +""" +mutable struct QLResult <: GlobalResult + Q::Matrix{Float64} + sidx + sgrids + aidx + agrids +end + +(Q::QLResult)(s) = id_to_action(select_action(Q.Q, state_to_id(s, Q.sgrids, Q.sidx), 0.0), Q.agrids, Q.aidx) +value(Q::QLResult, s) = maximum(Q.Q[:, state_to_id(s, Q.sgrids, Q.sidx)]) + +function Solvers.solve(ql::QL, env_fn::Function) + mdp = env_fn() + + sidx = LinearIndices(Tuple(ql.state_divs)) + sgrids = [range(s_min, s_max; length=s_div + 1) for (s_min, s_max, s_div) in zip(ql.state_mins, ql.state_maxs, ql.state_divs)] + num_states = length(sidx) + + aidx = CartesianIndices(Tuple(ql.act_divs)) + agrids = [range(a_min, a_max; length=a_div) for (a_min, a_max, a_div) in zip(ql.act_mins, ql.act_maxs, ql.act_divs)] + num_actions = length(aidx) + + Q = rand(num_actions, num_states) # or zeros? + + @showprogress for _ in 1:ql.num_episodes + reset!(mdp) + s = state_to_id(observe(mdp), sgrids, sidx) + d = terminated(mdp) + while !d + d = terminated(mdp) + a = select_action(Q, s, ql.eps) + r = act!(mdp, id_to_action(a, agrids, aidx)) + sp = state_to_id(observe(mdp), sgrids, sidx) + update!(Q, s, a, sp, r, d, ql.gamma, ql.alpha) + s = sp + end + end + + return QLResult(Q, sidx, sgrids, aidx, agrids) +end + +""" +Calculates index of value within grid (outliers clip to closest bin). +""" +function bin_index(grid, val) + i = 1 + for node in grid[2:end-1] + val < node && break + i += 1 + end + return i +end + +""" +Computes linear id corresponding to state, with or without index caching. +""" +state_to_id(s, sgrids, sidx) = sidx[bin_index.(sgrids, s)...] +state_to_id(s, sgrids) = state_to_id(s, sgrids, LinearIndices(Tuple(length.(sgrids) .- 1))) + +""" +Computes action corresponding to linear id, with or without index caching. +""" +id_to_action(id, agrids, aidx) = getindex.(agrids, Tuple(aidx[id])) +id_to_action(id, agrids) = id_to_action(id, agrids, CartesianIndices(Tuple(length.(agrids)))) + +""" +Updates state-action value table with observed reward. +""" +function update!(Q, s, a, sp, r, d, gamma, alpha) + Q[a, s] += d ? r - Q[a, s] : alpha * (r + gamma * maximum(Q[:, sp]) - Q[a, s]) +end + +""" +Randomly selects action according to epsilon-greedy criterion. +""" +select_action(Q, s, eps) = rand() < eps ? rand(1:size(Q, 1)) : argmax(Q[:, s]) + +end From 598f487b2087ce653dc6b0c2f77e350c18db86e4 Mon Sep 17 00:00:00 2001 From: Rory Lipkis Date: Sun, 25 Sep 2022 16:08:17 -0700 Subject: [PATCH 2/9] reverse-order updates by default --- src/solvers/global/QLearning/QLearning.jl | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/solvers/global/QLearning/QLearning.jl b/src/solvers/global/QLearning/QLearning.jl index 7c5446d..faca099 100644 --- a/src/solvers/global/QLearning/QLearning.jl +++ b/src/solvers/global/QLearning/QLearning.jl @@ -62,6 +62,7 @@ Base.@kwdef mutable struct QL <: GlobalSolver alpha::Float64 = 0.1 gamma::Float64 = 1.0 eps::Float64 = 0.25 + reverse_update::Bool = true end """ @@ -77,7 +78,7 @@ mutable struct QLResult <: GlobalResult agrids end -(Q::QLResult)(s) = id_to_action(select_action(Q.Q, state_to_id(s, Q.sgrids, Q.sidx), 0.0), Q.agrids, Q.aidx) +(Q::QLResult)(s) = id_to_action(select_action(Q.Q, state_to_id(s, Q.sgrids, Q.sidx)), Q.agrids, Q.aidx) value(Q::QLResult, s) = maximum(Q.Q[:, state_to_id(s, Q.sgrids, Q.sidx)]) function Solvers.solve(ql::QL, env_fn::Function) @@ -92,9 +93,11 @@ function Solvers.solve(ql::QL, env_fn::Function) num_actions = length(aidx) Q = rand(num_actions, num_states) # or zeros? + buffer = [] @showprogress for _ in 1:ql.num_episodes reset!(mdp) + empty!(buffer) s = state_to_id(observe(mdp), sgrids, sidx) d = terminated(mdp) while !d @@ -102,9 +105,13 @@ function Solvers.solve(ql::QL, env_fn::Function) a = select_action(Q, s, ql.eps) r = act!(mdp, id_to_action(a, agrids, aidx)) sp = state_to_id(observe(mdp), sgrids, sidx) - update!(Q, s, a, sp, r, d, ql.gamma, ql.alpha) + push!(buffer, (s, a, sp, r, d)) s = sp end + + for tup in (ql.reverse_update ? reverse(buffer) : buffer) + update!(Q, tup..., ql.gamma, ql.alpha) + end end return QLResult(Q, sidx, sgrids, aidx, agrids) @@ -144,6 +151,7 @@ end """ Randomly selects action according to epsilon-greedy criterion. """ -select_action(Q, s, eps) = rand() < eps ? rand(1:size(Q, 1)) : argmax(Q[:, s]) +select_action(Q, s) = argmax(Q[:, s]) +select_action(Q, s, eps) = rand() < eps ? rand(1:size(Q, 1)) : select_action(Q, s) end From e76a33f819629a0e083968ce7c63a58e50ed943e Mon Sep 17 00:00:00 2001 From: Rory Lipkis Date: Sun, 25 Sep 2022 16:27:17 -0700 Subject: [PATCH 3/9] added documentation for q-learning --- docs/main.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/main.md b/docs/main.md index b5de176..fa42873 100644 --- a/docs/main.md +++ b/docs/main.md @@ -275,6 +275,24 @@ For an example of a problem solved with MCTS, see the notebook `examples/walk1d` Global solvers aim to produce an adversarial policy mapping from simulator state to environment instance. The output of the solver is a function that takes as input an observation of the system and returns an action. In this way, failure trajectories can be produced from any given initialization. This opens the door to a richer analysis of the system's weaknesses. +#### Q-learning + +Q-learning is a classic reinforcement learning algorithm that uses a table-based policy to map states to optimal actions. Exploration is driven by an epsilon-greedy action selection approach. The simplicity of the QL algorithm makes it a useful baseline for more advanced methods. + +| Parameter | Type | Default | Description | +| - | - | - | - | +| `state_mins` | `Vector{Float64}` | `[0.0]` | Minimum values of state vector | +| `state_maxs` | `Vector{Float64}` | `[1.0]` | Maximum values of state vector | +| `state_divs` | `Vector{Int64}` | `[10]` | State space grid size | +| `act_mins` | `Vector{Float64}` | `[-3.0]` | Minimum values of actions (normalized) | +| `act_maxs` | `Vector{Float64}` | `[3.0]` | Maximum values of actions (normalized) | +| `act_divs` | `Vector{Int64}` | `[10]` | Action space grid size | +| `num_episodes` | `Int64` | `1000` | Number of episodes | +| `alpha` | `Float64` | `0.1` | Learning rate | +| `gamma` | `Float64` | `1.0` | Discount factor | +| `eps` | `Float64` | `0.25` | Exploration parameter | +| `reverse_update` | `Bool` | `true` | Update table in time-reverse order | + #### Soft actor-critic >This feature is contained in a submodule, and must be explicitly enabled. @@ -285,8 +303,8 @@ Soft actor-critic (SAC) is a deep reinforcement learning algorithm that simultan | - | - | - | - | | `obs_dim` | `Int64` | none | Dimension of observation space | | `act_dim` | `Int64` | none | Dimension of action space | -| `act_mins` | `Vector{Float64}` | none | Minimum values of actions | -| `act_maxs` | `Vector{Float64}` | none | Maximum values of actions | +| `act_mins` | `Vector{Float64}` | none | Minimum values of actions (normalized) | +| `act_maxs` | `Vector{Float64}` | none | Maximum values of actions (normalized) | | `gamma` | `Float64` | `0.999` | Discount factor | | `max_buffer_size` | `Int64` | `100000` | Maximum number of timesteps in buffer | | `hidden_sizes` | `Vector{Int}` | `[100,100,100]` | Dimensions of hidden layers | From 23d4664fd24673d70a8276ece2ad1d92510ce04c Mon Sep 17 00:00:00 2001 From: Rory Lipkis Date: Sun, 25 Sep 2022 23:05:56 -0700 Subject: [PATCH 4/9] julia 1.8 compatibility --- examples/cartpole/cartpole.ipynb | 3506 +- examples/pvv/pvv.ipynb | 39401 +--------------- examples/walk2d/walk2d.ipynb | 5283 +-- .../PolicyValueVerification/src/network.jl | 8 +- src/utils.jl | 2 +- test/runtests.jl | 6 +- 6 files changed, 31 insertions(+), 48175 deletions(-) diff --git a/examples/cartpole/cartpole.ipynb b/examples/cartpole/cartpole.ipynb index b386163..9b78ee5 100644 --- a/examples/cartpole/cartpole.ipynb +++ b/examples/cartpole/cartpole.ipynb @@ -297,1110 +297,7 @@ "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" }, "execution_count": 8, "metadata": {}, @@ -1491,7 +388,7 @@ ], "source": [ "AdaStress.enable(\"SoftActorCritic\")\n", - "using AdaStress.SoftActorCritic" + "using .SoftActorCritic" ] }, { @@ -1504,7 +401,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "\r", + "\r\n", "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:03:42\u001b[39m\r\n", "\u001b[34m epoch: 150\u001b[39m\r\n", "\u001b[34m score: 75.326614\u001b[39m\r\n", @@ -1562,115 +459,7 @@ "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" }, "execution_count": 12, "metadata": {}, @@ -1697,1936 +486,14 @@ "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" }, "metadata": {}, "output_type": "display_data" }, { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" }, "metadata": {}, "output_type": "display_data" @@ -3668,366 +535,7 @@ "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" }, "execution_count": 14, "metadata": {}, diff --git a/examples/pvv/pvv.ipynb b/examples/pvv/pvv.ipynb index a22845c..5b68d09 100644 --- a/examples/pvv/pvv.ipynb +++ b/examples/pvv/pvv.ipynb @@ -79,8 +79,8 @@ "metadata": {}, "outputs": [], "source": [ - "using AdaStress.PolicyValueVerification\n", - "using AdaStress.SoftActorCritic" + "using .PolicyValueVerification\n", + "using .SoftActorCritic" ] }, { @@ -119,795 +119,7 @@ "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n\n\n\n\n\n\n" }, "execution_count": 7, "metadata": {}, @@ -1007,9132 +219,7 @@ }, { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n\n\n\n\n\n\n" }, "execution_count": 11, "metadata": {}, @@ -10151,12009 +238,7 @@ "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n\n\n\n\n\n\n" }, "execution_count": 12, "metadata": {}, @@ -22275,7 +360,7 @@ "metadata": {}, "outputs": [], "source": [ - "@everywhere using AdaStress.PolicyValueVerification" + "@everywhere using .PolicyValueVerification" ] }, { @@ -22321,17482 +406,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "\r", - "\u001b[32mProgress: 57%|████████████████████████ | ETA: 0:00:01\u001b[39m\r", + "\r\n", + "\u001b[32mProgress: 57%|████████████████████████ | ETA: 0:00:01\u001b[39m\r\n", "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:00:01\u001b[39m\n" ] }, { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n\n\n\n\n\n\n" }, "execution_count": 20, "metadata": {}, diff --git a/examples/walk2d/walk2d.ipynb b/examples/walk2d/walk2d.ipynb index 7046dd7..45a6fac 100644 --- a/examples/walk2d/walk2d.ipynb +++ b/examples/walk2d/walk2d.ipynb @@ -463,1540 +463,7 @@ }, { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" }, "execution_count": 12, "metadata": {}, @@ -2030,1533 +497,7 @@ }, { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" }, "execution_count": 13, "metadata": {}, @@ -3592,7 +533,7 @@ ], "source": [ "AdaStress.enable(\"SoftActorCritic\")\n", - "using AdaStress.SoftActorCritic" + "using .SoftActorCritic" ] }, { @@ -3605,7 +546,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "\r", + "\r\n", "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:06:00\u001b[39m\r\n", "\u001b[34m epoch: 100\u001b[39m\r\n", "\u001b[34m score: 35.797775\u001b[39m\r\n", @@ -3659,125 +600,7 @@ "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" }, "execution_count": 16, "metadata": {}, @@ -3811,1350 +634,7 @@ }, { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" }, "execution_count": 17, "metadata": {}, @@ -5181,756 +661,7 @@ "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] + "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n\n\n\n\n\n\n" }, "execution_count": 18, "metadata": {}, diff --git a/src/analysis/PolicyValueVerification/src/network.jl b/src/analysis/PolicyValueVerification/src/network.jl index f739108..4a721cc 100644 --- a/src/analysis/PolicyValueVerification/src/network.jl +++ b/src/analysis/PolicyValueVerification/src/network.jl @@ -72,8 +72,8 @@ function retrain_tanh(; depth::Int64=1, width::Int64=10, num_iter::Int64=10000, d2 = Dense(reshape([0.5f0, -0.5f0], 1, 2)) layers = Dense[] for d in m.layers - W = [d.W zero(d.W); zero(d.W) d.W] - b = [d.b; d.b] + W = [d.weight zero(d.weight); zero(d.weight) d.weight] + b = [d.bias; d.bias] push!(layers, Dense(W, b, d.σ)) end @@ -180,8 +180,8 @@ function squash_model(ls::Vector{Float64}, us::Vector{Float64}) n = length(ls) layers = Dense[] for d in load_tanh().layers - W = rep_diag(d.W, n) - b = repeat(d.b, n) + W = rep_diag(d.weight, n) + b = repeat(d.bias, n) push!(layers, Dense(W, b, d.σ)) end diff --git a/src/utils.jl b/src/utils.jl index 3b66446..40a10bc 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -117,7 +117,7 @@ function enable(submodules::Vector{String}; verbose::Int64=1) Pkg.activate(ENV_DIR) Pkg.develop(pkgs) for submodule in submodules - @eval using $(Symbol(submodule)) + @eval Main using $(Symbol(submodule)) # used to be able to @eval within AdaStress end end @verboseif (verbose >= 1) foreach(s -> @info("Enabled submodule $s."), submodules) diff --git a/test/runtests.jl b/test/runtests.jl index 6ad19bf..159cb1e 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -39,7 +39,7 @@ end @testset "Solvers" begin @test begin AdaStress.enable("SoftActorCritic") - using AdaStress.SoftActorCritic + using .SoftActorCritic ac = SoftActorCritic.MLPActorCritic(1, 1, [-1.0], [1.0]) ac isa AdaStress.GlobalResult end @@ -48,7 +48,7 @@ end @testset "Analysis" begin @test begin AdaStress.enable("PolicyValueVerification") - using AdaStress.PolicyValueVerification + using .PolicyValueVerification ac = SoftActorCritic.MLPActorCritic(1, 1, [-1.0], [1.0]) SoftActorCritic.to_cpu!(ac) nnet = PolicyValueVerification.policy_network(ac; act_mins=[-1.0], act_maxs=[1.0]) @@ -57,7 +57,7 @@ end end # Example notebooks to be tested (cells beginning with `# autoskip` are not executed) -envs = ["walk1d", "walk2d", "pvv"] +envs = ["walk1d", "walk2d"] for env in envs @testset "Example: $env" begin From 81377774d60d45c3b2cfa467aa109702343e76b9 Mon Sep 17 00:00:00 2001 From: Rory Lipkis Date: Mon, 18 Mar 2024 16:35:23 -0700 Subject: [PATCH 5/9] unlinked submodule manager, moved SAC into main package --- Project.toml | 9 ++++++++- src/AdaStress.jl | 5 ----- src/analysis/Analysis.jl | 4 ---- src/solvers/Solvers.jl | 4 ++-- src/solvers/global/SoftActorCritic/Project.toml | 17 ----------------- .../{src => }/SoftActorCritic.jl | 0 .../global/SoftActorCritic/{src => }/core.jl | 0 .../SoftActorCritic/{src => }/distributed.jl | 0 .../SoftActorCritic/{src => }/replay_buffer.jl | 0 .../global/SoftActorCritic/{src => }/sac.jl | 0 .../global/SoftActorCritic/{src => }/utils.jl | 0 11 files changed, 10 insertions(+), 29 deletions(-) delete mode 100644 src/solvers/global/SoftActorCritic/Project.toml rename src/solvers/global/SoftActorCritic/{src => }/SoftActorCritic.jl (100%) rename src/solvers/global/SoftActorCritic/{src => }/core.jl (100%) rename src/solvers/global/SoftActorCritic/{src => }/distributed.jl (100%) rename src/solvers/global/SoftActorCritic/{src => }/replay_buffer.jl (100%) rename src/solvers/global/SoftActorCritic/{src => }/sac.jl (100%) rename src/solvers/global/SoftActorCritic/{src => }/utils.jl (100%) diff --git a/Project.toml b/Project.toml index 6b650ac..000fa49 100644 --- a/Project.toml +++ b/Project.toml @@ -6,9 +6,15 @@ version = "0.1.0" [deps] BSON = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" Bijections = "e2ed5e7c-b2de-5872-ae92-c73ca462fb04" +CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" +cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" CommonRLInterface = "d842c3ba-07a1-494f-bbec-f5741b0a3e98" DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" +Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" +Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" @@ -17,9 +23,10 @@ Sockets = "6462fe0b-24de-5631-8697-dd941f90decc" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" TOML = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [compat] -julia = "1.7" +julia = "1.10" [extras] Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/src/AdaStress.jl b/src/AdaStress.jl index f295ec4..6c03652 100644 --- a/src/AdaStress.jl +++ b/src/AdaStress.jl @@ -34,7 +34,6 @@ system under test. See documentation for usage. """ module AdaStress -include("utils.jl") include("interface/Interface.jl") include("solvers/Solvers.jl") include("analysis/Analysis.jl") @@ -47,8 +46,4 @@ export Interface export Solvers export Analysis -function __init__() - init_submodules() -end - end diff --git a/src/analysis/Analysis.jl b/src/analysis/Analysis.jl index 8c35c7b..d01d69c 100644 --- a/src/analysis/Analysis.jl +++ b/src/analysis/Analysis.jl @@ -33,8 +33,4 @@ Analysis framework. Provides utilities to analyze and visualize solver results. """ module Analysis -using AdaStress: exclude - -exclude("PolicyValueVerification") - end diff --git a/src/solvers/Solvers.jl b/src/solvers/Solvers.jl index 555f3d2..4f35741 100644 --- a/src/solvers/Solvers.jl +++ b/src/solvers/Solvers.jl @@ -33,7 +33,7 @@ Solvers module. Provides algorithms for solving AST MDPs. """ module Solvers -using AdaStress: exclude, Interface +using AdaStress: Interface using DataStructures import DataStructures: enqueue! @@ -55,7 +55,7 @@ export include("types.jl") include("utils.jl") -exclude("global/SoftActorCritic") +include("global/SoftActorCritic/SoftActorCritic.jl") include("local/MonteCarloSearch/MonteCarloSearch.jl") include("local/MonteCarloTreeSearch/MonteCarloTreeSearch.jl") diff --git a/src/solvers/global/SoftActorCritic/Project.toml b/src/solvers/global/SoftActorCritic/Project.toml deleted file mode 100644 index eb4d584..0000000 --- a/src/solvers/global/SoftActorCritic/Project.toml +++ /dev/null @@ -1,17 +0,0 @@ -name = "SoftActorCritic" -uuid = "ba91fdd0-14ec-11ec-1417-d3c7cc1fb30a" - -[deps] -AdaStress = "f8632b6a-8763-4da0-bfaf-5f7707adef25" -BSON = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" -CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" -CommonRLInterface = "d842c3ba-07a1-494f-bbec-f5741b0a3e98" -Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" -Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" -Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" -Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" -LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" -Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" diff --git a/src/solvers/global/SoftActorCritic/src/SoftActorCritic.jl b/src/solvers/global/SoftActorCritic/SoftActorCritic.jl similarity index 100% rename from src/solvers/global/SoftActorCritic/src/SoftActorCritic.jl rename to src/solvers/global/SoftActorCritic/SoftActorCritic.jl diff --git a/src/solvers/global/SoftActorCritic/src/core.jl b/src/solvers/global/SoftActorCritic/core.jl similarity index 100% rename from src/solvers/global/SoftActorCritic/src/core.jl rename to src/solvers/global/SoftActorCritic/core.jl diff --git a/src/solvers/global/SoftActorCritic/src/distributed.jl b/src/solvers/global/SoftActorCritic/distributed.jl similarity index 100% rename from src/solvers/global/SoftActorCritic/src/distributed.jl rename to src/solvers/global/SoftActorCritic/distributed.jl diff --git a/src/solvers/global/SoftActorCritic/src/replay_buffer.jl b/src/solvers/global/SoftActorCritic/replay_buffer.jl similarity index 100% rename from src/solvers/global/SoftActorCritic/src/replay_buffer.jl rename to src/solvers/global/SoftActorCritic/replay_buffer.jl diff --git a/src/solvers/global/SoftActorCritic/src/sac.jl b/src/solvers/global/SoftActorCritic/sac.jl similarity index 100% rename from src/solvers/global/SoftActorCritic/src/sac.jl rename to src/solvers/global/SoftActorCritic/sac.jl diff --git a/src/solvers/global/SoftActorCritic/src/utils.jl b/src/solvers/global/SoftActorCritic/utils.jl similarity index 100% rename from src/solvers/global/SoftActorCritic/src/utils.jl rename to src/solvers/global/SoftActorCritic/utils.jl From 5af756ca06dbdf4071426d4cba1cca1ee82c9f0d Mon Sep 17 00:00:00 2001 From: Rory Lipkis Date: Tue, 19 Mar 2024 10:32:26 -0700 Subject: [PATCH 6/9] disabling tests --- test/runtests.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/runtests.jl b/test/runtests.jl index 6ad19bf..96cd3a1 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -28,6 +28,7 @@ # SUCH MATTER SHALL BE THE IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT. # ****************************************************************************************** +#= using AdaStress using NBInclude using Test @@ -70,3 +71,4 @@ for env in envs end end end +=# From 4689482217b99339a2ec8565505b14045570987c Mon Sep 17 00:00:00 2001 From: Rory Lipkis Date: Tue, 19 Mar 2024 11:16:14 -0700 Subject: [PATCH 7/9] re-adding minimal tests --- test/runtests.jl | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index 96cd3a1..764653c 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -28,7 +28,6 @@ # SUCH MATTER SHALL BE THE IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT. # ****************************************************************************************** -#= using AdaStress using NBInclude using Test @@ -39,13 +38,11 @@ end @testset "Solvers" begin @test begin - AdaStress.enable("SoftActorCritic") - using AdaStress.SoftActorCritic - ac = SoftActorCritic.MLPActorCritic(1, 1, [-1.0], [1.0]) - ac isa AdaStress.GlobalResult + AdaStress.SoftActorCritic.MLPActorCritic(1, 1, [-1.0], [1.0]) isa AdaStress.GlobalResult end end +#= @testset "Analysis" begin @test begin AdaStress.enable("PolicyValueVerification") From dab0c917c576637fd3d9d2f1e0a3a23cf996450d Mon Sep 17 00:00:00 2001 From: Rory Lipkis Date: Fri, 19 Apr 2024 16:48:06 -0700 Subject: [PATCH 8/9] updating example notebooks to 1.10 --- examples/cartpole/Project.toml | 6 +- examples/cartpole/cartpole.ipynb | 408 +- examples/cartpole/dqn_policy.bson | Bin 227132 -> 0 bytes examples/cas/cas.ipynb | 15835 +----------------- examples/fms/fms.ipynb | 307 +- examples/pedestrian/pedestrian-client.ipynb | 115 +- examples/pedestrian/pedestrian-server.ipynb | 419 +- examples/walk1d/walk1d.ipynb | 458 +- examples/walk2d/walk2d.ipynb | 274 +- 9 files changed, 213 insertions(+), 17609 deletions(-) delete mode 100644 examples/cartpole/dqn_policy.bson diff --git a/examples/cartpole/Project.toml b/examples/cartpole/Project.toml index 7d9a931..e7a6566 100644 --- a/examples/cartpole/Project.toml +++ b/examples/cartpole/Project.toml @@ -1,11 +1,7 @@ [deps] AdaStress = "f8632b6a-8763-4da0-bfaf-5f7707adef25" -BSON = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" -Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" -NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -ReinforcementLearning = "158674fc-8238-5cab-b5ba-03dfc80d1318" -StableRNGs = "860ef19b-820b-49d6-a774-d7a799459cd3" +ReinforcementLearningExperiments = "6bd458e5-1694-412f-b601-3a888375c491" diff --git a/examples/cartpole/cartpole.ipynb b/examples/cartpole/cartpole.ipynb index 9b78ee5..6ed3014 100644 --- a/examples/cartpole/cartpole.ipynb +++ b/examples/cartpole/cartpole.ipynb @@ -14,21 +14,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "loose-program", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\cartpole`\n", - "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\cartpole\\Project.toml`\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\cartpole\\Manifest.toml`\n" - ] - } - ], + "outputs": [], "source": [ "using Pkg\n", "Pkg.activate(\".\")\n", @@ -36,117 +25,6 @@ "Pkg.instantiate()" ] }, - { - "cell_type": "markdown", - "id": "municipal-teach", - "metadata": {}, - "source": [ - "# Loading cart-pole controller (SUT)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "extreme-carbon", - "metadata": {}, - "outputs": [], - "source": [ - "# to learn\n", - "using ReinforcementLearning\n", - "\n", - "# to load\n", - "using BSON\n", - "using Flux\n", - "using NNlib\n", - "using Random\n", - "using StableRNGs" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ready-revelation", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "learn_policy (generic function with 1 method)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# This function can be invoked to re-train the DQN policy if desired.\n", - "function learn_policy()\n", - " seed = 123\n", - " rng = StableRNG(seed)\n", - " env = CartPoleEnv(; T = Float32, rng = rng)\n", - " ns, na = length(state(env)), length(action_space(env))\n", - "\n", - " policy = Agent(\n", - " policy = QBasedPolicy(\n", - " learner = BasicDQNLearner(\n", - " approximator = NeuralNetworkApproximator(\n", - " model = Chain(\n", - " Dense(ns, 128, relu; init = glorot_uniform(rng)),\n", - " Dense(128, 128, relu; init = glorot_uniform(rng)),\n", - " Dense(128, na; init = glorot_uniform(rng)),\n", - " ) |> cpu,\n", - " optimizer = ADAM(),\n", - " ),\n", - " batch_size = 32,\n", - " min_replay_history = 100,\n", - " loss_func = Flux.huber_loss,\n", - " rng = rng,\n", - " ),\n", - " explorer = EpsilonGreedyExplorer(\n", - " kind = :exp,\n", - " ϵ_stable = 0.01,\n", - " decay_steps = 500,\n", - " rng = rng,\n", - " ),\n", - " ),\n", - " trajectory = CircularArraySARTTrajectory(\n", - " capacity = 1000,\n", - " state = Vector{Float32} => (ns,),\n", - " ),\n", - " )\n", - " stop_condition = StopAfterStep(100_000)\n", - " hook = ComposedHook(TotalRewardPerEpisode(), TimePerStep())\n", - " \n", - " ex = Experiment(policy, env, stop_condition, hook, \"\")\n", - " run(ex)\n", - " policy = policy.policy\n", - " policy.explorer.is_training = false\n", - " BSON.@save \"dqn_policy.bson\" policy\n", - "end" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "complimentary-renaissance", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "load_policy (generic function with 1 method)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "load_policy() = BSON.load(\"dqn_policy.bson\")[:policy]" - ] - }, { "cell_type": "markdown", "id": "postal-contract", @@ -157,21 +35,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "introductory-thompson", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "false" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "using Random\n", "using AdaStress\n", @@ -179,31 +46,32 @@ "using Distributions\n", "using Plots\n", "using ProgressMeter\n", + "using ReinforcementLearningExperiments\n", "ProgressMeter.ijulia_behavior(:clear)" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, + "id": "f2ec6694-4ae0-45c9-98be-238f60159c3a", + "metadata": {}, + "outputs": [], + "source": [ + "ex = run(E`JuliaRL_DQN_CartPole`)\n", + "ex.policy.policy.explorer.ϵ_stable = 0" + ] + }, + { + "cell_type": "code", + "execution_count": null, "id": "appropriate-tender", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "CartPoleSim" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Base.@kwdef mutable struct CartPoleSim <: Interface.GrayBox\n", - " env::ReinforcementLearning.AbstractEnv = CartPoleEnv()\n", + " env::AbstractEnv = ex.env\n", " tmax::Float64 = 50.0\n", - " pi::ReinforcementLearning.AbstractPolicy = load_policy()\n", + " pi::AbstractPolicy = ex.policy.policy\n", " x_dist::Interface.Environment = Interface.Environment(:wind => Normal(0.0, 0.01))\n", " log::Dict{Symbol, Any} = Dict{Symbol, Any}()\n", " logging::Bool = false\n", @@ -212,24 +80,13 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "copyrighted-possible", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "mdp_env (generic function with 1 method)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function Interface.reset!(sim::CartPoleSim)\n", - " ReinforcementLearning.reset!(sim.env)\n", + " reset!(sim.env)\n", " if sim.logging\n", " sim.log[:s] = []\n", " sim.log[:x] = []\n", @@ -240,13 +97,13 @@ "\n", "Interface.environment(sim::CartPoleSim) = sim.x_dist\n", "\n", - "Interface.observe(sim::CartPoleSim) = push!(copy(ReinforcementLearning.state(sim.env)), sim.env.t / sim.tmax)\n", + "Interface.observe(sim::CartPoleSim) = push!(copy(state(sim.env)), sim.env.t / sim.tmax)\n", "\n", "function Interface.step!(sim::CartPoleSim, x::Interface.EnvironmentValue)\n", - " a = sim.pi(sim.env)\n", - " s = ReinforcementLearning.state(sim.env)\n", + " a = plan!(sim.pi, sim.env)\n", + " s = state(sim.env)\n", " s[2] += x[:wind]\n", - " sim.env(a)\n", + " act!(sim.env, a)\n", " if sim.logging\n", " push!(sim.log[:s], Interface.observe(sim))\n", " push!(sim.log[:x], x[:wind])\n", @@ -266,11 +123,11 @@ "interval_dist(x::Real, l::Real, u::Real) = (l < x < u) ? min(x - l, u - x) : zero(x)\n", "\n", "function Interface.distance(sim::CartPoleSim)\n", - " s = ReinforcementLearning.state(sim.env)\n", + " s = state(sim.env)\n", " dx = interval_dist(s[1], sim.env.params.xthreshold)\n", " dθ = interval_dist(s[3], sim.env.params.thetathreshold)\n", " d = sqrt(dx^2 + dθ^2)\n", - " return d\n", + " return Float64(d)\n", "end\n", "\n", "function mdp_env(σ::Float64)\n", @@ -291,19 +148,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "civic-knowing", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Random.seed!(0)\n", "p = plot(title=\"\\\\theta\")\n", @@ -332,25 +180,10 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "dangerous-clearing", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:00:05\u001b[39m\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "14 naturally-occurring failures found out of 10000 episodes.\n" - ] - } - ], + "outputs": [], "source": [ "Random.seed!(0)\n", "c = 0\n", @@ -373,70 +206,37 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "reduced-retreat", + "execution_count": null, + "id": "ddcd2347-5dfa-4799-b24c-f0066700439d", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Enabled submodule SoftActorCritic.\n", - "└ @ AdaStress C:\\Users\\rlipkis\\.julia\\dev\\adastress\\src\\utils.jl:93\n" - ] - } - ], + "outputs": [], "source": [ - "AdaStress.enable(\"SoftActorCritic\")\n", - "using .SoftActorCritic" + "using AdaStress.SoftActorCritic" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "crucial-citizenship", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\r\n", - "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:03:42\u001b[39m\r\n", - "\u001b[34m epoch: 150\u001b[39m\r\n", - "\u001b[34m score: 75.326614\u001b[39m\r\n", - "\u001b[34m stdev: 0.87628365\u001b[39m\r\n", - "\u001b[34m fails: 0.96\u001b[39m\n" - ] - }, - { - "data": { - "text/plain": [ - "(MLPActorCritic(SoftActorCritic.SquashedGaussianMLPActor(Chain(Dense(5, 30, relu), Dense(30, 30, relu), Dense(30, 30, relu)), Dense(30, 1), Dense(30, 1), Float32[-3.0], Float32[3.0], Random._GLOBAL_RNG(), nothing, false), SoftActorCritic.MLPQFunction[SoftActorCritic.MLPQFunction(Chain(Dense(6, 30, relu), Dense(30, 30, relu), Dense(30, 30, relu), Dense(30, 1))), SoftActorCritic.MLPQFunction(Chain(Dense(6, 30, relu), Dense(30, 30, relu), Dense(30, 30, relu), Dense(30, 1))), SoftActorCritic.MLPQFunction(Chain(Dense(6, 30, relu), Dense(30, 30, relu), Dense(30, 30, relu), Dense(30, 1)))]), Dict{String, Any}(\"score\" => Any[-1.2982365f0, -0.45816767f0, -0.26920554f0, -0.24219736f0, -0.27620187f0, -0.18340729f0, -0.17002267f0, -1.0217903f0, -0.46302056f0, -0.3155263f0 … 75.00554f0, 74.15143f0, 73.943085f0, 75.13819f0, 75.35046f0, 74.6657f0, 75.3588f0, 75.16508f0, 74.918846f0, 75.326614f0], \"stdev\" => Any[0.09985117f0, 0.07230078f0, 0.07011744f0, 0.07710096f0, 0.07252703f0, 0.06111533f0, 0.060430225f0, 0.06532489f0, 0.061455257f0, 0.054803085f0 … 0.9653635f0, 0.9764626f0, 1.0118048f0, 0.9269699f0, 0.92986727f0, 0.95796734f0, 0.9261049f0, 0.909985f0, 0.8943766f0, 0.87628365f0], \"fails\" => Any[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 … 0.98, 0.95, 0.95, 0.98, 0.99, 0.99, 0.99, 1.0, 0.98, 0.96]))" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Random.seed!(0)\n", "\n", - "sac = AdaStress.SoftActorCritic.SAC(;\n", + "sac = SAC(;\n", " obs_dim=5, \n", " act_dim=1,\n", " act_mins=-3.0*ones(1),\n", " act_maxs=3.0*ones(1),\n", - " hidden_sizes=[30,30,30],\n", - " q_optimizer=AdaBelief(1e-4),\n", - " pi_optimizer=AdaBelief(1e-4),\n", - " alpha_optimizer=AdaBelief(1e-4),\n", + " hidden_sizes=[32,64,32],\n", + " q_optimizer=SoftActorCritic.AdaBelief(1e-4),\n", + " pi_optimizer=SoftActorCritic.AdaBelief(1e-4),\n", + " alpha_optimizer=SoftActorCritic.AdaBelief(1e-4),\n", " gamma=1.0,\n", " num_q=3,\n", " max_buffer_size=100_000,\n", " batch_size=1024,\n", - " epochs=150,\n", + " epochs=500,\n", " steps_per_epoch=1_000,\n", " start_steps=10_000,\n", " max_ep_len=100,\n", @@ -453,19 +253,10 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "early-raise", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "plot(info[\"score\"]; label=:none)" ] @@ -480,30 +271,15 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "accessible-cleaner", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "Random.seed!(0)\n", "pθ = plot(; title=\"\\\\theta\", ga=0.5, minorgrid=true, minorgridalpha=0.25)\n", "px = plot(; title=\"x\", ga=0.5, minorgrid=true, minorgridalpha=0.25)\n", - "mdp = mdp_env(0.1)\n", + "mdp = mdp_env(0.025)\n", "mdp.sim.logging = true\n", "n_eps = 100\n", "\n", @@ -527,21 +303,10 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "nasty-bunny", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "metadata": {}, + "outputs": [], "source": [ "plot(mdp.sim.log[:x]; title=\"Sample disturbance\", label=:none, lc=:black, ga=0.5, minorgrid=true, minorgridalpha=0.25)" ] @@ -556,21 +321,10 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "dominican-vitamin", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Rectangle (generic function with 1 method)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function Circle(xc::Real, yc::Real, r::Real; n::Int64=100)\n", " θ = range(0, 2π; length=n+1)\n", @@ -588,23 +342,12 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "instructional-pricing", "metadata": { "scrolled": true }, - "outputs": [ - { - "data": { - "text/plain": [ - "movie (generic function with 2 methods)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function movie(sim::CartPoleSim, filename::String=\"animation\")\n", " cart_length = 0.5\n", @@ -679,35 +422,10 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "mature-symphony", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Saved animation to \n", - "│ fn = C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\cartpole\\animation.mp4\n", - "└ @ Plots C:\\Users\\rlipkis\\.julia\\packages\\Plots\\YAlrZ\\src\\animation.jl:114\n" - ] - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "Plots.AnimatedGif(\"C:\\\\Users\\\\rlipkis\\\\.julia\\\\dev\\\\adastress\\\\examples\\\\cartpole\\\\animation.mp4\")" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "metadata": {}, + "outputs": [], "source": [ "Random.seed!(0)\n", "mdp = mdp_env(0.1)\n", @@ -728,15 +446,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.7.0", + "display_name": "Julia 1.10.2", "language": "julia", - "name": "julia-1.7" + "name": "julia-1.10" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.7.0" + "version": "1.10.2" } }, "nbformat": 4, diff --git a/examples/cartpole/dqn_policy.bson b/examples/cartpole/dqn_policy.bson deleted file mode 100644 index 91e9b797269c34164fdd916579905d8055f77799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227132 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 diff --git a/examples/cas/cas.ipynb b/examples/cas/cas.ipynb index 10e4589..26f0daf 100644 --- a/examples/cas/cas.ipynb +++ b/examples/cas/cas.ipynb @@ -19,23 +19,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "limited-circuit", "metadata": { "scrolled": true }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\cas`\n", - "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\cas\\Project.toml`\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\cas\\Manifest.toml`\n" - ] - } - ], + "outputs": [], "source": [ "using Pkg\n", "Pkg.activate(\".\")\n", @@ -45,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "corrected-rescue", "metadata": {}, "outputs": [], @@ -59,21 +48,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "dated-revelation", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "mdp_env (generic function with 1 method)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function mdp_env(; kwargs...)\n", " sim = SimpleACAS.Simulator(; n=2, seed=0, randomize=false, kwargs...)\n", @@ -93,1491 +71,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "indoor-lender", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mdp = mdp_env(; logging=true)\n", "Random.seed!(0)\n", @@ -1595,25 +92,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "caring-timer", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:00:07\u001b[39m\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2 naturally-occurring failures found out of 10000 episodes (0.02%).\n" - ] - } - ], + "outputs": [], "source": [ "Random.seed!(0)\n", "c = 0\n", @@ -1637,38 +119,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "working-picking", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:01:10\u001b[39m\n" - ] - }, - { - "data": { - "text/plain": [ - "DataStructures.PriorityQueue{Any, Any, Base.Order.ForwardOrdering} with 10 entries:\n", - " MCTSResult(Dict{Symbol, Any}[Dict(:cmd_1=>[3.32626, -4.53711, -0.7… => 12370.7\n", - " MCTSResult(Dict{Symbol, Any}[Dict(:cmd_1=>[3.32626, -4.53711, -0.7… => 12372.2\n", - " MCTSResult(Dict{Symbol, Any}[Dict(:cmd_1=>[3.32626, -4.53711, -0.7… => 12373.7\n", - " MCTSResult(Dict{Symbol, Any}[Dict(:cmd_1=>[3.32626, -4.53711, -0.7… => 12375.2\n", - " MCTSResult(Dict{Symbol, Any}[Dict(:cmd_1=>[3.32626, -4.53711, -0.7… => 12382.2\n", - " MCTSResult(Dict{Symbol, Any}[Dict(:cmd_1=>[8.64674, -5.52582, 0.87… => 12393.9\n", - " MCTSResult(Dict{Symbol, Any}[Dict(:cmd_1=>[3.32626, -4.53711, -0.7… => 12396.5\n", - " MCTSResult(Dict{Symbol, Any}[Dict(:cmd_1=>[3.32626, -4.53711, -0.7… => 12407.3\n", - " MCTSResult(Dict{Symbol, Any}[Dict(:cmd_1=>[-3.6445, -0.483991, -0.… => 12415.6\n", - " MCTSResult(Dict{Symbol, Any}[Dict(:cmd_1=>[3.32626, -4.53711, -0.7… => 12422.9" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mcts = AdaStress.Solvers.MCTS(num_iterations=100_000)\n", "sol = mcts(mdp_env)" @@ -1684,14265 +138,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "equivalent-render", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "metadata": {}, + "outputs": [], "source": [ "mdp = mdp_env(; logging=true)\n", "\n", @@ -15966,15 +165,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.7.0", + "display_name": "Julia 1.10.2", "language": "julia", - "name": "julia-1.7" + "name": "julia-1.10" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.7.0" + "version": "1.10.2" } }, "nbformat": 4, diff --git a/examples/fms/fms.ipynb b/examples/fms/fms.ipynb index 8226b9f..f4f427e 100644 --- a/examples/fms/fms.ipynb +++ b/examples/fms/fms.ipynb @@ -18,21 +18,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "dressed-reaction", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\fms`\n", - "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\fms\\Project.toml`\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\fms\\Manifest.toml`\n" - ] - } - ], + "outputs": [], "source": [ "using Pkg\n", "Pkg.activate(\".\")\n", @@ -42,19 +31,10 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "raising-middle", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Precompiling Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80]\n", - "└ @ Base loading.jl:1423\n" - ] - } - ], + "outputs": [], "source": [ "using AdaStress\n", "using Distributions\n", @@ -75,21 +55,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "continued-thriller", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Plan" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "\"\"\"\n", "A waypoint consists of cartesian coordinates and time of arrival.\n", @@ -117,21 +86,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "editorial-peeing", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "evaluate" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "struct CollisionModule\n", " d_crit::Float64 # critical separation threshold [miles]\n", @@ -254,21 +212,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "novel-livestock", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "FMSim" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "\"\"\"\n", "Initial position of aircrafts, determined by Gaussian spread.\n", @@ -302,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "flying-projector", "metadata": {}, "outputs": [], @@ -354,21 +301,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "cultural-tourism", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "100.0" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mdp = Interface.ASTMDP(FMSim(; num_aircraft=2); episodic=true)\n", "mdp.reward.event_bonus = 100.0" @@ -376,66 +312,20 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "returning-wrist", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "AdaStress.Solvers.MonteCarloTreeSearch.MCTS(100000, 10, 1.0, 0.7, 1.0, nothing)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mcts = AdaStress.Solvers.MCTS(num_iterations=100_000)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "light-karaoke", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:00:09\u001b[39m39mm39m\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 10.501736 seconds (139.77 M allocations: 6.454 GiB, 10.73% gc time, 21.19% compilation time)\n" - ] - }, - { - "data": { - "text/plain": [ - "DataStructures.PriorityQueue{Any, Any, Base.Order.ForwardOrdering} with 10 entries:\n", - " MCTSResult(UInt32[0xaa01c11f, 0x75ac8a97, 0x90db374b, 0x77809412, … => 73.892\n", - " MCTSResult(UInt32[0xaa01c11f, 0x75ac8a97, 0x90db374b, 0x77809412, … => 73.8928\n", - " MCTSResult(UInt32[0xaa01c11f, 0x75ac8a97, 0x90db374b, 0x77809412, … => 73.9045\n", - " MCTSResult(UInt32[0xaa01c11f, 0x75ac8a97, 0x90db374b, 0x77809412, … => 73.9092\n", - " MCTSResult(UInt32[0xaa01c11f, 0x75ac8a97, 0x90db374b, 0x77809412, … => 73.9327\n", - " MCTSResult(UInt32[0xaa01c11f, 0x75ac8a97, 0x90db374b, 0x77809412, … => 73.9383\n", - " MCTSResult(UInt32[0xaa01c11f, 0x75ac8a97, 0x90db374b, 0x77809412, … => 73.9467\n", - " MCTSResult(UInt32[0xaa01c11f, 0x75ac8a97, 0x90db374b, 0x77809412, … => 73.962\n", - " MCTSResult(UInt32[0xaa01c11f, 0x75ac8a97, 0x90db374b, 0x77809412, … => 73.9684\n", - " MCTSResult(UInt32[0xaa01c11f, 0x75ac8a97, 0x90db374b, 0x77809412, … => 74.0108" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Random.seed!(0)\n", "@time sol = mcts(() -> mdp)" @@ -451,21 +341,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "popular-garage", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "visualize (generic function with 1 method)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function visualize(sim::FMSim)\n", " # all plans\n", @@ -491,148 +370,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "genuine-fifth", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Plan solved in 9.7e-6 seconds.\n", - "Collision detected.\n", - "CDS separation threshold: 528.0 ft\n", - "Sep. at closest approach: 226.3 ft\n" - ] - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "best_path = last(collect(keys(sol)))\n", "AdaStress.Solvers.replay!(mdp, best_path)\n", @@ -650,15 +391,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.7.0", + "display_name": "Julia 1.10.2", "language": "julia", - "name": "julia-1.7" + "name": "julia-1.10" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.7.0" + "version": "1.10.2" } }, "nbformat": 4, diff --git a/examples/pedestrian/pedestrian-client.ipynb b/examples/pedestrian/pedestrian-client.ipynb index 557a2e9..dd06c42 100644 --- a/examples/pedestrian/pedestrian-client.ipynb +++ b/examples/pedestrian/pedestrian-client.ipynb @@ -18,23 +18,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "celtic-clerk", "metadata": { "scrolled": true }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\pedestrian`\n", - "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\pedestrian\\Project.toml`\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\pedestrian\\Manifest.toml`\n" - ] - } - ], + "outputs": [], "source": [ "using Pkg\n", "Pkg.activate(\".\")\n", @@ -44,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "ongoing-regulation", "metadata": {}, "outputs": [], @@ -56,99 +45,40 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "metropolitan-charm", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "AdaStress.Interface.ASTClient(ip\"156.68.48.136\", 2000, nothing, false, false, false, Any[])" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "client = Interface.ASTClient(; ip=Interface.getipaddr(), port=2000)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "challenging-switch", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: ASTServer responded in 1666 milliseconds.\n", - "└ @ AdaStress.Interface C:\\Users\\rlipkis\\.julia\\dev\\adastress\\src\\interface\\remote\\client.jl:131\n" - ] - } - ], + "outputs": [], "source": [ "Interface.connect!(client)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "forced-poker", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "MCTS(10000, 10, 1.0, 0.85, 1.0, nothing)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mcts = MCTS(num_iterations=10_000, α=0.85)" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "brutal-brooklyn", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:01:51\u001b[39m\n" - ] - }, - { - "data": { - "text/plain": [ - "DataStructures.PriorityQueue{Any, Any, Base.Order.ForwardOrdering} with 10 entries:\n", - " MCTSResult(UInt32[0xe67d225b, 0x5f9be755, 0x0aed2eeb, 0x26840a96, … => 1087.52\n", - " MCTSResult(UInt32[0xef05d725, 0xde2fae7c, 0x2cf7afe5, 0x512ae58c, … => 1087.8\n", - " MCTSResult(UInt32[0xe67d225b, 0xaccaa267, 0x9944dbf8, 0x20727eff, … => 1087.81\n", - " MCTSResult(UInt32[0xe67d225b, 0x34e1b7a5, 0x27d8ee5b, 0x4d041c41, … => 1087.82\n", - " MCTSResult(UInt32[0xe67d225b, 0xd21aebe7, 0xd339f33c, 0x6847add5, … => 1087.86\n", - " MCTSResult(UInt32[0xe67d225b, 0x34e1b7a5, 0x900a8fe4, 0xc1741547, … => 1087.87\n", - " MCTSResult(UInt32[0xe67d225b, 0x34e1b7a5, 0xe3ebdc90, 0x0daa5991, … => 1088.13\n", - " MCTSResult(UInt32[0xe67d225b, 0x34e1b7a5, 0x900a8fe4, 0xab3981e6, … => 1088.23\n", - " MCTSResult(UInt32[0xe67d225b, 0x34e1b7a5, 0x900a8fe4, 0x3a475166, … => 1088.29\n", - " MCTSResult(UInt32[0xe67d225b, 0x17803b35, 0x78726223, 0x7ea848d4, … => 1088.46" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Random.seed!(0)\n", "sol = mcts(() -> Interface.generate_mdp(client))" @@ -156,19 +86,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "angry-speed", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "MonteCarloTreeSearch.total_size(mcts.tree) = 10000\n", - "MonteCarloTreeSearch.max_depth(mcts.tree) = 8\n" - ] - } - ], + "outputs": [], "source": [ "@show MonteCarloTreeSearch.total_size(mcts.tree);\n", "@show MonteCarloTreeSearch.max_depth(mcts.tree);" @@ -176,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "competitive-apollo", "metadata": {}, "outputs": [], @@ -186,7 +107,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "gentle-strengthening", "metadata": {}, "outputs": [], @@ -205,15 +126,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.7.0", + "display_name": "Julia 1.10.2", "language": "julia", - "name": "julia-1.7" + "name": "julia-1.10" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.7.0" + "version": "1.10.2" } }, "nbformat": 4, diff --git a/examples/pedestrian/pedestrian-server.ipynb b/examples/pedestrian/pedestrian-server.ipynb index 3875cf6..362dcc2 100644 --- a/examples/pedestrian/pedestrian-server.ipynb +++ b/examples/pedestrian/pedestrian-server.ipynb @@ -22,24 +22,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "horizontal-queens", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\pedestrian`\n", - "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\pedestrian\\Project.toml`\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\pedestrian\\Manifest.toml`\n", - "\u001b[32m\u001b[1mPrecompiling\u001b[22m\u001b[39m project...\n", - "\u001b[32m ✓ \u001b[39mAdaStress\n", - " 1 dependency successfully precompiled in 3 seconds (143 already precompiled)\n" - ] - } - ], + "outputs": [], "source": [ "using Pkg\n", "Pkg.activate(\".\")\n", @@ -57,7 +43,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "painful-cincinnati", "metadata": {}, "outputs": [], @@ -69,21 +55,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "interior-plenty", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "pedestrian_avoidance (generic function with 1 method)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "abstract type Actor end\n", "\n", @@ -126,21 +101,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "round-quest", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "update! (generic function with 3 methods)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "distance(car::SelfDrivingCar, ped::Pedestrian) = sqrt(car.state[1]^2 + ped.state[1]^2)\n", "\n", @@ -206,7 +170,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "nonprofit-miracle", "metadata": {}, "outputs": [], @@ -228,21 +192,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "angry-speed", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1000.0" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mdp = AdaStress.ASTMDP(DriveSim())\n", "mdp.reward.event_bonus = 1000.0" @@ -250,56 +203,29 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "japanese-mason", "metadata": { "scrolled": true }, - "outputs": [ - { - "data": { - "text/plain": [ - "AdaStress.Interface.ASTServer(ip\"0.0.0.0\", 2000, nothing, AdaStress.Interface.ASTMDP{AdaStress.Interface.UnobservableState, AdaStress.Interface.SeedAction}(DriveSim(0.0, 1.0, 15.0, SelfDrivingCar([-100.0, 10.0], [-10.0, 0.5], 0.5, 3.0, 3.0), Pedestrian([-10.0, 0.5], Normal{Float64}(μ=0.0, σ=0.25)), 2.0, Dict{Any, Any}(:ped => MVector{2, Float64}[[-10.0, 0.5]], :car => MVector{2, Float64}[[-100.0, 10.0]], :t => [0.0])), AdaStress.Interface.Reward(true, AdaStress.Interface.GradientHeuristic(), 1000.0, AdaStress.Interface.WeightedObjective(1.0, 1.0, 1.0)), false, 0, Dict{Symbol, AdaStress.Interface.VariableInfo}(), Random.TaskLocalRNG()), nothing, false, false, true)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "server = AdaStress.ASTServer(mdp; ip=Interface.IPv4(0), port=2000)" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "amazing-limitation", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Enter password: ········\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Private token set.\n", - "└ @ AdaStress.Interface C:\\Users\\rlipkis\\.julia\\dev\\adastress\\src\\interface\\remote\\server.jl:50\n" - ] - } - ], + "outputs": [], "source": [ "Interface.set_password(server)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "earlier-optics", "metadata": {}, "outputs": [], @@ -317,21 +243,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "personalized-japanese", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Connected to AST client.\n", - "│ conn = Sockets.TCPSocket(Base.Libc.WindowsRawSocket(0x00000000000004b4) open, 0 bytes waiting)\n", - "└ @ AdaStress.Interface C:\\Users\\rlipkis\\.julia\\dev\\adastress\\src\\interface\\remote\\server.jl:128\n", - "WARNING: using DataStructures.update! in module Main conflicts with an existing identifier.\n" - ] - } - ], + "outputs": [], "source": [ "using BSON\n", "using DataStructures\n", @@ -340,7 +255,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "medieval-seminar", "metadata": {}, "outputs": [], @@ -350,7 +265,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "inclusive-ecuador", "metadata": {}, "outputs": [], @@ -363,148 +278,10 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "judicial-space", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "best_path = collect(keys(sol))[end]\n", "AdaStress.Solvers.replay!(mdp, best_path)\n", @@ -518,152 +295,10 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "imposed-float", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "metadata": {}, + "outputs": [], "source": [ "acc_paths = []\n", "\n", @@ -691,15 +326,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.7.0", + "display_name": "Julia 1.10.2", "language": "julia", - "name": "julia-1.7" + "name": "julia-1.10" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.7.0" + "version": "1.10.2" } }, "nbformat": 4, diff --git a/examples/walk1d/walk1d.ipynb b/examples/walk1d/walk1d.ipynb index dddf126..e134198 100644 --- a/examples/walk1d/walk1d.ipynb +++ b/examples/walk1d/walk1d.ipynb @@ -17,21 +17,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "numerous-merchant", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\walk1d`\n", - "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\walk1d\\Project.toml`\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\walk1d\\Manifest.toml`\n" - ] - } - ], + "outputs": [], "source": [ "using Pkg\n", "Pkg.activate(\".\")\n", @@ -41,19 +30,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "instrumental-tomorrow", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Precompiling AdaStress [f8632b6a-8763-4da0-bfaf-5f7707adef25]\n", - "└ @ Base loading.jl:1423\n" - ] - } - ], + "outputs": [], "source": [ "using AdaStress\n", "import AdaStress.BlackBox\n", @@ -70,7 +50,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "found-generic", "metadata": {}, "outputs": [], @@ -81,21 +61,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "architectural-distance", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "update! (generic function with 1 method)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Base.@kwdef mutable struct Walk1D <: AdaStress.BlackBox\n", " t::Float64=0.0\n", @@ -123,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "demonstrated-commerce", "metadata": {}, "outputs": [], @@ -145,44 +114,22 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "amended-pencil", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "AdaStress.Solvers.MonteCarloSearch.MCS(100000, 10)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mcs = AdaStress.Solvers.MCS(num_iterations=100_000)" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "unlikely-thinking", "metadata": { "scrolled": true }, - "outputs": [ - { - "data": { - "text/plain": [ - "100.0" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mdp = AdaStress.ASTMDP(Walk1D())\n", "mdp.reward.event_bonus = 100.0" @@ -190,45 +137,10 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "insured-gossip", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:00:02\u001b[39m\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 3.354207 seconds (32.08 M allocations: 1.296 GiB, 5.96% gc time, 42.19% compilation time)\n" - ] - }, - { - "data": { - "text/plain": [ - "DataStructures.PriorityQueue{Any, Any, Base.Order.ForwardOrdering} with 10 entries:\n", - " MCSResult(UInt32[0xf5802e2c, 0xd83ebd70, 0xd15b1487, 0xc03e87cd, 0… => 101.884\n", - " MCSResult(UInt32[0xf3da3b43, 0x1f21312a, 0xffe5a08d, 0xea132bbd, 0… => 101.888\n", - " MCSResult(UInt32[0x8e5d795d, 0x60ff4448, 0x90f77fb9, 0x8c87dd2f, 0… => 101.989\n", - " MCSResult(UInt32[0xae78d9ff, 0x8d2ae018, 0x24e648a6, 0x5e26f681, 0… => 102.045\n", - " MCSResult(UInt32[0x05402236, 0xcc2396d7, 0xb2bfe4be, 0xc8ab9860, 0… => 102.355\n", - " MCSResult(UInt32[0x2a8928e0, 0x12229ce7, 0x1b559438, 0xb4d5edfd, 0… => 102.52\n", - " MCSResult(UInt32[0x0ee77df4, 0x20199fda, 0x091b74c1, 0x8a95e4a0, 0… => 102.537\n", - " MCSResult(UInt32[0x7a0d1bdc, 0x3103f2f4, 0x76874476, 0xeee46c95, 0… => 102.696\n", - " MCSResult(UInt32[0xf26e2a5e, 0x8c7abeb7, 0xd19875c7, 0xfb4919a2, 0… => 102.755\n", - " MCSResult(UInt32[0xc61cf7f3, 0x47cb5356, 0x8949c52d, 0x2aacd1b6, 0… => 103.202" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Random.seed!(0)\n", "@time sol = mcs(() -> mdp)" @@ -236,144 +148,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "superb-intent", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "p = plot(legend=false)\n", "for (result, r) in sol\n", @@ -393,66 +171,20 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "blond-tradition", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "AdaStress.Solvers.MonteCarloTreeSearch.MCTS(100000, 10, 1.0, 0.7, 1.0, nothing)" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mcts = AdaStress.Solvers.MCTS(num_iterations=100_000)" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "respected-divorce", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:00:02\u001b[39m\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 2.318909 seconds (26.81 M allocations: 1.089 GiB, 7.89% gc time, 23.08% compilation time)\n" - ] - }, - { - "data": { - "text/plain": [ - "DataStructures.PriorityQueue{Any, Any, Base.Order.ForwardOrdering} with 10 entries:\n", - " MCTSResult(UInt32[0x0f7c3082, 0xdd4d807c, 0x4036e445, 0xe86f4901, … => 102.011\n", - " MCTSResult(UInt32[0x0f7c3082, 0xdd4d807c, 0x4036e445, 0xe86f4901, … => 102.036\n", - " MCTSResult(UInt32[0x0f7c3082, 0xd59d38a8, 0xd792acb7, 0x653705ce, … => 102.042\n", - " MCTSResult(UInt32[0x0f7c3082, 0xdd4d807c, 0x4036e445, 0xc0bdfdf4, … => 102.087\n", - " MCTSResult(UInt32[0x0f7c3082, 0xdd4d807c, 0x4036e445, 0xe86f4901, … => 102.116\n", - " MCTSResult(UInt32[0x0f7c3082, 0x091b74c1, 0x8a95e4a0, 0x55645832, … => 102.174\n", - " MCTSResult(UInt32[0x0f7c3082, 0xdd4d807c, 0xd6685efb, 0x7cbf78c8, … => 102.332\n", - " MCTSResult(UInt32[0x0f7c3082, 0x8f19bd96, 0xcb9ac7bd, 0x028888f4, … => 102.443\n", - " MCTSResult(UInt32[0x0f7c3082, 0xdd4d807c, 0xab6e1d59, 0x096d9142, … => 102.957\n", - " MCTSResult(UInt32[0x0f7c3082, 0xdd4d807c, 0x8c27a025, 0xafb8f5b1, … => 103.483" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Random.seed!(0)\n", "@time sol = mcts(() -> mdp)" @@ -460,150 +192,10 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "sixth-greene", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "p = plot(legend=false)\n", "for (result, r) in sol\n", @@ -624,15 +216,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.7.0", + "display_name": "Julia 1.10.2", "language": "julia", - "name": "julia-1.7" + "name": "julia-1.10" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.7.0" + "version": "1.10.2" } }, "nbformat": 4, diff --git a/examples/walk2d/walk2d.ipynb b/examples/walk2d/walk2d.ipynb index 45a6fac..ff9bb17 100644 --- a/examples/walk2d/walk2d.ipynb +++ b/examples/walk2d/walk2d.ipynb @@ -18,21 +18,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "monthly-disney", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\walk2d`\n", - "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\walk2d\\Project.toml`\n", - "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `C:\\Users\\rlipkis\\.julia\\dev\\adastress\\examples\\walk2d\\Manifest.toml`\n" - ] - } - ], + "outputs": [], "source": [ "using Pkg\n", "Pkg.activate(\".\")\n", @@ -42,7 +31,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "cardiovascular-december", "metadata": {}, "outputs": [], @@ -64,21 +53,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "south-august", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "update (generic function with 1 method)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Base.@kwdef mutable struct Initialization\n", " x::Distribution = Uniform(0, 10)\n", @@ -115,21 +93,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "bottom-secretary", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "distance (generic function with 1 method)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Base.@kwdef mutable struct Disturbance\n", "\tx::Distribution = Normal(0.0, 0.15)\n", @@ -157,21 +124,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "static-wagner", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "update (generic function with 2 methods)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mutable struct SystemUnderTest\n", " Δx::Float64\n", @@ -191,21 +147,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "therapeutic-finish", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "update (generic function with 3 methods)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Base.@kwdef mutable struct Metrics\n", " d::Float64 = 0.0\n", @@ -234,21 +179,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "stainless-treasure", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "update (generic function with 4 methods)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Base.@kwdef mutable struct Simulator <: AdaStress.GrayBox\n", "\tt::Float64 = 0.0\n", @@ -295,21 +229,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "compact-pursuit", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "update (generic function with 5 methods)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function initialize(log::Log, sim::Simulator)\n", " sim.logging || return\n", @@ -338,7 +261,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "injured-anime", "metadata": {}, "outputs": [], @@ -360,21 +283,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "classical-price", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "mdp_env (generic function with 1 method)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function mdp_env(; kwargs...)\n", " mdp = Interface.ASTMDP(Simulator(; kwargs...))\n", @@ -393,21 +305,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "brilliant-algebra", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "plot_samples (generic function with 1 method)" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "function zone_shape(sim::Simulator) \n", " t = range(0, 2*pi; length=100)\n", @@ -450,26 +351,10 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "judicial-cancer", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "failure_rate = n_fails / n_runs = 0.152\n" - ] - }, - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "plot_samples(AdaStress.Solvers.NullPolicy())" ] @@ -484,26 +369,10 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "functioning-grass", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "failure_rate = n_fails / n_runs = 0.188\n" - ] - }, - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "plot_samples(AdaStress.Solvers.RandomPolicy())" ] @@ -518,53 +387,20 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "integral-cloud", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Enabled submodule SoftActorCritic.\n", - "└ @ AdaStress C:\\Users\\rlipkis\\.julia\\dev\\adastress\\src\\utils.jl:93\n" - ] - } - ], + "outputs": [], "source": [ - "AdaStress.enable(\"SoftActorCritic\")\n", - "using .SoftActorCritic" + "using AdaStress.SoftActorCritic" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "capable-electron", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\r\n", - "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:06:00\u001b[39m\r\n", - "\u001b[34m epoch: 100\u001b[39m\r\n", - "\u001b[34m score: 35.797775\u001b[39m\r\n", - "\u001b[34m stdev: 1.4532076\u001b[39m\r\n", - "\u001b[34m fails: 0.55\u001b[39m\n" - ] - }, - { - "data": { - "text/plain": [ - "(MLPActorCritic(SoftActorCritic.SquashedGaussianMLPActor(Chain(Dense(3, 30, relu), Dense(30, 30, relu), Dense(30, 30, relu)), Dense(30, 2), Dense(30, 2), Float32[-3.0, -3.0], Float32[3.0, 3.0], Random._GLOBAL_RNG(), nothing, false), SoftActorCritic.MLPQFunction[SoftActorCritic.MLPQFunction(Chain(Dense(5, 30, relu), Dense(30, 30, relu), Dense(30, 30, relu), Dense(30, 1))), SoftActorCritic.MLPQFunction(Chain(Dense(5, 30, relu), Dense(30, 30, relu), Dense(30, 30, relu), Dense(30, 1))), SoftActorCritic.MLPQFunction(Chain(Dense(5, 30, relu), Dense(30, 30, relu), Dense(30, 30, relu), Dense(30, 1)))]), Dict{String, Any}(\"score\" => Any[-18.90498f0, 7.7401624f0, 9.419387f0, 3.8193672f0, 6.7099476f0, 10.058041f0, 6.9404955f0, 14.169292f0, 8.630692f0, 9.851361f0 … 41.851707f0, 39.559887f0, 41.065548f0, 33.31383f0, 40.664383f0, 35.082016f0, 34.01124f0, 34.88055f0, 38.03402f0, 35.797775f0], \"stdev\" => Any[0.33209825f0, 0.36754858f0, 0.5152824f0, 0.7594102f0, 0.82358694f0, 0.7325955f0, 0.7059925f0, 0.81025374f0, 0.75439715f0, 0.7785923f0 … 1.6660134f0, 1.7077017f0, 1.6090752f0, 1.5032142f0, 1.6895962f0, 1.4295774f0, 1.3676596f0, 1.4513856f0, 1.5910193f0, 1.4532076f0], \"fails\" => Any[0.1, 0.08, 0.1, 0.07, 0.1, 0.13, 0.09, 0.18, 0.12, 0.12 … 0.63, 0.56, 0.57, 0.54, 0.61, 0.52, 0.48, 0.52, 0.56, 0.55]))" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Random.seed!(0)\n", "sac = SAC(;\n", @@ -594,19 +430,10 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "included-runner", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "plot(info[\"fails\"])" ] @@ -621,26 +448,10 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "forty-scheme", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "failure_rate = n_fails / n_runs = 0.752\n" - ] - }, - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "plot_samples(ac)" ] @@ -655,19 +466,10 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "planned-nashville", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n\n\n\n\n\n\n" - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "xs = Float32.(collect(range(0, 10; length=100)))\n", "ys = Float32.(collect(range(0, 10; length=100)))\n", @@ -695,15 +497,15 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.7.0", + "display_name": "Julia 1.10.2", "language": "julia", - "name": "julia-1.7" + "name": "julia-1.10" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.7.0" + "version": "1.10.2" } }, "nbformat": 4, From 2f9abe6f1301e19f86cc022f468474155f5c1b50 Mon Sep 17 00:00:00 2001 From: Rory Lipkis Date: Sun, 21 Apr 2024 23:53:10 -0700 Subject: [PATCH 9/9] update docs and tests --- README.md | 7 ++--- docs/main.md | 74 +++++++++--------------------------------------- test/runtests.jl | 23 --------------- 3 files changed, 16 insertions(+), 88 deletions(-) diff --git a/README.md b/README.md index 7ab45a8..d0f1c51 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![AdaStress](docs/logo.svg) -AdaStress is a software package that implements the Adaptive Stress Testing (AST) framework, which determines the likeliest failures for a system under test. +AdaStress is a software package that implements and extends the Adaptive Stress Testing (AST) framework, which determines the likeliest failures for a system under test. AdaStress provides three primary services: - Interfaces between user simulations and the AST framework @@ -11,7 +11,7 @@ AdaStress provides three primary services: AdaStress is written in the Julia programming language. If you do not have Julia on your computer, follow [the official instructions](https://julialang.org/downloads/platform) to download the latest version. For information on using Julia, see the [language documentation](https://docs.julialang.org). To download and build the latest version of AdaStress, open the Julia REPL, type `]` to enter the interactive package mode, and enter the command ``` -add https://babelfish.arc.nasa.gov/bitbucket/scm/adastress/adastress.git +add ssh://git@babelfish.arc.nasa.gov:7999/adastress/adastress.git ``` To use the package, enter the command ``` @@ -32,8 +32,7 @@ AdaStress provides two basic simulation interfaces, **black-box** and **gray-box Your simulation must inherit from the `BlackBox` or `GrayBox` type and implement the methods found in `src/interface/BlackBox.jl` or `src/interface/GrayBox.jl`. ## Further information -For more detailed instructions on using AdaStress, see the [complete documentation](./docs/main.md). Example notebooks can be found in the `examples` directory. For background on original AST formulation, see -> Lee, Ritchie, Ole J. Mengshoel, Anshu Saksena, Ryan W. Gardner, Daniel Genin, Joshua Silbermann, Michael Owen, and Mykel J. Kochenderfer. "Adaptive stress testing: Finding likely failure events with reinforcement learning." Journal of Artificial Intelligence Research 69 (2020): 1165-1201. +For more detailed instructions on using AdaStress, see the [complete documentation](./docs/main.md). Example notebooks can be found in the `examples` directory. For background on the AST formulation, see the [original paper](https://doi.org/10.1613/jair.1.12190). ## License AdaStress has been released under the NASA Open Source Agreement version 1.3, as detailed [here](LICENSE.pdf). diff --git a/docs/main.md b/docs/main.md index fa42873..1b93e52 100644 --- a/docs/main.md +++ b/docs/main.md @@ -4,17 +4,16 @@ --- -- [Maintainers](#maintainers) -- [Description](#description) -- [Prerequisites](#prerequisites) -- [Architecture](#architecture) -- [Problem setup](#problem-setup) -- [Interface](#interface) -- [Serialization interface](#serialization-interface) -- [Submodule management](#submodule-management) -- [Solvers](#solvers) -- [Analysis](#analysis) -- [Acknowledgements](#acknowledgments) +[Maintainers](#maintainers)\ +[Description](#description)\ +[Prerequisites](#prerequisites)\ +[Architecture](#architecture)\ +[Problem setup](#problem-setup)\ +[Interface](#interface)\ +[Serialization interface](#serialization-interface)\ +[Solvers](#solvers)\ +[Analysis](#analysis)\ +[Acknowledgements](#acknowledgments) --- @@ -24,7 +23,7 @@ ## Description -AdaStress is a software package that implements the [adaptive stress testing (AST) framework](https://doi.org/10.1613/jair.1.12190), which determines the likeliest failures for a system under test. +AdaStress is a software package that implements and extends the [adaptive stress testing (AST) framework](https://doi.org/10.1613/jair.1.12190), which determines the likeliest failures for a system under test. AdaStress provides three primary services: - Interfaces between user simulations and the AST framework @@ -35,7 +34,7 @@ AdaStress provides three primary services: AdaStress is written in the Julia programming language. If you do not have Julia on your computer, follow [the official instructions](https://julialang.org/downloads/platform) to download the latest version. For information on using Julia, see the [language documentation](https://docs.julialang.org). To download and build the latest version of AdaStress, open the Julia REPL, type `]` to enter the interactive package mode, and enter the command ``` -add https://babelfish.arc.nasa.gov/bitbucket/scm/adastress/adastress.git +add ssh://git@babelfish.arc.nasa.gov:7999/adastress/adastress.git ``` To use the package, enter the command ``` @@ -191,49 +190,6 @@ The serialization capabilities also make it easier to interact with other progra An `ASTServer` and `ASTClient` can be created separately and configured to exchange a minimal amount of information to enable stress-testing. This exchange can be further encrypted in various ways, in order to obscure the system under test from the stress-testing agent. For an example of serialized stress-testing, see the notebooks in `examples/pedestrian`. -## Submodule management - -The submodule manager allows optional and experimental features with heavy dependencies to be made available without increasing the loading time of the base package. The user can selectively enable and disable these submodules as needed. In the background, the submodule manager maintains an internal project environment with a minimal set of necessary dependencies, avoiding the need to load unused packages. - -This system is made necessary by certain limitations of the language, which does not currently support optional dependencies. A common solution involves creating multiple separate packages to extend a base package; however, we consider this approach somewhat of an anti-pattern, and have chosen not to employ it here. In future versions of AdaStress, the submodule system may be removed if a suitable alternative is possible. - -### Using submodules - -Submodules are managed through the following API: - -> - **`AdaStress.submodules()`** -> List all available submodules. -> - **`AdaStress.enabled()`** -> List enabled submodules. -> - **`AdaStress.enable(submodule)`** -> Enable submodule(s). Accepts string or vector of strings. With zero arguments defaults to all associated submodules. Takes effect immediately. -> - **`AdaStress.disable(submodule)`** -> Disable submodule(s). Accepts string or vector of strings. With zero arguments defaults to all enabled submodules. Takes effect after Julia restart. -> - **`AdaStress.load()`** -> Load enabled submodules (necessary after Julia restart). Takes effect immediately. -> - **`AdaStress.clean()`** -> Forcibly remove temporary environment, purging all enabled submodules. Only necessary if submodule manager is corrupted and `disable` cannot restore functionality. Takes effect after Julia restart. - -Enabling a submodule can take several seconds, particularly the first time. Due to current limitations of the language, previously enabled submodules cannot be automatically loaded when a new Julia session is launched. The user should use the `load` command for this, as in the following example. In the first session, it is necessary to run - -> ``` -> julia> using AdaStress -> julia> AdaStress.enable("SoftActorCritic") -> ``` -while in later sessions, the user may simply run -> ``` -> julia> using AdaStress -> julia> AdaStress.load() -> ``` - -### Multiprocessing - -Due to current bugs in the language, many processes related to code loading and environment management are not truly atomic. This can lead to problems when submodules are used in multiprocessing, as occurs with policy-value verification analysis. In such cases, care should be taken when invoking the submodule manager API asynchronously. For an example of loading submodules on multiple processes, see the notebook `examples/pvv`. - -### Creating submodules - -Custom submodules are essentially regular Julia packages that reside within the AdaStress directory tree, complete with a UUID and `Project.toml` file. Submodules are associated with AdaStress via the `exclude` command, similarly to how source files are associated via `include`. - ## Solvers A solver object is a standalone entity representing an algorithm and its parameters. A solver can be applied to an `ASTMDP` or a function that generates an `ASTMDP`, producing a `Result` object, as in @@ -295,8 +251,6 @@ Q-learning is a classic reinforcement learning algorithm that uses a table-based #### Soft actor-critic ->This feature is contained in a submodule, and must be explicitly enabled. - Soft actor-critic (SAC) is a deep reinforcement learning algorithm that simultaneously learns a value function and a policy for the `ASTMDP`. Both take the form of neural networks, which can be used to generate failures online in real-time or analyze system properties offline. SAC offers the following tunable parameters: | Parameter | Type | Default | Description | @@ -344,8 +298,6 @@ The analysis module provide methods to further analyze results. ### Policy-value verification ->This feature is contained in a submodule, and must be explicitly enabled. - Policy-value verification (PVV) is an experimental method of analyzing the output of a global solver. It assembles the policy network and value network (or ensemble of value networks) into a single value function over the state space. Then, given a set condition on the value function, the algorithm uses an adaptive refinement process to classify regions of state space that provably satisfy the condition, violate the condition, or are unprovable at the given tolerance. As a matter of ongoing research, requirements concerning the safety of the system can be linked to conditions on the value function. For instance, a requirement that the possibility of failure not exceed $10^{-9}$ from a set of initial states (given some modeled environmental stochasticity) translates to a constraint on the value function. The validity and practicality of this analysis is largely dependent on the learning process and is still uncertain. Nonetheless, the approach can currently generate *approximate* artifacts that may be useful for casual and nonrigorous analysis of system performance. @@ -358,4 +310,4 @@ For an example of a problem analyzed with PVV, see the notebook `examples/pvv`. The adaptive stress testing framework was proposed and developed by Ritchie Lee during his PhD under the supervision of Prof. Mykel Kochenderfer (Stanford University). Ritchie directed the creation of AdaStress and was instrumental in shaping our particular approach to this problem. -Some of the basic nomenclature in AdaStress is borrowed from the package `POMDPStressTesting.jl`, namely the `GrayBox` and `BlackBox` terminology. Note that the usage and interpretation of these terms differs between the packages. Code that is compatible with one package cannot immediately be used with the other without modification. \ No newline at end of file +Some of the basic nomenclature in AdaStress is borrowed from the package `POMDPStressTesting.jl`, namely the `GrayBox` and `BlackBox` terminology. Note that the usage and interpretation of these terms differs between the packages. Code that is compatible with one package cannot immediately be used with the other without modification. diff --git a/test/runtests.jl b/test/runtests.jl index 48e2497..3f54bb3 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -32,28 +32,6 @@ using AdaStress using NBInclude using Test -@testset "Interface" begin - @test AdaStress.GrayBox <: Interface.AbstractSimulation -end - -@testset "Solvers" begin - @test begin - AdaStress.SoftActorCritic.MLPActorCritic(1, 1, [-1.0], [1.0]) isa AdaStress.GlobalResult - end -end - -#= -@testset "Analysis" begin - @test begin - AdaStress.enable("PolicyValueVerification") - using .PolicyValueVerification - ac = SoftActorCritic.MLPActorCritic(1, 1, [-1.0], [1.0]) - SoftActorCritic.to_cpu!(ac) - nnet = PolicyValueVerification.policy_network(ac; act_mins=[-1.0], act_maxs=[1.0]) - nnet isa PolicyValueVerification.ExtendedNetwork - end -end - # Example notebooks to be tested (cells beginning with `# autoskip` are not executed) envs = ["walk1d", "walk2d"] @@ -68,4 +46,3 @@ for env in envs end end end -=#