From 82861d2d8ae6e93b5bb7cf7bc8eef86df6cca51e Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Mon, 23 Sep 2024 17:10:26 +0000 Subject: [PATCH] build based on a827107 --- dev/index.html | 2 +- dev/manual/fault_models.html | 2 +- dev/manual/quickguide.html | 2 +- dev/reference/constraints.html | 2 +- dev/reference/data_models.html | 2 +- dev/reference/internal.html | 2 +- dev/reference/problems.html | 4 ++-- dev/reference/variables.html | 2 +- dev/search.html | 2 +- dev/search_index.js | 2 +- dev/tutorials/distribution_fault_studies.html | 6 +++--- dev/tutorials/distribution_fault_studies.jl.html | 2 +- dev/tutorials/transmission_fault_studies.html | 6 +++--- dev/tutorials/transmission_fault_studies.jl.html | 2 +- 14 files changed, 19 insertions(+), 19 deletions(-) diff --git a/dev/index.html b/dev/index.html index 5083c14..6f38214 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,2 +1,2 @@ -Introduction · PowerModelsProtection

PowerModelsProtection.jl Documentation

Overview

PowerModelsProtection.jl is a Julia/JuMP extension package to PowerModels.jl and PowerModelsDistribution.jl for modeling of protection coordination on power grids.

Installation

The latest stable release of PowerModelsProtection can be installed using the Julia package manager with

Pkg.add("PowerModelsProtection")

For the current development version, "checkout" this package with

Pkg.develop(Pkg.PackageSpec(;name="PowerModelsProtection", url="https://github.com/lanl-ansi/PowerModelsProtection.jl.git"))

At least one solver is required for running PowerModelsProtection. The open-source solver Ipopt is recommended, as it is extremely fast, and can be used to solve a wide variety of the problems and network formulations provided in PowerModelsProtection. The Ipopt solver can be installed via the package manager with

Pkg.add("Ipopt")

Test that the package works by running

Pkg.test("PowerModelsProtection")
+Introduction · PowerModelsProtection

PowerModelsProtection.jl Documentation

Overview

PowerModelsProtection.jl is a Julia/JuMP extension package to PowerModels.jl and PowerModelsDistribution.jl for modeling of protection coordination on power grids.

Installation

The latest stable release of PowerModelsProtection can be installed using the Julia package manager with

Pkg.add("PowerModelsProtection")

For the current development version, "checkout" this package with

Pkg.develop(Pkg.PackageSpec(;name="PowerModelsProtection", url="https://github.com/lanl-ansi/PowerModelsProtection.jl.git"))

At least one solver is required for running PowerModelsProtection. The open-source solver Ipopt is recommended, as it is extremely fast, and can be used to solve a wide variety of the problems and network formulations provided in PowerModelsProtection. The Ipopt solver can be installed via the package manager with

Pkg.add("Ipopt")

Test that the package works by running

Pkg.test("PowerModelsProtection")
diff --git a/dev/manual/fault_models.html b/dev/manual/fault_models.html index 9b697fe..f48fb3f 100644 --- a/dev/manual/fault_models.html +++ b/dev/manual/fault_models.html @@ -23,4 +23,4 @@ -g{pg} & -g{pg} & -g{pg} & 3g{pg} \end{bmatrix} $ Fault admittance matrix b: $ \begin{bmatrix} b{pg} + 2b{pp} & -b{pp} & -b{pp} & -b{pg} \ -b{pp} & b{pg} + 2b{pp} & -b{pg} & -b{pg} \ -b{pp} & -b{pp} & b{pg} + 2b{pp} & -b{pg} \ --b{pg} & -b{pg} & -b{pg} & 3b{pg} \end{bmatrix} $

Formulation

Depending on fault type, the constraints between networks are as follows

LG

\[I_{f1} = I_{f2} = I_{f0} = \frac{V_{f1} + V_{f2} + V_{f0}}{Z_f}\]

LL

\[I_{f1} = - I_{f2} = \frac{V_{f1} - V_{f2}}{Z_f}\]

LLG

\[V_{f1} = V_{f2}\]

\[I_{f0} = \frac{V_{f1} - V_{f2}}{Z_f}\]

3P

\[I_{f1} = \frac{V_{f1}}{Z_f}\]

\[I_{f2} = I_{f0} = 0\]

+-b{pg} & -b{pg} & -b{pg} & 3b{pg} \end{bmatrix} $

Formulation

Depending on fault type, the constraints between networks are as follows

LG

\[I_{f1} = I_{f2} = I_{f0} = \frac{V_{f1} + V_{f2} + V_{f0}}{Z_f}\]

LL

\[I_{f1} = - I_{f2} = \frac{V_{f1} - V_{f2}}{Z_f}\]

LLG

\[V_{f1} = V_{f2}\]

\[I_{f0} = \frac{V_{f1} - V_{f2}}{Z_f}\]

3P

\[I_{f1} = \frac{V_{f1}}{Z_f}\]

\[I_{f2} = I_{f0} = 0\]

diff --git a/dev/manual/quickguide.html b/dev/manual/quickguide.html index b60ad0e..9a57b91 100644 --- a/dev/manual/quickguide.html +++ b/dev/manual/quickguide.html @@ -11,4 +11,4 @@ ```` ### Distribution -

julia result = solvemcfaultstudy(case3balancedpv, ipoptsolver) ````

Examples

More examples of working with the engineering data model can be found in the /examples folder of the PowerModelsProtection.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation

+

julia result = solvemcfaultstudy(case3balancedpv, ipoptsolver) ````

Examples

More examples of working with the engineering data model can be found in the /examples folder of the PowerModelsProtection.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation

diff --git a/dev/reference/constraints.html b/dev/reference/constraints.html index d828359..09660bb 100644 --- a/dev/reference/constraints.html +++ b/dev/reference/constraints.html @@ -1,2 +1,2 @@ -Constraints · PowerModelsProtection

Constraints

PowerModelsProtection.constraint_i_inverterMethod
constraint_i_inverter(pm::_PM.AbstractPowerModel; nw::Int=nw_id_default)

Constraints for fault current contribution of inverter in grid-following mode assuming that the inverter current regulating loop operates slowly

source
PowerModelsProtection.constraint_i_inverter_vsMethod
constraint_i_inverter_vs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, vs, pg, qg, cm)

Constraints for fault current contribution of inverter in grid-following mode assuming that the inverter current regulating loop operates slowly

source
PowerModelsProtection.constraint_mc_fault_current_balanceMethod
constraint_mc_fault_current_balance(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, fault::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Calculates the current balance at the faulted bus for multiconductor

source
PowerModelsProtection.constraint_pf_inverter_vsMethod
constraint_pf_inverter_vs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, vs, pg, qg, cmax)

Constraints for fault current contribution of inverter in grid-following mode with a real voltage drop to handle low-zero terminal voltages

source
PowerModelsProtection.constraint_pq_inverter_regionMethod
constraint_pq_inverter_region(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, pg, qg, cmax)

Constraints for fault current contribution of inverter in grid-following mode operating at arbitrary power factor. Requires objective term

source
PowerModelsProtection.constraint_unity_pf_inverter_rsMethod
constraint_unity_pf_inverter_rs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, r, pg, qg, cm)

Constraints for fault current contribution of inverter in grid-following mode operating at unity power factor with a series resistance to handle low-zero terminal voltages

source
+Constraints · PowerModelsProtection

Constraints

PowerModelsProtection.constraint_i_inverterMethod
constraint_i_inverter(pm::_PM.AbstractPowerModel; nw::Int=nw_id_default)

Constraints for fault current contribution of inverter in grid-following mode assuming that the inverter current regulating loop operates slowly

source
PowerModelsProtection.constraint_i_inverter_vsMethod
constraint_i_inverter_vs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, vs, pg, qg, cm)

Constraints for fault current contribution of inverter in grid-following mode assuming that the inverter current regulating loop operates slowly

source
PowerModelsProtection.constraint_mc_fault_current_balanceMethod
constraint_mc_fault_current_balance(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, fault::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Calculates the current balance at the faulted bus for multiconductor

source
PowerModelsProtection.constraint_pf_inverter_vsMethod
constraint_pf_inverter_vs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, vs, pg, qg, cmax)

Constraints for fault current contribution of inverter in grid-following mode with a real voltage drop to handle low-zero terminal voltages

source
PowerModelsProtection.constraint_pq_inverter_regionMethod
constraint_pq_inverter_region(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, pg, qg, cmax)

Constraints for fault current contribution of inverter in grid-following mode operating at arbitrary power factor. Requires objective term

source
PowerModelsProtection.constraint_unity_pf_inverter_rsMethod
constraint_unity_pf_inverter_rs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, r, pg, qg, cm)

Constraints for fault current contribution of inverter in grid-following mode operating at unity power factor with a series resistance to handle low-zero terminal voltages

source
diff --git a/dev/reference/data_models.html b/dev/reference/data_models.html index 8b4b22f..66133e4 100644 --- a/dev/reference/data_models.html +++ b/dev/reference/data_models.html @@ -9,4 +9,4 @@ zero_gen_setpoints::Bool=false, import_all::Bool=true, kwargs... -)

Function to parse data from dss (distribution) or matpower (transmission) files.

method is for matpower files, and should be one of "PMs", "solar-pf", "dg-pf", "pf", or "opf", and "PMD" or missing for dss files.

If add_gensub, parse_matpower will attempt to find rs and xs from a gensub dict.

Explanations of flat_start, neglect_line_charging, neglect_transformer, and zero_gen_setpoints can be found in prepare_transmission_data!

source

Constructors

PowerModelsProtection.add_fault!Method
add_fault!(data::Dict{String,Any}, name::String, type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)

Creates a fault dictionary given the type of fault, i.e., one of "3p", "ll", "lg", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, in the case of "lg", or phase and phase, and adds it to data["fault"] under "name"

source
PowerModelsProtection.add_fault!Method
add_fault!(data::Dict{String,Any}, name::String, type::String, bus::String, connections::Vector{Int}, resistance::Real)

Creates a fault dictionary given the type of fault, i.e., one of "3pq", "llg", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, and the phase_resistance between phases, and adds it to data["fault"] under "name"

source
PowerModelsProtection.create_faultMethod
create_fault(type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)::Dict{String,Any}

Creates a fault dictionary given the type of fault, i.e., one of "3pq", "llg", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, and the phase_resistance between phases

source
PowerModelsProtection.create_faultMethod
create_fault(type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)::Dict{String,Any}

Creates a fault dictionary given the type of fault, i.e., one of "3p", "ll", "lg", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, in the case of "lg", or phase and phase.

source

Model Transformations

PowerModelsProtection.transform_data_modelFunction

custom version of transform_data_model from PowerModelsDistribution for easy model transformation

source
PowerModelsProtection.transform_solutionFunction

custom version of transform_solution from PowerModelsDistribution to aid in easy solution transformation

source

Unit conversions

PowerModelsProtection.make_fault_si!Method

helper function to convert fault object units back into si units

source

Helper Functions

+)

Function to parse data from dss (distribution) or matpower (transmission) files.

method is for matpower files, and should be one of "PMs", "solar-pf", "dg-pf", "pf", or "opf", and "PMD" or missing for dss files.

If add_gensub, parse_matpower will attempt to find rs and xs from a gensub dict.

Explanations of flat_start, neglect_line_charging, neglect_transformer, and zero_gen_setpoints can be found in prepare_transmission_data!

source

Constructors

PowerModelsProtection.add_fault!Method
add_fault!(data::Dict{String,Any}, name::String, type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)

Creates a fault dictionary given the type of fault, i.e., one of "3p", "ll", "lg", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, in the case of "lg", or phase and phase, and adds it to data["fault"] under "name"

source
PowerModelsProtection.add_fault!Method
add_fault!(data::Dict{String,Any}, name::String, type::String, bus::String, connections::Vector{Int}, resistance::Real)

Creates a fault dictionary given the type of fault, i.e., one of "3pq", "llg", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, and the phase_resistance between phases, and adds it to data["fault"] under "name"

source
PowerModelsProtection.create_faultMethod
create_fault(type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)::Dict{String,Any}

Creates a fault dictionary given the type of fault, i.e., one of "3p", "ll", "lg", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, in the case of "lg", or phase and phase.

source
PowerModelsProtection.create_faultMethod
create_fault(type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)::Dict{String,Any}

Creates a fault dictionary given the type of fault, i.e., one of "3pq", "llg", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, and the phase_resistance between phases

source
PowerModelsProtection.create_faultMethod
create_fault(type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)::Dict{String,Any}

Creates a fault dictionary given the type of fault, i.e., one of "3p", "ll", "lg", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, in the case of "lg", or phase and phase.

source

Model Transformations

PowerModelsProtection.transform_data_modelFunction

custom version of transform_data_model from PowerModelsDistribution for easy model transformation

source
PowerModelsProtection.transform_solutionFunction

custom version of transform_solution from PowerModelsDistribution to aid in easy solution transformation

source

Unit conversions

PowerModelsProtection.make_fault_si!Method

helper function to convert fault object units back into si units

source

Helper Functions

diff --git a/dev/reference/internal.html b/dev/reference/internal.html index 97f6c4d..46f1187 100644 --- a/dev/reference/internal.html +++ b/dev/reference/internal.html @@ -1,2 +1,2 @@ -Internal Functions · PowerModelsProtection

Internal Functions

PowerModelsProtection._check_keysMethod

Function to apply haskey function to all elements in a vector. Used for checking if all cts are in the circuit when adding a differential relay. Returns a Bool

source
PowerModelsProtection._get_currentMethod

Function to get current that is flowing through the relay or fuse we are looking at. Gets the type of relay from dictionary then uses the proper method for calculating current through relay operating coil. Outputs a vector.

source
PowerModelsProtection._non_ideal_ctMethod
_non_ideal_ct(relay_data,CT_data,Iabc)

Converts primary side current to the actual current going through relay coil based on non-ideal parameters. Unused.

source
+Internal Functions · PowerModelsProtection

Internal Functions

PowerModelsProtection._check_keysMethod

Function to apply haskey function to all elements in a vector. Used for checking if all cts are in the circuit when adding a differential relay. Returns a Bool

source
PowerModelsProtection._get_currentMethod

Function to get current that is flowing through the relay or fuse we are looking at. Gets the type of relay from dictionary then uses the proper method for calculating current through relay operating coil. Outputs a vector.

source
PowerModelsProtection._non_ideal_ctMethod
_non_ideal_ct(relay_data,CT_data,Iabc)

Converts primary side current to the actual current going through relay coil based on non-ideal parameters. Unused.

source
diff --git a/dev/reference/problems.html b/dev/reference/problems.html index ab1b3f0..67a3291 100644 --- a/dev/reference/problems.html +++ b/dev/reference/problems.html @@ -1,9 +1,9 @@ -Problems · PowerModelsProtection

Problems

Solvers

PowerModelsProtection.solve_fault_studyMethod
solve_fault_study(case::Dict{String,Any}, solver; kwargs...)

Solves a fault study using all active faults under case["fault"] for transmission (matpower) data sets given an optimization solver

kwargs can be any valid keyword argument for PowerModels' run_model function.

source
PowerModelsProtection.solve_fault_studyMethod
solve_fault_study(case::Dict{String,<:Any}, fault_studies::Dict{String,<:Any}, solver; kwargs...)::Dict{String,Any}

Solves a series fault studies in fault_studies, e.g., generated by build_fault_study for transmission (matpower) data sets given an optimization solver

kwargs can be any valid keyword argument for PowerModels' run_model function.

source
PowerModelsProtection.solve_mc_fault_studyMethod
solve_mc_fault_study(case::Dict{String,<:Any}, solver; kwargs...)

Function to solve a multiconductor (distribution) fault study given a data set case and optimization solver

kwargs can be any valid keyword argument for PowerModelsDistribution's solve_mc_model

source

Builders

PowerModelsProtection.build_fault_studyMethod
build_fault_study(data::Dict; default_fault_resistance::Real=0.0001)

Builds a dictionary of fault studies on a transmission (single-phase positive sequence) network that are intended to be used in conjunction with solve_fault_study.

The function will iterate over all buses and create faults using the default fault resistance. The fault study dictionary will have the following structure:

    Dict{String,Any}(
+Problems · PowerModelsProtection

Problems

Solvers

PowerModelsProtection.solve_fault_studyMethod
solve_fault_study(case::Dict{String,Any}, solver; kwargs...)

Solves a fault study using all active faults under case["fault"] for transmission (matpower) data sets given an optimization solver

kwargs can be any valid keyword argument for PowerModels' run_model function.

source
PowerModelsProtection.solve_fault_studyMethod
solve_fault_study(case::Dict{String,<:Any}, fault_studies::Dict{String,<:Any}, solver; kwargs...)::Dict{String,Any}

Solves a series fault studies in fault_studies, e.g., generated by build_fault_study for transmission (matpower) data sets given an optimization solver

kwargs can be any valid keyword argument for PowerModels' run_model function.

source
PowerModelsProtection.solve_mc_fault_studyMethod
solve_mc_fault_study(case::Dict{String,<:Any}, solver; kwargs...)

Function to solve a multiconductor (distribution) fault study given a data set case and optimization solver

kwargs can be any valid keyword argument for PowerModelsDistribution's solve_mc_model

source

Builders

PowerModelsProtection.build_fault_studyMethod
build_fault_study(data::Dict; default_fault_resistance::Real=0.0001)

Builds a dictionary of fault studies on a transmission (single-phase positive sequence) network that are intended to be used in conjunction with solve_fault_study.

The function will iterate over all buses and create faults using the default fault resistance. The fault study dictionary will have the following structure:

    Dict{String,Any}(
         "bus_i" => Dict{String,Any}(
             "fault_bus" => bus_i
             "gf" => 1 / resistance,
             "status" => 1
         ),
         ...
-    )
source
PowerModelsProtection.build_mc_fault_studyMethod
build_mc_fault_study(data::Dict{String,<:Any}; resistance::Real=0.01, phase_resistance::Real=0.01)::Dict{String,Any}

Add all fault type data to model for study for multiconductor networks

source

Solution Helpers

DEPRECIATED Solver functions

+ )
source
PowerModelsProtection.build_mc_fault_studyMethod
build_mc_fault_study(data::Dict{String,<:Any}; resistance::Real=0.01, phase_resistance::Real=0.01)::Dict{String,Any}

Add all fault type data to model for study for multiconductor networks

source

Solution Helpers

DEPRECIATED Solver functions

diff --git a/dev/reference/variables.html b/dev/reference/variables.html index 063ab79..3948c35 100644 --- a/dev/reference/variables.html +++ b/dev/reference/variables.html @@ -1,2 +1,2 @@ -Variables · PowerModelsProtection

Variables

PowerModelsProtection.variable_genMethod
variable_gen(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true, kwargs...)

builds generator variables for transmission networks

source
+Variables · PowerModelsProtection

Variables

PowerModelsProtection.variable_genMethod
variable_gen(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true, kwargs...)

builds generator variables for transmission networks

source
diff --git a/dev/search.html b/dev/search.html index 5e9bf77..6161f1a 100644 --- a/dev/search.html +++ b/dev/search.html @@ -1,2 +1,2 @@ -Search · PowerModelsProtection

Loading search...

    +Search · PowerModelsProtection

    Loading search...

      diff --git a/dev/search_index.js b/dev/search_index.js index c96c2aa..0636456 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"reference/constraints.html#ConstraintAPI","page":"Constraints","title":"Constraints","text":"","category":"section"},{"location":"reference/constraints.html","page":"Constraints","title":"Constraints","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"constraint\")","category":"page"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_bus_fault_current-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsProtection.constraint_bus_fault_current","text":"constraint_bus_fault_current(pm::_PM.AbstractIVRModel, nw::Int, i::Int, fault_bus::Int, g::Real)\n\nCalculates the fault current at a bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_bus_fault_current-Tuple{PowerModels.AbstractIVRModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_bus_fault_current","text":"constraint_bus_fault_current(pm::_PM.AbstractIVRModel, i::Int; nw::Int=nw_id_default)\n\nconstraint for the fault current at the fault_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_current_balance-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_current_balance","text":"constraint_current_balance(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_arcs, bus_gens, bus_gs, bus_bs)\n\nCalculates the current balance at the non-faulted buses\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_current_balance-Tuple{PowerModels.AbstractPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_current_balance","text":"constraint_current_balance(pm::_PM.AbstractPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraint to calculate the fault current at a bus and the current at other buses\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_fault_current_balance-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_fault_current_balance","text":"constraint_fault_current_balance(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_arcs, bus_gens, bus_gs, bus_bs)\n\nCalculates the current balance at the faulted bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_gen_voltage_drop-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Any, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_gen_voltage_drop","text":"constraint_gen_voltage_drop(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id, r, x, vgr, vgi)\n\nStates that the bus voltage is equal to the internal voltage minus voltage drop across subtransient impedance\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_gen_voltage_drop-Tuple{PowerModels.AbstractPowerModel}","page":"Constraints","title":"PowerModelsProtection.constraint_gen_voltage_drop","text":"constraint_gen_voltage_drop(pm::_PM.AbstractPowerModel; nw::Int=nw_id_default)\n\nConstraint that sets the terminal voltage basd on the internal voltage and the stator impedence\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_i_inverter-Tuple{PowerModels.AbstractPowerModel}","page":"Constraints","title":"PowerModelsProtection.constraint_i_inverter","text":"constraint_i_inverter(pm::_PM.AbstractPowerModel; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of inverter in grid-following mode assuming that the inverter current regulating loop operates slowly\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_i_inverter_vs-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_i_inverter_vs","text":"constraint_i_inverter_vs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, vs, pg, qg, cm)\n\nConstraints for fault current contribution of inverter in grid-following mode assuming that the inverter current regulating loop operates slowly\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_bus_fault_current-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_bus_fault_current","text":"constraint_mc_bus_fault_current(pm::_PMD.AbstractUnbalancedIVRModel, i::Int; nw::Int=nw_id_default)\n\nConstraint for Kirchoff's current law on faulted buses\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_bus_fault_current-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64, Int64, Int64, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_bus_fault_current","text":"constraint_mc_bus_fault_current(pm::_PMD.AbstractUnbalancedPowerModel, nw::Int, i::Int, bus::Int, connections::Vector{Int}, Gf::Matrix{<:Real}, Bf::Matrix{<:Real})\n\nCalculates the current at the faulted bus for multiconductor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_current_balance-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_current_balance","text":"constraint_mc_current_balance(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraint to calculate the fault current at a bus and the current at other buses for multiconductor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_fault_current_balance-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_fault_current_balance","text":"constraint_mc_fault_current_balance(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, fault::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nCalculates the current balance at the faulted bus for multiconductor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_constant_power-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_constant_power","text":"constraint_mc_gen_constant_power(pm::_PMD.AbstractUnbalancedPowerModel; nw::Int=nw_id_default)\n\nConstraint that sets the gen to output constant power\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_power_setpoint_imag-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_power_setpoint_imag","text":"constraint_mc_gen_power_setpoint_imag(pm::_PMD.AbstractUnbalancedPowerModel, n::Int, i, qg)\n\ngenerator reactive power setpoint constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_power_setpoint_imag-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_power_setpoint_imag","text":"constraint_mc_gen_power_setpoint_imag(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default, kwargs...)\n\ngenerator reactive power setpoint constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_pq_constant_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_pq_constant_inverter","text":"constraint_mc_gen_pq_constant_inverter(pm::_PMD.AbstractUnbalancedPowerModel; nw::Int=nw_id_default)\n\nConstraint that sets the gen to output constant power\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_voltage_drop-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Any, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_voltage_drop","text":"constraint_mc_gen_voltage_drop(pm::_PMD.AbstractUnbalancedIVRModel, n::Int, i::Int, bus_id::Int, r, x, vgr, vgi, terminals)\n\nConstraint that sets the terminal voltage basd on the internal voltage and the stator impedence\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_voltage_drop-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_voltage_drop","text":"constraint_mc_gen_voltage_drop(pm::_PMD.AbstractUnbalancedPowerModel; nw::Int=nw_id_default)\n\nConstraint that sets the terminal voltage basd on the internal voltage and the stator impedence for multiconductor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_formimg_inverter_impedance-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Any, Any, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_formimg_inverter_impedance","text":"constraint_mc_grid_formimg_inverter_impedance(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, bus_id::Int, vr0, vi0, r, x, pmax, cmax)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode with power matching\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_formimg_inverter_virtual_impedance-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Any, Any, Any, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_formimg_inverter_virtual_impedance","text":"constraint_mc_grid_formimg_inverter_virtual_impedance(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, bus_id::Int, vr0, vi0, pmax, cmax, smax, ang, terminals)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode with power matching\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_forming_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_forming_inverter","text":"constraint_mc_grid_forming_inverter(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, bus_id::Int, vrstar, vistar, pmax, cmax)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_forming_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_forming_inverter","text":"constraint_mc_grid_forming_inverter(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_forming_inverter_impedance-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_forming_inverter_impedance","text":"constraint_mc_grid_forming_inverter_impedance(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode with power matching\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_forming_inverter_virtual_impedance-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_forming_inverter_virtual_impedance","text":"constraint_mc_grid_forming_inverter_virtual_impedance(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode with power matching\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_i_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_i_inverter","text":"constraint_mc_i_inverter(pm::_PMD.AbstractUnbalancedIVRModel, n::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current inverter with current set point\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_pq_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Any, Any, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_pq_inverter","text":"constraint_mc_pq_inverter(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current contribution of multiconductor inverter in grid-following mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_pq_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_pq_inverter","text":"constraint_mc_pq_inverter(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of multiconductor inverter in grid-following mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_storage_grid_forming_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Any, Int64, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_storage_grid_forming_inverter","text":"constraint_mc_storage_grid_forming_inverter(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i, bus_id::Int, connections)\n\nConstrants for grid-forming inverter with storage\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_storage_grid_forming_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_storage_grid_forming_inverter","text":"constraint_mc_storage_grid_forming_inverter(pm::_PMD.AbstractUnbalancedIVRModel, i::Int; nw::Int=nw_id_default)\n\nConstraint for fault-current contribution battery energy storage inverters\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_pf_inverter_vs-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_pf_inverter_vs","text":"constraint_pf_inverter_vs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, vs, pg, qg, cmax)\n\nConstraints for fault current contribution of inverter in grid-following mode with a real voltage drop to handle low-zero terminal voltages\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_pq_inverter-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_pq_inverter","text":"constraint_pq_inverter(pm::_PM.AbstractIVRModel, nw::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current contribution of inverter in grid-following mode with pq set points\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_pq_inverter-Tuple{PowerModels.AbstractPowerModel}","page":"Constraints","title":"PowerModelsProtection.constraint_pq_inverter","text":"constraint_pq_inverter(pm::_PM.AbstractPowerModel; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of inverter in grid-following mode with pq set points\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_pq_inverter_mccormick-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_pq_inverter_mccormick","text":"constraint_pq_inverter_mccormick(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nMcCormick relaxation of constraints for fault current contribution of inverter in grid-following mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_pq_inverter_region-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_pq_inverter_region","text":"constraint_pq_inverter_region(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current contribution of inverter in grid-following mode operating at arbitrary power factor. Requires objective term\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_unity_pf_inverter-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_unity_pf_inverter","text":"constraint_unity_pf_inverter(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current contribution of inverter in grid-following mode operating at unity power factor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_unity_pf_inverter_disjunctive-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_unity_pf_inverter_disjunctive","text":"constraint_unity_pf_inverter_disjunctive(pm::_PM.AbstractIVRModel, nw::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current contribution of inverter in grid-following mode with pseudo-binary for current-limiting\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_unity_pf_inverter_rs-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_unity_pf_inverter_rs","text":"constraint_unity_pf_inverter_rs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, r, pg, qg, cm)\n\nConstraints for fault current contribution of inverter in grid-following mode operating at unity power factor with a series resistance to handle low-zero terminal voltages\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_v_inverter-Tuple{PowerModels.AbstractIVRModel, Int64, Any, Any, Any, Any, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_v_inverter","text":"constraint_v_inverter(pm::_PM.AbstractIVRModel, n::Int, i, bus_id, r, x, vgr, vgi, cmax)\n\nConstraints for fault current contribution of inverter in grid-forming mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_v_inverter-Tuple{PowerModels.AbstractPowerModel}","page":"Constraints","title":"PowerModelsProtection.constraint_v_inverter","text":"constraint_v_inverter(pm::_PM.AbstractPowerModel; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of inverter in grid-forming mode\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#VariableAPI","page":"Variables","title":"Variables","text":"","category":"section"},{"location":"reference/variables.html","page":"Variables","title":"Variables","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"variable\")","category":"page"},{"location":"reference/variables.html#PowerModelsProtection.variable_branch_current-Tuple{PowerModels.AbstractIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_branch_current","text":"variable_branch_current(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true, kwargs...)\n\nCopies from PowerModels and PowerModelsDistribution without power vars\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_bus_fault_current-Tuple{PowerModels.AbstractIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_bus_fault_current","text":"variable_bus_fault_current(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, report::Bool=true)\n\nfault current variables for active faults\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_gen-Tuple{PowerModels.AbstractIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_gen","text":"variable_gen(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true, kwargs...)\n\nbuilds generator variables for transmission networks\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_gen_loading-Tuple{PowerModels.AbstractIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_gen_loading","text":"variable_gen_loading(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nvariable: pg[j] for j in gen\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_bus_fault_current-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_bus_fault_current","text":"variable_mc_bus_fault_current(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, report::Bool=true)\n\nvariables for multiconductor fault currents for active faults\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_grid_formimg_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_grid_formimg_inverter","text":"variable_mc_grid_formimg_inverter(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, kwargs...)\n\nvariables for multiconductor grid forming inverters\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_pq_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_pq_inverter","text":"variable_mc_pq_inverter(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, kwargs...)\n\nvariables for multiconductor pq inverters\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_storage_current-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_storage_current","text":"variable_mc_storage_current(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nvariables for output terminal currents for grid-connected energy storage\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_storage_current_imaginary-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_storage_current_imaginary","text":"variable_mc_storage_current_imaginary(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nvariables for real portion of output terminal currents for grid-connected energy storage\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_storage_current_real-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_storage_current_real","text":"variable_mc_storage_current_real(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nvariables for real portion of output terminal currents for grid-connected energy storage\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_storage_grid_forming_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_storage_grid_forming_inverter","text":"variable_mc_storage_grid_forming_inverter(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, kwargs...)\n\nvariables associated with grid-connected energy storage: internal voltage, virutal impedance, dc-link power, faulted state\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_pq_inverter-Tuple{PowerModels.AbstractIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_pq_inverter","text":"variable_pq_inverter(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, bounded::Bool=true, kwargs...)\n\nvariables for pq inverters\n\n\n\n\n\n","category":"method"},{"location":"manual/fault_models.html#Fault-Models","page":"Fault Model","title":"Fault Models","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"This document describes the fault data models, and their mathematical formulations.","category":"page"},{"location":"manual/fault_models.html#Transmission","page":"Fault Model","title":"Transmission","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"This section describes the data model for faults under the transmission schema, i.e. when using solve_fault_study.","category":"page"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Name Default Type Units Used Description\nfault_bus String always id of bus connection\ng Real always Fault conductance\nb 0.0 Real always Fault susceptance\nstatus 1 Int always 1 or 0. Indicates if component is enabled or disabled, respectively\nfault_type String Metadata field that helps users quickly identify type of fault \\in [\"lg\", \"ll\", \"llg\", \"3p\", \"3pg\"]","category":"page"},{"location":"manual/fault_models.html#Distribution","page":"Fault Model","title":"Distribution","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"This section describes the data models for the distribution","category":"page"},{"location":"manual/fault_models.html#ENGINEERING-data-model-(user-facing)","page":"Fault Model","title":"ENGINEERING data model (user-facing)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Name Default Type Units Used Description\nbus String always id of bus connection\nconnections Vector{Int} always Ordered list of connected conductors, size=nconductors\ng Matrix{Real} Siemens always Fault conductance matrix, size=(nconductors,nconductors)\nb zeros(nconductors,nconductors) Matrix{Real} Siemens always Fault susceptance matrix, size=(nconductors,nconductors)\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\nfault_type String Metadata field that helps users quickly identify type of fault \\in [\"lg\", \"ll\", \"llg\", \"3p\", \"3pg\"]","category":"page"},{"location":"manual/fault_models.html#MATHEMATICAL-data-model-(internal)","page":"Fault Model","title":"MATHEMATICAL data model (internal)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Name Default Type Units Used Description\nfault_bus Int always id of bus connection\nconnections Vector{Int} always Ordered list of connected conductors, size=nconductors\ng Matrix{Real} per-unit always Fault conductance matrix, size=(nconductors,nconductors)\nb zeros(nconductors,nconductors) Matrix{Real} per-unit always Fault susceptance matrix, size=(nconductors,nconductors)\nstatus 1 Int always 1 or 0. Indicates if component is enabled or disabled, respectively","category":"page"},{"location":"manual/fault_models.html#Connection-Examples","page":"Fault Model","title":"Connection Examples","text":"","category":"section"},{"location":"manual/fault_models.html#Line-Ground-(Phase-A)","page":"Fault Model","title":"Line-Ground (Phase A)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,0] Fault admittance matrix g: $ \\begin{bmatrix} gf & -gf \\\n-gf & gf \\end{bmatrix} $ Fault admittance matrix b: $ \\begin{bmatrix} bf & -bf \\\n-bf & bf \\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Line-Neutral-(Ungrounded-Neutral,-Phase-A)","page":"Fault Model","title":"Line-Neutral (Ungrounded Neutral, Phase A)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,4] Fault admittance matrix g: $ \\begin{bmatrix} gf & -gf \\\n-gf & gf \\end{bmatrix} $ Fault admittance matrix b: $ \\begin{bmatrix} bf & -bf \\\n-bf & bf \\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Line-Line-(Phase-A-B)","page":"Fault Model","title":"Line-Line (Phase A-B)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,0] Fault admittance matrix g: $ \\begin{bmatrix} gf & -gf \\\n-gf & gf \\end{bmatrix} $ Fault admittance matrix b: $ \\begin{bmatrix} bf & -bf \\\n-bf & bf \\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Line-Line-Ground-(Phase-A-B)","page":"Fault Model","title":"Line-Line-Ground (Phase A-B)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,2,0] Fault admittance matrix g: $ \\begin{bmatrix} g{pg} + g{pp} & -g{pp} & -g{pg} \\\n-g{pp} & g{pg} + g{pp} & -g{pg} \\\n-g{pg} & -g{pg} & 2g{pg} \\\n\\end{bmatrix} $ Fault admittance matrix b: $ \\begin{bmatrix} b{pg} + b{pp} & -b{pp} & -b{pg} \\\n-b{pp} & b{pg} + b{pp} & -b{pg} \\\n-b{pg} & -b{pg} & 2b{pg} \\\n\\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Three-Phase-Ungrounded","page":"Fault Model","title":"Three-Phase Ungrounded","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,2,3] Fault admittance matrix g: $ 3 \\begin{bmatrix} 2gf & -gf & -gf\\\n-gf & 2gf & -gf \\\n-gf & -gf & 2gf\\\n\\end{bmatrix} $ Fault admittance matrix b: $ 3 \\begin{bmatrix} 2bf & -bf & -bf\\\n-bf & 2bf & -bf \\\n-bf & -bf & 2bf\\\n\\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Three-Phase-Grounded","page":"Fault Model","title":"Three-Phase Grounded","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,2,3,0] Fault admittance matrix g: $ \\begin{bmatrix} g{pg} + 2g{pp} & -g{pp} & -g{pp} & -g{pg} \\\n-g{pp} & g{pg} + 2g{pp} & -g{pg} & -g{pg} \\\n-g{pp} & -g{pp} & g{pg} + 2g{pp} & -g{pg} \\\n-g{pg} & -g{pg} & -g{pg} & 3g{pg} \\end{bmatrix} $ Fault admittance matrix b: $ \\begin{bmatrix} b{pg} + 2b{pp} & -b{pp} & -b{pp} & -b{pg} \\\n-b{pp} & b{pg} + 2b{pp} & -b{pg} & -b{pg} \\\n-b{pp} & -b{pp} & b{pg} + 2b{pp} & -b{pg} \\\n-b{pg} & -b{pg} & -b{pg} & 3b{pg} \\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Formulation","page":"Fault Model","title":"Formulation","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Depending on fault type, the constraints between networks are as follows","category":"page"},{"location":"manual/fault_models.html#LG","page":"Fault Model","title":"LG","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"I_f1 = I_f2 = I_f0 = fracV_f1 + V_f2 + V_f0Z_f","category":"page"},{"location":"manual/fault_models.html#LL","page":"Fault Model","title":"LL","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"I_f1 = - I_f2 = fracV_f1 - V_f2Z_f","category":"page"},{"location":"manual/fault_models.html#LLG","page":"Fault Model","title":"LLG","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"V_f1 = V_f2","category":"page"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"I_f0 = fracV_f1 - V_f2Z_f","category":"page"},{"location":"manual/fault_models.html#P","page":"Fault Model","title":"3P","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"I_f1 = fracV_f1Z_f","category":"page"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"I_f2 = I_f0 = 0","category":"page"},{"location":"tutorials/distribution_fault_studies.html#Distribution-Fault-Studies","page":"Distribution Fault Studies","title":"Distribution Fault Studies","text":"","category":"section"},{"location":"reference/data_models.html#DataModelAPI","page":"Data Models","title":"Data Models","text":"","category":"section"},{"location":"reference/data_models.html#Parsers","page":"Data Models","title":"Parsers","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"parse_file","category":"page"},{"location":"reference/data_models.html#PowerModelsProtection.parse_file","page":"Data Models","title":"PowerModelsProtection.parse_file","text":"parse_file(\n file::String;\n method::Union{String,Missing}=missing,\n add_gensub::Bool=false,\n flat_start::Bool=false,\n neglect_line_charging::Bool=false,\n neglect_transformer::Bool=false,\n zero_gen_setpoints::Bool=false,\n import_all::Bool=true,\n kwargs...\n)\n\nFunction to parse data from dss (distribution) or matpower (transmission) files.\n\nmethod is for matpower files, and should be one of \"PMs\", \"solar-pf\", \"dg-pf\", \"pf\", or \"opf\", and \"PMD\" or missing for dss files.\n\nIf add_gensub, parse_matpower will attempt to find rs and xs from a gensub dict.\n\nExplanations of flat_start, neglect_line_charging, neglect_transformer, and zero_gen_setpoints can be found in prepare_transmission_data!\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Constructors","page":"Data Models","title":"Constructors","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nPages = [\"components.jl\"]","category":"page"},{"location":"reference/data_models.html#PowerModelsProtection.add_fault!-Tuple{Dict{String, Any}, String, String, String, Vector{Int64}, Real, Real}","page":"Data Models","title":"PowerModelsProtection.add_fault!","text":"add_fault!(data::Dict{String,Any}, name::String, type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)\n\nCreates a fault dictionary given the type of fault, i.e., one of \"3p\", \"ll\", \"lg\", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, in the case of \"lg\", or phase and phase, and adds it to data[\"fault\"] under \"name\"\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsProtection.add_fault!-Tuple{Dict{String, Any}, String, String, String, Vector{Int64}, Real}","page":"Data Models","title":"PowerModelsProtection.add_fault!","text":"add_fault!(data::Dict{String,Any}, name::String, type::String, bus::String, connections::Vector{Int}, resistance::Real)\n\nCreates a fault dictionary given the type of fault, i.e., one of \"3pq\", \"llg\", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, and the phase_resistance between phases, and adds it to data[\"fault\"] under \"name\"\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsProtection.create_fault-Tuple{String, String, Vector{Int64}, Real, Real}","page":"Data Models","title":"PowerModelsProtection.create_fault","text":"create_fault(type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)::Dict{String,Any}\n\nCreates a fault dictionary given the type of fault, i.e., one of \"3pq\", \"llg\", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, and the phase_resistance between phases\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsProtection.create_fault-Tuple{String, String, Vector{Int64}, Real}","page":"Data Models","title":"PowerModelsProtection.create_fault","text":"create_fault(type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)::Dict{String,Any}\n\nCreates a fault dictionary given the type of fault, i.e., one of \"3p\", \"ll\", \"lg\", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, in the case of \"lg\", or phase and phase.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#Model-Transformations","page":"Data Models","title":"Model Transformations","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"transform_data_model\ntransform_solution","category":"page"},{"location":"reference/data_models.html#PowerModelsProtection.transform_data_model","page":"Data Models","title":"PowerModelsProtection.transform_data_model","text":"custom version of transform_data_model from PowerModelsDistribution for easy model transformation\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsProtection.transform_solution","page":"Data Models","title":"PowerModelsProtection.transform_solution","text":"custom version of transform_solution from PowerModelsDistribution to aid in easy solution transformation\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Unit-conversions","page":"Data Models","title":"Unit conversions","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nPages = [\"units.jl\"]","category":"page"},{"location":"reference/data_models.html#PowerModelsProtection.make_fault_si!-Tuple{Dict{String}, Dict{String}, Dict{String}, Dict{String}}","page":"Data Models","title":"PowerModelsProtection.make_fault_si!","text":"helper function to convert fault object units back into si units\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#Helper-Functions","page":"Data Models","title":"Helper Functions","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"","category":"page"},{"location":"reference/problems.html#ProblemAPI","page":"Problems","title":"Problems","text":"","category":"section"},{"location":"reference/problems.html#Solvers","page":"Problems","title":"Solvers","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"solve\")","category":"page"},{"location":"reference/problems.html#PowerModelsProtection.solve_fault_study-Tuple{Dict{String, Any}, Any}","page":"Problems","title":"PowerModelsProtection.solve_fault_study","text":"solve_fault_study(case::Dict{String,Any}, solver; kwargs...)\n\nSolves a fault study using all active faults under case[\"fault\"] for transmission (matpower) data sets given an optimization solver\n\nkwargs can be any valid keyword argument for PowerModels' run_model function.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_fault_study-Tuple{Dict{String}, Dict{String}, Any}","page":"Problems","title":"PowerModelsProtection.solve_fault_study","text":"solve_fault_study(case::Dict{String,<:Any}, fault_studies::Dict{String,<:Any}, solver; kwargs...)::Dict{String,Any}\n\nSolves a series fault studies in fault_studies, e.g., generated by build_fault_study for transmission (matpower) data sets given an optimization solver\n\nkwargs can be any valid keyword argument for PowerModels' run_model function.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_fault_study-Tuple{String, Any}","page":"Problems","title":"PowerModelsProtection.solve_fault_study","text":"solve_fault_study(file::String, solver; kwargs...)\n\nGiven a file, parses file and solves a series of fault studies\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_dg_pf-Tuple{Dict{String}, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_dg_pf","text":"solve_mc_dg_pf(data::Dict{String,<:Any}, solver; kwargs...)\n\nRun Power Flow Problem with DG\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_dg_pf-Tuple{String, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_dg_pf","text":"solve_mc_dg_pf(file::String, solver; kwargs...)\n\nRun Power Flow Problem with DG\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_fault_study-Tuple{Dict{String}, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_fault_study","text":"solve_mc_fault_study(case::Dict{String,<:Any}, solver; kwargs...)\n\nFunction to solve a multiconductor (distribution) fault study given a data set case and optimization solver\n\nkwargs can be any valid keyword argument for PowerModelsDistribution's solve_mc_model\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_fault_study-Tuple{Dict{String}, Dict{String}, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_fault_study","text":"solve_mc_fault_study(case::Dict{String,<:Any}, fault_studies::Dict{String,<:Any}, solver; kwargs...)\n\nSolves a series of fault studies given by fault_studies, e.g., built from build_mc_fault_study.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_fault_study-Tuple{String, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_fault_study","text":"solve_mc_fault_study(file::String, solver; kwargs...)\n\nGiven a file, parses the file, and runs the fault study.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_pf-Tuple{Dict{String}, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_pf","text":"solve_mc_pf(data::Dict{String,<:Any}, solver; kwargs...)\n\nRun Power Flow Problem with Solar\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_pf-Tuple{String, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_pf","text":"solve_mc_pf(file::String, solver; kwargs...)\n\nRun Power Flow Problem with Solar\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Builders","page":"Problems","title":"Builders","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"build\")","category":"page"},{"location":"reference/problems.html#PowerModelsProtection.build_fault_study-Tuple{Dict{String}}","page":"Problems","title":"PowerModelsProtection.build_fault_study","text":"build_fault_study(data::Dict; default_fault_resistance::Real=0.0001)\n\nBuilds a dictionary of fault studies on a transmission (single-phase positive sequence) network that are intended to be used in conjunction with solve_fault_study.\n\nThe function will iterate over all buses and create faults using the default fault resistance. The fault study dictionary will have the following structure:\n\n Dict{String,Any}(\n \"bus_i\" => Dict{String,Any}(\n \"fault_bus\" => bus_i\n \"gf\" => 1 / resistance,\n \"status\" => 1\n ),\n ...\n )\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_fault_study-Tuple{PowerModels.AbstractPowerModel}","page":"Problems","title":"PowerModelsProtection.build_fault_study","text":"build_fault_study(pm::_PM.AbstractPowerModel)\n\nBuilds a transmission fault study optimization problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_dg_pf-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsProtection.build_mc_dg_pf","text":"build_mc_dg_pf(pm::_PMD.AbstractUnbalancedPowerModel)\n\nConstructor for Power Flow Problem with DG\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_fault_study-Tuple{Dict{String}}","page":"Problems","title":"PowerModelsProtection.build_mc_fault_study","text":"build_mc_fault_study(data::Dict{String,<:Any}; resistance::Real=0.01, phase_resistance::Real=0.01)::Dict{String,Any}\n\nAdd all fault type data to model for study for multiconductor networks\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_fault_study-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsProtection.build_mc_fault_study","text":"build_mc_fault_study(pm::_PMD.AbstractUnbalancedPowerModel)\n\nBuilds a multiconductor (distribution) fault study optimization problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_pf-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsProtection.build_mc_pf","text":"build_mc_pf(pm::_PMD.AbstractUnbalancedPowerModel)\n\nConstructor for Power Flow Problem with Solar\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_sparse_fault_study-Tuple{Dict{String}}","page":"Problems","title":"PowerModelsProtection.build_mc_sparse_fault_study","text":"build_mc_sparse_fault_study(data::Dict{String,<:Any}; resistance::Real=0.01, phase_resistance::Real=0.01)::Dict{String,Any}\n\nBuilds sparse collection of fault studies using a network graph\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Solution-Helpers","page":"Problems","title":"Solution Helpers","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"sol_\")","category":"page"},{"location":"reference/problems.html#DEPRECIATED-Solver-functions","page":"Problems","title":"DEPRECIATED Solver functions","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"run\")","category":"page"},{"location":"tutorials/transmission_fault_studies.html#Transmission-Fault-Studies","page":"Transmission Fault Studies","title":"Transmission Fault Studies","text":"","category":"section"},{"location":"reference/internal.html#Internal-Functions","page":"Internal Functions","title":"Internal Functions","text":"","category":"section"},{"location":"reference/internal.html","page":"Internal Functions","title":"Internal Functions","text":"Modules = [PowerModelsProtection]\nPublic = false","category":"page"},{"location":"reference/internal.html#PowerModelsProtection._pmp_dimensionalize_math_extensions","page":"Internal Functions","title":"PowerModelsProtection._pmp_dimensionalize_math_extensions","text":"pointers for fields to get unit transformations back to si units in solutions\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsProtection._pmp_eng2math_passthrough","page":"Internal Functions","title":"PowerModelsProtection._pmp_eng2math_passthrough","text":"field/values to passthrough from the ENGINEERING to MATHEMATICAL data models\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsProtection._pmp_map_math2eng_extensions","page":"Internal Functions","title":"PowerModelsProtection._pmp_map_math2eng_extensions","text":"necessary function reference dict for solution transformations\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsProtection._add_dict-Tuple{Dict}","page":"Internal Functions","title":"PowerModelsProtection._add_dict","text":"Function to help add keyword arguments to the circuit information dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._bisection-NTuple{4, Any}","page":"Internal Functions","title":"PowerModelsProtection._bisection","text":"Bisection solver used to help fit a curve to provided points on tcc_curves.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._check_keys-Tuple{Dict{String, Any}, Union{Vector{SubString{String}}, Vector{String}}}","page":"Internal Functions","title":"PowerModelsProtection._check_keys","text":"Function to apply haskey function to all elements in a vector. Used for checking if all cts are in the circuit when adding a differential relay. Returns a Bool\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._create_3p_fault-Tuple{String, Vector{Int64}, Real}","page":"Internal Functions","title":"PowerModelsProtection._create_3p_fault","text":"creates a three-phase fault\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._create_3pg_fault-Tuple{String, Vector{Int64}, Real, Real}","page":"Internal Functions","title":"PowerModelsProtection._create_3pg_fault","text":"creates a three-phase-ground fault\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._create_lg_fault-Tuple{String, Vector{Int64}, Real}","page":"Internal Functions","title":"PowerModelsProtection._create_lg_fault","text":"creates a line-ground fault\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._create_ll_fault-Tuple{String, Vector{Int64}, Real}","page":"Internal Functions","title":"PowerModelsProtection._create_ll_fault","text":"creates a line-line fault\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._create_llg_fault-Tuple{String, Vector{Int64}, Real, Real}","page":"Internal Functions","title":"PowerModelsProtection._create_llg_fault","text":"creates a line-line-ground fault\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._differential_time-Tuple{Dict{String, Any}, Number}","page":"Internal Functions","title":"PowerModelsProtection._differential_time","text":"Function that calculates short-invers operation time of relay. Uses restraint instead of tap setting.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._dss2eng_ct!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._dss2eng_ct!","text":"Helper function to convert dss data for monitors to engineering current transformer model.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._dss2eng_curve!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._dss2eng_curve!","text":"Helper function for converting dss tcc_curves to engineering model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._dss2eng_fuse!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._dss2eng_fuse!","text":"Helper function for converting dss fuse to engineering fuse\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._dss2eng_gen_dynamics!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._dss2eng_gen_dynamics!","text":"helper function to build extra dynamics information for generator or vsource objects\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._dss2eng_gen_model!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._dss2eng_gen_model!","text":"helper function to define generator typr from opendss models\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._dss2eng_relay!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._dss2eng_relay!","text":"Helper function for converting dss relay to engineering relay model.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._dss2eng_solar_dynamics!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._dss2eng_solar_dynamics!","text":"helper function to build extra dynamics information for pvsystem objects\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._eng2math_fault!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._eng2math_fault!","text":"helper function to transformer fault objects from ENGINEERING to MATHEMATICAL data models\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._eng2math_protection!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._eng2math_protection!","text":"helper function to transform protection equipment objects from ENGINEERING to MATHEMATICAL data models\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._fuse_operation-Tuple{Dict{String, Any}, Dict{String, Any}, Vector}","page":"Internal Functions","title":"PowerModelsProtection._fuse_operation","text":"Determines whether a fuse operates given the current through the line it is protecting\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._get_current-Tuple{Dict{String, Any}, Dict{String, Any}, Any, Any}","page":"Internal Functions","title":"PowerModelsProtection._get_current","text":"Function to get current that is flowing through the relay or fuse we are looking at. Gets the type of relay from dictionary then uses the proper method for calculating current through relay operating coil. Outputs a vector.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._get_current_math-Tuple{Dict{Symbol}, Dict{String, Any}, Any, Any, Vector}","page":"Internal Functions","title":"PowerModelsProtection._get_current_math","text":"Same as getcurrent but uses mathematical model.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._get_phase_base_order-Tuple{Vector{Int64}}","page":"Internal Functions","title":"PowerModelsProtection._get_phase_base_order","text":"helper function to get faulted phases base order\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._interpolate_time-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsProtection._interpolate_time","text":"Function to interpolate time values from tcc_curve\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._long_time-Tuple{Dict{String, Any}, Number}","page":"Internal Functions","title":"PowerModelsProtection._long_time","text":"Function that calculates the long-inverse time of a relay for delayed trips.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._map_math2eng_fault!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._map_math2eng_fault!","text":"helper function to transform fault solutions back into ENGINEERING from MATHEMATICAL data models\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._map_math2eng_protection!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._map_math2eng_protection!","text":"Helper function to convert tripped relays and blown fuses from MATHEMATICAL to ENGINEERING models\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._non_ideal_ct-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsProtection._non_ideal_ct","text":"_non_ideal_ct(relay_data,CT_data,Iabc)\n\nConverts primary side current to the actual current going through relay coil based on non-ideal parameters. Unused.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._p_to_s-Tuple{Vector}","page":"Internal Functions","title":"PowerModelsProtection._p_to_s","text":"Function to convert phase values to sequence values. Takes vector of 3 phases, returns vector of 3 sequences.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._rebase_pu_fault!-Tuple{Dict{String}, Dict{String}, Any, Any, Real, Real, Any}","page":"Internal Functions","title":"PowerModelsProtection._rebase_pu_fault!","text":"function to rebase units into pu on fault objects\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._rebase_pu_gen_dynamics!-Tuple{Dict{String}, Dict{String}, Any, Any, Real, Real, Any}","page":"Internal Functions","title":"PowerModelsProtection._rebase_pu_gen_dynamics!","text":"function to rebase extra fields for generator dynamics into per unit\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._rebase_pu_solar!-Tuple{Dict{String}, Dict{String}, Any, Any, Real, Real, Any}","page":"Internal Functions","title":"PowerModelsProtection._rebase_pu_solar!","text":"function to rebase extra fields for solar into per unit\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._ref_add_fault!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._ref_add_fault!","text":"Adds the fault to the model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._ref_add_grid_forming_bus!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._ref_add_grid_forming_bus!","text":"identifies grid forming buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._ref_add_mc_fault!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._ref_add_mc_fault!","text":"Adds the fault to the model for multiconductor\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._ref_add_mc_solar!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._ref_add_mc_solar!","text":"Calculates the power from solar based on inputs\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._ref_add_mc_storage!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._ref_add_mc_storage!","text":"Add battery energy storage to the model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._relay_operation-Tuple{Dict{String, Any}, Vector}","page":"Internal Functions","title":"PowerModelsProtection._relay_operation","text":"Determines whether a relay operates given the current through its protected object\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._restraint-Tuple{Dict{String, Any}, Vector, Number}","page":"Internal Functions","title":"PowerModelsProtection._restraint","text":"Function that calculated the slope setting of differential relay based on tap setting.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._short_time-Tuple{Dict{String, Any}, Number}","page":"Internal Functions","title":"PowerModelsProtection._short_time","text":"Function that calculates the short-inverse time of a relay for fast trips.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._solution_fs!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._solution_fs!","text":"adds additional variable transformations for fault study solutions of distribution networks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._solution_pm_fs!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._solution_pm_fs!","text":"adds additional variable transformations for fault study solutions of transmission networks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._solution_protection!-Tuple{Dict{Symbol, Any}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._solution_protection!","text":"calculates relay and fuse operation times and adds them to solution dictionary\n\n\n\n\n\n","category":"method"},{"location":"index.html#PowerModelsProtection.jl-Documentation","page":"Introduction","title":"PowerModelsProtection.jl Documentation","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"CurrentModule = PowerModelsProtection","category":"page"},{"location":"index.html#Overview","page":"Introduction","title":"Overview","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"PowerModelsProtection.jl is a Julia/JuMP extension package to PowerModels.jl and PowerModelsDistribution.jl for modeling of protection coordination on power grids.","category":"page"},{"location":"index.html#Installation","page":"Introduction","title":"Installation","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The latest stable release of PowerModelsProtection can be installed using the Julia package manager with","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Pkg.add(\"PowerModelsProtection\")","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"For the current development version, \"checkout\" this package with","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Pkg.develop(Pkg.PackageSpec(;name=\"PowerModelsProtection\", url=\"https://github.com/lanl-ansi/PowerModelsProtection.jl.git\"))","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"At least one solver is required for running PowerModelsProtection. The open-source solver Ipopt is recommended, as it is extremely fast, and can be used to solve a wide variety of the problems and network formulations provided in PowerModelsProtection. The Ipopt solver can be installed via the package manager with","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Pkg.add(\"Ipopt\")","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Test that the package works by running","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Pkg.test(\"PowerModelsProtection\")","category":"page"},{"location":"manual/quickguide.html#Quick-Start-Guide","page":"Getting Started","title":"Quick Start Guide","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Once PowerModelsProtection is installed, Ipopt is installed, and a network data file (e.g., \"case5_fault.m\" in the package folder under ./test/data/trans) has been acquired, a short-circuit solve can be executed with,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsProtection\nusing Ipopt\n\nipopt_solver = optimizer_with_attributes(Ipopt.Optimizer, \"print_level\"=>0, \"tol\"=>1e-6)\ncase5_fault = parse_file(\"case5_fault.m\")\nadd_fault!(case5_fault, 1, 2, 0.0001)\nresult = solve_fault_study(case5_fault, ipopt_solver)","category":"page"},{"location":"manual/quickguide.html#Adding-Faults","page":"Getting Started","title":"Adding Faults","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To add a fault, use the add_fault! command","category":"page"},{"location":"manual/quickguide.html#Transmission","page":"Getting Started","title":"Transmission","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"case5 = parse_file(\"case5_fault.m\")\nadd_fault!(case5, 1, 2, 0.0001)","category":"page"},{"location":"manual/quickguide.html#Distribution","page":"Getting Started","title":"Distribution","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"case3_balanced_pv = parse_file(\"case3_balanced_pv.dss\"))\nadd_fault!(data, \"testfault\", \"lg\", \"loadbus\", [1,4], 0.001)","category":"page"},{"location":"manual/quickguide.html#Getting-Results","page":"Getting Started","title":"Getting Results","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To perform a short-circuit solve, use the solve_fault_study or solve_mc_fault_study command","category":"page"},{"location":"manual/quickguide.html#Transmission-2","page":"Getting Started","title":"Transmission","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_fault_study(case5, ipopt_solver)\n````\n\n### Distribution\n","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"julia result = solvemcfaultstudy(case3balancedpv, ipoptsolver) ````","category":"page"},{"location":"manual/quickguide.html#Examples","page":"Getting Started","title":"Examples","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"More examples of working with the engineering data model can be found in the /examples folder of the PowerModelsProtection.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation","category":"page"}] +[{"location":"reference/constraints.html#ConstraintAPI","page":"Constraints","title":"Constraints","text":"","category":"section"},{"location":"reference/constraints.html","page":"Constraints","title":"Constraints","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"constraint\")","category":"page"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_bus_fault_current-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsProtection.constraint_bus_fault_current","text":"constraint_bus_fault_current(pm::_PM.AbstractIVRModel, nw::Int, i::Int, fault_bus::Int, g::Real)\n\nCalculates the fault current at a bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_bus_fault_current-Tuple{PowerModels.AbstractIVRModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_bus_fault_current","text":"constraint_bus_fault_current(pm::_PM.AbstractIVRModel, i::Int; nw::Int=nw_id_default)\n\nconstraint for the fault current at the fault_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_current_balance-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Vararg{Any, 4}}","page":"Constraints","title":"PowerModelsProtection.constraint_current_balance","text":"constraint_current_balance(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_arcs, bus_gens, bus_gs, bus_bs)\n\nCalculates the current balance at the non-faulted buses\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_current_balance-Tuple{PowerModels.AbstractPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_current_balance","text":"constraint_current_balance(pm::_PM.AbstractPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraint to calculate the fault current at a bus and the current at other buses\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_fault_current_balance-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Vararg{Any, 4}}","page":"Constraints","title":"PowerModelsProtection.constraint_fault_current_balance","text":"constraint_fault_current_balance(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_arcs, bus_gens, bus_gs, bus_bs)\n\nCalculates the current balance at the faulted bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_gen_voltage_drop-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Vararg{Any, 5}}","page":"Constraints","title":"PowerModelsProtection.constraint_gen_voltage_drop","text":"constraint_gen_voltage_drop(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id, r, x, vgr, vgi)\n\nStates that the bus voltage is equal to the internal voltage minus voltage drop across subtransient impedance\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_gen_voltage_drop-Tuple{PowerModels.AbstractPowerModel}","page":"Constraints","title":"PowerModelsProtection.constraint_gen_voltage_drop","text":"constraint_gen_voltage_drop(pm::_PM.AbstractPowerModel; nw::Int=nw_id_default)\n\nConstraint that sets the terminal voltage basd on the internal voltage and the stator impedence\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_i_inverter-Tuple{PowerModels.AbstractPowerModel}","page":"Constraints","title":"PowerModelsProtection.constraint_i_inverter","text":"constraint_i_inverter(pm::_PM.AbstractPowerModel; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of inverter in grid-following mode assuming that the inverter current regulating loop operates slowly\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_i_inverter_vs-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Vararg{Any, 4}}","page":"Constraints","title":"PowerModelsProtection.constraint_i_inverter_vs","text":"constraint_i_inverter_vs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, vs, pg, qg, cm)\n\nConstraints for fault current contribution of inverter in grid-following mode assuming that the inverter current regulating loop operates slowly\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_bus_fault_current-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_bus_fault_current","text":"constraint_mc_bus_fault_current(pm::_PMD.AbstractUnbalancedIVRModel, i::Int; nw::Int=nw_id_default)\n\nConstraint for Kirchoff's current law on faulted buses\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_bus_fault_current-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64, Int64, Int64, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_bus_fault_current","text":"constraint_mc_bus_fault_current(pm::_PMD.AbstractUnbalancedPowerModel, nw::Int, i::Int, bus::Int, connections::Vector{Int}, Gf::Matrix{<:Real}, Bf::Matrix{<:Real})\n\nCalculates the current at the faulted bus for multiconductor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_current_balance-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_current_balance","text":"constraint_mc_current_balance(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraint to calculate the fault current at a bus and the current at other buses for multiconductor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_fault_current_balance-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_fault_current_balance","text":"constraint_mc_fault_current_balance(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, fault::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nCalculates the current balance at the faulted bus for multiconductor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_constant_power-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_constant_power","text":"constraint_mc_gen_constant_power(pm::_PMD.AbstractUnbalancedPowerModel; nw::Int=nw_id_default)\n\nConstraint that sets the gen to output constant power\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_power_setpoint_imag-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_power_setpoint_imag","text":"constraint_mc_gen_power_setpoint_imag(pm::_PMD.AbstractUnbalancedPowerModel, n::Int, i, qg)\n\ngenerator reactive power setpoint constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_power_setpoint_imag-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_power_setpoint_imag","text":"constraint_mc_gen_power_setpoint_imag(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default, kwargs...)\n\ngenerator reactive power setpoint constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_pq_constant_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_pq_constant_inverter","text":"constraint_mc_gen_pq_constant_inverter(pm::_PMD.AbstractUnbalancedPowerModel; nw::Int=nw_id_default)\n\nConstraint that sets the gen to output constant power\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_voltage_drop-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vararg{Any, 5}}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_voltage_drop","text":"constraint_mc_gen_voltage_drop(pm::_PMD.AbstractUnbalancedIVRModel, n::Int, i::Int, bus_id::Int, r, x, vgr, vgi, terminals)\n\nConstraint that sets the terminal voltage basd on the internal voltage and the stator impedence\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_gen_voltage_drop-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_gen_voltage_drop","text":"constraint_mc_gen_voltage_drop(pm::_PMD.AbstractUnbalancedPowerModel; nw::Int=nw_id_default)\n\nConstraint that sets the terminal voltage basd on the internal voltage and the stator impedence for multiconductor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_formimg_inverter_impedance-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vararg{Any, 6}}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_formimg_inverter_impedance","text":"constraint_mc_grid_formimg_inverter_impedance(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, bus_id::Int, vr0, vi0, r, x, pmax, cmax)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode with power matching\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_formimg_inverter_virtual_impedance-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vararg{Any, 7}}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_formimg_inverter_virtual_impedance","text":"constraint_mc_grid_formimg_inverter_virtual_impedance(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, bus_id::Int, vr0, vi0, pmax, cmax, smax, ang, terminals)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode with power matching\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_forming_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vararg{Any, 4}}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_forming_inverter","text":"constraint_mc_grid_forming_inverter(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, bus_id::Int, vrstar, vistar, pmax, cmax)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_forming_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_forming_inverter","text":"constraint_mc_grid_forming_inverter(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_forming_inverter_impedance-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_forming_inverter_impedance","text":"constraint_mc_grid_forming_inverter_impedance(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode with power matching\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_grid_forming_inverter_virtual_impedance-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_grid_forming_inverter_virtual_impedance","text":"constraint_mc_grid_forming_inverter_virtual_impedance(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of multiconductor inverter in grid-forming mode with power matching\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_i_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_i_inverter","text":"constraint_mc_i_inverter(pm::_PMD.AbstractUnbalancedIVRModel, n::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current inverter with current set point\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_pq_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vararg{Any, 6}}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_pq_inverter","text":"constraint_mc_pq_inverter(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current contribution of multiconductor inverter in grid-following mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_pq_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_pq_inverter","text":"constraint_mc_pq_inverter(pm::_PMD.AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of multiconductor inverter in grid-following mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_storage_grid_forming_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Any, Int64, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_storage_grid_forming_inverter","text":"constraint_mc_storage_grid_forming_inverter(pm::_PMD.AbstractUnbalancedIVRModel, nw::Int, i, bus_id::Int, connections)\n\nConstrants for grid-forming inverter with storage\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_mc_storage_grid_forming_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64}","page":"Constraints","title":"PowerModelsProtection.constraint_mc_storage_grid_forming_inverter","text":"constraint_mc_storage_grid_forming_inverter(pm::_PMD.AbstractUnbalancedIVRModel, i::Int; nw::Int=nw_id_default)\n\nConstraint for fault-current contribution battery energy storage inverters\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_pf_inverter_vs-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Vararg{Any, 4}}","page":"Constraints","title":"PowerModelsProtection.constraint_pf_inverter_vs","text":"constraint_pf_inverter_vs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, vs, pg, qg, cmax)\n\nConstraints for fault current contribution of inverter in grid-following mode with a real voltage drop to handle low-zero terminal voltages\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_pq_inverter-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_pq_inverter","text":"constraint_pq_inverter(pm::_PM.AbstractIVRModel, nw::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current contribution of inverter in grid-following mode with pq set points\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_pq_inverter-Tuple{PowerModels.AbstractPowerModel}","page":"Constraints","title":"PowerModelsProtection.constraint_pq_inverter","text":"constraint_pq_inverter(pm::_PM.AbstractPowerModel; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of inverter in grid-following mode with pq set points\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_pq_inverter_mccormick-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_pq_inverter_mccormick","text":"constraint_pq_inverter_mccormick(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nMcCormick relaxation of constraints for fault current contribution of inverter in grid-following mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_pq_inverter_region-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_pq_inverter_region","text":"constraint_pq_inverter_region(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current contribution of inverter in grid-following mode operating at arbitrary power factor. Requires objective term\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_unity_pf_inverter-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_unity_pf_inverter","text":"constraint_unity_pf_inverter(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current contribution of inverter in grid-following mode operating at unity power factor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_unity_pf_inverter_disjunctive-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsProtection.constraint_unity_pf_inverter_disjunctive","text":"constraint_unity_pf_inverter_disjunctive(pm::_PM.AbstractIVRModel, nw::Int, i::Int, bus_id::Int, pg, qg, cmax)\n\nConstraints for fault current contribution of inverter in grid-following mode with pseudo-binary for current-limiting\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_unity_pf_inverter_rs-Tuple{PowerModels.AbstractIVRModel, Int64, Int64, Int64, Vararg{Any, 4}}","page":"Constraints","title":"PowerModelsProtection.constraint_unity_pf_inverter_rs","text":"constraint_unity_pf_inverter_rs(pm::_PM.AbstractIVRModel, n::Int, i::Int, bus_id::Int, r, pg, qg, cm)\n\nConstraints for fault current contribution of inverter in grid-following mode operating at unity power factor with a series resistance to handle low-zero terminal voltages\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_v_inverter-Tuple{PowerModels.AbstractIVRModel, Int64, Vararg{Any, 7}}","page":"Constraints","title":"PowerModelsProtection.constraint_v_inverter","text":"constraint_v_inverter(pm::_PM.AbstractIVRModel, n::Int, i, bus_id, r, x, vgr, vgi, cmax)\n\nConstraints for fault current contribution of inverter in grid-forming mode\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsProtection.constraint_v_inverter-Tuple{PowerModels.AbstractPowerModel}","page":"Constraints","title":"PowerModelsProtection.constraint_v_inverter","text":"constraint_v_inverter(pm::_PM.AbstractPowerModel; nw::Int=nw_id_default)\n\nConstraints for fault current contribution of inverter in grid-forming mode\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#VariableAPI","page":"Variables","title":"Variables","text":"","category":"section"},{"location":"reference/variables.html","page":"Variables","title":"Variables","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"variable\")","category":"page"},{"location":"reference/variables.html#PowerModelsProtection.variable_branch_current-Tuple{PowerModels.AbstractIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_branch_current","text":"variable_branch_current(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true, kwargs...)\n\nCopies from PowerModels and PowerModelsDistribution without power vars\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_bus_fault_current-Tuple{PowerModels.AbstractIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_bus_fault_current","text":"variable_bus_fault_current(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, report::Bool=true)\n\nfault current variables for active faults\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_gen-Tuple{PowerModels.AbstractIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_gen","text":"variable_gen(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true, kwargs...)\n\nbuilds generator variables for transmission networks\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_gen_loading-Tuple{PowerModels.AbstractIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_gen_loading","text":"variable_gen_loading(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nvariable: pg[j] for j in gen\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_bus_fault_current-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_bus_fault_current","text":"variable_mc_bus_fault_current(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, report::Bool=true)\n\nvariables for multiconductor fault currents for active faults\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_grid_formimg_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_grid_formimg_inverter","text":"variable_mc_grid_formimg_inverter(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, kwargs...)\n\nvariables for multiconductor grid forming inverters\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_pq_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_pq_inverter","text":"variable_mc_pq_inverter(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, kwargs...)\n\nvariables for multiconductor pq inverters\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_storage_current-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_storage_current","text":"variable_mc_storage_current(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nvariables for output terminal currents for grid-connected energy storage\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_storage_current_imaginary-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_storage_current_imaginary","text":"variable_mc_storage_current_imaginary(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nvariables for real portion of output terminal currents for grid-connected energy storage\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_storage_current_real-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_storage_current_real","text":"variable_mc_storage_current_real(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nvariables for real portion of output terminal currents for grid-connected energy storage\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_mc_storage_grid_forming_inverter-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_mc_storage_grid_forming_inverter","text":"variable_mc_storage_grid_forming_inverter(pm::_PMD.AbstractUnbalancedIVRModel; nw::Int=nw_id_default, bounded::Bool=true, kwargs...)\n\nvariables associated with grid-connected energy storage: internal voltage, virutal impedance, dc-link power, faulted state\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsProtection.variable_pq_inverter-Tuple{PowerModels.AbstractIVRModel}","page":"Variables","title":"PowerModelsProtection.variable_pq_inverter","text":"variable_pq_inverter(pm::_PM.AbstractIVRModel; nw::Int=nw_id_default, bounded::Bool=true, kwargs...)\n\nvariables for pq inverters\n\n\n\n\n\n","category":"method"},{"location":"manual/fault_models.html#Fault-Models","page":"Fault Model","title":"Fault Models","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"This document describes the fault data models, and their mathematical formulations.","category":"page"},{"location":"manual/fault_models.html#Transmission","page":"Fault Model","title":"Transmission","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"This section describes the data model for faults under the transmission schema, i.e. when using solve_fault_study.","category":"page"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Name Default Type Units Used Description\nfault_bus String always id of bus connection\ng Real always Fault conductance\nb 0.0 Real always Fault susceptance\nstatus 1 Int always 1 or 0. Indicates if component is enabled or disabled, respectively\nfault_type String Metadata field that helps users quickly identify type of fault \\in [\"lg\", \"ll\", \"llg\", \"3p\", \"3pg\"]","category":"page"},{"location":"manual/fault_models.html#Distribution","page":"Fault Model","title":"Distribution","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"This section describes the data models for the distribution","category":"page"},{"location":"manual/fault_models.html#ENGINEERING-data-model-(user-facing)","page":"Fault Model","title":"ENGINEERING data model (user-facing)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Name Default Type Units Used Description\nbus String always id of bus connection\nconnections Vector{Int} always Ordered list of connected conductors, size=nconductors\ng Matrix{Real} Siemens always Fault conductance matrix, size=(nconductors,nconductors)\nb zeros(nconductors,nconductors) Matrix{Real} Siemens always Fault susceptance matrix, size=(nconductors,nconductors)\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\nfault_type String Metadata field that helps users quickly identify type of fault \\in [\"lg\", \"ll\", \"llg\", \"3p\", \"3pg\"]","category":"page"},{"location":"manual/fault_models.html#MATHEMATICAL-data-model-(internal)","page":"Fault Model","title":"MATHEMATICAL data model (internal)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Name Default Type Units Used Description\nfault_bus Int always id of bus connection\nconnections Vector{Int} always Ordered list of connected conductors, size=nconductors\ng Matrix{Real} per-unit always Fault conductance matrix, size=(nconductors,nconductors)\nb zeros(nconductors,nconductors) Matrix{Real} per-unit always Fault susceptance matrix, size=(nconductors,nconductors)\nstatus 1 Int always 1 or 0. Indicates if component is enabled or disabled, respectively","category":"page"},{"location":"manual/fault_models.html#Connection-Examples","page":"Fault Model","title":"Connection Examples","text":"","category":"section"},{"location":"manual/fault_models.html#Line-Ground-(Phase-A)","page":"Fault Model","title":"Line-Ground (Phase A)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,0] Fault admittance matrix g: $ \\begin{bmatrix} gf & -gf \\\n-gf & gf \\end{bmatrix} $ Fault admittance matrix b: $ \\begin{bmatrix} bf & -bf \\\n-bf & bf \\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Line-Neutral-(Ungrounded-Neutral,-Phase-A)","page":"Fault Model","title":"Line-Neutral (Ungrounded Neutral, Phase A)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,4] Fault admittance matrix g: $ \\begin{bmatrix} gf & -gf \\\n-gf & gf \\end{bmatrix} $ Fault admittance matrix b: $ \\begin{bmatrix} bf & -bf \\\n-bf & bf \\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Line-Line-(Phase-A-B)","page":"Fault Model","title":"Line-Line (Phase A-B)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,0] Fault admittance matrix g: $ \\begin{bmatrix} gf & -gf \\\n-gf & gf \\end{bmatrix} $ Fault admittance matrix b: $ \\begin{bmatrix} bf & -bf \\\n-bf & bf \\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Line-Line-Ground-(Phase-A-B)","page":"Fault Model","title":"Line-Line-Ground (Phase A-B)","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,2,0] Fault admittance matrix g: $ \\begin{bmatrix} g{pg} + g{pp} & -g{pp} & -g{pg} \\\n-g{pp} & g{pg} + g{pp} & -g{pg} \\\n-g{pg} & -g{pg} & 2g{pg} \\\n\\end{bmatrix} $ Fault admittance matrix b: $ \\begin{bmatrix} b{pg} + b{pp} & -b{pp} & -b{pg} \\\n-b{pp} & b{pg} + b{pp} & -b{pg} \\\n-b{pg} & -b{pg} & 2b{pg} \\\n\\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Three-Phase-Ungrounded","page":"Fault Model","title":"Three-Phase Ungrounded","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,2,3] Fault admittance matrix g: $ 3 \\begin{bmatrix} 2gf & -gf & -gf\\\n-gf & 2gf & -gf \\\n-gf & -gf & 2gf\\\n\\end{bmatrix} $ Fault admittance matrix b: $ 3 \\begin{bmatrix} 2bf & -bf & -bf\\\n-bf & 2bf & -bf \\\n-bf & -bf & 2bf\\\n\\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Three-Phase-Grounded","page":"Fault Model","title":"Three-Phase Grounded","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Connections connections: [1,2,3,0] Fault admittance matrix g: $ \\begin{bmatrix} g{pg} + 2g{pp} & -g{pp} & -g{pp} & -g{pg} \\\n-g{pp} & g{pg} + 2g{pp} & -g{pg} & -g{pg} \\\n-g{pp} & -g{pp} & g{pg} + 2g{pp} & -g{pg} \\\n-g{pg} & -g{pg} & -g{pg} & 3g{pg} \\end{bmatrix} $ Fault admittance matrix b: $ \\begin{bmatrix} b{pg} + 2b{pp} & -b{pp} & -b{pp} & -b{pg} \\\n-b{pp} & b{pg} + 2b{pp} & -b{pg} & -b{pg} \\\n-b{pp} & -b{pp} & b{pg} + 2b{pp} & -b{pg} \\\n-b{pg} & -b{pg} & -b{pg} & 3b{pg} \\end{bmatrix} $","category":"page"},{"location":"manual/fault_models.html#Formulation","page":"Fault Model","title":"Formulation","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"Depending on fault type, the constraints between networks are as follows","category":"page"},{"location":"manual/fault_models.html#LG","page":"Fault Model","title":"LG","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"I_f1 = I_f2 = I_f0 = fracV_f1 + V_f2 + V_f0Z_f","category":"page"},{"location":"manual/fault_models.html#LL","page":"Fault Model","title":"LL","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"I_f1 = - I_f2 = fracV_f1 - V_f2Z_f","category":"page"},{"location":"manual/fault_models.html#LLG","page":"Fault Model","title":"LLG","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"V_f1 = V_f2","category":"page"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"I_f0 = fracV_f1 - V_f2Z_f","category":"page"},{"location":"manual/fault_models.html#P","page":"Fault Model","title":"3P","text":"","category":"section"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"I_f1 = fracV_f1Z_f","category":"page"},{"location":"manual/fault_models.html","page":"Fault Model","title":"Fault Model","text":"I_f2 = I_f0 = 0","category":"page"},{"location":"tutorials/distribution_fault_studies.html#Distribution-Fault-Studies","page":"Distribution Fault Studies","title":"Distribution Fault Studies","text":"","category":"section"},{"location":"reference/data_models.html#DataModelAPI","page":"Data Models","title":"Data Models","text":"","category":"section"},{"location":"reference/data_models.html#Parsers","page":"Data Models","title":"Parsers","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"parse_file","category":"page"},{"location":"reference/data_models.html#PowerModelsProtection.parse_file","page":"Data Models","title":"PowerModelsProtection.parse_file","text":"parse_file(\n file::String;\n method::Union{String,Missing}=missing,\n add_gensub::Bool=false,\n flat_start::Bool=false,\n neglect_line_charging::Bool=false,\n neglect_transformer::Bool=false,\n zero_gen_setpoints::Bool=false,\n import_all::Bool=true,\n kwargs...\n)\n\nFunction to parse data from dss (distribution) or matpower (transmission) files.\n\nmethod is for matpower files, and should be one of \"PMs\", \"solar-pf\", \"dg-pf\", \"pf\", or \"opf\", and \"PMD\" or missing for dss files.\n\nIf add_gensub, parse_matpower will attempt to find rs and xs from a gensub dict.\n\nExplanations of flat_start, neglect_line_charging, neglect_transformer, and zero_gen_setpoints can be found in prepare_transmission_data!\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Constructors","page":"Data Models","title":"Constructors","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nPages = [\"components.jl\"]","category":"page"},{"location":"reference/data_models.html#PowerModelsProtection.add_fault!-Tuple{Dict{String, Any}, String, String, String, Vector{Int64}, Real, Real}","page":"Data Models","title":"PowerModelsProtection.add_fault!","text":"add_fault!(data::Dict{String,Any}, name::String, type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)\n\nCreates a fault dictionary given the type of fault, i.e., one of \"3p\", \"ll\", \"lg\", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, in the case of \"lg\", or phase and phase, and adds it to data[\"fault\"] under \"name\"\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsProtection.add_fault!-Tuple{Dict{String, Any}, String, String, String, Vector{Int64}, Real}","page":"Data Models","title":"PowerModelsProtection.add_fault!","text":"add_fault!(data::Dict{String,Any}, name::String, type::String, bus::String, connections::Vector{Int}, resistance::Real)\n\nCreates a fault dictionary given the type of fault, i.e., one of \"3pq\", \"llg\", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, and the phase_resistance between phases, and adds it to data[\"fault\"] under \"name\"\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsProtection.create_fault-Tuple{Dict{String, Any}}","page":"Data Models","title":"PowerModelsProtection.create_fault","text":"create_fault(type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)::Dict{String,Any}\n\nCreates a fault dictionary given the type of fault, i.e., one of \"3p\", \"ll\", \"lg\", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, in the case of \"lg\", or phase and phase.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsProtection.create_fault-Tuple{String, String, Vector{Int64}, Real, Real}","page":"Data Models","title":"PowerModelsProtection.create_fault","text":"create_fault(type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)::Dict{String,Any}\n\nCreates a fault dictionary given the type of fault, i.e., one of \"3pq\", \"llg\", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, and the phase_resistance between phases\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsProtection.create_fault-Tuple{String, String, Vector{Int64}, Real}","page":"Data Models","title":"PowerModelsProtection.create_fault","text":"create_fault(type::String, bus::String, connections::Vector{Int}, resistance::Real, phase_resistance::Real)::Dict{String,Any}\n\nCreates a fault dictionary given the type of fault, i.e., one of \"3p\", \"ll\", \"lg\", the bus on which the fault is active, the connections on which the fault applies, the resistance between the phase and ground, in the case of \"lg\", or phase and phase.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#Model-Transformations","page":"Data Models","title":"Model Transformations","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"transform_data_model\ntransform_solution","category":"page"},{"location":"reference/data_models.html#PowerModelsProtection.transform_data_model","page":"Data Models","title":"PowerModelsProtection.transform_data_model","text":"custom version of transform_data_model from PowerModelsDistribution for easy model transformation\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsProtection.transform_solution","page":"Data Models","title":"PowerModelsProtection.transform_solution","text":"custom version of transform_solution from PowerModelsDistribution to aid in easy solution transformation\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Unit-conversions","page":"Data Models","title":"Unit conversions","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nPages = [\"units.jl\"]","category":"page"},{"location":"reference/data_models.html#PowerModelsProtection.make_fault_si!-Tuple{Dict{String}, Dict{String}, Dict{String}, Dict{String}}","page":"Data Models","title":"PowerModelsProtection.make_fault_si!","text":"helper function to convert fault object units back into si units\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#Helper-Functions","page":"Data Models","title":"Helper Functions","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"","category":"page"},{"location":"reference/problems.html#ProblemAPI","page":"Problems","title":"Problems","text":"","category":"section"},{"location":"reference/problems.html#Solvers","page":"Problems","title":"Solvers","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"solve\")","category":"page"},{"location":"reference/problems.html#PowerModelsProtection.solve_fault_study-Tuple{Dict{String, Any}, Any}","page":"Problems","title":"PowerModelsProtection.solve_fault_study","text":"solve_fault_study(case::Dict{String,Any}, solver; kwargs...)\n\nSolves a fault study using all active faults under case[\"fault\"] for transmission (matpower) data sets given an optimization solver\n\nkwargs can be any valid keyword argument for PowerModels' run_model function.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_fault_study-Tuple{Dict{String}, Dict{String}, Any}","page":"Problems","title":"PowerModelsProtection.solve_fault_study","text":"solve_fault_study(case::Dict{String,<:Any}, fault_studies::Dict{String,<:Any}, solver; kwargs...)::Dict{String,Any}\n\nSolves a series fault studies in fault_studies, e.g., generated by build_fault_study for transmission (matpower) data sets given an optimization solver\n\nkwargs can be any valid keyword argument for PowerModels' run_model function.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_fault_study-Tuple{String, Any}","page":"Problems","title":"PowerModelsProtection.solve_fault_study","text":"solve_fault_study(file::String, solver; kwargs...)\n\nGiven a file, parses file and solves a series of fault studies\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_dg_pf-Tuple{Dict{String}, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_dg_pf","text":"solve_mc_dg_pf(data::Dict{String,<:Any}, solver; kwargs...)\n\nRun Power Flow Problem with DG\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_dg_pf-Tuple{String, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_dg_pf","text":"solve_mc_dg_pf(file::String, solver; kwargs...)\n\nRun Power Flow Problem with DG\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_fault_study-Tuple{Dict{String}, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_fault_study","text":"solve_mc_fault_study(case::Dict{String,<:Any}, solver; kwargs...)\n\nFunction to solve a multiconductor (distribution) fault study given a data set case and optimization solver\n\nkwargs can be any valid keyword argument for PowerModelsDistribution's solve_mc_model\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_fault_study-Tuple{Dict{String}, Dict{String}, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_fault_study","text":"solve_mc_fault_study(case::Dict{String,<:Any}, fault_studies::Dict{String,<:Any}, solver; kwargs...)\n\nSolves a series of fault studies given by fault_studies, e.g., built from build_mc_fault_study.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_fault_study-Tuple{String, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_fault_study","text":"solve_mc_fault_study(file::String, solver; kwargs...)\n\nGiven a file, parses the file, and runs the fault study.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_pf-Tuple{Dict{String}, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_pf","text":"solve_mc_pf(data::Dict{String,<:Any}, solver; kwargs...)\n\nRun Power Flow Problem with Solar\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.solve_mc_pf-Tuple{String, Any}","page":"Problems","title":"PowerModelsProtection.solve_mc_pf","text":"solve_mc_pf(file::String, solver; kwargs...)\n\nRun Power Flow Problem with Solar\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Builders","page":"Problems","title":"Builders","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"build\")","category":"page"},{"location":"reference/problems.html#PowerModelsProtection.build_fault_study-Tuple{Dict{String}}","page":"Problems","title":"PowerModelsProtection.build_fault_study","text":"build_fault_study(data::Dict; default_fault_resistance::Real=0.0001)\n\nBuilds a dictionary of fault studies on a transmission (single-phase positive sequence) network that are intended to be used in conjunction with solve_fault_study.\n\nThe function will iterate over all buses and create faults using the default fault resistance. The fault study dictionary will have the following structure:\n\n Dict{String,Any}(\n \"bus_i\" => Dict{String,Any}(\n \"fault_bus\" => bus_i\n \"gf\" => 1 / resistance,\n \"status\" => 1\n ),\n ...\n )\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_fault_study-Tuple{PowerModels.AbstractPowerModel}","page":"Problems","title":"PowerModelsProtection.build_fault_study","text":"build_fault_study(pm::_PM.AbstractPowerModel)\n\nBuilds a transmission fault study optimization problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_current_vector-Tuple{Dict{String}, Matrix{ComplexF64}}","page":"Problems","title":"PowerModelsProtection.build_mc_current_vector","text":"builds current vector for constant current injection sources\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_delta_current_control_vector-Tuple{Any, Any, Any}","page":"Problems","title":"PowerModelsProtection.build_mc_delta_current_control_vector","text":"defines i based on setting reg points vs setting current based on voltage\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_delta_current_vector-Tuple{Any, Any, Any}","page":"Problems","title":"PowerModelsProtection.build_mc_delta_current_vector","text":"defines i based on voltage vs setting current based on reg\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_dg_pf-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsProtection.build_mc_dg_pf","text":"build_mc_dg_pf(pm::_PMD.AbstractUnbalancedPowerModel)\n\nConstructor for Power Flow Problem with DG\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_fault_study-Tuple{Dict{String}}","page":"Problems","title":"PowerModelsProtection.build_mc_fault_study","text":"build_mc_fault_study(data::Dict{String,<:Any}; resistance::Real=0.01, phase_resistance::Real=0.01)::Dict{String,Any}\n\nAdd all fault type data to model for study for multiconductor networks\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_fault_study-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsProtection.build_mc_fault_study","text":"build_mc_fault_study(pm::_PMD.AbstractUnbalancedPowerModel)\n\nBuilds a multiconductor (distribution) fault study optimization problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_pf-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsProtection.build_mc_pf","text":"build_mc_pf(pm::_PMD.AbstractUnbalancedPowerModel)\n\nConstructor for Power Flow Problem with Solar\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsProtection.build_mc_sparse_fault_study-Tuple{Dict{String}}","page":"Problems","title":"PowerModelsProtection.build_mc_sparse_fault_study","text":"build_mc_sparse_fault_study(data::Dict{String,<:Any}; resistance::Real=0.01, phase_resistance::Real=0.01)::Dict{String,Any}\n\nBuilds sparse collection of fault studies using a network graph\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Solution-Helpers","page":"Problems","title":"Solution Helpers","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"sol_\")","category":"page"},{"location":"reference/problems.html#DEPRECIATED-Solver-functions","page":"Problems","title":"DEPRECIATED Solver functions","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsProtection]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"run\")","category":"page"},{"location":"tutorials/transmission_fault_studies.html#Transmission-Fault-Studies","page":"Transmission Fault Studies","title":"Transmission Fault Studies","text":"","category":"section"},{"location":"reference/internal.html#Internal-Functions","page":"Internal Functions","title":"Internal Functions","text":"","category":"section"},{"location":"reference/internal.html","page":"Internal Functions","title":"Internal Functions","text":"Modules = [PowerModelsProtection]\nPublic = false","category":"page"},{"location":"reference/internal.html#PowerModelsProtection._eng_edge_elements","page":"Internal Functions","title":"PowerModelsProtection._eng_edge_elements","text":"list of edge type elements in the engineering model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsProtection._mc_admittance_asset_types","page":"Internal Functions","title":"PowerModelsProtection._mc_admittance_asset_types","text":"admittance model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsProtection._pmp_dimensionalize_math_extensions","page":"Internal Functions","title":"PowerModelsProtection._pmp_dimensionalize_math_extensions","text":"pointers for fields to get unit transformations back to si units in solutions\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsProtection._pmp_eng2math_passthrough","page":"Internal Functions","title":"PowerModelsProtection._pmp_eng2math_passthrough","text":"field/values to passthrough from the ENGINEERING to MATHEMATICAL data models\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsProtection._pmp_map_math2eng_extensions","page":"Internal Functions","title":"PowerModelsProtection._pmp_map_math2eng_extensions","text":"necessary function reference dict for solution transformations\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsProtection._add_dict-Tuple{Dict}","page":"Internal Functions","title":"PowerModelsProtection._add_dict","text":"Function to help add keyword arguments to the circuit information dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._bisection-NTuple{4, Any}","page":"Internal Functions","title":"PowerModelsProtection._bisection","text":"Bisection solver used to help fit a curve to provided points on tcc_curves.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._check_keys-Tuple{Dict{String, Any}, Union{Vector{SubString{String}}, Vector{String}}}","page":"Internal Functions","title":"PowerModelsProtection._check_keys","text":"Function to apply haskey function to all elements in a vector. Used for checking if all cts are in the circuit when adding a differential relay. Returns a Bool\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._create_3p_fault-Tuple{String, Vector{Int64}, Real}","page":"Internal Functions","title":"PowerModelsProtection._create_3p_fault","text":"creates a three-phase fault\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._create_3pg_fault-Tuple{String, Vector{Int64}, Real, Real}","page":"Internal Functions","title":"PowerModelsProtection._create_3pg_fault","text":"creates a three-phase-ground fault\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._create_lg_fault-Tuple{String, Vector{Int64}, Real}","page":"Internal Functions","title":"PowerModelsProtection._create_lg_fault","text":"creates a line-ground fault\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._create_ll_fault-Tuple{String, Vector{Int64}, Real}","page":"Internal Functions","title":"PowerModelsProtection._create_ll_fault","text":"creates a line-line fault\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._create_llg_fault-Tuple{String, Vector{Int64}, Real, Real}","page":"Internal Functions","title":"PowerModelsProtection._create_llg_fault","text":"creates a line-line-ground fault\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._differential_time-Tuple{Dict{String, Any}, Number}","page":"Internal Functions","title":"PowerModelsProtection._differential_time","text":"Function that calculates short-invers operation time of relay. Uses restraint instead of tap setting.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._eng2math_fault!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._eng2math_fault!","text":"helper function to transformer fault objects from ENGINEERING to MATHEMATICAL data models\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._eng2math_protection!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._eng2math_protection!","text":"helper function to transform protection equipment objects from ENGINEERING to MATHEMATICAL data models\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._fix_control_components!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._fix_control_components!","text":"fix the control components by adding extra data from dss model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._fix_control_load!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._fix_control_load!","text":"fix load control adds vminpu from dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._fuse_operation-Tuple{Dict{String, Any}, Dict{String, Any}, Vector}","page":"Internal Functions","title":"PowerModelsProtection._fuse_operation","text":"Determines whether a fuse operates given the current through the line it is protecting\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._get_current-Tuple{Dict{String, Any}, Dict{String, Any}, Any, Any}","page":"Internal Functions","title":"PowerModelsProtection._get_current","text":"Function to get current that is flowing through the relay or fuse we are looking at. Gets the type of relay from dictionary then uses the proper method for calculating current through relay operating coil. Outputs a vector.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._get_current_math-Tuple{Dict{Symbol}, Dict{String, Any}, Any, Any, Vector}","page":"Internal Functions","title":"PowerModelsProtection._get_current_math","text":"Same as getcurrent but uses mathematical model.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._get_phase_base_order-Tuple{Vector{Int64}}","page":"Internal Functions","title":"PowerModelsProtection._get_phase_base_order","text":"helper function to get faulted phases base order\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._interpolate_time-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsProtection._interpolate_time","text":"Function to interpolate time values from tcc_curve\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._long_time-Tuple{Dict{String, Any}, Number}","page":"Internal Functions","title":"PowerModelsProtection._long_time","text":"Function that calculates the long-inverse time of a relay for delayed trips.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._map_conductor_ids!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._map_conductor_ids!","text":"mod (becuase of three phase transformer) of PMD's helper function to map non integer conductor ids into integers\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._map_eng2math_mc_admittance-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._map_eng2math_mc_admittance","text":"base function for converting mc engineering model to mathematical with admittances\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._map_eng2math_switch!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._map_eng2math_switch!","text":"converts engineering switches into mathematical switches and (if neeed) impedance branches to represent loss model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._map_eng2math_transformer!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._map_eng2math_transformer!","text":"alternate to pmd transformer TODO work on 3 winding\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._map_eng2math_voltage_source!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._map_eng2math_voltage_source!","text":"converts engineering voltage sources into mathematical generators and (if needed) impedance branches to represent the loss model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._map_math2eng_fault!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._map_math2eng_fault!","text":"helper function to transform fault solutions back into ENGINEERING from MATHEMATICAL data models\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._map_math2eng_protection!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._map_math2eng_protection!","text":"Helper function to convert tripped relays and blown fuses from MATHEMATICAL to ENGINEERING models\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._non_ideal_ct-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsProtection._non_ideal_ct","text":"_non_ideal_ct(relay_data,CT_data,Iabc)\n\nConverts primary side current to the actual current going through relay coil based on non-ideal parameters. Unused.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._p_to_s-Tuple{Vector}","page":"Internal Functions","title":"PowerModelsProtection._p_to_s","text":"Function to convert phase values to sequence values. Takes vector of 3 phases, returns vector of 3 sequences.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._rebase_pu_fault!-Tuple{Dict{String}, Dict{String}, Any, Any, Real, Real, Any}","page":"Internal Functions","title":"PowerModelsProtection._rebase_pu_fault!","text":"function to rebase units into pu on fault objects\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._rebase_pu_gen_dynamics!-Tuple{Dict{String}, Dict{String}, Any, Any, Real, Real, Any}","page":"Internal Functions","title":"PowerModelsProtection._rebase_pu_gen_dynamics!","text":"function to rebase extra fields for generator dynamics into per unit\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._rebase_pu_solar!-Tuple{Dict{String}, Dict{String}, Any, Any, Real, Real, Any}","page":"Internal Functions","title":"PowerModelsProtection._rebase_pu_solar!","text":"function to rebase extra fields for solar into per unit\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._ref_add_fault!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._ref_add_fault!","text":"Adds the fault to the model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._ref_add_grid_forming_bus!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._ref_add_grid_forming_bus!","text":"identifies grid forming buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._ref_add_mc_fault!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._ref_add_mc_fault!","text":"Adds the fault to the model for multiconductor\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._ref_add_mc_solar!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._ref_add_mc_solar!","text":"Calculates the power from solar based on inputs\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._ref_add_mc_storage!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._ref_add_mc_storage!","text":"Add battery energy storage to the model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._relay_operation-Tuple{Dict{String, Any}, Vector}","page":"Internal Functions","title":"PowerModelsProtection._relay_operation","text":"Determines whether a relay operates given the current through its protected object\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._restraint-Tuple{Dict{String, Any}, Vector, Number}","page":"Internal Functions","title":"PowerModelsProtection._restraint","text":"Function that calculated the slope setting of differential relay based on tap setting.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._short_time-Tuple{Dict{String, Any}, Number}","page":"Internal Functions","title":"PowerModelsProtection._short_time","text":"Function that calculates the short-inverse time of a relay for fast trips.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._solution_fs!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._solution_fs!","text":"adds additional variable transformations for fault study solutions of distribution networks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._solution_pm_fs!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._solution_pm_fs!","text":"adds additional variable transformations for fault study solutions of transmission networks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsProtection._solution_protection!-Tuple{Dict{Symbol, Any}, Dict{String}}","page":"Internal Functions","title":"PowerModelsProtection._solution_protection!","text":"calculates relay and fuse operation times and adds them to solution dictionary\n\n\n\n\n\n","category":"method"},{"location":"index.html#PowerModelsProtection.jl-Documentation","page":"Introduction","title":"PowerModelsProtection.jl Documentation","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"CurrentModule = PowerModelsProtection","category":"page"},{"location":"index.html#Overview","page":"Introduction","title":"Overview","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"PowerModelsProtection.jl is a Julia/JuMP extension package to PowerModels.jl and PowerModelsDistribution.jl for modeling of protection coordination on power grids.","category":"page"},{"location":"index.html#Installation","page":"Introduction","title":"Installation","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The latest stable release of PowerModelsProtection can be installed using the Julia package manager with","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Pkg.add(\"PowerModelsProtection\")","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"For the current development version, \"checkout\" this package with","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Pkg.develop(Pkg.PackageSpec(;name=\"PowerModelsProtection\", url=\"https://github.com/lanl-ansi/PowerModelsProtection.jl.git\"))","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"At least one solver is required for running PowerModelsProtection. The open-source solver Ipopt is recommended, as it is extremely fast, and can be used to solve a wide variety of the problems and network formulations provided in PowerModelsProtection. The Ipopt solver can be installed via the package manager with","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Pkg.add(\"Ipopt\")","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Test that the package works by running","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Pkg.test(\"PowerModelsProtection\")","category":"page"},{"location":"manual/quickguide.html#Quick-Start-Guide","page":"Getting Started","title":"Quick Start Guide","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Once PowerModelsProtection is installed, Ipopt is installed, and a network data file (e.g., \"case5_fault.m\" in the package folder under ./test/data/trans) has been acquired, a short-circuit solve can be executed with,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsProtection\nusing Ipopt\n\nipopt_solver = optimizer_with_attributes(Ipopt.Optimizer, \"print_level\"=>0, \"tol\"=>1e-6)\ncase5_fault = parse_file(\"case5_fault.m\")\nadd_fault!(case5_fault, 1, 2, 0.0001)\nresult = solve_fault_study(case5_fault, ipopt_solver)","category":"page"},{"location":"manual/quickguide.html#Adding-Faults","page":"Getting Started","title":"Adding Faults","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To add a fault, use the add_fault! command","category":"page"},{"location":"manual/quickguide.html#Transmission","page":"Getting Started","title":"Transmission","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"case5 = parse_file(\"case5_fault.m\")\nadd_fault!(case5, 1, 2, 0.0001)","category":"page"},{"location":"manual/quickguide.html#Distribution","page":"Getting Started","title":"Distribution","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"case3_balanced_pv = parse_file(\"case3_balanced_pv.dss\"))\nadd_fault!(data, \"testfault\", \"lg\", \"loadbus\", [1,4], 0.001)","category":"page"},{"location":"manual/quickguide.html#Getting-Results","page":"Getting Started","title":"Getting Results","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To perform a short-circuit solve, use the solve_fault_study or solve_mc_fault_study command","category":"page"},{"location":"manual/quickguide.html#Transmission-2","page":"Getting Started","title":"Transmission","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_fault_study(case5, ipopt_solver)\n````\n\n### Distribution\n","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"julia result = solvemcfaultstudy(case3balancedpv, ipoptsolver) ````","category":"page"},{"location":"manual/quickguide.html#Examples","page":"Getting Started","title":"Examples","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"More examples of working with the engineering data model can be found in the /examples folder of the PowerModelsProtection.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation","category":"page"}] } diff --git a/dev/tutorials/distribution_fault_studies.html b/dev/tutorials/distribution_fault_studies.html index 2bdc1a2..9668d3b 100644 --- a/dev/tutorials/distribution_fault_studies.html +++ b/dev/tutorials/distribution_fault_studies.html @@ -214,10 +214,10 @@ Documenter.jl on - - Tuesday 24 May 2022 + + Monday 23 September 2024 - . Using Julia version 1.7.2. + . Using Julia version 1.10.5.

      diff --git a/dev/tutorials/distribution_fault_studies.jl.html b/dev/tutorials/distribution_fault_studies.jl.html index b8530fe..a9ce4b7 100644 --- a/dev/tutorials/distribution_fault_studies.jl.html +++ b/dev/tutorials/distribution_fault_studies.jl.html @@ -48,7 +48,7 @@ window.pluto_disable_ui = true; window.pluto_slider_server_url = undefined; window.pluto_binder_url = "https://mybinder.org/v2/gh/fonsp/pluto-on-binder/v0.17.7"; -window.pluto_statefile = "data:;base64,j6Vib25kc4CsY2VsbF9yZXN1bHRz3gAS2SQxMmQzOWM0OS05NjYzLTQwZjMtOWJkNC02MGY2MTI5MGFiOGOJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52ZE8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPlVzaW5nIFBvd2VyTW9kZWxzUHJvdGVjdGlvbjwvaDI+CjxwPk9uY2UgdGhlIHByb3BlciBlbnZpcm9ubWVudCBpcyBwb3B1bGF0ZWQsIGltcG9ydCB0aGUgbmVjZXNzYXJ5IHBhY2thZ2VzLDwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7Ztz+SLdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQxMmQzOWM0OS05NjYzLTQwZjMtOWJkNC02MGY2MTI5MGFiOGO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AdIddtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJGExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYYmmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9mrQXJndW1lbnRFcnJvcjogUGFja2FnZSBQb3dlck1vZGVsc1Byb3RlY3Rpb24gbm90IGZvdW5kIGluIGN1cnJlbnQgcGF0aDoKLSBSdW4gYGltcG9ydCBQa2c7IFBrZy5hZGQoIlBvd2VyTW9kZWxzUHJvdGVjdGlvbiIpYCB0byBpbnN0YWxsIHRoZSBQb3dlck1vZGVsc1Byb3RlY3Rpb24gcGFja2FnZS4KqnN0YWNrdHJhY2WShaRjYWxsu3JlcXVpcmUoOjpNb2R1bGUsIDo6U3ltYm9sKadpbmxpbmVkwqRmaWxlqmxvYWRpbmcuamykbGluZc0Dx6RwYXRorC4vbG9hZGluZy5qbIWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jYTE1YmIyYjItNGRlOS00Mjc4LWE2NmYtNTYxMGEzODljOTFhpGxpbmUCpHBhdGjZTmV4YW1wbGVzL2Rpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09I2ExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYbBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HYoztmfwTmt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJGExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SRlMjEwNjZhZi04YzA2LTQ3ZTItYmZiOC0zNjNiMzYyNDFiODiJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52bU8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPlJ1bm5pbmcgd2l0aG91dCBhIHByZWRlZmluZWQgZmF1bHQ8L2gyPgo8cD5UbyBnZW5lcmF0ZSBhIGxpc3Qgb2YgZmF1bHRzIGZvciBhIGRhdGEgc3RydWN0dXJlLCB1c2UgdGhlIDxjb2RlPmJ1aWxkX21jX2ZhdWx0X3N0dWR5PC9jb2RlPiBmdW5jdGlvbjwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7ZyKxIbdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SRlMjEwNjZhZi04YzA2LTQ3ZTItYmZiOC0zNjNiMzYyNDFiODi5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABOH9tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJDczYzRiNzliLTY1OGEtNGJiZS1iYTY4LWM4YzY3NTdhM2Y5NYmmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZbDxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5hbmQgaW5pdGlhbGl6ZSBhIHNvbHZlciwgaW4gdGhpcyBjYXNlIGFuIElwb3B0Lk9wdGltaXplciBiYXNlZCBzb2x2ZXIuLi48L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdijO2bdITK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkNzNjNGI3OWItNjU4YS00YmJlLWJhNjgtYzhjNjc1N2EzZjk1uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAN0XbVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SQ4ZDVmYjkyYi1lYTMxLTRiOGQtYTZjOS03ODA2MjY2NzEzYjWJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52d08ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+VG8gc29sdmUgYWxsIG9mIHRoZXNlIGZhdWx0IHN0dWRpZXMgaW4gc2VyaWVzLCB1c2UgdGhlIDxjb2RlPnNvbHZlX21jX2ZhdWx0X3N0dWR5PC9jb2RlPiBmdW5jdGlvbiB3aXRoIHRoZSA8Y29kZT5mYXVsdF9zdHVkaWVzPC9jb2RlPiBqdXN0IGdlbmVyYXRlZCBieSA8Y29kZT5idWlsZF9tY19mYXVsdF9zdHVkeTwvY29kZT48L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdijO2ckemi3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkOGQ1ZmI5MmItZWEzMS00YjhkLWE2YzktNzgwNjI2NjcxM2I1uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAN9WrVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SRiYjQ0ZWEwNy1kNGNkLTQ2N2YtYTY3YS05NzRhZTM1OTA5MzWJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZL1VuZGVmVmFyRXJyb3I6IGJ1aWxkX21jX2ZhdWx0X3N0dWR5IG5vdCBkZWZpbmVkqnN0YWNrdHJhY2WRhaRjYWxsr3RvcC1sZXZlbCBzY29wZadpbmxpbmVkwqRmaWxl2UVkaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSNiYjQ0ZWEwNy1kNGNkLTQ2N2YtYTY3YS05NzRhZTM1OTA5MzWkbGluZQGkcGF0aNlOZXhhbXBsZXMvZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jYmI0NGVhMDctZDRjZC00NjdmLWE2N2EtOTc0YWUzNTkwOTM1sHBlcnNpc3RfanNfc3RhdGXCpG1pbWXZJ2FwcGxpY2F0aW9uL3ZuZC5wbHV0by5zdGFja3RyYWNlK29iamVjdLJsYXN0X3J1bl90aW1lc3RhbXDLQdijO2ckRHy3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZatmYXVsdF9zdHVkeadjZWxsX2lk2SRiYjQ0ZWEwNy1kNGNkLTQ2N2YtYTY3YS05NzRhZTM1OTA5MzW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZcC1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkw9kkZjE4ZTkwYWYtNjc5NC00YjU0LWIzOTMtNzY2YmEwN2Q2NDBkiaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kednlPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMj5Mb2FkaW5nIGEgZGlzdHJpYnV0aW9uIGRhdGEgc2V0PC9oMj4KPHA+VG8gbG9hZCBhIGRpc3RyaWJ1dGlvbiBkYXRhc2V0LCB3ZSB1c2UgdGhlIDxjb2RlPnBhcnNlX2ZpbGU8L2NvZGU+IGZ1bmN0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgYXJlIHVzaW5nIGEgMy1idXMgY2FzZSB3aXRoIFBWLCBpbmNsdWRlZCBpbiBvdXIgdW5pdC10ZXN0cy48L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdijO2cReVu3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkZjE4ZTkwYWYtNjc5NC00YjU0LWIzOTMtNzY2YmEwN2Q2NDBkuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAXCNLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SRjZDNhNDQ0NC1hNTNmLTRjZDgtOThhYS0zOGEyYzM4YjM2YTCJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52YY8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPkFkZGluZyBhIGZhdWx0PC9oMj4KPHA+VG8gYWRkIGEgZmF1bHQsIHdlIG1heSB1c2UgdGhlIDxjb2RlPmFkZF9mYXVsdCYjMzM7PC9jb2RlPiBoZWxwZXIgZnVuY3Rpb248L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdijO2cTxWW3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkY2QzYTQ0NDQtYTUzZi00Y2Q4LTk4YWEtMzhhMmMzOGIzNmEwuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAQ3SbVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SQ1YmQ1YmEwMC1iODBmLTExZWItMDM3ZC0yM2RhOWQwNWJkOGaJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZKkRpZCBub3QgZmluZCByZXYgcmVmL3BtZC12MTEgaW4gcmVwb3NpdG9yeapzdGFja3RyYWNlmYWkY2FsbLJwa2dlcnJvcig6OlN0cmluZymnaW5saW5lZMKkZmlsZahUeXBlcy5qbKRsaW5lRKRwYXRo2VYvYnVpbGR3b3JrZXIvd29ya2VyL3BhY2thZ2VfbGludXg2NC9idWlsZC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjcvUGtnL3NyYy9UeXBlcy5qbIWkY2FsbNleKDo6UGtnLlR5cGVzLnZhciIjNDIjNDMie1BrZy5UeXBlcy5Db250ZXh0LCBQa2cuVHlwZXMuUGFja2FnZVNwZWMsIFN0cmluZ30pKDo6TGliR2l0Mi5HaXRSZXBvKadpbmxpbmVkwqRmaWxlqFR5cGVzLmpspGxpbmXNArOkcGF0aNlWL2J1aWxkd29ya2VyL3dvcmtlci9wYWNrYWdlX2xpbnV4NjQvYnVpbGQvdXNyL3NoYXJlL2p1bGlhL3N0ZGxpYi92MS43L1BrZy9zcmMvVHlwZXMuamyFpGNhbGzZYndpdGgoOjpQa2cuVHlwZXMudmFyIiM0MiM0MyJ7UGtnLlR5cGVzLkNvbnRleHQsIFBrZy5UeXBlcy5QYWNrYWdlU3BlYywgU3RyaW5nfSwgOjpMaWJHaXQyLkdpdFJlcG8pp2lubGluZWTCpGZpbGWodHlwZXMuamykbGluZc0EfqRwYXRo2VovYnVpbGR3b3JrZXIvd29ya2VyL3BhY2thZ2VfbGludXg2NC9idWlsZC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjcvTGliR2l0Mi9zcmMvdHlwZXMuamyFpGNhbGzZPmhhbmRsZV9yZXBvX2FkZCEoOjpQa2cuVHlwZXMuQ29udGV4dCwgOjpQa2cuVHlwZXMuUGFja2FnZVNwZWMpp2lubGluZWTCpGZpbGWoVHlwZXMuamykbGluZc0CpKRwYXRo2VYvYnVpbGR3b3JrZXIvd29ya2VyL3BhY2thZ2VfbGludXg2NC9idWlsZC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjcvUGtnL3NyYy9UeXBlcy5qbIWkY2FsbNlHaGFuZGxlX3JlcG9zX2FkZCEoOjpQa2cuVHlwZXMuQ29udGV4dCwgOjpWZWN0b3J7UGtnLlR5cGVzLlBhY2thZ2VTcGVjfSmnaW5saW5lZMKkZmlsZahUeXBlcy5qbKRsaW5lzQLnpHBhdGjZVi9idWlsZHdvcmtlci93b3JrZXIvcGFja2FnZV9saW51eDY0L2J1aWxkL3Vzci9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuNy9Qa2cvc3JjL1R5cGVzLmpshaRjYWxs2gESdmFyIiNhZGQjMTI5Iig6OlBrZy5UeXBlcy5QcmVzZXJ2ZUxldmVsLCA6OkJhc2UuQmluYXJ5UGxhdGZvcm1zLlBsYXRmb3JtLCA6OkJhc2UuUGFpcnN7U3ltYm9sLCBJT0NvbnRleHR7QmFzZS5QaXBlRW5kcG9pbnR9LCBUdXBsZXtTeW1ib2x9LCBOYW1lZFR1cGxleyg6aW8sKSwgVHVwbGV7SU9Db250ZXh0e0Jhc2UuUGlwZUVuZHBvaW50fX19fSwgOjp0eXBlb2YoUGtnLkFQSS5hZGQpLCA6OlBrZy5UeXBlcy5Db250ZXh0LCA6OlZlY3RvcntQa2cuVHlwZXMuUGFja2FnZVNwZWN9KadpbmxpbmVkwqRmaWxlpkFQSS5qbKRsaW5lzPikcGF0aNlUL2J1aWxkd29ya2VyL3dvcmtlci9wYWNrYWdlX2xpbnV4NjQvYnVpbGQvdXNyL3NoYXJlL2p1bGlhL3N0ZGxpYi92MS43L1BrZy9zcmMvQVBJLmpshaRjYWxs2aV2YXIiI2FkZCMyOSIoOjpJT0NvbnRleHR7QmFzZS5QaXBlRW5kcG9pbnR9LCA6OkJhc2UuUGFpcnN7U3ltYm9sLCBVbmlvbnt9LCBUdXBsZXt9LCBOYW1lZFR1cGxleygpLCBUdXBsZXt9fX0sIDo6dHlwZW9mKFBrZy5BUEkuYWRkKSwgOjpWZWN0b3J7UGtnLlR5cGVzLlBhY2thZ2VTcGVjfSmnaW5saW5lZMKkZmlsZaZBUEkuamykbGluZcyVpHBhdGjZVC9idWlsZHdvcmtlci93b3JrZXIvcGFja2FnZV9saW51eDY0L2J1aWxkL3Vzci9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuNy9Qa2cvc3JjL0FQSS5qbIWkY2FsbNkkYWRkKDo6VmVjdG9ye1BrZy5UeXBlcy5QYWNrYWdlU3BlY30pp2lubGluZWTCpGZpbGWmQVBJLmpspGxpbmXMkKRwYXRo2VQvYnVpbGR3b3JrZXIvd29ya2VyL3BhY2thZ2VfbGludXg2NC9idWlsZC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjcvUGtnL3NyYy9BUEkuamyFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRWRpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzViZDViYTAwLWI4MGYtMTFlYi0wMzdkLTIzZGE5ZDA1YmQ4ZqRsaW5lBKRwYXRo2U5leGFtcGxlcy9kaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSM1YmQ1YmEwMC1iODBmLTExZWItMDM3ZC0yM2RhOWQwNWJkOGawcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7Zl72x7doYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQ1YmQ1YmEwMC1iODBmLTExZWItMDM3ZC0yM2RhOWQwNWJkOGa5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZcC1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkw9kkMzBiZGY1YTctYzJmYi00ZTdjLWFlN2YtMmQ2ZDIxOGI0OGM0iaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoBOjxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDE+UG93ZXJNb2RlbHNQcm90ZWN0aW9uLmpsOiBEaXN0cmlidXRpb24gRmF1bHQgU3R1ZGllczwvaDE+CjxwPkluIHRoaXMgZXhhbXBsZSB3ZSBpbnRyb2R1Y2UgaG93IHRvIHBlcmZvcm0gZmF1bHQgc3R1ZGllcyBvbiBhIGRpc3RyaWJ1dGlvbiBkYXRhIHNldCAmIzQwO2kuZS4sIHVzaW5nIGEgZHNzIGlucHV0IGZpbGUmIzQxOy48L3A+CjxwPkZpcnN0IHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB2ZXJzaW9ucyBvZiBQb3dlck1vZGVsc1Byb3RlY3Rpb24gYW5kIElwb3B0LjwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7ZtIFQrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQzMGJkZjVhNy1jMmZiLTRlN2MtYWU3Zi0yZDZkMjE4YjQ4YzS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AZ2oDtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJDAyNTMyMjg1LWYyMDgtNDg5NS1iYjU5LWJlY2EwMzc2MmNhM4mmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZyjxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+U29sdmluZyBhIGZhdWx0IHN0dWR5PC9oMj4KPHA+VG8gc29sdmUgYSBmYXVsdCBzdHVkeSBvbiBhIGRhdGEgc3RydWN0dXJlIHRoYXQgYWxyZWFkeSBpbmNsdWRlcyBvbmUgb3IgbW9yZSBmYXVsdHMsIHVzZSB0aGUgPGNvZGU+c29sdmVfbWNfZmF1bHRfc3R1ZHk8L2NvZGU+IGZ1bmN0aW9uPC9wPgo8L2Rpdj6wcGVyc2lzdF9qc19zdGF0ZcKkbWltZal0ZXh0L2h0bWyybGFzdF9ydW5fdGltZXN0YW1wy0HYoztnHLOet2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJDAyNTMyMjg1LWYyMDgtNDg5NS1iYjU5LWJlY2EwMzc2MmNhM7lkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAD81G1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkwtkkZTE2NTBkY2EtNTkwNi00YjlhLWJiNDktZWE5Yzk2NzNmMGYxiaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYKjbXNn2SBVbmRlZlZhckVycm9yOiBJcG9wdCBub3QgZGVmaW5lZKpzdGFja3RyYWNlkYWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jZTE2NTBkY2EtNTkwNi00YjlhLWJiNDktZWE5Yzk2NzNmMGYxpGxpbmUBpHBhdGjZTmV4YW1wbGVzL2Rpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09I2UxNjUwZGNhLTU5MDYtNGI5YS1iYjQ5LWVhOWM5NjczZjBmMbBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HYoztnCtTht2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWWsaXBvcHRfc29sdmVyp2NlbGxfaWTZJGUxNjUwZGNhLTU5MDYtNGI5YS1iYjQ5LWVhOWM5NjczZjBmMblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SQxMTU5M2FhMi00MWZhLTQ0NzItYTgyNy0yNjU0NTBjZGUwMWWJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZMFVuZGVmVmFyRXJyb3I6IFBvd2VyTW9kZWxzUHJvdGVjdGlvbiBub3QgZGVmaW5lZKpzdGFja3RyYWNlkYWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jMTE1OTNhYTItNDFmYS00NDcyLWE4MjctMjY1NDUwY2RlMDFlpGxpbmUBpHBhdGjZTmV4YW1wbGVzL2Rpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzExNTkzYWEyLTQxZmEtNDQ3Mi1hODI3LTI2NTQ1MGNkZTAxZbBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HYoztnE4yHt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWWxY2FzZTNfYmFsYW5jZWRfcHanY2VsbF9pZNkkMTE1OTNhYTItNDFmYS00NDcyLWE4MjctMjY1NDUwY2RlMDFluWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMPZJDBmMjM2MDljLWM0NWMtNDMxOS04Yzk5LTBjNzlkYjNjYzdjNommcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9kvVW5kZWZWYXJFcnJvcjogc29sdmVfbWNfZmF1bHRfc3R1ZHkgbm90IGRlZmluZWSqc3RhY2t0cmFjZZGFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRWRpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzBmMjM2MDljLWM0NWMtNDMxOS04Yzk5LTBjNzlkYjNjYzdjNqRsaW5lAaRwYXRo2U5leGFtcGxlcy9kaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSMwZjIzNjA5Yy1jNDVjLTQzMTktOGM5OS0wYzc5ZGIzY2M3YzawcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7ZyYIjbdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVls3Jlc3VsdHNfZmF1bHRfc3R1ZHmnY2VsbF9pZNkkMGYyMzYwOWMtYzQ1Yy00MzE5LThjOTktMGM3OWRiM2NjN2M2uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMPZJDUyN2E3YjQzLTA2YTEtNDg4ZS04YWRiLTc0MTJiMjdkNjI1MommcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9ksVW5kZWZWYXJFcnJvcjogY2FzZTNfYmFsYW5jZWRfcHYgbm90IGRlZmluZWSqc3RhY2t0cmFjZZGFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRWRpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzUyN2E3YjQzLTA2YTEtNDg4ZS04YWRiLTc0MTJiMjdkNjI1MqRsaW5lAqRwYXRo2U5leGFtcGxlcy9kaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSM1MjdhN2I0My0wNmExLTQ4OGUtOGFkYi03NDEyYjI3ZDYyNTKwcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7Zxx1grdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQ1MjdhN2I0My0wNmExLTQ4OGUtOGFkYi03NDEyYjI3ZDYyNTK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZcC1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkw9kkOTJjYTY5YjgtODM2MC00Nzc0LTkwNmItNGFjZjFkMDQxNzM0iaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYKjbXNn2SFVbmRlZlZhckVycm9yOiByZXN1bHQgbm90IGRlZmluZWSqc3RhY2t0cmFjZZGFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRWRpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzkyY2E2OWI4LTgzNjAtNDc3NC05MDZiLTRhY2YxZDA0MTczNKRsaW5lAaRwYXRo2U5leGFtcGxlcy9kaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSM5MmNhNjliOC04MzYwLTQ3NzQtOTA2Yi00YWNmMWQwNDE3MzSwcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7ZyKLEbdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQ5MmNhNjliOC04MzYwLTQ3NzQtOTA2Yi00YWNmMWQwNDE3MzS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZcC1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkw9kkZTdiMmMwMjgtMDRjZS00NjY1LTk4NjUtMDE4MmNhMGZhNzc1iaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYKjbXNn2S9VbmRlZlZhckVycm9yOiBzb2x2ZV9tY19mYXVsdF9zdHVkeSBub3QgZGVmaW5lZKpzdGFja3RyYWNlkYWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jZTdiMmMwMjgtMDRjZS00NjY1LTk4NjUtMDE4MmNhMGZhNzc1pGxpbmUBpHBhdGjZTmV4YW1wbGVzL2Rpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09I2U3YjJjMDI4LTA0Y2UtNDY2NS05ODY1LTAxODJjYTBmYTc3NbBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HYoztnHmzbt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWWmcmVzdWx0p2NlbGxfaWTZJGU3YjJjMDI4LTA0Y2UtNDY2NS05ODY1LTAxODJjYTBmYTc3NblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SQ4NWYwMmNjYi00MTNhLTQ3NzMtYmI4OS0xYjgwODQ3YTJlNzaJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZIVVuZGVmVmFyRXJyb3I6IHJlc3VsdCBub3QgZGVmaW5lZKpzdGFja3RyYWNlkYWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jODVmMDJjY2ItNDEzYS00NzczLWJiODktMWI4MDg0N2EyZTc2pGxpbmUBpHBhdGjZTmV4YW1wbGVzL2Rpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09Izg1ZjAyY2NiLTQxM2EtNDc3My1iYjg5LTFiODA4NDdhMmU3NrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HYoztnIMBIt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJDg1ZjAyY2NiLTQxM2EtNDc3My1iYjg5LTFiODA4NDdhMmU3NrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTDsWNlbGxfZGVwZW5kZW5jaWVz3gAS2SQxMmQzOWM0OS05NjYzLTQwZjMtOWJkNC02MGY2MTI5MGFiOGOEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQxMmQzOWM0OS05NjYzLTQwZjMtOWJkNC02MGY2MTI5MGFiOGO0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRhMTViYjJiMi00ZGU5LTQyNzgtYTY2Zi01NjEwYTM4OWM5MWGEtHByZWNlZGVuY2VfaGV1cmlzdGljB6djZWxsX2lk2SRhMTViYjJiMi00ZGU5LTQyNzgtYTY2Zi01NjEwYTM4OWM5MWG0ZG93bnN0cmVhbV9jZWxsc19tYXCCtVBvd2VyTW9kZWxzUHJvdGVjdGlvbpHZJDExNTkzYWEyLTQxZmEtNDQ3Mi1hODI3LTI2NTQ1MGNkZTAxZaVJcG9wdJHZJGUxNjUwZGNhLTU5MDYtNGI5YS1iYjQ5LWVhOWM5NjczZjBmMbJ1cHN0cmVhbV9jZWxsc19tYXCA2SRlMjEwNjZhZi04YzA2LTQ3ZTItYmZiOC0zNjNiMzYyNDFiODiEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRlMjEwNjZhZi04YzA2LTQ3ZTItYmZiOC0zNjNiMzYyNDFiODi0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ3M2M0Yjc5Yi02NThhLTRiYmUtYmE2OC1jOGM2NzU3YTNmOTWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ3M2M0Yjc5Yi02NThhLTRiYmUtYmE2OC1jOGM2NzU3YTNmOTW0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ4ZDVmYjkyYi1lYTMxLTRiOGQtYTZjOS03ODA2MjY2NzEzYjWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ4ZDVmYjkyYi1lYTMxLTRiOGQtYTZjOS03ODA2MjY2NzEzYjW0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRiYjQ0ZWEwNy1kNGNkLTQ2N2YtYTY3YS05NzRhZTM1OTA5MzWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRiYjQ0ZWEwNy1kNGNkLTQ2N2YtYTY3YS05NzRhZTM1OTA5MzW0ZG93bnN0cmVhbV9jZWxsc19tYXCBq2ZhdWx0X3N0dWR5kdkkMGYyMzYwOWMtYzQ1Yy00MzE5LThjOTktMGM3OWRiM2NjN2M2snVwc3RyZWFtX2NlbGxzX21hcIKkZGF0YZHZJDUyN2E3YjQzLTA2YTEtNDg4ZS04YWRiLTc0MTJiMjdkNjI1MrRidWlsZF9tY19mYXVsdF9zdHVkeZDZJGYxOGU5MGFmLTY3OTQtNGI1NC1iMzkzLTc2NmJhMDdkNjQwZIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGYxOGU5MGFmLTY3OTQtNGI1NC1iMzkzLTc2NmJhMDdkNjQwZLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGNkM2E0NDQ0LWE1M2YtNGNkOC05OGFhLTM4YTJjMzhiMzZhMIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGNkM2E0NDQ0LWE1M2YtNGNkOC05OGFhLTM4YTJjMzhiMzZhMLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDViZDViYTAwLWI4MGYtMTFlYi0wMzdkLTIzZGE5ZDA1YmQ4ZoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMBp2NlbGxfaWTZJDViZDViYTAwLWI4MGYtMTFlYi0wMzdkLTIzZGE5ZDA1YmQ4ZrRkb3duc3RyZWFtX2NlbGxzX21hcIGjUGtnkdkkNWJkNWJhMDAtYjgwZi0xMWViLTAzN2QtMjNkYTlkMDViZDhmsnVwc3RyZWFtX2NlbGxzX21hcIWnUGtnLmFkZJCjUGtnkdkkNWJkNWJhMDAtYjgwZi0xMWViLTAzN2QtMjNkYTlkMDViZDhmrFBrZy5hY3RpdmF0ZZCvUGtnLlBhY2thZ2VTcGVjkKlta3RlbXBkaXKQ2SQzMGJkZjVhNy1jMmZiLTRlN2MtYWU3Zi0yZDZkMjE4YjQ4YzSEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQzMGJkZjVhNy1jMmZiLTRlN2MtYWU3Zi0yZDZkMjE4YjQ4YzS0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQwMjUzMjI4NS1mMjA4LTQ4OTUtYmI1OS1iZWNhMDM3NjJjYTOEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQwMjUzMjI4NS1mMjA4LTQ4OTUtYmI1OS1iZWNhMDM3NjJjYTO0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRlMTY1MGRjYS01OTA2LTRiOWEtYmI0OS1lYTljOTY3M2YwZjGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRlMTY1MGRjYS01OTA2LTRiOWEtYmI0OS1lYTljOTY3M2YwZjG0ZG93bnN0cmVhbV9jZWxsc19tYXCBrGlwb3B0X3NvbHZlcpLZJGU3YjJjMDI4LTA0Y2UtNDY2NS05ODY1LTAxODJjYTBmYTc3NdkkMGYyMzYwOWMtYzQ1Yy00MzE5LThjOTktMGM3OWRiM2NjN2M2snVwc3RyZWFtX2NlbGxzX21hcIOlSXBvcHSR2SRhMTViYjJiMi00ZGU5LTQyNzgtYTY2Zi01NjEwYTM4OWM5MWGiPT6QuW9wdGltaXplcl93aXRoX2F0dHJpYnV0ZXOQ2SQxMTU5M2FhMi00MWZhLTQ0NzItYTgyNy0yNjU0NTBjZGUwMWWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQxMTU5M2FhMi00MWZhLTQ0NzItYTgyNy0yNjU0NTBjZGUwMWW0ZG93bnN0cmVhbV9jZWxsc19tYXCBsWNhc2UzX2JhbGFuY2VkX3B2kdkkNTI3YTdiNDMtMDZhMS00ODhlLThhZGItNzQxMmIyN2Q2MjUysnVwc3RyZWFtX2NlbGxzX21hcIW1UG93ZXJNb2RlbHNQcm90ZWN0aW9ukdkkYTE1YmIyYjItNGRlOS00Mjc4LWE2NmYtNTYxMGEzODljOTFhp2Rpcm5hbWWQqGpvaW5wYXRokKZwYXRob2aQqnBhcnNlX2ZpbGWQ2SQwZjIzNjA5Yy1jNDVjLTQzMTktOGM5OS0wYzc5ZGIzY2M3YzaEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQwZjIzNjA5Yy1jNDVjLTQzMTktOGM5OS0wYzc5ZGIzY2M3Yza0ZG93bnN0cmVhbV9jZWxsc19tYXCBs3Jlc3VsdHNfZmF1bHRfc3R1ZHmQsnVwc3RyZWFtX2NlbGxzX21hcISsaXBvcHRfc29sdmVykdkkZTE2NTBkY2EtNTkwNi00YjlhLWJiNDktZWE5Yzk2NzNmMGYxq2ZhdWx0X3N0dWR5kdkkYmI0NGVhMDctZDRjZC00NjdmLWE2N2EtOTc0YWUzNTkwOTM1tHNvbHZlX21jX2ZhdWx0X3N0dWR5kKRkYXRhkdkkNTI3YTdiNDMtMDZhMS00ODhlLThhZGItNzQxMmIyN2Q2MjUy2SQ1MjdhN2I0My0wNmExLTQ4OGUtOGFkYi03NDEyYjI3ZDYyNTKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ1MjdhN2I0My0wNmExLTQ4OGUtOGFkYi03NDEyYjI3ZDYyNTK0ZG93bnN0cmVhbV9jZWxsc19tYXCBpGRhdGGT2SRlN2IyYzAyOC0wNGNlLTQ2NjUtOTg2NS0wMTgyY2EwZmE3NzXZJGJiNDRlYTA3LWQ0Y2QtNDY3Zi1hNjdhLTk3NGFlMzU5MDkzNdkkMGYyMzYwOWMtYzQ1Yy00MzE5LThjOTktMGM3OWRiM2NjN2M2snVwc3RyZWFtX2NlbGxzX21hcIOoZGVlcGNvcHmQsWNhc2UzX2JhbGFuY2VkX3B2kdkkMTE1OTNhYTItNDFmYS00NDcyLWE4MjctMjY1NDUwY2RlMDFlqmFkZF9mYXVsdCGQ2SQ5MmNhNjliOC04MzYwLTQ3NzQtOTA2Yi00YWNmMWQwNDE3MzSEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ5MmNhNjliOC04MzYwLTQ3NzQtOTA2Yi00YWNmMWQwNDE3MzS0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGmcmVzdWx0kdkkZTdiMmMwMjgtMDRjZS00NjY1LTk4NjUtMDE4MmNhMGZhNzc12SRlN2IyYzAyOC0wNGNlLTQ2NjUtOTg2NS0wMTgyY2EwZmE3NzWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRlN2IyYzAyOC0wNGNlLTQ2NjUtOTg2NS0wMTgyY2EwZmE3NzW0ZG93bnN0cmVhbV9jZWxsc19tYXCBpnJlc3VsdJLZJDg1ZjAyY2NiLTQxM2EtNDc3My1iYjg5LTFiODA4NDdhMmU3NtkkOTJjYTY5YjgtODM2MC00Nzc0LTkwNmItNGFjZjFkMDQxNzM0snVwc3RyZWFtX2NlbGxzX21hcIOsaXBvcHRfc29sdmVykdkkZTE2NTBkY2EtNTkwNi00YjlhLWJiNDktZWE5Yzk2NzNmMGYxtHNvbHZlX21jX2ZhdWx0X3N0dWR5kKRkYXRhkdkkNTI3YTdiNDMtMDZhMS00ODhlLThhZGItNzQxMmIyN2Q2MjUy2SQ4NWYwMmNjYi00MTNhLTQ3NzMtYmI4OS0xYjgwODQ3YTJlNzaEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ4NWYwMmNjYi00MTNhLTQ3NzMtYmI4OS0xYjgwODQ3YTJlNza0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGmcmVzdWx0kdkkZTdiMmMwMjgtMDRjZS00NjY1LTk4NjUtMDE4MmNhMGZhNzc1tGNlbGxfZXhlY3V0aW9uX29yZGVy3AAS2SQ1YmQ1YmEwMC1iODBmLTExZWItMDM3ZC0yM2RhOWQwNWJkOGbZJGExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYdkkMzBiZGY1YTctYzJmYi00ZTdjLWFlN2YtMmQ2ZDIxOGI0OGM02SQxMmQzOWM0OS05NjYzLTQwZjMtOWJkNC02MGY2MTI5MGFiOGPZJDczYzRiNzliLTY1OGEtNGJiZS1iYTY4LWM4YzY3NTdhM2Y5NdkkZTE2NTBkY2EtNTkwNi00YjlhLWJiNDktZWE5Yzk2NzNmMGYx2SRmMThlOTBhZi02Nzk0LTRiNTQtYjM5My03NjZiYTA3ZDY0MGTZJDExNTkzYWEyLTQxZmEtNDQ3Mi1hODI3LTI2NTQ1MGNkZTAxZdkkY2QzYTQ0NDQtYTUzZi00Y2Q4LTk4YWEtMzhhMmMzOGIzNmEw2SQ1MjdhN2I0My0wNmExLTQ4OGUtOGFkYi03NDEyYjI3ZDYyNTLZJDAyNTMyMjg1LWYyMDgtNDg5NS1iYjU5LWJlY2EwMzc2MmNhM9kkZTdiMmMwMjgtMDRjZS00NjY1LTk4NjUtMDE4MmNhMGZhNzc12SQ4NWYwMmNjYi00MTNhLTQ3NzMtYmI4OS0xYjgwODQ3YTJlNzbZJDkyY2E2OWI4LTgzNjAtNDc3NC05MDZiLTRhY2YxZDA0MTczNNkkZTIxMDY2YWYtOGMwNi00N2UyLWJmYjgtMzYzYjM2MjQxYjg42SRiYjQ0ZWEwNy1kNGNkLTQ2N2YtYTY3YS05NzRhZTM1OTA5MzXZJDhkNWZiOTJiLWVhMzEtNGI4ZC1hNmM5LTc4MDYyNjY3MTNiNdkkMGYyMzYwOWMtYzQ1Yy00MzE5LThjOTktMGM3OWRiM2NjN2M2tGxhc3RfaG90X3JlbG9hZF90aW1lywAAAAAAAAAAqXNob3J0cGF0aL1kaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbK5wcm9jZXNzX3N0YXR1c6VyZWFkeaRwYXRo2SZleGFtcGxlcy9kaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbK5sYXN0X3NhdmVfdGltZctB2KM7ZprO2apjZWxsX29yZGVy3AAS2SQzMGJkZjVhNy1jMmZiLTRlN2MtYWU3Zi0yZDZkMjE4YjQ4YzTZJDViZDViYTAwLWI4MGYtMTFlYi0wMzdkLTIzZGE5ZDA1YmQ4ZtkkMTJkMzljNDktOTY2My00MGYzLTliZDQtNjBmNjEyOTBhYjhj2SRhMTViYjJiMi00ZGU5LTQyNzgtYTY2Zi01NjEwYTM4OWM5MWHZJDczYzRiNzliLTY1OGEtNGJiZS1iYTY4LWM4YzY3NTdhM2Y5NdkkZTE2NTBkY2EtNTkwNi00YjlhLWJiNDktZWE5Yzk2NzNmMGYx2SRmMThlOTBhZi02Nzk0LTRiNTQtYjM5My03NjZiYTA3ZDY0MGTZJDExNTkzYWEyLTQxZmEtNDQ3Mi1hODI3LTI2NTQ1MGNkZTAxZdkkY2QzYTQ0NDQtYTUzZi00Y2Q4LTk4YWEtMzhhMmMzOGIzNmEw2SQ1MjdhN2I0My0wNmExLTQ4OGUtOGFkYi03NDEyYjI3ZDYyNTLZJDAyNTMyMjg1LWYyMDgtNDg5NS1iYjU5LWJlY2EwMzc2MmNhM9kkZTdiMmMwMjgtMDRjZS00NjY1LTk4NjUtMDE4MmNhMGZhNzc12SQ4NWYwMmNjYi00MTNhLTQ3NzMtYmI4OS0xYjgwODQ3YTJlNzbZJDkyY2E2OWI4LTgzNjAtNDc3NC05MDZiLTRhY2YxZDA0MTczNNkkZTIxMDY2YWYtOGMwNi00N2UyLWJmYjgtMzYzYjM2MjQxYjg42SRiYjQ0ZWEwNy1kNGNkLTQ2N2YtYTY3YS05NzRhZTM1OTA5MzXZJDhkNWZiOTJiLWVhMzEtNGI4ZC1hNmM5LTc4MDYyNjY3MTNiNdkkMGYyMzYwOWMtYzQ1Yy00MzE5LThjOTktMGM3OWRiM2NjN2M2sXB1Ymxpc2hlZF9vYmplY3RzgKVuYnBrZ4eyaW5zdGFsbGVkX3ZlcnNpb25zgLB0ZXJtaW5hbF9vdXRwdXRzgKdlbmFibGVkwrdyZXN0YXJ0X3JlY29tbWVuZGVkX21zZ8C0cmVzdGFydF9yZXF1aXJlZF9tc2fArWJ1c3lfcGFja2FnZXOQrGluc3RhbnRpYXRlZMKrY2VsbF9pbnB1dHPeABLZJDEyZDM5YzQ5LTk2NjMtNDBmMy05YmQ0LTYwZjYxMjkwYWI4Y4SnY2VsbF9pZNkkMTJkMzljNDktOTY2My00MGYzLTliZDQtNjBmNjEyOTBhYjhjsHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZcm1kIiIiCiMjIFVzaW5nIFBvd2VyTW9kZWxzUHJvdGVjdGlvbgoKT25jZSB0aGUgcHJvcGVyIGVudmlyb25tZW50IGlzIHBvcHVsYXRlZCwgaW1wb3J0IHRoZSBuZWNlc3NhcnkgcGFja2FnZXMsCiIiIqtjb2RlX2ZvbGRlZMPZJGExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYYSnY2VsbF9pZNkkYTE1YmIyYjItNGRlOS00Mjc4LWE2NmYtNTYxMGEzODljOTFhsHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZNGJlZ2luCgl1c2luZyBQb3dlck1vZGVsc1Byb3RlY3Rpb24KCWltcG9ydCBJcG9wdAplbmSrY29kZV9mb2xkZWTC2SRlMjEwNjZhZi04YzA2LTQ3ZTItYmZiOC0zNjNiMzYyNDFiODiEp2NlbGxfaWTZJGUyMTA2NmFmLThjMDYtNDdlMi1iZmI4LTM2M2IzNjI0MWI4OLBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2YttZCIiIgojIyBSdW5uaW5nIHdpdGhvdXQgYSBwcmVkZWZpbmVkIGZhdWx0CgpUbyBnZW5lcmF0ZSBhIGxpc3Qgb2YgZmF1bHRzIGZvciBhIGRhdGEgc3RydWN0dXJlLCB1c2UgdGhlIGBidWlsZF9tY19mYXVsdF9zdHVkeWAgZnVuY3Rpb24KIiIiq2NvZGVfZm9sZGVkw9kkNzNjNGI3OWItNjU4YS00YmJlLWJhNjgtYzhjNjc1N2EzZjk1hKdjZWxsX2lk2SQ3M2M0Yjc5Yi02NThhLTRiYmUtYmE2OC1jOGM2NzU3YTNmOTWwcnVubmluZ19kaXNhYmxlZMKkY29kZdlSbWQiIiIKYW5kIGluaXRpYWxpemUgYSBzb2x2ZXIsIGluIHRoaXMgY2FzZSBhbiBJcG9wdC5PcHRpbWl6ZXIgYmFzZWQgc29sdmVyLi4uCiIiIqtjb2RlX2ZvbGRlZMPZJDhkNWZiOTJiLWVhMzEtNGI4ZC1hNmM5LTc4MDYyNjY3MTNiNYSnY2VsbF9pZNkkOGQ1ZmI5MmItZWEzMS00YjhkLWE2YzktNzgwNjI2NjcxM2I1sHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZom1kIiIiClRvIHNvbHZlIGFsbCBvZiB0aGVzZSBmYXVsdCBzdHVkaWVzIGluIHNlcmllcywgdXNlIHRoZSBgc29sdmVfbWNfZmF1bHRfc3R1ZHlgIGZ1bmN0aW9uIHdpdGggdGhlIGBmYXVsdF9zdHVkaWVzYCBqdXN0IGdlbmVyYXRlZCBieSBgYnVpbGRfbWNfZmF1bHRfc3R1ZHlgCiIiIqtjb2RlX2ZvbGRlZMPZJGJiNDRlYTA3LWQ0Y2QtNDY3Zi1hNjdhLTk3NGFlMzU5MDkzNYSnY2VsbF9pZNkkYmI0NGVhMDctZDRjZC00NjdmLWE2N2EtOTc0YWUzNTkwOTM1sHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZKGZhdWx0X3N0dWR5ID0gYnVpbGRfbWNfZmF1bHRfc3R1ZHkoZGF0YSmrY29kZV9mb2xkZWTC2SRmMThlOTBhZi02Nzk0LTRiNTQtYjM5My03NjZiYTA3ZDY0MGSEp2NlbGxfaWTZJGYxOGU5MGFmLTY3OTQtNGI1NC1iMzkzLTc2NmJhMDdkNjQwZLBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2bttZCIiIgojIyBMb2FkaW5nIGEgZGlzdHJpYnV0aW9uIGRhdGEgc2V0CgpUbyBsb2FkIGEgZGlzdHJpYnV0aW9uIGRhdGFzZXQsIHdlIHVzZSB0aGUgYHBhcnNlX2ZpbGVgIGZ1bmN0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgYXJlIHVzaW5nIGEgMy1idXMgY2FzZSB3aXRoIFBWLCBpbmNsdWRlZCBpbiBvdXIgdW5pdC10ZXN0cy4KIiIiq2NvZGVfZm9sZGVkw9kkY2QzYTQ0NDQtYTUzZi00Y2Q4LTk4YWEtMzhhMmMzOGIzNmEwhKdjZWxsX2lk2SRjZDNhNDQ0NC1hNTNmLTRjZDgtOThhYS0zOGEyYzM4YjM2YTCwcnVubmluZ19kaXNhYmxlZMKkY29kZdlYbWQiIiIKIyMgQWRkaW5nIGEgZmF1bHQKClRvIGFkZCBhIGZhdWx0LCB3ZSBtYXkgdXNlIHRoZSBgYWRkX2ZhdWx0IWAgaGVscGVyIGZ1bmN0aW9uCiIiIqtjb2RlX2ZvbGRlZMPZJDViZDViYTAwLWI4MGYtMTFlYi0wMzdkLTIzZGE5ZDA1YmQ4ZoSnY2VsbF9pZNkkNWJkNWJhMDAtYjgwZi0xMWViLTAzN2QtMjNkYTlkMDViZDhmsHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZsGJlZ2luCglpbXBvcnQgUGtnCglQa2cuYWN0aXZhdGUobWt0ZW1wZGlyKCkpCglQa2cuYWRkKAoJCVsKCQkJUGtnLlBhY2thZ2VTcGVjKDsgbmFtZT0iUG93ZXJNb2RlbHNQcm90ZWN0aW9uIiwgcmV2PSJyZWYvcG1kLXYxMSIpLAoJCQlQa2cuUGFja2FnZVNwZWMoOyBuYW1lPSJJcG9wdCIpLAoJCV0KCSkKZW5kq2NvZGVfZm9sZGVkwtkkMzBiZGY1YTctYzJmYi00ZTdjLWFlN2YtMmQ2ZDIxOGI0OGM0hKdjZWxsX2lk2SQzMGJkZjVhNy1jMmZiLTRlN2MtYWU3Zi0yZDZkMjE4YjQ4YzSwcnVubmluZ19kaXNhYmxlZMKkY29kZdoBDG1kIiIiCiMgUG93ZXJNb2RlbHNQcm90ZWN0aW9uLmpsOiBEaXN0cmlidXRpb24gRmF1bHQgU3R1ZGllcwoKSW4gdGhpcyBleGFtcGxlIHdlIGludHJvZHVjZSBob3cgdG8gcGVyZm9ybSBmYXVsdCBzdHVkaWVzIG9uIGEgZGlzdHJpYnV0aW9uIGRhdGEgc2V0IChpLmUuLCB1c2luZyBhIGRzcyBpbnB1dCBmaWxlKS4KCkZpcnN0IHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB2ZXJzaW9ucyBvZiBQb3dlck1vZGVsc1Byb3RlY3Rpb24gYW5kIElwb3B0LgoiIiKrY29kZV9mb2xkZWTD2SQwMjUzMjI4NS1mMjA4LTQ4OTUtYmI1OS1iZWNhMDM3NjJjYTOEp2NlbGxfaWTZJDAyNTMyMjg1LWYyMDgtNDg5NS1iYjU5LWJlY2EwMzc2MmNhM7BydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2aBtZCIiIgojIyBTb2x2aW5nIGEgZmF1bHQgc3R1ZHkKClRvIHNvbHZlIGEgZmF1bHQgc3R1ZHkgb24gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGFscmVhZHkgaW5jbHVkZXMgb25lIG9yIG1vcmUgZmF1bHRzLCB1c2UgdGhlIGBzb2x2ZV9tY19mYXVsdF9zdHVkeWAgZnVuY3Rpb24KIiIiq2NvZGVfZm9sZGVkw9kkZTE2NTBkY2EtNTkwNi00YjlhLWJiNDktZWE5Yzk2NzNmMGYxhKdjZWxsX2lk2SRlMTY1MGRjYS01OTA2LTRiOWEtYmI0OS1lYTljOTY3M2YwZjGwcnVubmluZ19kaXNhYmxlZMKkY29kZdlYaXBvcHRfc29sdmVyID0gb3B0aW1pemVyX3dpdGhfYXR0cmlidXRlcyhJcG9wdC5PcHRpbWl6ZXIsICJwcmludF9sZXZlbCI9PjAsICJ0b2wiPT4xZS02Katjb2RlX2ZvbGRlZMLZJDExNTkzYWEyLTQxZmEtNDQ3Mi1hODI3LTI2NTQ1MGNkZTAxZYSnY2VsbF9pZNkkMTE1OTNhYTItNDFmYS00NDcyLWE4MjctMjY1NDUwY2RlMDFlsHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZh2Nhc2UzX2JhbGFuY2VkX3B2ID0gcGFyc2VfZmlsZShqb2lucGF0aChkaXJuYW1lKHBhdGhvZihQb3dlck1vZGVsc1Byb3RlY3Rpb24pKSwgIi4uIiwgInRlc3QiLCAiZGF0YSIsICJkaXN0IiwgImNhc2UzX2JhbGFuY2VkX3B2LmRzcyIpKatjb2RlX2ZvbGRlZMLZJDBmMjM2MDljLWM0NWMtNDMxOS04Yzk5LTBjNzlkYjNjYzdjNoSnY2VsbF9pZNkkMGYyMzYwOWMtYzQ1Yy00MzE5LThjOTktMGM3OWRiM2NjN2M2sHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZS3Jlc3VsdHNfZmF1bHRfc3R1ZHkgPSBzb2x2ZV9tY19mYXVsdF9zdHVkeShkYXRhLCBmYXVsdF9zdHVkeSwgaXBvcHRfc29sdmVyKatjb2RlX2ZvbGRlZMLZJDUyN2E3YjQzLTA2YTEtNDg4ZS04YWRiLTc0MTJiMjdkNjI1MoSnY2VsbF9pZNkkNTI3YTdiNDMtMDZhMS00ODhlLThhZGItNzQxMmIyN2Q2MjUysHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZa2JlZ2luCglkYXRhID0gZGVlcGNvcHkoY2FzZTNfYmFsYW5jZWRfcHYpCglhZGRfZmF1bHQhKGRhdGEsICJ0ZXN0ZmF1bHQiLCAibGciLCAibG9hZGJ1cyIsIFsxLDRdLCAwLjAwMSkKZW5kq2NvZGVfZm9sZGVkwtkkOTJjYTY5YjgtODM2MC00Nzc0LTkwNmItNGFjZjFkMDQxNzM0hKdjZWxsX2lk2SQ5MmNhNjliOC04MzYwLTQ3NzQtOTA2Yi00YWNmMWQwNDE3MzSwcnVubmluZ19kaXNhYmxlZMKkY29kZdklcmVzdWx0WyJzb2x1dGlvbiJdWyJsaW5lIl1bInB2X2xpbmUiXatjb2RlX2ZvbGRlZMLZJGU3YjJjMDI4LTA0Y2UtNDY2NS05ODY1LTAxODJjYTBmYTc3NYSnY2VsbF9pZNkkZTdiMmMwMjgtMDRjZS00NjY1LTk4NjUtMDE4MmNhMGZhNzc1sHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZMXJlc3VsdCA9IHNvbHZlX21jX2ZhdWx0X3N0dWR5KGRhdGEsIGlwb3B0X3NvbHZlcimrY29kZV9mb2xkZWTC2SQ4NWYwMmNjYi00MTNhLTQ3NzMtYmI4OS0xYjgwODQ3YTJlNzaEp2NlbGxfaWTZJDg1ZjAyY2NiLTQxM2EtNDc3My1iYjg5LTFiODA4NDdhMmU3NrBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2ShyZXN1bHRbInNvbHV0aW9uIl1bImZhdWx0Il1bInRlc3RmYXVsdCJdq2NvZGVfZm9sZGVkwqtub3RlYm9va19pZNkkZThlMGViYTgtZGI2ZS0xMWVjLTBjMzktNzMyNmE2ZjE1Nzc3q2luX3RlbXBfZGlywg=="; +window.pluto_statefile = "data:;base64,j6Vib25kc4CsY2VsbF9yZXN1bHRz3gAS2SQxMmQzOWM0OS05NjYzLTQwZjMtOWJkNC02MGY2MTI5MGFiOGOJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52ZE8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPlVzaW5nIFBvd2VyTW9kZWxzUHJvdGVjdGlvbjwvaDI+CjxwPk9uY2UgdGhlIHByb3BlciBlbnZpcm9ubWVudCBpcyBwb3B1bGF0ZWQsIGltcG9ydCB0aGUgbmVjZXNzYXJ5IHBhY2thZ2VzLDwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoO4DHWLdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQxMmQzOWM0OS05NjYzLTQwZjMtOWJkNC02MGY2MTI5MGFiOGO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AcPowtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJGExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYYmmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9mqQXJndW1lbnRFcnJvcjogUGFja2FnZSBQb3dlck1vZGVsc1Byb3RlY3Rpb24gbm90IGZvdW5kIGluIGN1cnJlbnQgcGF0aC4KLSBSdW4gYGltcG9ydCBQa2c7IFBrZy5hZGQoIlBvd2VyTW9kZWxzUHJvdGVjdGlvbiIpYCB0byBpbnN0YWxsIHRoZSBQb3dlck1vZGVsc1Byb3RlY3Rpb24gcGFja2FnZS6qc3RhY2t0cmFjZZeFpGNhbGyvbWFjcm8gZXhwYW5zaW9up2lubGluZWTDpGZpbGWqbG9hZGluZy5qbKRsaW5lzQbspHBhdGisLi9sb2FkaW5nLmpshaRjYWxsr21hY3JvIGV4cGFuc2lvbqdpbmxpbmVkw6RmaWxlp2xvY2suamykbGluZc0BC6RwYXRoqS4vbG9jay5qbIWkY2FsbL1fX3JlcXVpcmUoOjpNb2R1bGUsIDo6U3ltYm9sKadpbmxpbmVkwqRmaWxlqmxvYWRpbmcuamykbGluZc0G2aRwYXRorC4vbG9hZGluZy5qbIWkY2FsbLIjaW52b2tlX2luX3dvcmxkIzOnaW5saW5lZMOkZmlsZa1lc3NlbnRpYWxzLmpspGxpbmXNA56kcGF0aK8uL2Vzc2VudGlhbHMuamyFpGNhbGyvaW52b2tlX2luX3dvcmxkp2lubGluZWTDpGZpbGWtZXNzZW50aWFscy5qbKRsaW5lzQObpHBhdGivLi9lc3NlbnRpYWxzLmpshaRjYWxsu3JlcXVpcmUoOjpNb2R1bGUsIDo6U3ltYm9sKadpbmxpbmVkwqRmaWxlqmxvYWRpbmcuamykbGluZc0G0qRwYXRorC4vbG9hZGluZy5qbIWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jYTE1YmIyYjItNGRlOS00Mjc4LWE2NmYtNTYxMGEzODljOTFhpGxpbmUCpHBhdGjZTmV4YW1wbGVzL2Rpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09I2ExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYbBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HZvGg7OtkOt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJGExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SRlMjEwNjZhZi04YzA2LTQ3ZTItYmZiOC0zNjNiMzYyNDFiODiJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52bU8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPlJ1bm5pbmcgd2l0aG91dCBhIHByZWRlZmluZWQgZmF1bHQ8L2gyPgo8cD5UbyBnZW5lcmF0ZSBhIGxpc3Qgb2YgZmF1bHRzIGZvciBhIGRhdGEgc3RydWN0dXJlLCB1c2UgdGhlIDxjb2RlPmJ1aWxkX21jX2ZhdWx0X3N0dWR5PC9jb2RlPiBmdW5jdGlvbjwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoO8WSo7doYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SRlMjEwNjZhZi04YzA2LTQ3ZTItYmZiOC0zNjNiMzYyNDFiODi5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABIMMtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJDczYzRiNzliLTY1OGEtNGJiZS1iYTY4LWM4YzY3NTdhM2Y5NYmmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZbDxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5hbmQgaW5pdGlhbGl6ZSBhIHNvbHZlciwgaW4gdGhpcyBjYXNlIGFuIElwb3B0Lk9wdGltaXplciBiYXNlZCBzb2x2ZXIuLi48L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aDuA5Na3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkNzNjNGI3OWItNjU4YS00YmJlLWJhNjgtYzhjNjc1N2EzZjk1uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAANis7VwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SQ4ZDVmYjkyYi1lYTMxLTRiOGQtYTZjOS03ODA2MjY2NzEzYjWJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52d08ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+VG8gc29sdmUgYWxsIG9mIHRoZXNlIGZhdWx0IHN0dWRpZXMgaW4gc2VyaWVzLCB1c2UgdGhlIDxjb2RlPnNvbHZlX21jX2ZhdWx0X3N0dWR5PC9jb2RlPiBmdW5jdGlvbiB3aXRoIHRoZSA8Y29kZT5mYXVsdF9zdHVkaWVzPC9jb2RlPiBqdXN0IGdlbmVyYXRlZCBieSA8Y29kZT5idWlsZF9tY19mYXVsdF9zdHVkeTwvY29kZT48L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aDvJcd63aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkOGQ1ZmI5MmItZWEzMS00YjhkLWE2YzktNzgwNjI2NjcxM2I1uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAPAbLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SRiYjQ0ZWEwNy1kNGNkLTQ2N2YtYTY3YS05NzRhZTM1OTA5MzWJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZMVVuZGVmVmFyRXJyb3I6IGBidWlsZF9tY19mYXVsdF9zdHVkeWAgbm90IGRlZmluZWSqc3RhY2t0cmFjZZGFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRWRpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09I2JiNDRlYTA3LWQ0Y2QtNDY3Zi1hNjdhLTk3NGFlMzU5MDkzNaRsaW5lAaRwYXRo2U5leGFtcGxlcy9kaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSNiYjQ0ZWEwNy1kNGNkLTQ2N2YtYTY3YS05NzRhZTM1OTA5MzWwcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoO8lJ5LdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlq2ZhdWx0X3N0dWR5p2NlbGxfaWTZJGJiNDRlYTA3LWQ0Y2QtNDY3Zi1hNjdhLTk3NGFlMzU5MDkzNblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SRmMThlOTBhZi02Nzk0LTRiNTQtYjM5My03NjZiYTA3ZDY0MGSJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52eU8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPkxvYWRpbmcgYSBkaXN0cmlidXRpb24gZGF0YSBzZXQ8L2gyPgo8cD5UbyBsb2FkIGEgZGlzdHJpYnV0aW9uIGRhdGFzZXQsIHdlIHVzZSB0aGUgPGNvZGU+cGFyc2VfZmlsZTwvY29kZT4gZnVuY3Rpb24uIEluIHRoaXMgY2FzZSB3ZSBhcmUgdXNpbmcgYSAzLWJ1cyBjYXNlIHdpdGggUFYsIGluY2x1ZGVkIGluIG91ciB1bml0LXRlc3RzLjwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoO6ppz7doYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SRmMThlOTBhZi02Nzk0LTRiNTQtYjM5My03NjZiYTA3ZDY0MGS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABaA7tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJGNkM2E0NDQ0LWE1M2YtNGNkOC05OGFhLTM4YTJjMzhiMzZhMImmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZhjxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+QWRkaW5nIGEgZmF1bHQ8L2gyPgo8cD5UbyBhZGQgYSBmYXVsdCwgd2UgbWF5IHVzZSB0aGUgPGNvZGU+YWRkX2ZhdWx0JiMzMzs8L2NvZGU+IGhlbHBlciBmdW5jdGlvbjwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoO65eyLdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SRjZDNhNDQ0NC1hNTNmLTRjZDgtOThhYS0zOGEyYzM4YjM2YTC5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABJKXtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJDViZDViYTAwLWI4MGYtMTFlYi0wMzdkLTIzZGE5ZDA1YmQ4ZommcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9kqRGlkIG5vdCBmaW5kIHJldiByZWYvcG1kLXYxMSBpbiByZXBvc2l0b3J5qnN0YWNrdHJhY2WZhaRjYWxssnBrZ2Vycm9yKDo6U3RyaW5nKadpbmxpbmVkwqRmaWxlqFR5cGVzLmpspGxpbmVGpHBhdGjZbC9jYWNoZS9idWlsZC9idWlsZGVyLWFtZGNpNC00L2p1bGlhbGFuZy9qdWxpYS1yZWxlYXNlLTEtZG90LTEwL3Vzci9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuMTAvUGtnL3NyYy9UeXBlcy5qbIWkY2FsbNleKDo6UGtnLlR5cGVzLnZhciIjNTcjNTgie1BrZy5UeXBlcy5Db250ZXh0LCBQa2cuVHlwZXMuUGFja2FnZVNwZWMsIFN0cmluZ30pKDo6TGliR2l0Mi5HaXRSZXBvKadpbmxpbmVkwqRmaWxlqFR5cGVzLmpspGxpbmXNAzCkcGF0aNlsL2NhY2hlL2J1aWxkL2J1aWxkZXItYW1kY2k0LTQvanVsaWFsYW5nL2p1bGlhLXJlbGVhc2UtMS1kb3QtMTAvdXNyL3NoYXJlL2p1bGlhL3N0ZGxpYi92MS4xMC9Qa2cvc3JjL1R5cGVzLmpshaRjYWxs2WJ3aXRoKDo6UGtnLlR5cGVzLnZhciIjNTcjNTgie1BrZy5UeXBlcy5Db250ZXh0LCBQa2cuVHlwZXMuUGFja2FnZVNwZWMsIFN0cmluZ30sIDo6TGliR2l0Mi5HaXRSZXBvKadpbmxpbmVkwqRmaWxlqHR5cGVzLmpspGxpbmXNBIikcGF0aNlwL2NhY2hlL2J1aWxkL2J1aWxkZXItYW1kY2k0LTQvanVsaWFsYW5nL2p1bGlhLXJlbGVhc2UtMS1kb3QtMTAvdXNyL3NoYXJlL2p1bGlhL3N0ZGxpYi92MS4xMC9MaWJHaXQyL3NyYy90eXBlcy5qbIWkY2FsbNk+aGFuZGxlX3JlcG9fYWRkISg6OlBrZy5UeXBlcy5Db250ZXh0LCA6OlBrZy5UeXBlcy5QYWNrYWdlU3BlYymnaW5saW5lZMKkZmlsZahUeXBlcy5qbKRsaW5lzQMgpHBhdGjZbC9jYWNoZS9idWlsZC9idWlsZGVyLWFtZGNpNC00L2p1bGlhbGFuZy9qdWxpYS1yZWxlYXNlLTEtZG90LTEwL3Vzci9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuMTAvUGtnL3NyYy9UeXBlcy5qbIWkY2FsbNlHaGFuZGxlX3JlcG9zX2FkZCEoOjpQa2cuVHlwZXMuQ29udGV4dCwgOjpWZWN0b3J7UGtnLlR5cGVzLlBhY2thZ2VTcGVjfSmnaW5saW5lZMKkZmlsZahUeXBlcy5qbKRsaW5lzQNmpHBhdGjZbC9jYWNoZS9idWlsZC9idWlsZGVyLWFtZGNpNC00L2p1bGlhbGFuZy9qdWxpYS1yZWxlYXNlLTEtZG90LTEwL3Vzci9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuMTAvUGtnL3NyYy9UeXBlcy5qbIWkY2FsbNoBCHZhciIjYWRkIzEzMSIoOjpQa2cuVHlwZXMuUHJlc2VydmVMZXZlbCwgOjpCYXNlLkJpbmFyeVBsYXRmb3Jtcy5QbGF0Zm9ybSwgOjpCYXNlLlBhaXJze1N5bWJvbCwgSU9Db250ZXh0e0Jhc2UuUGlwZUVuZHBvaW50fSwgVHVwbGV7U3ltYm9sfSwgQE5hbWVkVHVwbGV7aW86OklPQ29udGV4dHtCYXNlLlBpcGVFbmRwb2ludH19fSwgOjp0eXBlb2YoUGtnLkFQSS5hZGQpLCA6OlBrZy5UeXBlcy5Db250ZXh0LCA6OlZlY3RvcntQa2cuVHlwZXMuUGFja2FnZVNwZWN9KadpbmxpbmVkwqRmaWxlpkFQSS5qbKRsaW5lzQECpHBhdGjZai9jYWNoZS9idWlsZC9idWlsZGVyLWFtZGNpNC00L2p1bGlhbGFuZy9qdWxpYS1yZWxlYXNlLTEtZG90LTEwL3Vzci9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuMTAvUGtnL3NyYy9BUEkuamyFpGNhbGzZm3ZhciIjYWRkIzI3Iig6OklPQ29udGV4dHtCYXNlLlBpcGVFbmRwb2ludH0sIDo6QmFzZS5QYWlyc3tTeW1ib2wsIFVuaW9ue30sIFR1cGxle30sIEBOYW1lZFR1cGxle319LCA6OnR5cGVvZihQa2cuQVBJLmFkZCksIDo6VmVjdG9ye1BrZy5UeXBlcy5QYWNrYWdlU3BlY30pp2lubGluZWTCpGZpbGWmQVBJLmpspGxpbmXMn6RwYXRo2WovY2FjaGUvYnVpbGQvYnVpbGRlci1hbWRjaTQtNC9qdWxpYWxhbmcvanVsaWEtcmVsZWFzZS0xLWRvdC0xMC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjEwL1BrZy9zcmMvQVBJLmpshaRjYWxs2SRhZGQoOjpWZWN0b3J7UGtnLlR5cGVzLlBhY2thZ2VTcGVjfSmnaW5saW5lZMKkZmlsZaZBUEkuamykbGluZcyUpHBhdGjZai9jYWNoZS9idWlsZC9idWlsZGVyLWFtZGNpNC00L2p1bGlhbGFuZy9qdWxpYS1yZWxlYXNlLTEtZG90LTEwL3Vzci9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuMTAvUGtnL3NyYy9BUEkuamyFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRWRpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzViZDViYTAwLWI4MGYtMTFlYi0wMzdkLTIzZGE5ZDA1YmQ4ZqRsaW5lBKRwYXRo2U5leGFtcGxlcy9kaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSM1YmQ1YmEwMC1iODBmLTExZWItMDM3ZC0yM2RhOWQwNWJkOGawcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoOyF4o7doYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQ1YmQ1YmEwMC1iODBmLTExZWItMDM3ZC0yM2RhOWQwNWJkOGa5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZcC1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkw9kkMzBiZGY1YTctYzJmYi00ZTdjLWFlN2YtMmQ2ZDIxOGI0OGM0iaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoBOjxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDE+UG93ZXJNb2RlbHNQcm90ZWN0aW9uLmpsOiBEaXN0cmlidXRpb24gRmF1bHQgU3R1ZGllczwvaDE+CjxwPkluIHRoaXMgZXhhbXBsZSB3ZSBpbnRyb2R1Y2UgaG93IHRvIHBlcmZvcm0gZmF1bHQgc3R1ZGllcyBvbiBhIGRpc3RyaWJ1dGlvbiBkYXRhIHNldCAmIzQwO2kuZS4sIHVzaW5nIGEgZHNzIGlucHV0IGZpbGUmIzQxOy48L3A+CjxwPkZpcnN0IHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB2ZXJzaW9ucyBvZiBQb3dlck1vZGVsc1Byb3RlY3Rpb24gYW5kIElwb3B0LjwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoO3nXrrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQzMGJkZjVhNy1jMmZiLTRlN2MtYWU3Zi0yZDZkMjE4YjQ4YzS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AokZEtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJDAyNTMyMjg1LWYyMDgtNDg5NS1iYjU5LWJlY2EwMzc2MmNhM4mmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZyjxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+U29sdmluZyBhIGZhdWx0IHN0dWR5PC9oMj4KPHA+VG8gc29sdmUgYSBmYXVsdCBzdHVkeSBvbiBhIGRhdGEgc3RydWN0dXJlIHRoYXQgYWxyZWFkeSBpbmNsdWRlcyBvbmUgb3IgbW9yZSBmYXVsdHMsIHVzZSB0aGUgPGNvZGU+c29sdmVfbWNfZmF1bHRfc3R1ZHk8L2NvZGU+IGZ1bmN0aW9uPC9wPgo8L2Rpdj6wcGVyc2lzdF9qc19zdGF0ZcKkbWltZal0ZXh0L2h0bWyybGFzdF9ydW5fdGltZXN0YW1wy0HZvGg7t7FCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJDAyNTMyMjg1LWYyMDgtNDg5NS1iYjU5LWJlY2EwMzc2MmNhM7lkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAEpIK1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkwtkkZTE2NTBkY2EtNTkwNi00YjlhLWJiNDktZWE5Yzk2NzNmMGYxiaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYKjbXNn2SJVbmRlZlZhckVycm9yOiBgSXBvcHRgIG5vdCBkZWZpbmVkqnN0YWNrdHJhY2WRhaRjYWxsr3RvcC1sZXZlbCBzY29wZadpbmxpbmVkwqRmaWxl2UVkaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSNlMTY1MGRjYS01OTA2LTRiOWEtYmI0OS1lYTljOTY3M2YwZjGkbGluZQGkcGF0aNlOZXhhbXBsZXMvZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jZTE2NTBkY2EtNTkwNi00YjlhLWJiNDktZWE5Yzk2NzNmMGYxsHBlcnNpc3RfanNfc3RhdGXCpG1pbWXZJ2FwcGxpY2F0aW9uL3ZuZC5wbHV0by5zdGFja3RyYWNlK29iamVjdLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aDulpdO3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZaxpcG9wdF9zb2x2ZXKnY2VsbF9pZNkkZTE2NTBkY2EtNTkwNi00YjlhLWJiNDktZWE5Yzk2NzNmMGYxuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMPZJDExNTkzYWEyLTQxZmEtNDQ3Mi1hODI3LTI2NTQ1MGNkZTAxZYmmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9kyVW5kZWZWYXJFcnJvcjogYFBvd2VyTW9kZWxzUHJvdGVjdGlvbmAgbm90IGRlZmluZWSqc3RhY2t0cmFjZZGFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRWRpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzExNTkzYWEyLTQxZmEtNDQ3Mi1hODI3LTI2NTQ1MGNkZTAxZaRsaW5lAaRwYXRo2U5leGFtcGxlcy9kaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSMxMTU5M2FhMi00MWZhLTQ0NzItYTgyNy0yNjU0NTBjZGUwMWWwcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoO64wd7doYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlsWNhc2UzX2JhbGFuY2VkX3B2p2NlbGxfaWTZJDExNTkzYWEyLTQxZmEtNDQ3Mi1hODI3LTI2NTQ1MGNkZTAxZblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SQwZjIzNjA5Yy1jNDVjLTQzMTktOGM5OS0wYzc5ZGIzY2M3YzaJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZMVVuZGVmVmFyRXJyb3I6IGBzb2x2ZV9tY19mYXVsdF9zdHVkeWAgbm90IGRlZmluZWSqc3RhY2t0cmFjZZGFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRWRpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzBmMjM2MDljLWM0NWMtNDMxOS04Yzk5LTBjNzlkYjNjYzdjNqRsaW5lAaRwYXRo2U5leGFtcGxlcy9kaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSMwZjIzNjA5Yy1jNDVjLTQzMTktOGM5OS0wYzc5ZGIzY2M3YzawcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoO81vTLdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVls3Jlc3VsdHNfZmF1bHRfc3R1ZHmnY2VsbF9pZNkkMGYyMzYwOWMtYzQ1Yy00MzE5LThjOTktMGM3OWRiM2NjN2M2uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMPZJDUyN2E3YjQzLTA2YTEtNDg4ZS04YWRiLTc0MTJiMjdkNjI1MommcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9kuVW5kZWZWYXJFcnJvcjogYGNhc2UzX2JhbGFuY2VkX3B2YCBub3QgZGVmaW5lZKpzdGFja3RyYWNlkYWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jNTI3YTdiNDMtMDZhMS00ODhlLThhZGItNzQxMmIyN2Q2MjUypGxpbmUCpHBhdGjZTmV4YW1wbGVzL2Rpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzUyN2E3YjQzLTA2YTEtNDg4ZS04YWRiLTc0MTJiMjdkNjI1MrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HZvGg7t4Nzt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJDUyN2E3YjQzLTA2YTEtNDg4ZS04YWRiLTc0MTJiMjdkNjI1MrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SQ5MmNhNjliOC04MzYwLTQ3NzQtOTA2Yi00YWNmMWQwNDE3MzSJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZI1VuZGVmVmFyRXJyb3I6IGByZXN1bHRgIG5vdCBkZWZpbmVkqnN0YWNrdHJhY2WRhaRjYWxsr3RvcC1sZXZlbCBzY29wZadpbmxpbmVkwqRmaWxl2UVkaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSM5MmNhNjliOC04MzYwLTQ3NzQtOTA2Yi00YWNmMWQwNDE3MzSkbGluZQGkcGF0aNlOZXhhbXBsZXMvZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jOTJjYTY5YjgtODM2MC00Nzc0LTkwNmItNGFjZjFkMDQxNzM0sHBlcnNpc3RfanNfc3RhdGXCpG1pbWXZJ2FwcGxpY2F0aW9uL3ZuZC5wbHV0by5zdGFja3RyYWNlK29iamVjdLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aDvFYdS3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkOTJjYTY5YjgtODM2MC00Nzc0LTkwNmItNGFjZjFkMDQxNzM0uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMPZJGU3YjJjMDI4LTA0Y2UtNDY2NS05ODY1LTAxODJjYTBmYTc3NYmmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9kxVW5kZWZWYXJFcnJvcjogYHNvbHZlX21jX2ZhdWx0X3N0dWR5YCBub3QgZGVmaW5lZKpzdGFja3RyYWNlkYWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jZTdiMmMwMjgtMDRjZS00NjY1LTk4NjUtMDE4MmNhMGZhNzc1pGxpbmUBpHBhdGjZTmV4YW1wbGVzL2Rpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsIz09I2U3YjJjMDI4LTA0Y2UtNDY2NS05ODY1LTAxODJjYTBmYTc3NbBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HZvGg7u2cOt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWWmcmVzdWx0p2NlbGxfaWTZJGU3YjJjMDI4LTA0Y2UtNDY2NS05ODY1LTAxODJjYTBmYTc3NblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SQ4NWYwMmNjYi00MTNhLTQ3NzMtYmI4OS0xYjgwODQ3YTJlNzaJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZI1VuZGVmVmFyRXJyb3I6IGByZXN1bHRgIG5vdCBkZWZpbmVkqnN0YWNrdHJhY2WRhaRjYWxsr3RvcC1sZXZlbCBzY29wZadpbmxpbmVkwqRmaWxl2UVkaXN0cmlidXRpb25fZmF1bHRfc3R1ZGllcy5qbCM9PSM4NWYwMmNjYi00MTNhLTQ3NzMtYmI4OS0xYjgwODQ3YTJlNzakbGluZQGkcGF0aNlOZXhhbXBsZXMvZGlzdHJpYnV0aW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jODVmMDJjY2ItNDEzYS00NzczLWJiODktMWI4MDg0N2EyZTc2sHBlcnNpc3RfanNfc3RhdGXCpG1pbWXZJ2FwcGxpY2F0aW9uL3ZuZC5wbHV0by5zdGFja3RyYWNlK29iamVjdLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aDvBlC23aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkODVmMDJjY2ItNDEzYS00NzczLWJiODktMWI4MDg0N2EyZTc2uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMOxY2VsbF9kZXBlbmRlbmNpZXPeABLZJDEyZDM5YzQ5LTk2NjMtNDBmMy05YmQ0LTYwZjYxMjkwYWI4Y4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDEyZDM5YzQ5LTk2NjMtNDBmMy05YmQ0LTYwZjYxMjkwYWI4Y7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMHp2NlbGxfaWTZJGExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYbRkb3duc3RyZWFtX2NlbGxzX21hcIK1UG93ZXJNb2RlbHNQcm90ZWN0aW9ukdkkMTE1OTNhYTItNDFmYS00NDcyLWE4MjctMjY1NDUwY2RlMDFlpUlwb3B0kdkkZTE2NTBkY2EtNTkwNi00YjlhLWJiNDktZWE5Yzk2NzNmMGYxsnVwc3RyZWFtX2NlbGxzX21hcIDZJGUyMTA2NmFmLThjMDYtNDdlMi1iZmI4LTM2M2IzNjI0MWI4OIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGUyMTA2NmFmLThjMDYtNDdlMi1iZmI4LTM2M2IzNjI0MWI4OLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDczYzRiNzliLTY1OGEtNGJiZS1iYTY4LWM4YzY3NTdhM2Y5NYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDczYzRiNzliLTY1OGEtNGJiZS1iYTY4LWM4YzY3NTdhM2Y5NbRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDhkNWZiOTJiLWVhMzEtNGI4ZC1hNmM5LTc4MDYyNjY3MTNiNYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDhkNWZiOTJiLWVhMzEtNGI4ZC1hNmM5LTc4MDYyNjY3MTNiNbRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGJiNDRlYTA3LWQ0Y2QtNDY3Zi1hNjdhLTk3NGFlMzU5MDkzNYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGJiNDRlYTA3LWQ0Y2QtNDY3Zi1hNjdhLTk3NGFlMzU5MDkzNbRkb3duc3RyZWFtX2NlbGxzX21hcIGrZmF1bHRfc3R1ZHmR2SQwZjIzNjA5Yy1jNDVjLTQzMTktOGM5OS0wYzc5ZGIzY2M3YzaydXBzdHJlYW1fY2VsbHNfbWFwgqRkYXRhkdkkNTI3YTdiNDMtMDZhMS00ODhlLThhZGItNzQxMmIyN2Q2MjUytGJ1aWxkX21jX2ZhdWx0X3N0dWR5kNkkZjE4ZTkwYWYtNjc5NC00YjU0LWIzOTMtNzY2YmEwN2Q2NDBkhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZjE4ZTkwYWYtNjc5NC00YjU0LWIzOTMtNzY2YmEwN2Q2NDBktGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkY2QzYTQ0NDQtYTUzZi00Y2Q4LTk4YWEtMzhhMmMzOGIzNmEwhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkY2QzYTQ0NDQtYTUzZi00Y2Q4LTk4YWEtMzhhMmMzOGIzNmEwtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkNWJkNWJhMDAtYjgwZi0xMWViLTAzN2QtMjNkYTlkMDViZDhmhLRwcmVjZWRlbmNlX2hldXJpc3RpYwGnY2VsbF9pZNkkNWJkNWJhMDAtYjgwZi0xMWViLTAzN2QtMjNkYTlkMDViZDhmtGRvd25zdHJlYW1fY2VsbHNfbWFwgaNQa2eR2SQ1YmQ1YmEwMC1iODBmLTExZWItMDM3ZC0yM2RhOWQwNWJkOGaydXBzdHJlYW1fY2VsbHNfbWFwhadQa2cuYWRkkKNQa2eR2SQ1YmQ1YmEwMC1iODBmLTExZWItMDM3ZC0yM2RhOWQwNWJkOGasUGtnLmFjdGl2YXRlkK9Qa2cuUGFja2FnZVNwZWOQqW1rdGVtcGRpcpDZJDMwYmRmNWE3LWMyZmItNGU3Yy1hZTdmLTJkNmQyMThiNDhjNIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDMwYmRmNWE3LWMyZmItNGU3Yy1hZTdmLTJkNmQyMThiNDhjNLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDAyNTMyMjg1LWYyMDgtNDg5NS1iYjU5LWJlY2EwMzc2MmNhM4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDAyNTMyMjg1LWYyMDgtNDg5NS1iYjU5LWJlY2EwMzc2MmNhM7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGUxNjUwZGNhLTU5MDYtNGI5YS1iYjQ5LWVhOWM5NjczZjBmMYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGUxNjUwZGNhLTU5MDYtNGI5YS1iYjQ5LWVhOWM5NjczZjBmMbRkb3duc3RyZWFtX2NlbGxzX21hcIGsaXBvcHRfc29sdmVyktkkZTdiMmMwMjgtMDRjZS00NjY1LTk4NjUtMDE4MmNhMGZhNzc12SQwZjIzNjA5Yy1jNDVjLTQzMTktOGM5OS0wYzc5ZGIzY2M3YzaydXBzdHJlYW1fY2VsbHNfbWFwg6VJcG9wdJHZJGExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYaI9PpC5b3B0aW1pemVyX3dpdGhfYXR0cmlidXRlc5DZJDExNTkzYWEyLTQxZmEtNDQ3Mi1hODI3LTI2NTQ1MGNkZTAxZYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDExNTkzYWEyLTQxZmEtNDQ3Mi1hODI3LTI2NTQ1MGNkZTAxZbRkb3duc3RyZWFtX2NlbGxzX21hcIGxY2FzZTNfYmFsYW5jZWRfcHaR2SQ1MjdhN2I0My0wNmExLTQ4OGUtOGFkYi03NDEyYjI3ZDYyNTKydXBzdHJlYW1fY2VsbHNfbWFwhbVQb3dlck1vZGVsc1Byb3RlY3Rpb26R2SRhMTViYjJiMi00ZGU5LTQyNzgtYTY2Zi01NjEwYTM4OWM5MWGnZGlybmFtZZCoam9pbnBhdGiQpnBhdGhvZpCqcGFyc2VfZmlsZZDZJDBmMjM2MDljLWM0NWMtNDMxOS04Yzk5LTBjNzlkYjNjYzdjNoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDBmMjM2MDljLWM0NWMtNDMxOS04Yzk5LTBjNzlkYjNjYzdjNrRkb3duc3RyZWFtX2NlbGxzX21hcIGzcmVzdWx0c19mYXVsdF9zdHVkeZCydXBzdHJlYW1fY2VsbHNfbWFwhKxpcG9wdF9zb2x2ZXKR2SRlMTY1MGRjYS01OTA2LTRiOWEtYmI0OS1lYTljOTY3M2YwZjGrZmF1bHRfc3R1ZHmR2SRiYjQ0ZWEwNy1kNGNkLTQ2N2YtYTY3YS05NzRhZTM1OTA5MzW0c29sdmVfbWNfZmF1bHRfc3R1ZHmQpGRhdGGR2SQ1MjdhN2I0My0wNmExLTQ4OGUtOGFkYi03NDEyYjI3ZDYyNTLZJDUyN2E3YjQzLTA2YTEtNDg4ZS04YWRiLTc0MTJiMjdkNjI1MoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDUyN2E3YjQzLTA2YTEtNDg4ZS04YWRiLTc0MTJiMjdkNjI1MrRkb3duc3RyZWFtX2NlbGxzX21hcIGkZGF0YZPZJGU3YjJjMDI4LTA0Y2UtNDY2NS05ODY1LTAxODJjYTBmYTc3NdkkYmI0NGVhMDctZDRjZC00NjdmLWE2N2EtOTc0YWUzNTkwOTM12SQwZjIzNjA5Yy1jNDVjLTQzMTktOGM5OS0wYzc5ZGIzY2M3YzaydXBzdHJlYW1fY2VsbHNfbWFwg6hkZWVwY29weZCxY2FzZTNfYmFsYW5jZWRfcHaR2SQxMTU5M2FhMi00MWZhLTQ0NzItYTgyNy0yNjU0NTBjZGUwMWWqYWRkX2ZhdWx0IZDZJDkyY2E2OWI4LTgzNjAtNDc3NC05MDZiLTRhY2YxZDA0MTczNIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDkyY2E2OWI4LTgzNjAtNDc3NC05MDZiLTRhY2YxZDA0MTczNLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaZyZXN1bHSR2SRlN2IyYzAyOC0wNGNlLTQ2NjUtOTg2NS0wMTgyY2EwZmE3NzXZJGU3YjJjMDI4LTA0Y2UtNDY2NS05ODY1LTAxODJjYTBmYTc3NYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGU3YjJjMDI4LTA0Y2UtNDY2NS05ODY1LTAxODJjYTBmYTc3NbRkb3duc3RyZWFtX2NlbGxzX21hcIGmcmVzdWx0ktkkODVmMDJjY2ItNDEzYS00NzczLWJiODktMWI4MDg0N2EyZTc22SQ5MmNhNjliOC04MzYwLTQ3NzQtOTA2Yi00YWNmMWQwNDE3MzSydXBzdHJlYW1fY2VsbHNfbWFwg6xpcG9wdF9zb2x2ZXKR2SRlMTY1MGRjYS01OTA2LTRiOWEtYmI0OS1lYTljOTY3M2YwZjG0c29sdmVfbWNfZmF1bHRfc3R1ZHmQpGRhdGGR2SQ1MjdhN2I0My0wNmExLTQ4OGUtOGFkYi03NDEyYjI3ZDYyNTLZJDg1ZjAyY2NiLTQxM2EtNDc3My1iYjg5LTFiODA4NDdhMmU3NoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDg1ZjAyY2NiLTQxM2EtNDc3My1iYjg5LTFiODA4NDdhMmU3NrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaZyZXN1bHSR2SRlN2IyYzAyOC0wNGNlLTQ2NjUtOTg2NS0wMTgyY2EwZmE3NzW0Y2VsbF9leGVjdXRpb25fb3JkZXLcABLZJDViZDViYTAwLWI4MGYtMTFlYi0wMzdkLTIzZGE5ZDA1YmQ4ZtkkYTE1YmIyYjItNGRlOS00Mjc4LWE2NmYtNTYxMGEzODljOTFh2SQzMGJkZjVhNy1jMmZiLTRlN2MtYWU3Zi0yZDZkMjE4YjQ4YzTZJDEyZDM5YzQ5LTk2NjMtNDBmMy05YmQ0LTYwZjYxMjkwYWI4Y9kkNzNjNGI3OWItNjU4YS00YmJlLWJhNjgtYzhjNjc1N2EzZjk12SRlMTY1MGRjYS01OTA2LTRiOWEtYmI0OS1lYTljOTY3M2YwZjHZJGYxOGU5MGFmLTY3OTQtNGI1NC1iMzkzLTc2NmJhMDdkNjQwZNkkMTE1OTNhYTItNDFmYS00NDcyLWE4MjctMjY1NDUwY2RlMDFl2SRjZDNhNDQ0NC1hNTNmLTRjZDgtOThhYS0zOGEyYzM4YjM2YTDZJDUyN2E3YjQzLTA2YTEtNDg4ZS04YWRiLTc0MTJiMjdkNjI1MtkkMDI1MzIyODUtZjIwOC00ODk1LWJiNTktYmVjYTAzNzYyY2Ez2SRlN2IyYzAyOC0wNGNlLTQ2NjUtOTg2NS0wMTgyY2EwZmE3NzXZJDg1ZjAyY2NiLTQxM2EtNDc3My1iYjg5LTFiODA4NDdhMmU3NtkkOTJjYTY5YjgtODM2MC00Nzc0LTkwNmItNGFjZjFkMDQxNzM02SRlMjEwNjZhZi04YzA2LTQ3ZTItYmZiOC0zNjNiMzYyNDFiODjZJGJiNDRlYTA3LWQ0Y2QtNDY3Zi1hNjdhLTk3NGFlMzU5MDkzNdkkOGQ1ZmI5MmItZWEzMS00YjhkLWE2YzktNzgwNjI2NjcxM2I12SQwZjIzNjA5Yy1jNDVjLTQzMTktOGM5OS0wYzc5ZGIzY2M3Yza0bGFzdF9ob3RfcmVsb2FkX3RpbWXLAAAAAAAAAACpc2hvcnRwYXRovWRpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsrnByb2Nlc3Nfc3RhdHVzpXJlYWR5pHBhdGjZJmV4YW1wbGVzL2Rpc3RyaWJ1dGlvbl9mYXVsdF9zdHVkaWVzLmpsrmxhc3Rfc2F2ZV90aW1ly0HZvGg7SvyYqmNlbGxfb3JkZXLcABLZJDMwYmRmNWE3LWMyZmItNGU3Yy1hZTdmLTJkNmQyMThiNDhjNNkkNWJkNWJhMDAtYjgwZi0xMWViLTAzN2QtMjNkYTlkMDViZDhm2SQxMmQzOWM0OS05NjYzLTQwZjMtOWJkNC02MGY2MTI5MGFiOGPZJGExNWJiMmIyLTRkZTktNDI3OC1hNjZmLTU2MTBhMzg5YzkxYdkkNzNjNGI3OWItNjU4YS00YmJlLWJhNjgtYzhjNjc1N2EzZjk12SRlMTY1MGRjYS01OTA2LTRiOWEtYmI0OS1lYTljOTY3M2YwZjHZJGYxOGU5MGFmLTY3OTQtNGI1NC1iMzkzLTc2NmJhMDdkNjQwZNkkMTE1OTNhYTItNDFmYS00NDcyLWE4MjctMjY1NDUwY2RlMDFl2SRjZDNhNDQ0NC1hNTNmLTRjZDgtOThhYS0zOGEyYzM4YjM2YTDZJDUyN2E3YjQzLTA2YTEtNDg4ZS04YWRiLTc0MTJiMjdkNjI1MtkkMDI1MzIyODUtZjIwOC00ODk1LWJiNTktYmVjYTAzNzYyY2Ez2SRlN2IyYzAyOC0wNGNlLTQ2NjUtOTg2NS0wMTgyY2EwZmE3NzXZJDg1ZjAyY2NiLTQxM2EtNDc3My1iYjg5LTFiODA4NDdhMmU3NtkkOTJjYTY5YjgtODM2MC00Nzc0LTkwNmItNGFjZjFkMDQxNzM02SRlMjEwNjZhZi04YzA2LTQ3ZTItYmZiOC0zNjNiMzYyNDFiODjZJGJiNDRlYTA3LWQ0Y2QtNDY3Zi1hNjdhLTk3NGFlMzU5MDkzNdkkOGQ1ZmI5MmItZWEzMS00YjhkLWE2YzktNzgwNjI2NjcxM2I12SQwZjIzNjA5Yy1jNDVjLTQzMTktOGM5OS0wYzc5ZGIzY2M3YzaxcHVibGlzaGVkX29iamVjdHOApW5icGtnh7JpbnN0YWxsZWRfdmVyc2lvbnOAsHRlcm1pbmFsX291dHB1dHOAp2VuYWJsZWTCt3Jlc3RhcnRfcmVjb21tZW5kZWRfbXNnwLRyZXN0YXJ0X3JlcXVpcmVkX21zZ8CtYnVzeV9wYWNrYWdlc5CsaW5zdGFudGlhdGVkwqtjZWxsX2lucHV0c94AEtkkMTJkMzljNDktOTY2My00MGYzLTliZDQtNjBmNjEyOTBhYjhjhKdjZWxsX2lk2SQxMmQzOWM0OS05NjYzLTQwZjMtOWJkNC02MGY2MTI5MGFiOGOwcnVubmluZ19kaXNhYmxlZMKkY29kZdlybWQiIiIKIyMgVXNpbmcgUG93ZXJNb2RlbHNQcm90ZWN0aW9uCgpPbmNlIHRoZSBwcm9wZXIgZW52aXJvbm1lbnQgaXMgcG9wdWxhdGVkLCBpbXBvcnQgdGhlIG5lY2Vzc2FyeSBwYWNrYWdlcywKIiIiq2NvZGVfZm9sZGVkw9kkYTE1YmIyYjItNGRlOS00Mjc4LWE2NmYtNTYxMGEzODljOTFhhKdjZWxsX2lk2SRhMTViYjJiMi00ZGU5LTQyNzgtYTY2Zi01NjEwYTM4OWM5MWGwcnVubmluZ19kaXNhYmxlZMKkY29kZdk0YmVnaW4KCXVzaW5nIFBvd2VyTW9kZWxzUHJvdGVjdGlvbgoJaW1wb3J0IElwb3B0CmVuZKtjb2RlX2ZvbGRlZMLZJGUyMTA2NmFmLThjMDYtNDdlMi1iZmI4LTM2M2IzNjI0MWI4OISnY2VsbF9pZNkkZTIxMDY2YWYtOGMwNi00N2UyLWJmYjgtMzYzYjM2MjQxYjg4sHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZi21kIiIiCiMjIFJ1bm5pbmcgd2l0aG91dCBhIHByZWRlZmluZWQgZmF1bHQKClRvIGdlbmVyYXRlIGEgbGlzdCBvZiBmYXVsdHMgZm9yIGEgZGF0YSBzdHJ1Y3R1cmUsIHVzZSB0aGUgYGJ1aWxkX21jX2ZhdWx0X3N0dWR5YCBmdW5jdGlvbgoiIiKrY29kZV9mb2xkZWTD2SQ3M2M0Yjc5Yi02NThhLTRiYmUtYmE2OC1jOGM2NzU3YTNmOTWEp2NlbGxfaWTZJDczYzRiNzliLTY1OGEtNGJiZS1iYTY4LWM4YzY3NTdhM2Y5NbBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2VJtZCIiIgphbmQgaW5pdGlhbGl6ZSBhIHNvbHZlciwgaW4gdGhpcyBjYXNlIGFuIElwb3B0Lk9wdGltaXplciBiYXNlZCBzb2x2ZXIuLi4KIiIiq2NvZGVfZm9sZGVkw9kkOGQ1ZmI5MmItZWEzMS00YjhkLWE2YzktNzgwNjI2NjcxM2I1hKdjZWxsX2lk2SQ4ZDVmYjkyYi1lYTMxLTRiOGQtYTZjOS03ODA2MjY2NzEzYjWwcnVubmluZ19kaXNhYmxlZMKkY29kZdmibWQiIiIKVG8gc29sdmUgYWxsIG9mIHRoZXNlIGZhdWx0IHN0dWRpZXMgaW4gc2VyaWVzLCB1c2UgdGhlIGBzb2x2ZV9tY19mYXVsdF9zdHVkeWAgZnVuY3Rpb24gd2l0aCB0aGUgYGZhdWx0X3N0dWRpZXNgIGp1c3QgZ2VuZXJhdGVkIGJ5IGBidWlsZF9tY19mYXVsdF9zdHVkeWAKIiIiq2NvZGVfZm9sZGVkw9kkYmI0NGVhMDctZDRjZC00NjdmLWE2N2EtOTc0YWUzNTkwOTM1hKdjZWxsX2lk2SRiYjQ0ZWEwNy1kNGNkLTQ2N2YtYTY3YS05NzRhZTM1OTA5MzWwcnVubmluZ19kaXNhYmxlZMKkY29kZdkoZmF1bHRfc3R1ZHkgPSBidWlsZF9tY19mYXVsdF9zdHVkeShkYXRhKatjb2RlX2ZvbGRlZMLZJGYxOGU5MGFmLTY3OTQtNGI1NC1iMzkzLTc2NmJhMDdkNjQwZISnY2VsbF9pZNkkZjE4ZTkwYWYtNjc5NC00YjU0LWIzOTMtNzY2YmEwN2Q2NDBksHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZu21kIiIiCiMjIExvYWRpbmcgYSBkaXN0cmlidXRpb24gZGF0YSBzZXQKClRvIGxvYWQgYSBkaXN0cmlidXRpb24gZGF0YXNldCwgd2UgdXNlIHRoZSBgcGFyc2VfZmlsZWAgZnVuY3Rpb24uIEluIHRoaXMgY2FzZSB3ZSBhcmUgdXNpbmcgYSAzLWJ1cyBjYXNlIHdpdGggUFYsIGluY2x1ZGVkIGluIG91ciB1bml0LXRlc3RzLgoiIiKrY29kZV9mb2xkZWTD2SRjZDNhNDQ0NC1hNTNmLTRjZDgtOThhYS0zOGEyYzM4YjM2YTCEp2NlbGxfaWTZJGNkM2E0NDQ0LWE1M2YtNGNkOC05OGFhLTM4YTJjMzhiMzZhMLBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2VhtZCIiIgojIyBBZGRpbmcgYSBmYXVsdAoKVG8gYWRkIGEgZmF1bHQsIHdlIG1heSB1c2UgdGhlIGBhZGRfZmF1bHQhYCBoZWxwZXIgZnVuY3Rpb24KIiIiq2NvZGVfZm9sZGVkw9kkNWJkNWJhMDAtYjgwZi0xMWViLTAzN2QtMjNkYTlkMDViZDhmhKdjZWxsX2lk2SQ1YmQ1YmEwMC1iODBmLTExZWItMDM3ZC0yM2RhOWQwNWJkOGawcnVubmluZ19kaXNhYmxlZMKkY29kZdmwYmVnaW4KCWltcG9ydCBQa2cKCVBrZy5hY3RpdmF0ZShta3RlbXBkaXIoKSkKCVBrZy5hZGQoCgkJWwoJCQlQa2cuUGFja2FnZVNwZWMoOyBuYW1lPSJQb3dlck1vZGVsc1Byb3RlY3Rpb24iLCByZXY9InJlZi9wbWQtdjExIiksCgkJCVBrZy5QYWNrYWdlU3BlYyg7IG5hbWU9Iklwb3B0IiksCgkJXQoJKQplbmSrY29kZV9mb2xkZWTC2SQzMGJkZjVhNy1jMmZiLTRlN2MtYWU3Zi0yZDZkMjE4YjQ4YzSEp2NlbGxfaWTZJDMwYmRmNWE3LWMyZmItNGU3Yy1hZTdmLTJkNmQyMThiNDhjNLBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2gEMbWQiIiIKIyBQb3dlck1vZGVsc1Byb3RlY3Rpb24uamw6IERpc3RyaWJ1dGlvbiBGYXVsdCBTdHVkaWVzCgpJbiB0aGlzIGV4YW1wbGUgd2UgaW50cm9kdWNlIGhvdyB0byBwZXJmb3JtIGZhdWx0IHN0dWRpZXMgb24gYSBkaXN0cmlidXRpb24gZGF0YSBzZXQgKGkuZS4sIHVzaW5nIGEgZHNzIGlucHV0IGZpbGUpLgoKRmlyc3Qgd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIHZlcnNpb25zIG9mIFBvd2VyTW9kZWxzUHJvdGVjdGlvbiBhbmQgSXBvcHQuCiIiIqtjb2RlX2ZvbGRlZMPZJDAyNTMyMjg1LWYyMDgtNDg5NS1iYjU5LWJlY2EwMzc2MmNhM4SnY2VsbF9pZNkkMDI1MzIyODUtZjIwOC00ODk1LWJiNTktYmVjYTAzNzYyY2EzsHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZoG1kIiIiCiMjIFNvbHZpbmcgYSBmYXVsdCBzdHVkeQoKVG8gc29sdmUgYSBmYXVsdCBzdHVkeSBvbiBhIGRhdGEgc3RydWN0dXJlIHRoYXQgYWxyZWFkeSBpbmNsdWRlcyBvbmUgb3IgbW9yZSBmYXVsdHMsIHVzZSB0aGUgYHNvbHZlX21jX2ZhdWx0X3N0dWR5YCBmdW5jdGlvbgoiIiKrY29kZV9mb2xkZWTD2SRlMTY1MGRjYS01OTA2LTRiOWEtYmI0OS1lYTljOTY3M2YwZjGEp2NlbGxfaWTZJGUxNjUwZGNhLTU5MDYtNGI5YS1iYjQ5LWVhOWM5NjczZjBmMbBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2VhpcG9wdF9zb2x2ZXIgPSBvcHRpbWl6ZXJfd2l0aF9hdHRyaWJ1dGVzKElwb3B0Lk9wdGltaXplciwgInByaW50X2xldmVsIj0+MCwgInRvbCI9PjFlLTYpq2NvZGVfZm9sZGVkwtkkMTE1OTNhYTItNDFmYS00NDcyLWE4MjctMjY1NDUwY2RlMDFlhKdjZWxsX2lk2SQxMTU5M2FhMi00MWZhLTQ0NzItYTgyNy0yNjU0NTBjZGUwMWWwcnVubmluZ19kaXNhYmxlZMKkY29kZdmHY2FzZTNfYmFsYW5jZWRfcHYgPSBwYXJzZV9maWxlKGpvaW5wYXRoKGRpcm5hbWUocGF0aG9mKFBvd2VyTW9kZWxzUHJvdGVjdGlvbikpLCAiLi4iLCAidGVzdCIsICJkYXRhIiwgImRpc3QiLCAiY2FzZTNfYmFsYW5jZWRfcHYuZHNzIikpq2NvZGVfZm9sZGVkwtkkMGYyMzYwOWMtYzQ1Yy00MzE5LThjOTktMGM3OWRiM2NjN2M2hKdjZWxsX2lk2SQwZjIzNjA5Yy1jNDVjLTQzMTktOGM5OS0wYzc5ZGIzY2M3YzawcnVubmluZ19kaXNhYmxlZMKkY29kZdlLcmVzdWx0c19mYXVsdF9zdHVkeSA9IHNvbHZlX21jX2ZhdWx0X3N0dWR5KGRhdGEsIGZhdWx0X3N0dWR5LCBpcG9wdF9zb2x2ZXIpq2NvZGVfZm9sZGVkwtkkNTI3YTdiNDMtMDZhMS00ODhlLThhZGItNzQxMmIyN2Q2MjUyhKdjZWxsX2lk2SQ1MjdhN2I0My0wNmExLTQ4OGUtOGFkYi03NDEyYjI3ZDYyNTKwcnVubmluZ19kaXNhYmxlZMKkY29kZdlrYmVnaW4KCWRhdGEgPSBkZWVwY29weShjYXNlM19iYWxhbmNlZF9wdikKCWFkZF9mYXVsdCEoZGF0YSwgInRlc3RmYXVsdCIsICJsZyIsICJsb2FkYnVzIiwgWzEsNF0sIDAuMDAxKQplbmSrY29kZV9mb2xkZWTC2SQ5MmNhNjliOC04MzYwLTQ3NzQtOTA2Yi00YWNmMWQwNDE3MzSEp2NlbGxfaWTZJDkyY2E2OWI4LTgzNjAtNDc3NC05MDZiLTRhY2YxZDA0MTczNLBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2SVyZXN1bHRbInNvbHV0aW9uIl1bImxpbmUiXVsicHZfbGluZSJdq2NvZGVfZm9sZGVkwtkkZTdiMmMwMjgtMDRjZS00NjY1LTk4NjUtMDE4MmNhMGZhNzc1hKdjZWxsX2lk2SRlN2IyYzAyOC0wNGNlLTQ2NjUtOTg2NS0wMTgyY2EwZmE3NzWwcnVubmluZ19kaXNhYmxlZMKkY29kZdkxcmVzdWx0ID0gc29sdmVfbWNfZmF1bHRfc3R1ZHkoZGF0YSwgaXBvcHRfc29sdmVyKatjb2RlX2ZvbGRlZMLZJDg1ZjAyY2NiLTQxM2EtNDc3My1iYjg5LTFiODA4NDdhMmU3NoSnY2VsbF9pZNkkODVmMDJjY2ItNDEzYS00NzczLWJiODktMWI4MDg0N2EyZTc2sHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZKHJlc3VsdFsic29sdXRpb24iXVsiZmF1bHQiXVsidGVzdGZhdWx0Il2rY29kZV9mb2xkZWTCq25vdGVib29rX2lk2SQ5YzEwNGNmYS03OWNlLTExZWYtMDAzMy04NWRlMTc4OGI1NmSraW5fdGVtcF9kaXLC"; window.pluto_preamble_html = undefined; diff --git a/dev/tutorials/transmission_fault_studies.html b/dev/tutorials/transmission_fault_studies.html index 90f926b..4f2fcec 100644 --- a/dev/tutorials/transmission_fault_studies.html +++ b/dev/tutorials/transmission_fault_studies.html @@ -214,10 +214,10 @@ Documenter.jl on - - Tuesday 24 May 2022 + + Monday 23 September 2024 - . Using Julia version 1.7.2. + . Using Julia version 1.10.5.

      diff --git a/dev/tutorials/transmission_fault_studies.jl.html b/dev/tutorials/transmission_fault_studies.jl.html index 6b481df..cfd201c 100644 --- a/dev/tutorials/transmission_fault_studies.jl.html +++ b/dev/tutorials/transmission_fault_studies.jl.html @@ -48,7 +48,7 @@ window.pluto_disable_ui = true; window.pluto_slider_server_url = undefined; window.pluto_binder_url = "https://mybinder.org/v2/gh/fonsp/pluto-on-binder/v0.17.7"; -window.pluto_statefile = "data:;base64,j6Vib25kc4CsY2VsbF9yZXN1bHRz3gAS2SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWWJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZMFVuZGVmVmFyRXJyb3I6IFBvd2VyTW9kZWxzUHJvdGVjdGlvbiBub3QgZGVmaW5lZKpzdGFja3RyYWNlkYWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jZTVkMzMyZTAtMzAzNy00NGU3LWI3ZGItYjU3MmY1YzEzZmFlpGxpbmUBpHBhdGjZTmV4YW1wbGVzL3RyYW5zbWlzc2lvbl9mYXVsdF9zdHVkaWVzLmpsIz09I2U1ZDMzMmUwLTMwMzctNDRlNy1iN2RiLWI1NzJmNWMxM2ZhZbBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HYoztsDnyzt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWWrY2FzZTVfZmF1bHSnY2VsbF9pZNkkZTVkMzMyZTAtMzAzNy00NGU3LWI3ZGItYjU3MmY1YzEzZmFluWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMPZJDY3MmNmNjhhLWU5YzAtNDdiMC1hNDYyLWE2NDQ4OTJiNThmN4mmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZ3DxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+TG9hZGluZyBhIHRyYW5zbWlzc2lvbiBkYXRhIHNldDwvaDI+CjxwPlRvIGxvYWQgYSB0cmFuc21pc3Npb24gZGF0YXNldCwgd2UgdXNlIHRoZSA8Y29kZT5wYXJzZV9maWxlPC9jb2RlPiBmdW5jdGlvbi4gSW4gdGhpcyBjYXNlIHdlIGFyZSB1c2luZyBhIDUtYnVzIGNhc2UgaW5jbHVkZWQgaW4gb3VyIHVuaXQtdGVzdHMuPC9wPgo8L2Rpdj6wcGVyc2lzdF9qc19zdGF0ZcKkbWltZal0ZXh0L2h0bWyybGFzdF9ydW5fdGltZXN0YW1wy0HYoztsDNbct2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJDY3MmNmNjhhLWU5YzAtNDdiMC1hNDYyLWE2NDQ4OTJiNThmN7lkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAFUh61cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkwtkkNzRlYzY5NmMtMGYzMy00MjU4LTg3NWUtYjJmNTkwOGMwYjcyiaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYKjbXNn2SBVbmRlZlZhckVycm9yOiBJcG9wdCBub3QgZGVmaW5lZKpzdGFja3RyYWNlkYWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jNzRlYzY5NmMtMGYzMy00MjU4LTg3NWUtYjJmNTkwOGMwYjcypGxpbmUBpHBhdGjZTmV4YW1wbGVzL3RyYW5zbWlzc2lvbl9mYXVsdF9zdHVkaWVzLmpsIz09Izc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HYoztsCu8Tt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWWsaXBvcHRfc29sdmVyp2NlbGxfaWTZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SRmODdkYWY1Mi1lMmRjLTQzNTAtOTI0MC03YWRhZjM2OTkwY2WJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZLFVuZGVmVmFyRXJyb3I6IHNvbHZlX2ZhdWx0X3N0dWR5IG5vdCBkZWZpbmVkqnN0YWNrdHJhY2WRhaRjYWxsr3RvcC1sZXZlbCBzY29wZadpbmxpbmVkwqRmaWxl2UV0cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSNmODdkYWY1Mi1lMmRjLTQzNTAtOTI0MC03YWRhZjM2OTkwY2WkbGluZQGkcGF0aNlOZXhhbXBsZXMvdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jZjg3ZGFmNTItZTJkYy00MzUwLTkyNDAtN2FkYWYzNjk5MGNlsHBlcnNpc3RfanNfc3RhdGXCpG1pbWXZJ2FwcGxpY2F0aW9uL3ZuZC5wbHV0by5zdGFja3RyYWNlK29iamVjdLJsYXN0X3J1bl90aW1lc3RhbXDLQdijO2wYPqe3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZa1yZXN1bHRzX2ZhdWx0p2NlbGxfaWTZJGY4N2RhZjUyLWUyZGMtNDM1MC05MjQwLTdhZGFmMzY5OTBjZblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SQ3OWE2MjVjZS1iODBmLTExZWItMWM1Mi0wZGJjMzViOTMxNzOJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZKkRpZCBub3QgZmluZCByZXYgcmVmL3BtZC12MTEgaW4gcmVwb3NpdG9yeapzdGFja3RyYWNlmYWkY2FsbLJwa2dlcnJvcig6OlN0cmluZymnaW5saW5lZMKkZmlsZahUeXBlcy5qbKRsaW5lRKRwYXRo2VYvYnVpbGR3b3JrZXIvd29ya2VyL3BhY2thZ2VfbGludXg2NC9idWlsZC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjcvUGtnL3NyYy9UeXBlcy5qbIWkY2FsbNleKDo6UGtnLlR5cGVzLnZhciIjNDIjNDMie1BrZy5UeXBlcy5Db250ZXh0LCBQa2cuVHlwZXMuUGFja2FnZVNwZWMsIFN0cmluZ30pKDo6TGliR2l0Mi5HaXRSZXBvKadpbmxpbmVkwqRmaWxlqFR5cGVzLmpspGxpbmXNArOkcGF0aNlWL2J1aWxkd29ya2VyL3dvcmtlci9wYWNrYWdlX2xpbnV4NjQvYnVpbGQvdXNyL3NoYXJlL2p1bGlhL3N0ZGxpYi92MS43L1BrZy9zcmMvVHlwZXMuamyFpGNhbGzZYndpdGgoOjpQa2cuVHlwZXMudmFyIiM0MiM0MyJ7UGtnLlR5cGVzLkNvbnRleHQsIFBrZy5UeXBlcy5QYWNrYWdlU3BlYywgU3RyaW5nfSwgOjpMaWJHaXQyLkdpdFJlcG8pp2lubGluZWTCpGZpbGWodHlwZXMuamykbGluZc0EfqRwYXRo2VovYnVpbGR3b3JrZXIvd29ya2VyL3BhY2thZ2VfbGludXg2NC9idWlsZC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjcvTGliR2l0Mi9zcmMvdHlwZXMuamyFpGNhbGzZPmhhbmRsZV9yZXBvX2FkZCEoOjpQa2cuVHlwZXMuQ29udGV4dCwgOjpQa2cuVHlwZXMuUGFja2FnZVNwZWMpp2lubGluZWTCpGZpbGWoVHlwZXMuamykbGluZc0CpKRwYXRo2VYvYnVpbGR3b3JrZXIvd29ya2VyL3BhY2thZ2VfbGludXg2NC9idWlsZC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjcvUGtnL3NyYy9UeXBlcy5qbIWkY2FsbNlHaGFuZGxlX3JlcG9zX2FkZCEoOjpQa2cuVHlwZXMuQ29udGV4dCwgOjpWZWN0b3J7UGtnLlR5cGVzLlBhY2thZ2VTcGVjfSmnaW5saW5lZMKkZmlsZahUeXBlcy5qbKRsaW5lzQLnpHBhdGjZVi9idWlsZHdvcmtlci93b3JrZXIvcGFja2FnZV9saW51eDY0L2J1aWxkL3Vzci9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuNy9Qa2cvc3JjL1R5cGVzLmpshaRjYWxs2gESdmFyIiNhZGQjMTI5Iig6OlBrZy5UeXBlcy5QcmVzZXJ2ZUxldmVsLCA6OkJhc2UuQmluYXJ5UGxhdGZvcm1zLlBsYXRmb3JtLCA6OkJhc2UuUGFpcnN7U3ltYm9sLCBJT0NvbnRleHR7QmFzZS5QaXBlRW5kcG9pbnR9LCBUdXBsZXtTeW1ib2x9LCBOYW1lZFR1cGxleyg6aW8sKSwgVHVwbGV7SU9Db250ZXh0e0Jhc2UuUGlwZUVuZHBvaW50fX19fSwgOjp0eXBlb2YoUGtnLkFQSS5hZGQpLCA6OlBrZy5UeXBlcy5Db250ZXh0LCA6OlZlY3RvcntQa2cuVHlwZXMuUGFja2FnZVNwZWN9KadpbmxpbmVkwqRmaWxlpkFQSS5qbKRsaW5lzPikcGF0aNlUL2J1aWxkd29ya2VyL3dvcmtlci9wYWNrYWdlX2xpbnV4NjQvYnVpbGQvdXNyL3NoYXJlL2p1bGlhL3N0ZGxpYi92MS43L1BrZy9zcmMvQVBJLmpshaRjYWxs2aV2YXIiI2FkZCMyOSIoOjpJT0NvbnRleHR7QmFzZS5QaXBlRW5kcG9pbnR9LCA6OkJhc2UuUGFpcnN7U3ltYm9sLCBVbmlvbnt9LCBUdXBsZXt9LCBOYW1lZFR1cGxleygpLCBUdXBsZXt9fX0sIDo6dHlwZW9mKFBrZy5BUEkuYWRkKSwgOjpWZWN0b3J7UGtnLlR5cGVzLlBhY2thZ2VTcGVjfSmnaW5saW5lZMKkZmlsZaZBUEkuamykbGluZcyVpHBhdGjZVC9idWlsZHdvcmtlci93b3JrZXIvcGFja2FnZV9saW51eDY0L2J1aWxkL3Vzci9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuNy9Qa2cvc3JjL0FQSS5qbIWkY2FsbNkkYWRkKDo6VmVjdG9ye1BrZy5UeXBlcy5QYWNrYWdlU3BlY30pp2lubGluZWTCpGZpbGWmQVBJLmpspGxpbmXMkKRwYXRo2VQvYnVpbGR3b3JrZXIvd29ya2VyL3BhY2thZ2VfbGludXg2NC9idWlsZC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjcvUGtnL3NyYy9BUEkuamyFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRXRyYW5zbWlzc2lvbl9mYXVsdF9zdHVkaWVzLmpsIz09Izc5YTYyNWNlLWI4MGYtMTFlYi0xYzUyLTBkYmMzNWI5MzE3M6RsaW5lBKRwYXRo2U5leGFtcGxlcy90cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSM3OWE2MjVjZS1iODBmLTExZWItMWM1Mi0wZGJjMzViOTMxNzOwcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7a5la2bdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQ3OWE2MjVjZS1iODBmLTExZWItMWM1Mi0wZGJjMzViOTMxNzO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZcC1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkw9kkNzIzNzllOGQtMGIwNC00YjE1LWE5MDEtOGUxMWQ0ZjJkZjIyiaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedk7PGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMj5QcmVwYXJpbmcgdGhlIG5ldHdvcms8L2gyPgo8L2Rpdj6wcGVyc2lzdF9qc19zdGF0ZcKkbWltZal0ZXh0L2h0bWyybGFzdF9ydW5fdGltZXN0YW1wy0HYoztsDrNft2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJDcyMzc5ZThkLTBiMDQtNGIxNS1hOTAxLThlMTFkNGYyZGYyMrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAC4Lm1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkwtkkM2YxNDBjYzEtMDE5Mi00NDZiLTg4NDEtNGMzZDU4ZDAzOGYxiaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYKjbXNn2atBcmd1bWVudEVycm9yOiBQYWNrYWdlIFBvd2VyTW9kZWxzUHJvdGVjdGlvbiBub3QgZm91bmQgaW4gY3VycmVudCBwYXRoOgotIFJ1biBgaW1wb3J0IFBrZzsgUGtnLmFkZCgiUG93ZXJNb2RlbHNQcm90ZWN0aW9uIilgIHRvIGluc3RhbGwgdGhlIFBvd2VyTW9kZWxzUHJvdGVjdGlvbiBwYWNrYWdlLgqqc3RhY2t0cmFjZZKFpGNhbGy7cmVxdWlyZSg6Ok1vZHVsZSwgOjpTeW1ib2wpp2lubGluZWTCpGZpbGWqbG9hZGluZy5qbKRsaW5lzQPHpHBhdGisLi9sb2FkaW5nLmpshaRjYWxsr3RvcC1sZXZlbCBzY29wZadpbmxpbmVkwqRmaWxl2UV0cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSMzZjE0MGNjMS0wMTkyLTQ0NmItODg0MS00YzNkNThkMDM4ZjGkbGluZQKkcGF0aNlOZXhhbXBsZXMvdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jM2YxNDBjYzEtMDE5Mi00NDZiLTg4NDEtNGMzZDU4ZDAzOGYxsHBlcnNpc3RfanNfc3RhdGXCpG1pbWXZJ2FwcGxpY2F0aW9uL3ZuZC5wbHV0by5zdGFja3RyYWNlK29iamVjdLJsYXN0X3J1bl90aW1lc3RhbXDLQdijO2udD2K3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkM2YxNDBjYzEtMDE5Mi00NDZiLTg4NDEtNGMzZDU4ZDAzOGYxuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMPZJDA3ZjI4ZmFhLTQxNWUtNDg1Ny04YWRlLTljYTA3MGZiYTEwZImmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZzjxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+UnVubmluZyBhIGZhdWx0IHN0dWR5PC9oMj4KPHA+VG8gcnVuIGEgZmF1bHQgc3R1ZHkgd2l0aCBvbmUgb3IgbW9yZSBmYXVsdHMgdW5kZXIgdGhlIDxjb2RlPiZxdW90O2ZhdWx0JnF1b3Q7PC9jb2RlPiBEaWN0LCB1c2UgdGhlIDxjb2RlPnNvbHZlX2ZhdWx0X3N0dWR5PC9jb2RlPiBmdW5jdGlvbjwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7bBa1/rdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQwN2YyOGZhYS00MTVlLTQ4NTctOGFkZS05Y2EwNzBmYmExMGS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABG3+tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJGZhOTY4YTcxLWRkYzktNGNlMS05ZWU3LThhMzkxNjU4MTFkNommcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9ksVW5kZWZWYXJFcnJvcjogYnVpbGRfZmF1bHRfc3R1ZHkgbm90IGRlZmluZWSqc3RhY2t0cmFjZZGFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRXRyYW5zbWlzc2lvbl9mYXVsdF9zdHVkaWVzLmpsIz09I2ZhOTY4YTcxLWRkYzktNGNlMS05ZWU3LThhMzkxNjU4MTFkNqRsaW5lAaRwYXRo2U5leGFtcGxlcy90cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSNmYTk2OGE3MS1kZGM5LTRjZTEtOWVlNy04YTM5MTY1ODExZDawcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7bBoL8rdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlq2ZhdWx0X3N0dWR5p2NlbGxfaWTZJGZhOTY4YTcxLWRkYzktNGNlMS05ZWU3LThhMzkxNjU4MTFkNrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SRkYTMyYWQ4NS0wODExLTQwM2UtODZlNC1mNjcyYWMyMzM2Y2aJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52dI8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPlJ1bm5pbmcgd2l0aG91dCBhZGRpbmcgZmF1bHRzPC9oMj4KPHA+VG8gcnVuIGEgZmF1bHQgc3R1ZHkgb3ZlciBhbGwgYnVzZXMsIHdlIHNob3VsZCBmaXJzdCBidWlsZCB0aGUgbGlzdCBvZiBmYXVsdCBzdHVkaWVzIHVzaW5nIHRoZSA8Y29kZT5idWlsZF9mYXVsdF9zdHVkeTwvY29kZT4gZnVuY3Rpb24uPC9wPgo8L2Rpdj6wcGVyc2lzdF9qc19zdGF0ZcKkbWltZal0ZXh0L2h0bWyybGFzdF9ydW5fdGltZXN0YW1wy0HYoztsGGCzt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJGRhMzJhZDg1LTA4MTEtNDAzZS04NmU0LWY2NzJhYzIzMzZjZrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAEAJ61cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkwtkkMjRlOWIwOTktYmQ2Mi00M2NlLThkMDgtN2Q2ZGYzYjY3NGUwiaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedmyPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMj5BZGRpbmcgYSBmYXVsdDwvaDI+CjxwPlRvIGFkZCBhIGZhdWx0LCB1c2UgdGhlIGhlbHBlciBmdW5jdGlvbiA8Y29kZT5hZGRfZmF1bHQmIzMzOyYjNDA7ZGF0YSwgZmF1bHRfaWQsIGJ1c19pZCwgZmF1bHRfcmVzaXN0YW5jZSYjNDE7PC9jb2RlPiA8L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdijO2wTKaq3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkMjRlOWIwOTktYmQ2Mi00M2NlLThkMDgtN2Q2ZGYzYjY3NGUwuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAQI0rVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SRjZmUzN2NmMi1jOWQyLTQ0NmEtYmIwOC1mODIzZmMyODRhZDKJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52ZE8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPlVzaW5nIFBvd2VyTW9kZWxzUHJvdGVjdGlvbjwvaDI+CjxwPk9uY2UgdGhlIHByb3BlciBlbnZpcm9ubWVudCBpcyBwb3B1bGF0ZWQsIGltcG9ydCB0aGUgbmVjZXNzYXJ5IHBhY2thZ2VzLDwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7a+Zhs7doYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SRjZmUzN2NmMi1jOWQyLTQ0NmEtYmIwOC1mODIzZmMyODRhZDK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AbZR+tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJDBkZmI2ZWU3LTliMTAtNDc1NC1iODcwLTE0YmYzZmMyNjU0ZImmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9klVW5kZWZWYXJFcnJvcjogYWRkX2ZhdWx0ISBub3QgZGVmaW5lZKpzdGFja3RyYWNlkYWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jMGRmYjZlZTctOWIxMC00NzU0LWI4NzAtMTRiZjNmYzI2NTRkpGxpbmUBpHBhdGjZTmV4YW1wbGVzL3RyYW5zbWlzc2lvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzBkZmI2ZWU3LTliMTAtNDc1NC1iODcwLTE0YmYzZmMyNjU0ZLBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HYoztsFn0kt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJDBkZmI2ZWU3LTliMTAtNDc1NC1iODcwLTE0YmYzZmMyNjU0ZLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SQzMDBjYmU5ZS03MzhkLTRkZGEtOWVmYy1hNWMwZjFmZWYzMjCJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZJlVuZGVmVmFyRXJyb3I6IGNhc2U1X2ZhdWx0IG5vdCBkZWZpbmVkqnN0YWNrdHJhY2WRhaRjYWxsr3RvcC1sZXZlbCBzY29wZadpbmxpbmVkwqRmaWxl2UV0cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSMzMDBjYmU5ZS03MzhkLTRkZGEtOWVmYy1hNWMwZjFmZWYzMjCkbGluZQKkcGF0aNlOZXhhbXBsZXMvdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jMzAwY2JlOWUtNzM4ZC00ZGRhLTllZmMtYTVjMGYxZmVmMzIwsHBlcnNpc3RfanNfc3RhdGXCpG1pbWXZJ2FwcGxpY2F0aW9uL3ZuZC5wbHV0by5zdGFja3RyYWNlK29iamVjdLJsYXN0X3J1bl90aW1lc3RhbXDLQdijO2wS7aa3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkMzAwY2JlOWUtNzM4ZC00ZGRhLTllZmMtYTVjMGYxZmVmMzIwuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMPZJGJmNDc1MzkwLWYzY2QtNGFmZC1iNjUyLWQ5ZmUwZWZlZjk3N4mmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaAT88ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgxPlBvd2VyTW9kZWxzUHJvdGVjdGlvbi5qbDogVHJhbnNtaXNzaW9uIEZhdWx0IFN0dWRpZXM8L2gxPgo8cD5JbiB0aGlzIGV4YW1wbGUgd2UgaW50cm9kdWNlIGhvdyB0byBwZXJmb3JtIGZhdWx0IHN0dWRpZXMgb24gYSB0cmFuc21pc3Npb24gZGF0YSBzZXQgJiM0MDtpLmUuLCB1c2luZyBhIG1hdHBvd2VyIGlucHV0IGZpbGUmIzQxOy48L3A+CjxwPkZpcnN0IHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB2ZXJzaW9ucyBvZiBQb3dlck1vZGVsc1Byb3RlY3Rpb24gYW5kIElwb3B0LjwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7a+SIWbdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SRiZjQ3NTM5MC1mM2NkLTRhZmQtYjY1Mi1kOWZlMGVmZWY5Nze5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AdoeFtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJDQwZTUyODI4LTg1MWUtNDZhYS05NDRmLTRlODFmMTE2MTAxYommcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZbDxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5hbmQgaW5pdGlhbGl6ZSBhIHNvbHZlciwgaW4gdGhpcyBjYXNlIGFuIElwb3B0Lk9wdGltaXplciBiYXNlZCBzb2x2ZXIuLi48L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdijO2vmhKm3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkNDBlNTI4MjgtODUxZS00NmFhLTk0NGYtNGU4MWYxMTYxMDFiuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAND8LVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTiJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52Ys8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+V2UgY2FuIHRoZW4gcnVuIGFsbCBvZiB0aGVzZSBmYXVsdCBzdHVkaWVzIGluIHNlcmllcyB1c2luZyB0aGUgPGNvZGU+c29sdmVfZmF1bHRfc3R1ZHk8L2NvZGU+IGZ1bmN0aW9uLjwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7bBpBs7doYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTi5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AA3cctXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJGQ5MWQ2ZmRiLTFhYTktNDM0ZS04YmUxLWZmNjIyMTI4MTEwYYmmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9kmVW5kZWZWYXJFcnJvcjogY2FzZTVfZmF1bHQgbm90IGRlZmluZWSqc3RhY2t0cmFjZZGFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRXRyYW5zbWlzc2lvbl9mYXVsdF9zdHVkaWVzLmpsIz09I2Q5MWQ2ZmRiLTFhYTktNDM0ZS04YmUxLWZmNjIyMTI4MTEwYaRsaW5lAqRwYXRo2U5leGFtcGxlcy90cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSNkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGGwcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2KM7bBvdg7doYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGG5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZcC1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkw7FjZWxsX2RlcGVuZGVuY2llc94AEtkkZTVkMzMyZTAtMzAzNy00NGU3LWI3ZGItYjU3MmY1YzEzZmFlhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZTVkMzMyZTAtMzAzNy00NGU3LWI3ZGItYjU3MmY1YzEzZmFltGRvd25zdHJlYW1fY2VsbHNfbWFwgatjYXNlNV9mYXVsdJPZJDMwMGNiZTllLTczOGQtNGRkYS05ZWZjLWE1YzBmMWZlZjMyMNkkZmE5NjhhNzEtZGRjOS00Y2UxLTllZTctOGEzOTE2NTgxMWQ22SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGGydXBzdHJlYW1fY2VsbHNfbWFwhbVQb3dlck1vZGVsc1Byb3RlY3Rpb26R2SQzZjE0MGNjMS0wMTkyLTQ0NmItODg0MS00YzNkNThkMDM4ZjGnZGlybmFtZZCoam9pbnBhdGiQpnBhdGhvZpCqcGFyc2VfZmlsZZDZJDY3MmNmNjhhLWU5YzAtNDdiMC1hNDYyLWE2NDQ4OTJiNThmN4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDY3MmNmNjhhLWU5YzAtNDdiMC1hNDYyLWE2NDQ4OTJiNThmN7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MrRkb3duc3RyZWFtX2NlbGxzX21hcIGsaXBvcHRfc29sdmVyktkkZjg3ZGFmNTItZTJkYy00MzUwLTkyNDAtN2FkYWYzNjk5MGNl2SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGGydXBzdHJlYW1fY2VsbHNfbWFwg6VJcG9wdJHZJDNmMTQwY2MxLTAxOTItNDQ2Yi04ODQxLTRjM2Q1OGQwMzhmMaI9PpC5b3B0aW1pemVyX3dpdGhfYXR0cmlidXRlc5DZJGY4N2RhZjUyLWUyZGMtNDM1MC05MjQwLTdhZGFmMzY5OTBjZYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGY4N2RhZjUyLWUyZGMtNDM1MC05MjQwLTdhZGFmMzY5OTBjZbRkb3duc3RyZWFtX2NlbGxzX21hcIGtcmVzdWx0c19mYXVsdJCydXBzdHJlYW1fY2VsbHNfbWFwg6xpcG9wdF9zb2x2ZXKR2SQ3NGVjNjk2Yy0wZjMzLTQyNTgtODc1ZS1iMmY1OTA4YzBiNzKxc29sdmVfZmF1bHRfc3R1ZHmQqmRhdGFfZmF1bHSR2SQzMDBjYmU5ZS03MzhkLTRkZGEtOWVmYy1hNWMwZjFmZWYzMjDZJDc5YTYyNWNlLWI4MGYtMTFlYi0xYzUyLTBkYmMzNWI5MzE3M4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMBp2NlbGxfaWTZJDc5YTYyNWNlLWI4MGYtMTFlYi0xYzUyLTBkYmMzNWI5MzE3M7Rkb3duc3RyZWFtX2NlbGxzX21hcIGjUGtnkdkkNzlhNjI1Y2UtYjgwZi0xMWViLTFjNTItMGRiYzM1YjkzMTczsnVwc3RyZWFtX2NlbGxzX21hcIWnUGtnLmFkZJCjUGtnkdkkNzlhNjI1Y2UtYjgwZi0xMWViLTFjNTItMGRiYzM1YjkzMTczrFBrZy5hY3RpdmF0ZZCvUGtnLlBhY2thZ2VTcGVjkKlta3RlbXBkaXKQ2SQ3MjM3OWU4ZC0wYjA0LTRiMTUtYTkwMS04ZTExZDRmMmRmMjKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ3MjM3OWU4ZC0wYjA0LTRiMTUtYTkwMS04ZTExZDRmMmRmMjK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQzZjE0MGNjMS0wMTkyLTQ0NmItODg0MS00YzNkNThkMDM4ZjGEtHByZWNlZGVuY2VfaGV1cmlzdGljB6djZWxsX2lk2SQzZjE0MGNjMS0wMTkyLTQ0NmItODg0MS00YzNkNThkMDM4ZjG0ZG93bnN0cmVhbV9jZWxsc19tYXCCtVBvd2VyTW9kZWxzUHJvdGVjdGlvbpHZJGU1ZDMzMmUwLTMwMzctNDRlNy1iN2RiLWI1NzJmNWMxM2ZhZaVJcG9wdJHZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MrJ1cHN0cmVhbV9jZWxsc19tYXCA2SQwN2YyOGZhYS00MTVlLTQ4NTctOGFkZS05Y2EwNzBmYmExMGSEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQwN2YyOGZhYS00MTVlLTQ4NTctOGFkZS05Y2EwNzBmYmExMGS0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRmYTk2OGE3MS1kZGM5LTRjZTEtOWVlNy04YTM5MTY1ODExZDaEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRmYTk2OGE3MS1kZGM5LTRjZTEtOWVlNy04YTM5MTY1ODExZDa0ZG93bnN0cmVhbV9jZWxsc19tYXCBq2ZhdWx0X3N0dWR5kdkkZDkxZDZmZGItMWFhOS00MzRlLThiZTEtZmY2MjIxMjgxMTBhsnVwc3RyZWFtX2NlbGxzX21hcIKrY2FzZTVfZmF1bHSR2SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWWxYnVpbGRfZmF1bHRfc3R1ZHmQ2SRkYTMyYWQ4NS0wODExLTQwM2UtODZlNC1mNjcyYWMyMzM2Y2aEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRkYTMyYWQ4NS0wODExLTQwM2UtODZlNC1mNjcyYWMyMzM2Y2a0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQyNGU5YjA5OS1iZDYyLTQzY2UtOGQwOC03ZDZkZjNiNjc0ZTCEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQyNGU5YjA5OS1iZDYyLTQzY2UtOGQwOC03ZDZkZjNiNjc0ZTC0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRjZmUzN2NmMi1jOWQyLTQ0NmEtYmIwOC1mODIzZmMyODRhZDKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRjZmUzN2NmMi1jOWQyLTQ0NmEtYmIwOC1mODIzZmMyODRhZDK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQwZGZiNmVlNy05YjEwLTQ3NTQtYjg3MC0xNGJmM2ZjMjY1NGSEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQwZGZiNmVlNy05YjEwLTQ3NTQtYjg3MC0xNGJmM2ZjMjY1NGS0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKqYWRkX2ZhdWx0IZCqZGF0YV9mYXVsdJHZJDMwMGNiZTllLTczOGQtNGRkYS05ZWZjLWE1YzBmMWZlZjMyMNkkMzAwY2JlOWUtNzM4ZC00ZGRhLTllZmMtYTVjMGYxZmVmMzIwhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkMzAwY2JlOWUtNzM4ZC00ZGRhLTllZmMtYTVjMGYxZmVmMzIwtGRvd25zdHJlYW1fY2VsbHNfbWFwgapkYXRhX2ZhdWx0ktkkMGRmYjZlZTctOWIxMC00NzU0LWI4NzAtMTRiZjNmYzI2NTRk2SRmODdkYWY1Mi1lMmRjLTQzNTAtOTI0MC03YWRhZjM2OTkwY2WydXBzdHJlYW1fY2VsbHNfbWFwg7pwcmVwYXJlX3RyYW5zbWlzc2lvbl9kYXRhIZCrY2FzZTVfZmF1bHSR2SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWWoZGVlcGNvcHmQ2SRiZjQ3NTM5MC1mM2NkLTRhZmQtYjY1Mi1kOWZlMGVmZWY5NzeEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRiZjQ3NTM5MC1mM2NkLTRhZmQtYjY1Mi1kOWZlMGVmZWY5Nze0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ0MGU1MjgyOC04NTFlLTQ2YWEtOTQ0Zi00ZTgxZjExNjEwMWKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ0MGU1MjgyOC04NTFlLTQ2YWEtOTQ0Zi00ZTgxZjExNjEwMWK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTiEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTi0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGG0ZG93bnN0cmVhbV9jZWxsc19tYXCCrmRhdGFfbm9fZmF1bHRzkLNyZXN1bHRzX2ZhdWx0X3N0dWR5kLJ1cHN0cmVhbV9jZWxsc19tYXCGrGlwb3B0X3NvbHZlcpHZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MrFzb2x2ZV9mYXVsdF9zdHVkeZC6cHJlcGFyZV90cmFuc21pc3Npb25fZGF0YSGQq2Nhc2U1X2ZhdWx0kdkkZTVkMzMyZTAtMzAzNy00NGU3LWI3ZGItYjU3MmY1YzEzZmFlqGRlZXBjb3B5kKtmYXVsdF9zdHVkeZHZJGZhOTY4YTcxLWRkYzktNGNlMS05ZWU3LThhMzkxNjU4MTFkNrRjZWxsX2V4ZWN1dGlvbl9vcmRlctwAEtkkNzlhNjI1Y2UtYjgwZi0xMWViLTFjNTItMGRiYzM1YjkzMTcz2SQzZjE0MGNjMS0wMTkyLTQ0NmItODg0MS00YzNkNThkMDM4ZjHZJGJmNDc1MzkwLWYzY2QtNGFmZC1iNjUyLWQ5ZmUwZWZlZjk3N9kkY2ZlMzdjZjItYzlkMi00NDZhLWJiMDgtZjgyM2ZjMjg0YWQy2SQ0MGU1MjgyOC04NTFlLTQ2YWEtOTQ0Zi00ZTgxZjExNjEwMWLZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MtkkNjcyY2Y2OGEtZTljMC00N2IwLWE0NjItYTY0NDg5MmI1OGY32SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWXZJDcyMzc5ZThkLTBiMDQtNGIxNS1hOTAxLThlMTFkNGYyZGYyMtkkMzAwY2JlOWUtNzM4ZC00ZGRhLTllZmMtYTVjMGYxZmVmMzIw2SQyNGU5YjA5OS1iZDYyLTQzY2UtOGQwOC03ZDZkZjNiNjc0ZTDZJDBkZmI2ZWU3LTliMTAtNDc1NC1iODcwLTE0YmYzZmMyNjU0ZNkkMDdmMjhmYWEtNDE1ZS00ODU3LThhZGUtOWNhMDcwZmJhMTBk2SRmODdkYWY1Mi1lMmRjLTQzNTAtOTI0MC03YWRhZjM2OTkwY2XZJGRhMzJhZDg1LTA4MTEtNDAzZS04NmU0LWY2NzJhYzIzMzZjZtkkZmE5NjhhNzEtZGRjOS00Y2UxLTllZTctOGEzOTE2NTgxMWQ22SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTjZJGQ5MWQ2ZmRiLTFhYTktNDM0ZS04YmUxLWZmNjIyMTI4MTEwYbRsYXN0X2hvdF9yZWxvYWRfdGltZcsAAAAAAAAAAKlzaG9ydHBhdGi9dHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamyucHJvY2Vzc19zdGF0dXOlcmVhZHmkcGF0aNkmZXhhbXBsZXMvdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamyubGFzdF9zYXZlX3RpbWXLQdijO2upsMCqY2VsbF9vcmRlctwAEtkkYmY0NzUzOTAtZjNjZC00YWZkLWI2NTItZDlmZTBlZmVmOTc32SQ3OWE2MjVjZS1iODBmLTExZWItMWM1Mi0wZGJjMzViOTMxNzPZJGNmZTM3Y2YyLWM5ZDItNDQ2YS1iYjA4LWY4MjNmYzI4NGFkMtkkM2YxNDBjYzEtMDE5Mi00NDZiLTg4NDEtNGMzZDU4ZDAzOGYx2SQ0MGU1MjgyOC04NTFlLTQ2YWEtOTQ0Zi00ZTgxZjExNjEwMWLZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MtkkNjcyY2Y2OGEtZTljMC00N2IwLWE0NjItYTY0NDg5MmI1OGY32SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWXZJDcyMzc5ZThkLTBiMDQtNGIxNS1hOTAxLThlMTFkNGYyZGYyMtkkMzAwY2JlOWUtNzM4ZC00ZGRhLTllZmMtYTVjMGYxZmVmMzIw2SQyNGU5YjA5OS1iZDYyLTQzY2UtOGQwOC03ZDZkZjNiNjc0ZTDZJDBkZmI2ZWU3LTliMTAtNDc1NC1iODcwLTE0YmYzZmMyNjU0ZNkkMDdmMjhmYWEtNDE1ZS00ODU3LThhZGUtOWNhMDcwZmJhMTBk2SRmODdkYWY1Mi1lMmRjLTQzNTAtOTI0MC03YWRhZjM2OTkwY2XZJGRhMzJhZDg1LTA4MTEtNDAzZS04NmU0LWY2NzJhYzIzMzZjZtkkZmE5NjhhNzEtZGRjOS00Y2UxLTllZTctOGEzOTE2NTgxMWQ22SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTjZJGQ5MWQ2ZmRiLTFhYTktNDM0ZS04YmUxLWZmNjIyMTI4MTEwYbFwdWJsaXNoZWRfb2JqZWN0c4ClbmJwa2eHsmluc3RhbGxlZF92ZXJzaW9uc4CwdGVybWluYWxfb3V0cHV0c4CnZW5hYmxlZMK3cmVzdGFydF9yZWNvbW1lbmRlZF9tc2fAtHJlc3RhcnRfcmVxdWlyZWRfbXNnwK1idXN5X3BhY2thZ2VzkKxpbnN0YW50aWF0ZWTCq2NlbGxfaW5wdXRz3gAS2SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWWEp2NlbGxfaWTZJGU1ZDMzMmUwLTMwMzctNDRlNy1iN2RiLWI1NzJmNWMxM2ZhZbBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2XpjYXNlNV9mYXVsdCA9IHBhcnNlX2ZpbGUoam9pbnBhdGgoZGlybmFtZShwYXRob2YoUG93ZXJNb2RlbHNQcm90ZWN0aW9uKSksICIuLiIsICJ0ZXN0IiwgImRhdGEiLCAidHJhbnMiLCAiY2FzZTVfZmF1bHQubSIpKatjb2RlX2ZvbGRlZMLZJDY3MmNmNjhhLWU5YzAtNDdiMC1hNDYyLWE2NDQ4OTJiNThmN4SnY2VsbF9pZNkkNjcyY2Y2OGEtZTljMC00N2IwLWE0NjItYTY0NDg5MmI1OGY3sHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZsm1kIiIiCiMjIExvYWRpbmcgYSB0cmFuc21pc3Npb24gZGF0YSBzZXQKClRvIGxvYWQgYSB0cmFuc21pc3Npb24gZGF0YXNldCwgd2UgdXNlIHRoZSBgcGFyc2VfZmlsZWAgZnVuY3Rpb24uIEluIHRoaXMgY2FzZSB3ZSBhcmUgdXNpbmcgYSA1LWJ1cyBjYXNlIGluY2x1ZGVkIGluIG91ciB1bml0LXRlc3RzLgoiIiKrY29kZV9mb2xkZWTD2SQ3NGVjNjk2Yy0wZjMzLTQyNTgtODc1ZS1iMmY1OTA4YzBiNzKEp2NlbGxfaWTZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MrBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2VhpcG9wdF9zb2x2ZXIgPSBvcHRpbWl6ZXJfd2l0aF9hdHRyaWJ1dGVzKElwb3B0Lk9wdGltaXplciwgInByaW50X2xldmVsIj0+MCwgInRvbCI9PjFlLTYpq2NvZGVfZm9sZGVkwtkkZjg3ZGFmNTItZTJkYy00MzUwLTkyNDAtN2FkYWYzNjk5MGNlhKdjZWxsX2lk2SRmODdkYWY1Mi1lMmRjLTQzNTAtOTI0MC03YWRhZjM2OTkwY2WwcnVubmluZ19kaXNhYmxlZMKkY29kZdk7cmVzdWx0c19mYXVsdCA9IHNvbHZlX2ZhdWx0X3N0dWR5KGRhdGFfZmF1bHQsIGlwb3B0X3NvbHZlcimrY29kZV9mb2xkZWTC2SQ3OWE2MjVjZS1iODBmLTExZWItMWM1Mi0wZGJjMzViOTMxNzOEp2NlbGxfaWTZJDc5YTYyNWNlLWI4MGYtMTFlYi0xYzUyLTBkYmMzNWI5MzE3M7BydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2bBiZWdpbgoJaW1wb3J0IFBrZwoJUGtnLmFjdGl2YXRlKG1rdGVtcGRpcigpKQoJUGtnLmFkZCgKCQlbCgkJCVBrZy5QYWNrYWdlU3BlYyg7IG5hbWU9IlBvd2VyTW9kZWxzUHJvdGVjdGlvbiIsIHJldj0icmVmL3BtZC12MTEiKSwKCQkJUGtnLlBhY2thZ2VTcGVjKDsgbmFtZT0iSXBvcHQiKSwKCQldCgkpCmVuZKtjb2RlX2ZvbGRlZMLZJDcyMzc5ZThkLTBiMDQtNGIxNS1hOTAxLThlMTFkNGYyZGYyMoSnY2VsbF9pZNkkNzIzNzllOGQtMGIwNC00YjE1LWE5MDEtOGUxMWQ0ZjJkZjIysHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZIm1kIiIiCiMjIFByZXBhcmluZyB0aGUgbmV0d29yawoiIiKrY29kZV9mb2xkZWTD2SQzZjE0MGNjMS0wMTkyLTQ0NmItODg0MS00YzNkNThkMDM4ZjGEp2NlbGxfaWTZJDNmMTQwY2MxLTAxOTItNDQ2Yi04ODQxLTRjM2Q1OGQwMzhmMbBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2TRiZWdpbgoJdXNpbmcgUG93ZXJNb2RlbHNQcm90ZWN0aW9uCglpbXBvcnQgSXBvcHQKZW5kq2NvZGVfZm9sZGVkwtkkMDdmMjhmYWEtNDE1ZS00ODU3LThhZGUtOWNhMDcwZmJhMTBkhKdjZWxsX2lk2SQwN2YyOGZhYS00MTVlLTQ4NTctOGFkZS05Y2EwNzBmYmExMGSwcnVubmluZ19kaXNhYmxlZMKkY29kZdmPbWQiIiIKIyMgUnVubmluZyBhIGZhdWx0IHN0dWR5CgpUbyBydW4gYSBmYXVsdCBzdHVkeSB3aXRoIG9uZSBvciBtb3JlIGZhdWx0cyB1bmRlciB0aGUgYCJmYXVsdCJgIERpY3QsIHVzZSB0aGUgYHNvbHZlX2ZhdWx0X3N0dWR5YCBmdW5jdGlvbgoiIiKrY29kZV9mb2xkZWTD2SRmYTk2OGE3MS1kZGM5LTRjZTEtOWVlNy04YTM5MTY1ODExZDaEp2NlbGxfaWTZJGZhOTY4YTcxLWRkYzktNGNlMS05ZWU3LThhMzkxNjU4MTFkNrBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2SxmYXVsdF9zdHVkeSA9IGJ1aWxkX2ZhdWx0X3N0dWR5KGNhc2U1X2ZhdWx0Katjb2RlX2ZvbGRlZMLZJGRhMzJhZDg1LTA4MTEtNDAzZS04NmU0LWY2NzJhYzIzMzZjZoSnY2VsbF9pZNkkZGEzMmFkODUtMDgxMS00MDNlLTg2ZTQtZjY3MmFjMjMzNmNmsHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZqG1kIiIiCiMjIFJ1bm5pbmcgd2l0aG91dCBhZGRpbmcgZmF1bHRzCgpUbyBydW4gYSBmYXVsdCBzdHVkeSBvdmVyIGFsbCBidXNlcywgd2Ugc2hvdWxkIGZpcnN0IGJ1aWxkIHRoZSBsaXN0IG9mIGZhdWx0IHN0dWRpZXMgdXNpbmcgdGhlIGBidWlsZF9mYXVsdF9zdHVkeWAgZnVuY3Rpb24uCiIiIqtjb2RlX2ZvbGRlZMPZJDI0ZTliMDk5LWJkNjItNDNjZS04ZDA4LTdkNmRmM2I2NzRlMISnY2VsbF9pZNkkMjRlOWIwOTktYmQ2Mi00M2NlLThkMDgtN2Q2ZGYzYjY3NGUwsHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZfG1kIiIiCiMjIEFkZGluZyBhIGZhdWx0CgpUbyBhZGQgYSBmYXVsdCwgdXNlIHRoZSBoZWxwZXIgZnVuY3Rpb24gYGFkZF9mYXVsdCEoZGF0YSwgZmF1bHRfaWQsIGJ1c19pZCwgZmF1bHRfcmVzaXN0YW5jZSlgIAoiIiKrY29kZV9mb2xkZWTD2SRjZmUzN2NmMi1jOWQyLTQ0NmEtYmIwOC1mODIzZmMyODRhZDKEp2NlbGxfaWTZJGNmZTM3Y2YyLWM5ZDItNDQ2YS1iYjA4LWY4MjNmYzI4NGFkMrBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2XJtZCIiIgojIyBVc2luZyBQb3dlck1vZGVsc1Byb3RlY3Rpb24KCk9uY2UgdGhlIHByb3BlciBlbnZpcm9ubWVudCBpcyBwb3B1bGF0ZWQsIGltcG9ydCB0aGUgbmVjZXNzYXJ5IHBhY2thZ2VzLAoiIiKrY29kZV9mb2xkZWTD2SQwZGZiNmVlNy05YjEwLTQ3NTQtYjg3MC0xNGJmM2ZjMjY1NGSEp2NlbGxfaWTZJDBkZmI2ZWU3LTliMTAtNDc1NC1iODcwLTE0YmYzZmMyNjU0ZLBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2SRhZGRfZmF1bHQhKGRhdGFfZmF1bHQsIDEsIDIsIDAuMDAwMSmrY29kZV9mb2xkZWTC2SQzMDBjYmU5ZS03MzhkLTRkZGEtOWVmYy1hNWMwZjFmZWYzMjCEp2NlbGxfaWTZJDMwMGNiZTllLTczOGQtNGRkYS05ZWZjLWE1YzBmMWZlZjMyMLBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2chiZWdpbgoJZGF0YV9mYXVsdCA9IGRlZXBjb3B5KGNhc2U1X2ZhdWx0KQoJCglwcmVwYXJlX3RyYW5zbWlzc2lvbl9kYXRhISgKCQlkYXRhX2ZhdWx0OyAKCQlmbGF0X3N0YXJ0PXRydWUsIAoJCW5lZ2xlY3RfbGluZV9jaGFyZ2luZz10cnVlLCAKCQluZWdsZWN0X3RyYW5zZm9ybWVyPXRydWUsIAoJCXplcm9fZ2VuX3NldHBvaW50cz10cnVlCgkpCmVuZKtjb2RlX2ZvbGRlZMLZJGJmNDc1MzkwLWYzY2QtNGFmZC1iNjUyLWQ5ZmUwZWZlZjk3N4SnY2VsbF9pZNkkYmY0NzUzOTAtZjNjZC00YWZkLWI2NTItZDlmZTBlZmVmOTc3sHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXaARFtZCIiIgojIFBvd2VyTW9kZWxzUHJvdGVjdGlvbi5qbDogVHJhbnNtaXNzaW9uIEZhdWx0IFN0dWRpZXMKCkluIHRoaXMgZXhhbXBsZSB3ZSBpbnRyb2R1Y2UgaG93IHRvIHBlcmZvcm0gZmF1bHQgc3R1ZGllcyBvbiBhIHRyYW5zbWlzc2lvbiBkYXRhIHNldCAoaS5lLiwgdXNpbmcgYSBtYXRwb3dlciBpbnB1dCBmaWxlKS4KCkZpcnN0IHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB2ZXJzaW9ucyBvZiBQb3dlck1vZGVsc1Byb3RlY3Rpb24gYW5kIElwb3B0LgoiIiKrY29kZV9mb2xkZWTD2SQ0MGU1MjgyOC04NTFlLTQ2YWEtOTQ0Zi00ZTgxZjExNjEwMWKEp2NlbGxfaWTZJDQwZTUyODI4LTg1MWUtNDZhYS05NDRmLTRlODFmMTE2MTAxYrBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2VJtZCIiIgphbmQgaW5pdGlhbGl6ZSBhIHNvbHZlciwgaW4gdGhpcyBjYXNlIGFuIElwb3B0Lk9wdGltaXplciBiYXNlZCBzb2x2ZXIuLi4KIiIiq2NvZGVfZm9sZGVkw9kkMDNjZWU0MjAtNDEzYy00OTlmLTgzZTQtMDgzMzk2NTZiOGE4hKdjZWxsX2lk2SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTiwcnVubmluZ19kaXNhYmxlZMKkY29kZdlmbWQiIiIKV2UgY2FuIHRoZW4gcnVuIGFsbCBvZiB0aGVzZSBmYXVsdCBzdHVkaWVzIGluIHNlcmllcyB1c2luZyB0aGUgYHNvbHZlX2ZhdWx0X3N0dWR5YCBmdW5jdGlvbi4KIiIiq2NvZGVfZm9sZGVkw9kkZDkxZDZmZGItMWFhOS00MzRlLThiZTEtZmY2MjIxMjgxMTBhhKdjZWxsX2lk2SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGGwcnVubmluZ19kaXNhYmxlZMKkY29kZdoBImJlZ2luCglkYXRhX25vX2ZhdWx0cyA9IGRlZXBjb3B5KGNhc2U1X2ZhdWx0KQoJCglwcmVwYXJlX3RyYW5zbWlzc2lvbl9kYXRhISgKCQlkYXRhX25vX2ZhdWx0czsKCQlmbGF0X3N0YXJ0PXRydWUsCgkJbmVnbGVjdF9saW5lX2NoYXJnaW5nPXRydWUsCgkJbmVnbGVjdF90cmFuc2Zvcm1lcj10cnVlLAoJCXplcm9fZ2VuX3NldHBvaW50cz10cnVlCgkpCgkKCXJlc3VsdHNfZmF1bHRfc3R1ZHkgPSBzb2x2ZV9mYXVsdF9zdHVkeShkYXRhX25vX2ZhdWx0cywgZmF1bHRfc3R1ZHksIGlwb3B0X3NvbHZlcikKZW5kq2NvZGVfZm9sZGVkwqtub3RlYm9va19pZNkkMDU2ZjlkNmUtZGI2Zi0xMWVjLTM2NzYtN2I5M2U4ODc2N2Ixq2luX3RlbXBfZGlywg=="; +window.pluto_statefile = "data:;base64,j6Vib25kc4CsY2VsbF9yZXN1bHRz3gAS2SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWWJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZMlVuZGVmVmFyRXJyb3I6IGBQb3dlck1vZGVsc1Byb3RlY3Rpb25gIG5vdCBkZWZpbmVkqnN0YWNrdHJhY2WRhaRjYWxsr3RvcC1sZXZlbCBzY29wZadpbmxpbmVkwqRmaWxl2UV0cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSNlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWWkbGluZQGkcGF0aNlOZXhhbXBsZXMvdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jZTVkMzMyZTAtMzAzNy00NGU3LWI3ZGItYjU3MmY1YzEzZmFlsHBlcnNpc3RfanNfc3RhdGXCpG1pbWXZJ2FwcGxpY2F0aW9uL3ZuZC5wbHV0by5zdGFja3RyYWNlK29iamVjdLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aD+Ep8q3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZatjYXNlNV9mYXVsdKdjZWxsX2lk2SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZcC1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkw9kkNjcyY2Y2OGEtZTljMC00N2IwLWE0NjItYTY0NDg5MmI1OGY3iaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedncPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMj5Mb2FkaW5nIGEgdHJhbnNtaXNzaW9uIGRhdGEgc2V0PC9oMj4KPHA+VG8gbG9hZCBhIHRyYW5zbWlzc2lvbiBkYXRhc2V0LCB3ZSB1c2UgdGhlIDxjb2RlPnBhcnNlX2ZpbGU8L2NvZGU+IGZ1bmN0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgYXJlIHVzaW5nIGEgNS1idXMgY2FzZSBpbmNsdWRlZCBpbiBvdXIgdW5pdC10ZXN0cy48L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aD+A4Pi3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkNjcyY2Y2OGEtZTljMC00N2IwLWE0NjItYTY0NDg5MmI1OGY3uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAVI7LVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SQ3NGVjNjk2Yy0wZjMzLTQyNTgtODc1ZS1iMmY1OTA4YzBiNzKJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZIlVuZGVmVmFyRXJyb3I6IGBJcG9wdGAgbm90IGRlZmluZWSqc3RhY2t0cmFjZZGFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRXRyYW5zbWlzc2lvbl9mYXVsdF9zdHVkaWVzLmpsIz09Izc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MqRsaW5lAaRwYXRo2U5leGFtcGxlcy90cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSM3NGVjNjk2Yy0wZjMzLTQyNTgtODc1ZS1iMmY1OTA4YzBiNzKwcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoP39djbdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlrGlwb3B0X3NvbHZlcqdjZWxsX2lk2SQ3NGVjNjk2Yy0wZjMzLTQyNTgtODc1ZS1iMmY1OTA4YzBiNzK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZcC1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkw9kkZjg3ZGFmNTItZTJkYy00MzUwLTkyNDAtN2FkYWYzNjk5MGNliaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYKjbXNn2S5VbmRlZlZhckVycm9yOiBgc29sdmVfZmF1bHRfc3R1ZHlgIG5vdCBkZWZpbmVkqnN0YWNrdHJhY2WRhaRjYWxsr3RvcC1sZXZlbCBzY29wZadpbmxpbmVkwqRmaWxl2UV0cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSNmODdkYWY1Mi1lMmRjLTQzNTAtOTI0MC03YWRhZjM2OTkwY2WkbGluZQGkcGF0aNlOZXhhbXBsZXMvdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jZjg3ZGFmNTItZTJkYy00MzUwLTkyNDAtN2FkYWYzNjk5MGNlsHBlcnNpc3RfanNfc3RhdGXCpG1pbWXZJ2FwcGxpY2F0aW9uL3ZuZC5wbHV0by5zdGFja3RyYWNlK29iamVjdLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aD+VAIK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZa1yZXN1bHRzX2ZhdWx0p2NlbGxfaWTZJGY4N2RhZjUyLWUyZGMtNDM1MC05MjQwLTdhZGFmMzY5OTBjZblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SQ3OWE2MjVjZS1iODBmLTExZWItMWM1Mi0wZGJjMzViOTMxNzOJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZKkRpZCBub3QgZmluZCByZXYgcmVmL3BtZC12MTEgaW4gcmVwb3NpdG9yeapzdGFja3RyYWNlmYWkY2FsbLJwa2dlcnJvcig6OlN0cmluZymnaW5saW5lZMKkZmlsZahUeXBlcy5qbKRsaW5lRqRwYXRo2WwvY2FjaGUvYnVpbGQvYnVpbGRlci1hbWRjaTQtNC9qdWxpYWxhbmcvanVsaWEtcmVsZWFzZS0xLWRvdC0xMC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjEwL1BrZy9zcmMvVHlwZXMuamyFpGNhbGzZXig6OlBrZy5UeXBlcy52YXIiIzU3IzU4IntQa2cuVHlwZXMuQ29udGV4dCwgUGtnLlR5cGVzLlBhY2thZ2VTcGVjLCBTdHJpbmd9KSg6OkxpYkdpdDIuR2l0UmVwbymnaW5saW5lZMKkZmlsZahUeXBlcy5qbKRsaW5lzQMwpHBhdGjZbC9jYWNoZS9idWlsZC9idWlsZGVyLWFtZGNpNC00L2p1bGlhbGFuZy9qdWxpYS1yZWxlYXNlLTEtZG90LTEwL3Vzci9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuMTAvUGtnL3NyYy9UeXBlcy5qbIWkY2FsbNlid2l0aCg6OlBrZy5UeXBlcy52YXIiIzU3IzU4IntQa2cuVHlwZXMuQ29udGV4dCwgUGtnLlR5cGVzLlBhY2thZ2VTcGVjLCBTdHJpbmd9LCA6OkxpYkdpdDIuR2l0UmVwbymnaW5saW5lZMKkZmlsZah0eXBlcy5qbKRsaW5lzQSIpHBhdGjZcC9jYWNoZS9idWlsZC9idWlsZGVyLWFtZGNpNC00L2p1bGlhbGFuZy9qdWxpYS1yZWxlYXNlLTEtZG90LTEwL3Vzci9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuMTAvTGliR2l0Mi9zcmMvdHlwZXMuamyFpGNhbGzZPmhhbmRsZV9yZXBvX2FkZCEoOjpQa2cuVHlwZXMuQ29udGV4dCwgOjpQa2cuVHlwZXMuUGFja2FnZVNwZWMpp2lubGluZWTCpGZpbGWoVHlwZXMuamykbGluZc0DIKRwYXRo2WwvY2FjaGUvYnVpbGQvYnVpbGRlci1hbWRjaTQtNC9qdWxpYWxhbmcvanVsaWEtcmVsZWFzZS0xLWRvdC0xMC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjEwL1BrZy9zcmMvVHlwZXMuamyFpGNhbGzZR2hhbmRsZV9yZXBvc19hZGQhKDo6UGtnLlR5cGVzLkNvbnRleHQsIDo6VmVjdG9ye1BrZy5UeXBlcy5QYWNrYWdlU3BlY30pp2lubGluZWTCpGZpbGWoVHlwZXMuamykbGluZc0DZqRwYXRo2WwvY2FjaGUvYnVpbGQvYnVpbGRlci1hbWRjaTQtNC9qdWxpYWxhbmcvanVsaWEtcmVsZWFzZS0xLWRvdC0xMC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjEwL1BrZy9zcmMvVHlwZXMuamyFpGNhbGzaAQh2YXIiI2FkZCMxMzEiKDo6UGtnLlR5cGVzLlByZXNlcnZlTGV2ZWwsIDo6QmFzZS5CaW5hcnlQbGF0Zm9ybXMuUGxhdGZvcm0sIDo6QmFzZS5QYWlyc3tTeW1ib2wsIElPQ29udGV4dHtCYXNlLlBpcGVFbmRwb2ludH0sIFR1cGxle1N5bWJvbH0sIEBOYW1lZFR1cGxle2lvOjpJT0NvbnRleHR7QmFzZS5QaXBlRW5kcG9pbnR9fX0sIDo6dHlwZW9mKFBrZy5BUEkuYWRkKSwgOjpQa2cuVHlwZXMuQ29udGV4dCwgOjpWZWN0b3J7UGtnLlR5cGVzLlBhY2thZ2VTcGVjfSmnaW5saW5lZMKkZmlsZaZBUEkuamykbGluZc0BAqRwYXRo2WovY2FjaGUvYnVpbGQvYnVpbGRlci1hbWRjaTQtNC9qdWxpYWxhbmcvanVsaWEtcmVsZWFzZS0xLWRvdC0xMC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjEwL1BrZy9zcmMvQVBJLmpshaRjYWxs2Zt2YXIiI2FkZCMyNyIoOjpJT0NvbnRleHR7QmFzZS5QaXBlRW5kcG9pbnR9LCA6OkJhc2UuUGFpcnN7U3ltYm9sLCBVbmlvbnt9LCBUdXBsZXt9LCBATmFtZWRUdXBsZXt9fSwgOjp0eXBlb2YoUGtnLkFQSS5hZGQpLCA6OlZlY3RvcntQa2cuVHlwZXMuUGFja2FnZVNwZWN9KadpbmxpbmVkwqRmaWxlpkFQSS5qbKRsaW5lzJ+kcGF0aNlqL2NhY2hlL2J1aWxkL2J1aWxkZXItYW1kY2k0LTQvanVsaWFsYW5nL2p1bGlhLXJlbGVhc2UtMS1kb3QtMTAvdXNyL3NoYXJlL2p1bGlhL3N0ZGxpYi92MS4xMC9Qa2cvc3JjL0FQSS5qbIWkY2FsbNkkYWRkKDo6VmVjdG9ye1BrZy5UeXBlcy5QYWNrYWdlU3BlY30pp2lubGluZWTCpGZpbGWmQVBJLmpspGxpbmXMlKRwYXRo2WovY2FjaGUvYnVpbGQvYnVpbGRlci1hbWRjaTQtNC9qdWxpYWxhbmcvanVsaWEtcmVsZWFzZS0xLWRvdC0xMC91c3Ivc2hhcmUvanVsaWEvc3RkbGliL3YxLjEwL1BrZy9zcmMvQVBJLmpshaRjYWxsr3RvcC1sZXZlbCBzY29wZadpbmxpbmVkwqRmaWxl2UV0cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSM3OWE2MjVjZS1iODBmLTExZWItMWM1Mi0wZGJjMzViOTMxNzOkbGluZQSkcGF0aNlOZXhhbXBsZXMvdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jNzlhNjI1Y2UtYjgwZi0xMWViLTFjNTItMGRiYzM1YjkzMTczsHBlcnNpc3RfanNfc3RhdGXCpG1pbWXZJ2FwcGxpY2F0aW9uL3ZuZC5wbHV0by5zdGFja3RyYWNlK29iamVjdLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aD8gxaC3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkNzlhNjI1Y2UtYjgwZi0xMWViLTFjNTItMGRiYzM1YjkzMTczuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMPZJDcyMzc5ZThkLTBiMDQtNGIxNS1hOTAxLThlMTFkNGYyZGYyMommcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZOzxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+UHJlcGFyaW5nIHRoZSBuZXR3b3JrPC9oMj4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoP4TTF7doYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SQ3MjM3OWU4ZC0wYjA0LTRiMTUtYTkwMS04ZTExZDRmMmRmMjK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AA5yytXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJDNmMTQwY2MxLTAxOTItNDQ2Yi04ODQxLTRjM2Q1OGQwMzhmMYmmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9mqQXJndW1lbnRFcnJvcjogUGFja2FnZSBQb3dlck1vZGVsc1Byb3RlY3Rpb24gbm90IGZvdW5kIGluIGN1cnJlbnQgcGF0aC4KLSBSdW4gYGltcG9ydCBQa2c7IFBrZy5hZGQoIlBvd2VyTW9kZWxzUHJvdGVjdGlvbiIpYCB0byBpbnN0YWxsIHRoZSBQb3dlck1vZGVsc1Byb3RlY3Rpb24gcGFja2FnZS6qc3RhY2t0cmFjZZeFpGNhbGyvbWFjcm8gZXhwYW5zaW9up2lubGluZWTDpGZpbGWqbG9hZGluZy5qbKRsaW5lzQbspHBhdGisLi9sb2FkaW5nLmpshaRjYWxsr21hY3JvIGV4cGFuc2lvbqdpbmxpbmVkw6RmaWxlp2xvY2suamykbGluZc0BC6RwYXRoqS4vbG9jay5qbIWkY2FsbL1fX3JlcXVpcmUoOjpNb2R1bGUsIDo6U3ltYm9sKadpbmxpbmVkwqRmaWxlqmxvYWRpbmcuamykbGluZc0G2aRwYXRorC4vbG9hZGluZy5qbIWkY2FsbLIjaW52b2tlX2luX3dvcmxkIzOnaW5saW5lZMOkZmlsZa1lc3NlbnRpYWxzLmpspGxpbmXNA56kcGF0aK8uL2Vzc2VudGlhbHMuamyFpGNhbGyvaW52b2tlX2luX3dvcmxkp2lubGluZWTDpGZpbGWtZXNzZW50aWFscy5qbKRsaW5lzQObpHBhdGivLi9lc3NlbnRpYWxzLmpshaRjYWxsu3JlcXVpcmUoOjpNb2R1bGUsIDo6U3ltYm9sKadpbmxpbmVkwqRmaWxlqmxvYWRpbmcuamykbGluZc0G0qRwYXRorC4vbG9hZGluZy5qbIWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jM2YxNDBjYzEtMDE5Mi00NDZiLTg4NDEtNGMzZDU4ZDAzOGYxpGxpbmUCpHBhdGjZTmV4YW1wbGVzL3RyYW5zbWlzc2lvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzNmMTQwY2MxLTAxOTItNDQ2Yi04ODQxLTRjM2Q1OGQwMzhmMbBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HZvGg/KJO0t2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJDNmMTQwY2MxLTAxOTItNDQ2Yi04ODQxLTRjM2Q1OGQwMzhmMblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SQwN2YyOGZhYS00MTVlLTQ4NTctOGFkZS05Y2EwNzBmYmExMGSJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52c48ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPlJ1bm5pbmcgYSBmYXVsdCBzdHVkeTwvaDI+CjxwPlRvIHJ1biBhIGZhdWx0IHN0dWR5IHdpdGggb25lIG9yIG1vcmUgZmF1bHRzIHVuZGVyIHRoZSA8Y29kZT4mcXVvdDtmYXVsdCZxdW90OzwvY29kZT4gRGljdCwgdXNlIHRoZSA8Y29kZT5zb2x2ZV9mYXVsdF9zdHVkeTwvY29kZT4gZnVuY3Rpb248L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aD+RNtu3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkMDdmMjhmYWEtNDE1ZS00ODU3LThhZGUtOWNhMDcwZmJhMTBkuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAASXhbVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SRmYTk2OGE3MS1kZGM5LTRjZTEtOWVlNy04YTM5MTY1ODExZDaJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZLlVuZGVmVmFyRXJyb3I6IGBidWlsZF9mYXVsdF9zdHVkeWAgbm90IGRlZmluZWSqc3RhY2t0cmFjZZGFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRXRyYW5zbWlzc2lvbl9mYXVsdF9zdHVkaWVzLmpsIz09I2ZhOTY4YTcxLWRkYzktNGNlMS05ZWU3LThhMzkxNjU4MTFkNqRsaW5lAaRwYXRo2U5leGFtcGxlcy90cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSNmYTk2OGE3MS1kZGM5LTRjZTEtOWVlNy04YTM5MTY1ODExZDawcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoP5kEV7doYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlq2ZhdWx0X3N0dWR5p2NlbGxfaWTZJGZhOTY4YTcxLWRkYzktNGNlMS05ZWU3LThhMzkxNjU4MTFkNrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SRkYTMyYWQ4NS0wODExLTQwM2UtODZlNC1mNjcyYWMyMzM2Y2aJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52dI8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPlJ1bm5pbmcgd2l0aG91dCBhZGRpbmcgZmF1bHRzPC9oMj4KPHA+VG8gcnVuIGEgZmF1bHQgc3R1ZHkgb3ZlciBhbGwgYnVzZXMsIHdlIHNob3VsZCBmaXJzdCBidWlsZCB0aGUgbGlzdCBvZiBmYXVsdCBzdHVkaWVzIHVzaW5nIHRoZSA8Y29kZT5idWlsZF9mYXVsdF9zdHVkeTwvY29kZT4gZnVuY3Rpb24uPC9wPgo8L2Rpdj6wcGVyc2lzdF9qc19zdGF0ZcKkbWltZal0ZXh0L2h0bWyybGFzdF9ydW5fdGltZXN0YW1wy0HZvGg/lTjJt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJGRhMzJhZDg1LTA4MTEtNDAzZS04NmU0LWY2NzJhYzIzMzZjZrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAEwla1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkwtkkMjRlOWIwOTktYmQ2Mi00M2NlLThkMDgtN2Q2ZGYzYjY3NGUwiaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedmyPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMj5BZGRpbmcgYSBmYXVsdDwvaDI+CjxwPlRvIGFkZCBhIGZhdWx0LCB1c2UgdGhlIGhlbHBlciBmdW5jdGlvbiA8Y29kZT5hZGRfZmF1bHQmIzMzOyYjNDA7ZGF0YSwgZmF1bHRfaWQsIGJ1c19pZCwgZmF1bHRfcmVzaXN0YW5jZSYjNDE7PC9jb2RlPiA8L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aD+Lfv63aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkMjRlOWIwOTktYmQ2Mi00M2NlLThkMDgtN2Q2ZGYzYjY3NGUwuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAARohLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SRjZmUzN2NmMi1jOWQyLTQ0NmEtYmIwOC1mODIzZmMyODRhZDKJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52ZE8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPlVzaW5nIFBvd2VyTW9kZWxzUHJvdGVjdGlvbjwvaDI+CjxwPk9uY2UgdGhlIHByb3BlciBlbnZpcm9ubWVudCBpcyBwb3B1bGF0ZWQsIGltcG9ydCB0aGUgbmVjZXNzYXJ5IHBhY2thZ2VzLDwvcD4KPC9kaXY+sHBlcnNpc3RfanNfc3RhdGXCpG1pbWWpdGV4dC9odG1ssmxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoP1/yUrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SRjZmUzN2NmMi1jOWQyLTQ0NmEtYmIwOC1mODIzZmMyODRhZDK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AZpEMtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMLZJDBkZmI2ZWU3LTliMTAtNDc1NC1iODcwLTE0YmYzZmMyNjU0ZImmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9knVW5kZWZWYXJFcnJvcjogYGFkZF9mYXVsdCFgIG5vdCBkZWZpbmVkqnN0YWNrdHJhY2WRhaRjYWxsr3RvcC1sZXZlbCBzY29wZadpbmxpbmVkwqRmaWxl2UV0cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSMwZGZiNmVlNy05YjEwLTQ3NTQtYjg3MC0xNGJmM2ZjMjY1NGSkbGluZQGkcGF0aNlOZXhhbXBsZXMvdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jMGRmYjZlZTctOWIxMC00NzU0LWI4NzAtMTRiZjNmYzI2NTRksHBlcnNpc3RfanNfc3RhdGXCpG1pbWXZJ2FwcGxpY2F0aW9uL3ZuZC5wbHV0by5zdGFja3RyYWNlK29iamVjdLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aD+RBa+3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkMGRmYjZlZTctOWIxMC00NzU0LWI4NzAtMTRiZjNmYzI2NTRkuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5CnZXJyb3JlZMPZJDMwMGNiZTllLTczOGQtNGRkYS05ZWZjLWE1YzBmMWZlZjMyMImmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmCo21zZ9koVW5kZWZWYXJFcnJvcjogYGNhc2U1X2ZhdWx0YCBub3QgZGVmaW5lZKpzdGFja3RyYWNlkYWkY2FsbK90b3AtbGV2ZWwgc2NvcGWnaW5saW5lZMKkZmlsZdlFdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamwjPT0jMzAwY2JlOWUtNzM4ZC00ZGRhLTllZmMtYTVjMGYxZmVmMzIwpGxpbmUCpHBhdGjZTmV4YW1wbGVzL3RyYW5zbWlzc2lvbl9mYXVsdF9zdHVkaWVzLmpsIz09IzMwMGNiZTllLTczOGQtNGRkYS05ZWZjLWE1YzBmMWZlZjMyMLBwZXJzaXN0X2pzX3N0YXRlwqRtaW1l2SdhcHBsaWNhdGlvbi92bmQucGx1dG8uc3RhY2t0cmFjZStvYmplY3SybGFzdF9ydW5fdGltZXN0YW1wy0HZvGg/i1EWt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJDMwMGNiZTllLTczOGQtNGRkYS05ZWZjLWE1YzBmMWZlZjMyMLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lwLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTD2SRiZjQ3NTM5MC1mM2NkLTRhZmQtYjY1Mi1kOWZlMGVmZWY5NzeJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gE/PGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMT5Qb3dlck1vZGVsc1Byb3RlY3Rpb24uamw6IFRyYW5zbWlzc2lvbiBGYXVsdCBTdHVkaWVzPC9oMT4KPHA+SW4gdGhpcyBleGFtcGxlIHdlIGludHJvZHVjZSBob3cgdG8gcGVyZm9ybSBmYXVsdCBzdHVkaWVzIG9uIGEgdHJhbnNtaXNzaW9uIGRhdGEgc2V0ICYjNDA7aS5lLiwgdXNpbmcgYSBtYXRwb3dlciBpbnB1dCBmaWxlJiM0MTsuPC9wPgo8cD5GaXJzdCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgdmVyc2lvbnMgb2YgUG93ZXJNb2RlbHNQcm90ZWN0aW9uIGFuZCBJcG9wdC48L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aD9eef+3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkYmY0NzUzOTAtZjNjZC00YWZkLWI2NTItZDlmZTBlZmVmOTc3uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAJr79rVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SQ0MGU1MjgyOC04NTFlLTQ2YWEtOTQ0Zi00ZTgxZjExNjEwMWKJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52Ww8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+YW5kIGluaXRpYWxpemUgYSBzb2x2ZXIsIGluIHRoaXMgY2FzZSBhbiBJcG9wdC5PcHRpbWl6ZXIgYmFzZWQgc29sdmVyLi4uPC9wPgo8L2Rpdj6wcGVyc2lzdF9qc19zdGF0ZcKkbWltZal0ZXh0L2h0bWyybGFzdF9ydW5fdGltZXN0YW1wy0HZvGg/YA7pt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqxyb290YXNzaWduZWXAp2NlbGxfaWTZJDQwZTUyODI4LTg1MWUtNDZhYS05NDRmLTRlODFmMTE2MTAxYrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgADUO61cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkwtkkMDNjZWU0MjAtNDEzYy00OTlmLTgzZTQtMDgzMzk2NTZiOGE4iaZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedmLPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPldlIGNhbiB0aGVuIHJ1biBhbGwgb2YgdGhlc2UgZmF1bHQgc3R1ZGllcyBpbiBzZXJpZXMgdXNpbmcgdGhlIDxjb2RlPnNvbHZlX2ZhdWx0X3N0dWR5PC9jb2RlPiBmdW5jdGlvbi48L3A+CjwvZGl2PrBwZXJzaXN0X2pzX3N0YXRlwqRtaW1lqXRleHQvaHRtbLJsYXN0X3J1bl90aW1lc3RhbXDLQdm8aD+ZLmq3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCrHJvb3Rhc3NpZ25lZcCnY2VsbF9pZNkkMDNjZWU0MjAtNDEzYy00OTlmLTgzZTQtMDgzMzk2NTZiOGE4uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAPp9LVwdWJsaXNoZWRfb2JqZWN0X2tleXOQp2Vycm9yZWTC2SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGGJpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5gqNtc2fZKFVuZGVmVmFyRXJyb3I6IGBjYXNlNV9mYXVsdGAgbm90IGRlZmluZWSqc3RhY2t0cmFjZZGFpGNhbGyvdG9wLWxldmVsIHNjb3Blp2lubGluZWTCpGZpbGXZRXRyYW5zbWlzc2lvbl9mYXVsdF9zdHVkaWVzLmpsIz09I2Q5MWQ2ZmRiLTFhYTktNDM0ZS04YmUxLWZmNjIyMTI4MTEwYaRsaW5lAqRwYXRo2U5leGFtcGxlcy90cmFuc21pc3Npb25fZmF1bHRfc3R1ZGllcy5qbCM9PSNkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGGwcGVyc2lzdF9qc19zdGF0ZcKkbWltZdknYXBwbGljYXRpb24vdm5kLnBsdXRvLnN0YWNrdHJhY2Urb2JqZWN0smxhc3RfcnVuX3RpbWVzdGFtcMtB2bxoP50CZLdoYXNfcGx1dG9faG9va19mZWF0dXJlc8Kscm9vdGFzc2lnbmVlwKdjZWxsX2lk2SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGG5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZcC1cHVibGlzaGVkX29iamVjdF9rZXlzkKdlcnJvcmVkw7FjZWxsX2RlcGVuZGVuY2llc94AEtkkZTVkMzMyZTAtMzAzNy00NGU3LWI3ZGItYjU3MmY1YzEzZmFlhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZTVkMzMyZTAtMzAzNy00NGU3LWI3ZGItYjU3MmY1YzEzZmFltGRvd25zdHJlYW1fY2VsbHNfbWFwgatjYXNlNV9mYXVsdJPZJDMwMGNiZTllLTczOGQtNGRkYS05ZWZjLWE1YzBmMWZlZjMyMNkkZmE5NjhhNzEtZGRjOS00Y2UxLTllZTctOGEzOTE2NTgxMWQ22SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGGydXBzdHJlYW1fY2VsbHNfbWFwhbVQb3dlck1vZGVsc1Byb3RlY3Rpb26R2SQzZjE0MGNjMS0wMTkyLTQ0NmItODg0MS00YzNkNThkMDM4ZjGnZGlybmFtZZCoam9pbnBhdGiQpnBhdGhvZpCqcGFyc2VfZmlsZZDZJDY3MmNmNjhhLWU5YzAtNDdiMC1hNDYyLWE2NDQ4OTJiNThmN4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDY3MmNmNjhhLWU5YzAtNDdiMC1hNDYyLWE2NDQ4OTJiNThmN7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MrRkb3duc3RyZWFtX2NlbGxzX21hcIGsaXBvcHRfc29sdmVyktkkZjg3ZGFmNTItZTJkYy00MzUwLTkyNDAtN2FkYWYzNjk5MGNl2SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGGydXBzdHJlYW1fY2VsbHNfbWFwg6VJcG9wdJHZJDNmMTQwY2MxLTAxOTItNDQ2Yi04ODQxLTRjM2Q1OGQwMzhmMaI9PpC5b3B0aW1pemVyX3dpdGhfYXR0cmlidXRlc5DZJGY4N2RhZjUyLWUyZGMtNDM1MC05MjQwLTdhZGFmMzY5OTBjZYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGY4N2RhZjUyLWUyZGMtNDM1MC05MjQwLTdhZGFmMzY5OTBjZbRkb3duc3RyZWFtX2NlbGxzX21hcIGtcmVzdWx0c19mYXVsdJCydXBzdHJlYW1fY2VsbHNfbWFwg6xpcG9wdF9zb2x2ZXKR2SQ3NGVjNjk2Yy0wZjMzLTQyNTgtODc1ZS1iMmY1OTA4YzBiNzKxc29sdmVfZmF1bHRfc3R1ZHmQqmRhdGFfZmF1bHSR2SQzMDBjYmU5ZS03MzhkLTRkZGEtOWVmYy1hNWMwZjFmZWYzMjDZJDc5YTYyNWNlLWI4MGYtMTFlYi0xYzUyLTBkYmMzNWI5MzE3M4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMBp2NlbGxfaWTZJDc5YTYyNWNlLWI4MGYtMTFlYi0xYzUyLTBkYmMzNWI5MzE3M7Rkb3duc3RyZWFtX2NlbGxzX21hcIGjUGtnkdkkNzlhNjI1Y2UtYjgwZi0xMWViLTFjNTItMGRiYzM1YjkzMTczsnVwc3RyZWFtX2NlbGxzX21hcIWnUGtnLmFkZJCjUGtnkdkkNzlhNjI1Y2UtYjgwZi0xMWViLTFjNTItMGRiYzM1YjkzMTczrFBrZy5hY3RpdmF0ZZCvUGtnLlBhY2thZ2VTcGVjkKlta3RlbXBkaXKQ2SQ3MjM3OWU4ZC0wYjA0LTRiMTUtYTkwMS04ZTExZDRmMmRmMjKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ3MjM3OWU4ZC0wYjA0LTRiMTUtYTkwMS04ZTExZDRmMmRmMjK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQzZjE0MGNjMS0wMTkyLTQ0NmItODg0MS00YzNkNThkMDM4ZjGEtHByZWNlZGVuY2VfaGV1cmlzdGljB6djZWxsX2lk2SQzZjE0MGNjMS0wMTkyLTQ0NmItODg0MS00YzNkNThkMDM4ZjG0ZG93bnN0cmVhbV9jZWxsc19tYXCCtVBvd2VyTW9kZWxzUHJvdGVjdGlvbpHZJGU1ZDMzMmUwLTMwMzctNDRlNy1iN2RiLWI1NzJmNWMxM2ZhZaVJcG9wdJHZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MrJ1cHN0cmVhbV9jZWxsc19tYXCA2SQwN2YyOGZhYS00MTVlLTQ4NTctOGFkZS05Y2EwNzBmYmExMGSEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQwN2YyOGZhYS00MTVlLTQ4NTctOGFkZS05Y2EwNzBmYmExMGS0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRmYTk2OGE3MS1kZGM5LTRjZTEtOWVlNy04YTM5MTY1ODExZDaEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRmYTk2OGE3MS1kZGM5LTRjZTEtOWVlNy04YTM5MTY1ODExZDa0ZG93bnN0cmVhbV9jZWxsc19tYXCBq2ZhdWx0X3N0dWR5kdkkZDkxZDZmZGItMWFhOS00MzRlLThiZTEtZmY2MjIxMjgxMTBhsnVwc3RyZWFtX2NlbGxzX21hcIKrY2FzZTVfZmF1bHSR2SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWWxYnVpbGRfZmF1bHRfc3R1ZHmQ2SRkYTMyYWQ4NS0wODExLTQwM2UtODZlNC1mNjcyYWMyMzM2Y2aEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRkYTMyYWQ4NS0wODExLTQwM2UtODZlNC1mNjcyYWMyMzM2Y2a0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQyNGU5YjA5OS1iZDYyLTQzY2UtOGQwOC03ZDZkZjNiNjc0ZTCEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQyNGU5YjA5OS1iZDYyLTQzY2UtOGQwOC03ZDZkZjNiNjc0ZTC0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRjZmUzN2NmMi1jOWQyLTQ0NmEtYmIwOC1mODIzZmMyODRhZDKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRjZmUzN2NmMi1jOWQyLTQ0NmEtYmIwOC1mODIzZmMyODRhZDK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQwZGZiNmVlNy05YjEwLTQ3NTQtYjg3MC0xNGJmM2ZjMjY1NGSEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQwZGZiNmVlNy05YjEwLTQ3NTQtYjg3MC0xNGJmM2ZjMjY1NGS0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKqYWRkX2ZhdWx0IZCqZGF0YV9mYXVsdJHZJDMwMGNiZTllLTczOGQtNGRkYS05ZWZjLWE1YzBmMWZlZjMyMNkkMzAwY2JlOWUtNzM4ZC00ZGRhLTllZmMtYTVjMGYxZmVmMzIwhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkMzAwY2JlOWUtNzM4ZC00ZGRhLTllZmMtYTVjMGYxZmVmMzIwtGRvd25zdHJlYW1fY2VsbHNfbWFwgapkYXRhX2ZhdWx0ktkkMGRmYjZlZTctOWIxMC00NzU0LWI4NzAtMTRiZjNmYzI2NTRk2SRmODdkYWY1Mi1lMmRjLTQzNTAtOTI0MC03YWRhZjM2OTkwY2WydXBzdHJlYW1fY2VsbHNfbWFwg7pwcmVwYXJlX3RyYW5zbWlzc2lvbl9kYXRhIZCrY2FzZTVfZmF1bHSR2SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWWoZGVlcGNvcHmQ2SRiZjQ3NTM5MC1mM2NkLTRhZmQtYjY1Mi1kOWZlMGVmZWY5NzeEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRiZjQ3NTM5MC1mM2NkLTRhZmQtYjY1Mi1kOWZlMGVmZWY5Nze0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ0MGU1MjgyOC04NTFlLTQ2YWEtOTQ0Zi00ZTgxZjExNjEwMWKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ0MGU1MjgyOC04NTFlLTQ2YWEtOTQ0Zi00ZTgxZjExNjEwMWK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTiEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTi0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGG0ZG93bnN0cmVhbV9jZWxsc19tYXCCrmRhdGFfbm9fZmF1bHRzkLNyZXN1bHRzX2ZhdWx0X3N0dWR5kLJ1cHN0cmVhbV9jZWxsc19tYXCGrGlwb3B0X3NvbHZlcpHZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MrFzb2x2ZV9mYXVsdF9zdHVkeZC6cHJlcGFyZV90cmFuc21pc3Npb25fZGF0YSGQq2Nhc2U1X2ZhdWx0kdkkZTVkMzMyZTAtMzAzNy00NGU3LWI3ZGItYjU3MmY1YzEzZmFlqGRlZXBjb3B5kKtmYXVsdF9zdHVkeZHZJGZhOTY4YTcxLWRkYzktNGNlMS05ZWU3LThhMzkxNjU4MTFkNrRjZWxsX2V4ZWN1dGlvbl9vcmRlctwAEtkkNzlhNjI1Y2UtYjgwZi0xMWViLTFjNTItMGRiYzM1YjkzMTcz2SQzZjE0MGNjMS0wMTkyLTQ0NmItODg0MS00YzNkNThkMDM4ZjHZJGJmNDc1MzkwLWYzY2QtNGFmZC1iNjUyLWQ5ZmUwZWZlZjk3N9kkY2ZlMzdjZjItYzlkMi00NDZhLWJiMDgtZjgyM2ZjMjg0YWQy2SQ0MGU1MjgyOC04NTFlLTQ2YWEtOTQ0Zi00ZTgxZjExNjEwMWLZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MtkkNjcyY2Y2OGEtZTljMC00N2IwLWE0NjItYTY0NDg5MmI1OGY32SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWXZJDcyMzc5ZThkLTBiMDQtNGIxNS1hOTAxLThlMTFkNGYyZGYyMtkkMzAwY2JlOWUtNzM4ZC00ZGRhLTllZmMtYTVjMGYxZmVmMzIw2SQyNGU5YjA5OS1iZDYyLTQzY2UtOGQwOC03ZDZkZjNiNjc0ZTDZJDBkZmI2ZWU3LTliMTAtNDc1NC1iODcwLTE0YmYzZmMyNjU0ZNkkMDdmMjhmYWEtNDE1ZS00ODU3LThhZGUtOWNhMDcwZmJhMTBk2SRmODdkYWY1Mi1lMmRjLTQzNTAtOTI0MC03YWRhZjM2OTkwY2XZJGRhMzJhZDg1LTA4MTEtNDAzZS04NmU0LWY2NzJhYzIzMzZjZtkkZmE5NjhhNzEtZGRjOS00Y2UxLTllZTctOGEzOTE2NTgxMWQ22SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTjZJGQ5MWQ2ZmRiLTFhYTktNDM0ZS04YmUxLWZmNjIyMTI4MTEwYbRsYXN0X2hvdF9yZWxvYWRfdGltZcsAAAAAAAAAAKlzaG9ydHBhdGi9dHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamyucHJvY2Vzc19zdGF0dXOlcmVhZHmkcGF0aNkmZXhhbXBsZXMvdHJhbnNtaXNzaW9uX2ZhdWx0X3N0dWRpZXMuamyubGFzdF9zYXZlX3RpbWXLQdm8aD8x1SCqY2VsbF9vcmRlctwAEtkkYmY0NzUzOTAtZjNjZC00YWZkLWI2NTItZDlmZTBlZmVmOTc32SQ3OWE2MjVjZS1iODBmLTExZWItMWM1Mi0wZGJjMzViOTMxNzPZJGNmZTM3Y2YyLWM5ZDItNDQ2YS1iYjA4LWY4MjNmYzI4NGFkMtkkM2YxNDBjYzEtMDE5Mi00NDZiLTg4NDEtNGMzZDU4ZDAzOGYx2SQ0MGU1MjgyOC04NTFlLTQ2YWEtOTQ0Zi00ZTgxZjExNjEwMWLZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MtkkNjcyY2Y2OGEtZTljMC00N2IwLWE0NjItYTY0NDg5MmI1OGY32SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWXZJDcyMzc5ZThkLTBiMDQtNGIxNS1hOTAxLThlMTFkNGYyZGYyMtkkMzAwY2JlOWUtNzM4ZC00ZGRhLTllZmMtYTVjMGYxZmVmMzIw2SQyNGU5YjA5OS1iZDYyLTQzY2UtOGQwOC03ZDZkZjNiNjc0ZTDZJDBkZmI2ZWU3LTliMTAtNDc1NC1iODcwLTE0YmYzZmMyNjU0ZNkkMDdmMjhmYWEtNDE1ZS00ODU3LThhZGUtOWNhMDcwZmJhMTBk2SRmODdkYWY1Mi1lMmRjLTQzNTAtOTI0MC03YWRhZjM2OTkwY2XZJGRhMzJhZDg1LTA4MTEtNDAzZS04NmU0LWY2NzJhYzIzMzZjZtkkZmE5NjhhNzEtZGRjOS00Y2UxLTllZTctOGEzOTE2NTgxMWQ22SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTjZJGQ5MWQ2ZmRiLTFhYTktNDM0ZS04YmUxLWZmNjIyMTI4MTEwYbFwdWJsaXNoZWRfb2JqZWN0c4ClbmJwa2eHsmluc3RhbGxlZF92ZXJzaW9uc4CwdGVybWluYWxfb3V0cHV0c4CnZW5hYmxlZMK3cmVzdGFydF9yZWNvbW1lbmRlZF9tc2fAtHJlc3RhcnRfcmVxdWlyZWRfbXNnwK1idXN5X3BhY2thZ2VzkKxpbnN0YW50aWF0ZWTCq2NlbGxfaW5wdXRz3gAS2SRlNWQzMzJlMC0zMDM3LTQ0ZTctYjdkYi1iNTcyZjVjMTNmYWWEp2NlbGxfaWTZJGU1ZDMzMmUwLTMwMzctNDRlNy1iN2RiLWI1NzJmNWMxM2ZhZbBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2XpjYXNlNV9mYXVsdCA9IHBhcnNlX2ZpbGUoam9pbnBhdGgoZGlybmFtZShwYXRob2YoUG93ZXJNb2RlbHNQcm90ZWN0aW9uKSksICIuLiIsICJ0ZXN0IiwgImRhdGEiLCAidHJhbnMiLCAiY2FzZTVfZmF1bHQubSIpKatjb2RlX2ZvbGRlZMLZJDY3MmNmNjhhLWU5YzAtNDdiMC1hNDYyLWE2NDQ4OTJiNThmN4SnY2VsbF9pZNkkNjcyY2Y2OGEtZTljMC00N2IwLWE0NjItYTY0NDg5MmI1OGY3sHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZsm1kIiIiCiMjIExvYWRpbmcgYSB0cmFuc21pc3Npb24gZGF0YSBzZXQKClRvIGxvYWQgYSB0cmFuc21pc3Npb24gZGF0YXNldCwgd2UgdXNlIHRoZSBgcGFyc2VfZmlsZWAgZnVuY3Rpb24uIEluIHRoaXMgY2FzZSB3ZSBhcmUgdXNpbmcgYSA1LWJ1cyBjYXNlIGluY2x1ZGVkIGluIG91ciB1bml0LXRlc3RzLgoiIiKrY29kZV9mb2xkZWTD2SQ3NGVjNjk2Yy0wZjMzLTQyNTgtODc1ZS1iMmY1OTA4YzBiNzKEp2NlbGxfaWTZJDc0ZWM2OTZjLTBmMzMtNDI1OC04NzVlLWIyZjU5MDhjMGI3MrBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2VhpcG9wdF9zb2x2ZXIgPSBvcHRpbWl6ZXJfd2l0aF9hdHRyaWJ1dGVzKElwb3B0Lk9wdGltaXplciwgInByaW50X2xldmVsIj0+MCwgInRvbCI9PjFlLTYpq2NvZGVfZm9sZGVkwtkkZjg3ZGFmNTItZTJkYy00MzUwLTkyNDAtN2FkYWYzNjk5MGNlhKdjZWxsX2lk2SRmODdkYWY1Mi1lMmRjLTQzNTAtOTI0MC03YWRhZjM2OTkwY2WwcnVubmluZ19kaXNhYmxlZMKkY29kZdk7cmVzdWx0c19mYXVsdCA9IHNvbHZlX2ZhdWx0X3N0dWR5KGRhdGFfZmF1bHQsIGlwb3B0X3NvbHZlcimrY29kZV9mb2xkZWTC2SQ3OWE2MjVjZS1iODBmLTExZWItMWM1Mi0wZGJjMzViOTMxNzOEp2NlbGxfaWTZJDc5YTYyNWNlLWI4MGYtMTFlYi0xYzUyLTBkYmMzNWI5MzE3M7BydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2bBiZWdpbgoJaW1wb3J0IFBrZwoJUGtnLmFjdGl2YXRlKG1rdGVtcGRpcigpKQoJUGtnLmFkZCgKCQlbCgkJCVBrZy5QYWNrYWdlU3BlYyg7IG5hbWU9IlBvd2VyTW9kZWxzUHJvdGVjdGlvbiIsIHJldj0icmVmL3BtZC12MTEiKSwKCQkJUGtnLlBhY2thZ2VTcGVjKDsgbmFtZT0iSXBvcHQiKSwKCQldCgkpCmVuZKtjb2RlX2ZvbGRlZMLZJDcyMzc5ZThkLTBiMDQtNGIxNS1hOTAxLThlMTFkNGYyZGYyMoSnY2VsbF9pZNkkNzIzNzllOGQtMGIwNC00YjE1LWE5MDEtOGUxMWQ0ZjJkZjIysHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZIm1kIiIiCiMjIFByZXBhcmluZyB0aGUgbmV0d29yawoiIiKrY29kZV9mb2xkZWTD2SQzZjE0MGNjMS0wMTkyLTQ0NmItODg0MS00YzNkNThkMDM4ZjGEp2NlbGxfaWTZJDNmMTQwY2MxLTAxOTItNDQ2Yi04ODQxLTRjM2Q1OGQwMzhmMbBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2TRiZWdpbgoJdXNpbmcgUG93ZXJNb2RlbHNQcm90ZWN0aW9uCglpbXBvcnQgSXBvcHQKZW5kq2NvZGVfZm9sZGVkwtkkMDdmMjhmYWEtNDE1ZS00ODU3LThhZGUtOWNhMDcwZmJhMTBkhKdjZWxsX2lk2SQwN2YyOGZhYS00MTVlLTQ4NTctOGFkZS05Y2EwNzBmYmExMGSwcnVubmluZ19kaXNhYmxlZMKkY29kZdmPbWQiIiIKIyMgUnVubmluZyBhIGZhdWx0IHN0dWR5CgpUbyBydW4gYSBmYXVsdCBzdHVkeSB3aXRoIG9uZSBvciBtb3JlIGZhdWx0cyB1bmRlciB0aGUgYCJmYXVsdCJgIERpY3QsIHVzZSB0aGUgYHNvbHZlX2ZhdWx0X3N0dWR5YCBmdW5jdGlvbgoiIiKrY29kZV9mb2xkZWTD2SRmYTk2OGE3MS1kZGM5LTRjZTEtOWVlNy04YTM5MTY1ODExZDaEp2NlbGxfaWTZJGZhOTY4YTcxLWRkYzktNGNlMS05ZWU3LThhMzkxNjU4MTFkNrBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2SxmYXVsdF9zdHVkeSA9IGJ1aWxkX2ZhdWx0X3N0dWR5KGNhc2U1X2ZhdWx0Katjb2RlX2ZvbGRlZMLZJGRhMzJhZDg1LTA4MTEtNDAzZS04NmU0LWY2NzJhYzIzMzZjZoSnY2VsbF9pZNkkZGEzMmFkODUtMDgxMS00MDNlLTg2ZTQtZjY3MmFjMjMzNmNmsHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZqG1kIiIiCiMjIFJ1bm5pbmcgd2l0aG91dCBhZGRpbmcgZmF1bHRzCgpUbyBydW4gYSBmYXVsdCBzdHVkeSBvdmVyIGFsbCBidXNlcywgd2Ugc2hvdWxkIGZpcnN0IGJ1aWxkIHRoZSBsaXN0IG9mIGZhdWx0IHN0dWRpZXMgdXNpbmcgdGhlIGBidWlsZF9mYXVsdF9zdHVkeWAgZnVuY3Rpb24uCiIiIqtjb2RlX2ZvbGRlZMPZJDI0ZTliMDk5LWJkNjItNDNjZS04ZDA4LTdkNmRmM2I2NzRlMISnY2VsbF9pZNkkMjRlOWIwOTktYmQ2Mi00M2NlLThkMDgtN2Q2ZGYzYjY3NGUwsHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXZfG1kIiIiCiMjIEFkZGluZyBhIGZhdWx0CgpUbyBhZGQgYSBmYXVsdCwgdXNlIHRoZSBoZWxwZXIgZnVuY3Rpb24gYGFkZF9mYXVsdCEoZGF0YSwgZmF1bHRfaWQsIGJ1c19pZCwgZmF1bHRfcmVzaXN0YW5jZSlgIAoiIiKrY29kZV9mb2xkZWTD2SRjZmUzN2NmMi1jOWQyLTQ0NmEtYmIwOC1mODIzZmMyODRhZDKEp2NlbGxfaWTZJGNmZTM3Y2YyLWM5ZDItNDQ2YS1iYjA4LWY4MjNmYzI4NGFkMrBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2XJtZCIiIgojIyBVc2luZyBQb3dlck1vZGVsc1Byb3RlY3Rpb24KCk9uY2UgdGhlIHByb3BlciBlbnZpcm9ubWVudCBpcyBwb3B1bGF0ZWQsIGltcG9ydCB0aGUgbmVjZXNzYXJ5IHBhY2thZ2VzLAoiIiKrY29kZV9mb2xkZWTD2SQwZGZiNmVlNy05YjEwLTQ3NTQtYjg3MC0xNGJmM2ZjMjY1NGSEp2NlbGxfaWTZJDBkZmI2ZWU3LTliMTAtNDc1NC1iODcwLTE0YmYzZmMyNjU0ZLBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2SRhZGRfZmF1bHQhKGRhdGFfZmF1bHQsIDEsIDIsIDAuMDAwMSmrY29kZV9mb2xkZWTC2SQzMDBjYmU5ZS03MzhkLTRkZGEtOWVmYy1hNWMwZjFmZWYzMjCEp2NlbGxfaWTZJDMwMGNiZTllLTczOGQtNGRkYS05ZWZjLWE1YzBmMWZlZjMyMLBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2chiZWdpbgoJZGF0YV9mYXVsdCA9IGRlZXBjb3B5KGNhc2U1X2ZhdWx0KQoJCglwcmVwYXJlX3RyYW5zbWlzc2lvbl9kYXRhISgKCQlkYXRhX2ZhdWx0OyAKCQlmbGF0X3N0YXJ0PXRydWUsIAoJCW5lZ2xlY3RfbGluZV9jaGFyZ2luZz10cnVlLCAKCQluZWdsZWN0X3RyYW5zZm9ybWVyPXRydWUsIAoJCXplcm9fZ2VuX3NldHBvaW50cz10cnVlCgkpCmVuZKtjb2RlX2ZvbGRlZMLZJGJmNDc1MzkwLWYzY2QtNGFmZC1iNjUyLWQ5ZmUwZWZlZjk3N4SnY2VsbF9pZNkkYmY0NzUzOTAtZjNjZC00YWZkLWI2NTItZDlmZTBlZmVmOTc3sHJ1bm5pbmdfZGlzYWJsZWTCpGNvZGXaARFtZCIiIgojIFBvd2VyTW9kZWxzUHJvdGVjdGlvbi5qbDogVHJhbnNtaXNzaW9uIEZhdWx0IFN0dWRpZXMKCkluIHRoaXMgZXhhbXBsZSB3ZSBpbnRyb2R1Y2UgaG93IHRvIHBlcmZvcm0gZmF1bHQgc3R1ZGllcyBvbiBhIHRyYW5zbWlzc2lvbiBkYXRhIHNldCAoaS5lLiwgdXNpbmcgYSBtYXRwb3dlciBpbnB1dCBmaWxlKS4KCkZpcnN0IHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB2ZXJzaW9ucyBvZiBQb3dlck1vZGVsc1Byb3RlY3Rpb24gYW5kIElwb3B0LgoiIiKrY29kZV9mb2xkZWTD2SQ0MGU1MjgyOC04NTFlLTQ2YWEtOTQ0Zi00ZTgxZjExNjEwMWKEp2NlbGxfaWTZJDQwZTUyODI4LTg1MWUtNDZhYS05NDRmLTRlODFmMTE2MTAxYrBydW5uaW5nX2Rpc2FibGVkwqRjb2Rl2VJtZCIiIgphbmQgaW5pdGlhbGl6ZSBhIHNvbHZlciwgaW4gdGhpcyBjYXNlIGFuIElwb3B0Lk9wdGltaXplciBiYXNlZCBzb2x2ZXIuLi4KIiIiq2NvZGVfZm9sZGVkw9kkMDNjZWU0MjAtNDEzYy00OTlmLTgzZTQtMDgzMzk2NTZiOGE4hKdjZWxsX2lk2SQwM2NlZTQyMC00MTNjLTQ5OWYtODNlNC0wODMzOTY1NmI4YTiwcnVubmluZ19kaXNhYmxlZMKkY29kZdlmbWQiIiIKV2UgY2FuIHRoZW4gcnVuIGFsbCBvZiB0aGVzZSBmYXVsdCBzdHVkaWVzIGluIHNlcmllcyB1c2luZyB0aGUgYHNvbHZlX2ZhdWx0X3N0dWR5YCBmdW5jdGlvbi4KIiIiq2NvZGVfZm9sZGVkw9kkZDkxZDZmZGItMWFhOS00MzRlLThiZTEtZmY2MjIxMjgxMTBhhKdjZWxsX2lk2SRkOTFkNmZkYi0xYWE5LTQzNGUtOGJlMS1mZjYyMjEyODExMGGwcnVubmluZ19kaXNhYmxlZMKkY29kZdoBImJlZ2luCglkYXRhX25vX2ZhdWx0cyA9IGRlZXBjb3B5KGNhc2U1X2ZhdWx0KQoJCglwcmVwYXJlX3RyYW5zbWlzc2lvbl9kYXRhISgKCQlkYXRhX25vX2ZhdWx0czsKCQlmbGF0X3N0YXJ0PXRydWUsCgkJbmVnbGVjdF9saW5lX2NoYXJnaW5nPXRydWUsCgkJbmVnbGVjdF90cmFuc2Zvcm1lcj10cnVlLAoJCXplcm9fZ2VuX3NldHBvaW50cz10cnVlCgkpCgkKCXJlc3VsdHNfZmF1bHRfc3R1ZHkgPSBzb2x2ZV9mYXVsdF9zdHVkeShkYXRhX25vX2ZhdWx0cywgZmF1bHRfc3R1ZHksIGlwb3B0X3NvbHZlcikKZW5kq2NvZGVfZm9sZGVkwqtub3RlYm9va19pZNkkYjA3YWIyZGUtNzljZS0xMWVmLTMwMmEtNDVlZmE2MTJjYWI0q2luX3RlbXBfZGlywg=="; window.pluto_preamble_html = undefined;