From 1cb49cb922613da075b6833748172c0587c823d8 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Wed, 20 Sep 2023 16:49:48 +0000 Subject: [PATCH] build based on 772044d --- dev/developer/contributing.html | 2 +- dev/developer/extensions.html | 2 +- dev/developer/roadmap.html | 2 +- dev/developer/style.html | 2 +- dev/index.html | 2 +- dev/installation.html | 2 +- dev/manual/connections.html | 2 +- dev/manual/eng-data-model.html | 2 +- dev/manual/eng2math.html | 2 +- dev/manual/enums.html | 2 +- dev/manual/external-data-formats.html | 2 +- dev/manual/formulations.html | 2 +- dev/manual/load-model.html | 2 +- dev/manual/math-model.html | 2 +- dev/manual/power-flow.html | 10 +- dev/manual/quickguide.html | 2 +- dev/manual/specifications.html | 2 +- dev/reference/base.html | 18 +- dev/reference/constants.html | 2 +- dev/reference/constraints.html | 212 +++++++++--------- dev/reference/data_models.html | 42 ++-- dev/reference/enums.html | 2 +- dev/reference/formulations.html | 10 +- dev/reference/internal.html | 32 +-- dev/reference/logging.html | 2 +- dev/reference/objectives.html | 2 +- dev/reference/problems.html | 32 +-- dev/reference/variables.html | 98 ++++---- dev/search.html | 2 +- dev/search_index.js | 2 +- dev/tutorials/Beginners Guide.html | 6 +- dev/tutorials/Beginners Guide.jl.html | 4 +- .../Engineering Model - Helper Functions.html | 6 +- ...gineering Model - Helper Functions.jl.html | 2 +- dev/tutorials/Explicit Neutral Models.html | 6 +- dev/tutorials/Explicit Neutral Models.jl.html | 4 +- dev/tutorials/Extension Tutorial.html | 6 +- dev/tutorials/Extension Tutorial.jl.html | 4 +- dev/tutorials/Native Power Flow.html | 6 +- dev/tutorials/Native Power Flow.jl.html | 4 +- dev/tutorials/The Engineering Model.html | 6 +- dev/tutorials/The Engineering Model.jl.html | 2 +- dev/tutorials/basic.html | 6 +- dev/tutorials/basic.jl.html | 4 +- 44 files changed, 282 insertions(+), 282 deletions(-) diff --git a/dev/developer/contributing.html b/dev/developer/contributing.html index 34fd98a30..f02d0dd9e 100644 --- a/dev/developer/contributing.html +++ b/dev/developer/contributing.html @@ -1,2 +1,2 @@ -Contributing · PowerModelsDistribution

Pull Requests

All pull requests should be reviewed by a core developer, and may include a review by a subject matter expert if the area of the PR is outside that of one of the core developers. In that case, the core developers will primarily review style and design, rather than substance.

Every PR to PowerModelsDistribution should strive to meet the following guidelines.

PR Title

  • Should be concise and clear, describing in a phrase the content of the PR
  • Should include a prefix that describes the primary type of the PR
    • ADD: feature addition
    • FIX: bugfix
    • REF: refactor
    • UPD: updates to code for e.g. version bumps of dependencies
    • STY: style changes, no changes to function names, added features, etc.
    • DOC: documentation-only additions/changes
    • RM: dead code removal

PR Body

  • If the change is breaking, it should be clearly stated up front
  • The purpose of this PR should be clearly stated right away
  • Major changes / additions to the code should be summarized. In the case where a refactor was performed, the name changes of public functions should be documented in the body of the PR
  • Any associated Issues should be referenced in the body of the PR, and it is accepted/encouraged to use Closes #XX to automatically close Issues after the PR is merged

PR Code

  • An entry should be added to CHANGELOG.md for every PR
  • Documentation should be updated (See Documentation section above for guidelines)
  • Unit tests should be added. In the case where existing unit tests were altered, an explanation for the change must be included
  • Code should be rebased to the latest version of whatever branch the PR is aimed at (no merge conflicts!)

Versions

PowerModelsDistribution follows the Semantic Versioning (SemVer) convention of Major.minor.patch, where Major indicates breaking changes, minor indicates non-breaking feature additions, and patch indicates non-breaking bugfixes.

Currently, because Major==0, minor indicates breaking changes and patch indicates any non-breaking change, including both feature additions and bugfixes. Once PowerModelsDistribution reaches v1.0.0, we will adhere strictly to the SemVer convention.

Branch Management

The main branch is a protected branch, meaning that its history will always be contiguous and can never be overwritten.

Release candidate branches of the format vM.m.0-rc are also protected branches. These branches will contain only breaking changes and will not be merged into main until a new version is ready to be tagged. Pull requests including breaking changes should be directed into the next release candidate branch available, e.g. if the current version of the package is v0.9.0, the next release candidate branch will be v0.10.0-rc.

Pull requests that include only non-breaking changes can be merged directly into main once approved, and in the case of merge conflicts arising for release candidate branches, the -rc branch will need to be updated to include the latest main.

Pull requests will generally be merged using squash and merge into the branch they are aimed at, with the exception of release candidate branches, which generally be merged using rebase and merge into main.

+Contributing · PowerModelsDistribution

Pull Requests

All pull requests should be reviewed by a core developer, and may include a review by a subject matter expert if the area of the PR is outside that of one of the core developers. In that case, the core developers will primarily review style and design, rather than substance.

Every PR to PowerModelsDistribution should strive to meet the following guidelines.

PR Title

  • Should be concise and clear, describing in a phrase the content of the PR
  • Should include a prefix that describes the primary type of the PR
    • ADD: feature addition
    • FIX: bugfix
    • REF: refactor
    • UPD: updates to code for e.g. version bumps of dependencies
    • STY: style changes, no changes to function names, added features, etc.
    • DOC: documentation-only additions/changes
    • RM: dead code removal

PR Body

  • If the change is breaking, it should be clearly stated up front
  • The purpose of this PR should be clearly stated right away
  • Major changes / additions to the code should be summarized. In the case where a refactor was performed, the name changes of public functions should be documented in the body of the PR
  • Any associated Issues should be referenced in the body of the PR, and it is accepted/encouraged to use Closes #XX to automatically close Issues after the PR is merged

PR Code

  • An entry should be added to CHANGELOG.md for every PR
  • Documentation should be updated (See Documentation section above for guidelines)
  • Unit tests should be added. In the case where existing unit tests were altered, an explanation for the change must be included
  • Code should be rebased to the latest version of whatever branch the PR is aimed at (no merge conflicts!)

Versions

PowerModelsDistribution follows the Semantic Versioning (SemVer) convention of Major.minor.patch, where Major indicates breaking changes, minor indicates non-breaking feature additions, and patch indicates non-breaking bugfixes.

Currently, because Major==0, minor indicates breaking changes and patch indicates any non-breaking change, including both feature additions and bugfixes. Once PowerModelsDistribution reaches v1.0.0, we will adhere strictly to the SemVer convention.

Branch Management

The main branch is a protected branch, meaning that its history will always be contiguous and can never be overwritten.

Release candidate branches of the format vM.m.0-rc are also protected branches. These branches will contain only breaking changes and will not be merged into main until a new version is ready to be tagged. Pull requests including breaking changes should be directed into the next release candidate branch available, e.g. if the current version of the package is v0.9.0, the next release candidate branch will be v0.10.0-rc.

Pull requests that include only non-breaking changes can be merged directly into main once approved, and in the case of merge conflicts arising for release candidate branches, the -rc branch will need to be updated to include the latest main.

Pull requests will generally be merged using squash and merge into the branch they are aimed at, with the exception of release candidate branches, which generally be merged using rebase and merge into main.

diff --git a/dev/developer/extensions.html b/dev/developer/extensions.html index f69cc407a..da6ea0694 100644 --- a/dev/developer/extensions.html +++ b/dev/developer/extensions.html @@ -1,2 +1,2 @@ -Extensions · PowerModelsDistribution
+Extensions · PowerModelsDistribution
diff --git a/dev/developer/roadmap.html b/dev/developer/roadmap.html index f8c3e8aab..d55ad78fd 100644 --- a/dev/developer/roadmap.html +++ b/dev/developer/roadmap.html @@ -1,2 +1,2 @@ -Roadmap · PowerModelsDistribution
+Roadmap · PowerModelsDistribution
diff --git a/dev/developer/style.html b/dev/developer/style.html index 4313613ee..65b78afde 100644 --- a/dev/developer/style.html +++ b/dev/developer/style.html @@ -1,4 +1,4 @@ Style Guide · PowerModelsDistribution

Style Conventions

In general, the following conventions should be adhered to when making changes or additions to the code base. These conventions should include any conventions applied across the InfrastructureModels ecosystem specific to power engineering (i.e conventions from InfrastructureModels, PowerModels, PowerModelsRestoration, etc.) with some additions specific to PowerModelsDistribution.

Functions

Function additions should meeting the following criteria:

  • All functions should be clearly named, without abbreviations, and with underscores between words, e.g. parse_file or constraint_bus_voltage_magnitude; in Python this is known as lower_case_with_underscores. The exception to the abbreviate rule is cases where abbreviations would be expected in the modeling of power systems.
  • All functions that are not prepended by an underscore _ will be exported by default (i.e. when a user uses using PowerModelsDistribution). Public functions should have a detailed docstring instructing on usage
  • All functions that modify data in place should end with an exclamation point ! and the function input that is being modified should be the first argument (or first arguments in the case where multiple inputs are being modified in place). The exceptions to this rule are constraint and variable creation functions (i.e. those functions related to JuMP model creation), which do not include the exclamation point
  • All function arguments, including keyword arguments, should have their types specified.
  • Private functions, i.e. those intended to be for internal use only, should follow the same descriptive naming conventions as functions exported by default, and should always include docstrings to describe their purpose.
  • Functions should be separated by two blank lines
"this function demonstrates how an internal, in-place data altering function should be defined"
 function _concise_descriptive_name!(data::Dict{String,<:Any}, a::Real, b::Vector{<:Real}, c::Matrix{<:Complex}; d::Bool=false, e::Vector{Function}=Function[])
-end

Types & Enums

When specifying types, i.e. when specifying the type of a function argument, or creating enums, these guidelines are recommended:

  • Prefer to use Vector{T} instead of Array{T,1}
  • Prefer to use Matrix{T} instead of Array{T,2}
  • Enums should only be used in the ENGINEERING data model, never the MATHEMATICAL data model
  • Enums must be added to the JSON parser when introduced

Constants

Whenever possible, const should be used to eliminate unnecessary re-evaluations of code, and every const should have a docstring, whether internal or public.

JuMP Variables and Constraints

For functions that create JuMP variables and constraints in particular, we follow the following naming convention as originally adopted by PowerModels:

<jump macro id>(_<phase variant>)_<comp short name>_<quantity name>(_real|_imaginary|_magnitude|_angle|_factor)(_fr|_to)(_sqr)(_on_off)

in the interest of intuitive names for users, the following special cases are also acceptable,

  • _power_real -(can be replaced with)-> _active
  • _power_imaginary -(can be replaced with)-> _reactive

In the case of PowerModelsDistribution, there are additional tags indicating that a function is a multiconductor variant, three-phase specific, etc.:

  • mc multi-conductor, with an explicit neutral (which is the last conductor by convention?)
  • mp multi-phase, for constraints that have no (explicit) neutral and multiple phases
  • 3p three-phase, when a constraint is hard-coded for three phases

Currently, all phase-aware functions use mc, but this is subject to change in the future as we refactor. If the function is not multiphase specific, these are not needed in the function name.

Formulation Styles

  • All new formulations should have clear error messages when they do not support existing components. For example, if a formulation addition which is intended to work with OPF does not support delta-wye transformers, the constraint_mc_transformer_power_dy
  • Formulation abstract type and mutable struct must be specified in CapitalizedWords, which is a subtype of camelCase with the first word also capitalized.

Problem Specification Styles

  • If a new problem specification is only needed due to the requirements of a new formulation, and is not a new type of problem, e.g. another OPF formulation, a build_ function with the same name as the existing formulation should be created that accepts a specific PowerModel (multiple dispatch)
  • If a new problem specification is a new type of problem that will e.g. accept multiple formulations, new build_ and run_ functions should be created that do not collide with existing problem specification functions

Metaprogramming

In general, it is better to avoid metaprogramming patterns, like creating functions algorithmically, in order to aid in the debugging of code. Metaprogramming can create significant challenges in interpreting stacktraces upon errors.

Markdown

Markdown files should be properly formatted, particularly when including tables. Developers are encouraged to use markdownlint and a markdown formatter (such as in VSCode).

File Structure

It is important that new functions, variables, constraints, etc. all go into appropriate places in the code base so that future maintenance and debugging is easier. Pay attention to the current file structure and attempt to conform as best as possible to it. In general

  • /src/core contains the core logic of the package, including variable creation and constraint templates, i.e. things that are agnostic to the formulation
  • /src/data_model contains all of the logic to transform between the ENGINEERING and MATHEMATICAL data models and model creation helper tools
  • src/form contains formulation specific variable and constraint functions, organized under separate files for different formulations
  • src/io contains all of the tools to parse and save files, in particular all of the logic necessary to parse dss files and output json files
  • src/prob contains all problem specifications
  • docs/src contains all source markdown files for the documentation
  • examples contains Jupyter notebooks with walkthroughs of PowerModelsDistribution for new users

Dependencies (Project.toml)

All new dependencies should be carefully considered before being added. It is important to keep the number of external dependencies low to avoid reliance on features that may not be maintained in the future. If possible, Julia Standard Library should be used, particularly in the case where reproducing the desired feature is trivial. There will be cases where it is not simple to duplicate a feature and subsequently maintain it within the package, so adding a dependency would be appropriate in such cases.

All new dependencies are are ultimately approved should also include an entry under [compat] indicating the acceptable versions (Julia automerge requirement). This includes test-only dependencies that appear under [extras]

The Manifest.toml should not be included in the repo.

+end

Types & Enums

When specifying types, i.e. when specifying the type of a function argument, or creating enums, these guidelines are recommended:

Constants

Whenever possible, const should be used to eliminate unnecessary re-evaluations of code, and every const should have a docstring, whether internal or public.

JuMP Variables and Constraints

For functions that create JuMP variables and constraints in particular, we follow the following naming convention as originally adopted by PowerModels:

<jump macro id>(_<phase variant>)_<comp short name>_<quantity name>(_real|_imaginary|_magnitude|_angle|_factor)(_fr|_to)(_sqr)(_on_off)

in the interest of intuitive names for users, the following special cases are also acceptable,

In the case of PowerModelsDistribution, there are additional tags indicating that a function is a multiconductor variant, three-phase specific, etc.:

Currently, all phase-aware functions use mc, but this is subject to change in the future as we refactor. If the function is not multiphase specific, these are not needed in the function name.

Formulation Styles

Problem Specification Styles

Metaprogramming

In general, it is better to avoid metaprogramming patterns, like creating functions algorithmically, in order to aid in the debugging of code. Metaprogramming can create significant challenges in interpreting stacktraces upon errors.

Markdown

Markdown files should be properly formatted, particularly when including tables. Developers are encouraged to use markdownlint and a markdown formatter (such as in VSCode).

File Structure

It is important that new functions, variables, constraints, etc. all go into appropriate places in the code base so that future maintenance and debugging is easier. Pay attention to the current file structure and attempt to conform as best as possible to it. In general

Dependencies (Project.toml)

All new dependencies should be carefully considered before being added. It is important to keep the number of external dependencies low to avoid reliance on features that may not be maintained in the future. If possible, Julia Standard Library should be used, particularly in the case where reproducing the desired feature is trivial. There will be cases where it is not simple to duplicate a feature and subsequently maintain it within the package, so adding a dependency would be appropriate in such cases.

All new dependencies are are ultimately approved should also include an entry under [compat] indicating the acceptable versions (Julia automerge requirement). This includes test-only dependencies that appear under [extras]

The Manifest.toml should not be included in the repo.

diff --git a/dev/index.html b/dev/index.html index bd3601b23..d9bb95d66 100644 --- a/dev/index.html +++ b/dev/index.html @@ -11,4 +11,4 @@ author = "David M. Fobes and Sander Claeys and Frederik Geth and Carleton Coffrin", keywords = "Nonlinear optimization, Convex optimization, AC optimal power flow, Julia language, Open-source", abstract = "In this work we introduce PowerModelsDistribution, a free, open-source toolkit for distribution power network optimization, whose primary focus is establishing a baseline implementation of steady-state multi-conductor unbalanced distribution network optimization problems, which includes implementations of Power Flow and Optimal Power Flow problem types. Currently implemented power flow formulations for these problem types include AC (polar and rectangular), a second-order conic relaxation of the Branch Flow Model (BFM) and Bus Injection Model (BIM), a semi-definite relaxation of BFM, and several linear approximations, such as the simplified unbalanced BFM. The results of AC power flow have been validated against OpenDSS, an open-source “electric power distribution system simulator”, using IEEE distribution test feeders (13, 34, 123 bus and LVTestCase), all parsed using a built-in OpenDSS parser. This includes support for standard distribution system components as well as novel resource models such as generic energy storage (multi-period) and photovoltaic systems, with the intention to add support for additional components in the future." -}

The associated Power Systems Computation Conference talk can be found on YouTube.

License

This code is provided under a BSD license as part of the Multi-Infrastructure Control and Optimization Toolkit (MICOT) project, LA-CC-13-108.

+}

The associated Power Systems Computation Conference talk can be found on YouTube.

License

This code is provided under a BSD license as part of the Multi-Infrastructure Control and Optimization Toolkit (MICOT) project, LA-CC-13-108.

diff --git a/dev/installation.html b/dev/installation.html index c47ada245..5ee665486 100644 --- a/dev/installation.html +++ b/dev/installation.html @@ -1,4 +1,4 @@ Installation Guide · PowerModelsDistribution

Installation Guide

From Julia, PowerModelsDistribution is installed using the built-in package manager:

import Pkg
 Pkg.add("PowerModelsDistribution")

Or, within the Julia REPL:

]add PowerModelsDistribution

Installing an Optimizer

PowerModelsDistribution depends on optimizers to solve Optimization problems, e.g., solve_mc_opf. The table below lists the optimizer packages that have been tested with PowerModelsDistribution, and have been found to work by the team; this list is not exhaustive, there are probably more optimizers that will work.

Install an optimizer using the Julia Package Manager, e.g.,

import Pkg
-Pkg.add("Ipopt")

Known Working Optimizers

The table below contains a truncated list of optimizers from the JuMP documentation that have been used by the development team and are confirmed to work with our package. There may be other Optimizers that work, and the Optimizers listed below are not guaranteed to work with all problems; they must be selected for the appropriate problems.

SolverJulia PackageInstallationLicenseSupports
Artelys KnitroKNITRO.jlManualComm.(MI)LP, (MI)SOCP, (MI)NLP
CbcCbc.jlEPL(MI)LP
CPLEXCPLEX.jlManualComm.(MI)LP, (MI)SOCP
GurobiGurobi.jlManualComm.(MI)LP, (MI)SOCP
IpoptIpopt.jlEPLLP, QP, NLP
Juniper.jlJuniper.jlMIT(MI)SOCP, (MI)NLP
SCSSCS.jlMITLP, SOCP, SDP

Where:

  • LP = Linear programming
  • QP = Quadratic programming
  • SOCP = Second-order conic programming (including problems with convex quadratic constraints and/or objective)
  • NLP = Nonlinear programming
  • SDP = Semidefinite programming
  • (MI)XXX = Mixed-integer equivalent of problem type XXX

For a complete list of JuMP supported optimizers, see JuMP Documentation.

Unsatisfiable requirements detected

Did you get an error like Unsatisfiable requirements detected for package D [756980fe]:?

The Pkg documentation has a section on how to understand and manage these conflicts.

+Pkg.add("Ipopt")

Known Working Optimizers

The table below contains a truncated list of optimizers from the JuMP documentation that have been used by the development team and are confirmed to work with our package. There may be other Optimizers that work, and the Optimizers listed below are not guaranteed to work with all problems; they must be selected for the appropriate problems.

SolverJulia PackageInstallationLicenseSupports
Artelys KnitroKNITRO.jlManualComm.(MI)LP, (MI)SOCP, (MI)NLP
CbcCbc.jlEPL(MI)LP
CPLEXCPLEX.jlManualComm.(MI)LP, (MI)SOCP
GurobiGurobi.jlManualComm.(MI)LP, (MI)SOCP
IpoptIpopt.jlEPLLP, QP, NLP
Juniper.jlJuniper.jlMIT(MI)SOCP, (MI)NLP
SCSSCS.jlMITLP, SOCP, SDP

Where:

For a complete list of JuMP supported optimizers, see JuMP Documentation.

Unsatisfiable requirements detected

Did you get an error like Unsatisfiable requirements detected for package D [756980fe]:?

The Pkg documentation has a section on how to understand and manage these conflicts.

diff --git a/dev/manual/connections.html b/dev/manual/connections.html index 9b6212b67..8b11576ad 100644 --- a/dev/manual/connections.html +++ b/dev/manual/connections.html @@ -1,2 +1,2 @@ -Connecting Components · PowerModelsDistribution

Connecting Components

One of the main goals of a network model, is specifying how constituent components are connected together. The patterns explained here, are equally applicable to the engineering and mathematical data model.

The available connections of each component connect to bus terminals. Take for example a bus with four terminals, terminals=["a","b","c","n"].

Node objects

Node objects always connect to a single bus (and perhaps also the universal ground, as can be the case for shunts). Therefore, they always have at least two key fields controlling the connectivity: bus and connections. Most node objects also have a configuration field, which affects the interpretation of the values supplied in connections. We will illustrate this for loads below.

Loads

A multi-phase load consists of several individual loads, the number of which is implied by the length of properties such as pd_nom, qd_nom etc. The table below illustrates how the length of the field connections and the value of the field configuration determines the layout of the load.

connectionsconfiguration==WYEconfiguration==DELTA
22 connections, wye2 connections, delta
33 connections, wye3 connections, delta
44 connections, wyeundefined

For example, we wish to connect a wye-connected load consisting of 2 individual loads (|connections|=3 and configuration=WYE) to our example bus with four available terminals. If we specify connections=["a","c","n"], this leads to

loads connection example.

Edge objects

Edge objects connect two buses (except for generic transformers, which can connect N buses). Therefore, they have the fields

  • f_bus and f_connections, specifying the from-side bus and how the object connects to it;
  • t_bus and t_connections, specifying the same for the to-side.

Lines

A line can have a variable number of conductors, which is implied by the size of the fields rs, xs, g_fr, b_fr, g_to and b_to. The fields f_connections and t_connections should specify for each conductor, to which terminals it connects. The figure below illustrates this for a line with 2 conductors,

line connection example.

Transformers

Transformers also have a configuration field. For

  • generic transformers, this is specified per winding, and configuration is therefore a vector of ConnConfig enums (WYE or DELTA);
  • AL2W transformers however are always two-winding, and the secondary is always wye-connected. Therefore, configuration is a scalar, specifying the configuration of the from-side winding.

Generic transformers have a field buses, a Vector containing the buses to which each winding connects respectively (these do not have to be unique; a split-phase transformer is typically represented by having two windings connect to the same bus). The AL2W transformer however, since it is always two-winding, follows the f_connections/t_connections pattern.

+Connecting Components · PowerModelsDistribution

Connecting Components

One of the main goals of a network model, is specifying how constituent components are connected together. The patterns explained here, are equally applicable to the engineering and mathematical data model.

The available connections of each component connect to bus terminals. Take for example a bus with four terminals, terminals=["a","b","c","n"].

Node objects

Node objects always connect to a single bus (and perhaps also the universal ground, as can be the case for shunts). Therefore, they always have at least two key fields controlling the connectivity: bus and connections. Most node objects also have a configuration field, which affects the interpretation of the values supplied in connections. We will illustrate this for loads below.

Loads

A multi-phase load consists of several individual loads, the number of which is implied by the length of properties such as pd_nom, qd_nom etc. The table below illustrates how the length of the field connections and the value of the field configuration determines the layout of the load.

connectionsconfiguration==WYEconfiguration==DELTA
22 connections, wye2 connections, delta
33 connections, wye3 connections, delta
44 connections, wyeundefined

For example, we wish to connect a wye-connected load consisting of 2 individual loads (|connections|=3 and configuration=WYE) to our example bus with four available terminals. If we specify connections=["a","c","n"], this leads to

loads connection example.

Edge objects

Edge objects connect two buses (except for generic transformers, which can connect N buses). Therefore, they have the fields

  • f_bus and f_connections, specifying the from-side bus and how the object connects to it;
  • t_bus and t_connections, specifying the same for the to-side.

Lines

A line can have a variable number of conductors, which is implied by the size of the fields rs, xs, g_fr, b_fr, g_to and b_to. The fields f_connections and t_connections should specify for each conductor, to which terminals it connects. The figure below illustrates this for a line with 2 conductors,

line connection example.

Transformers

Transformers also have a configuration field. For

  • generic transformers, this is specified per winding, and configuration is therefore a vector of ConnConfig enums (WYE or DELTA);
  • AL2W transformers however are always two-winding, and the secondary is always wye-connected. Therefore, configuration is a scalar, specifying the configuration of the from-side winding.

Generic transformers have a field buses, a Vector containing the buses to which each winding connects respectively (these do not have to be unique; a split-phase transformer is typically represented by having two windings connect to the same bus). The AL2W transformer however, since it is always two-winding, follows the f_connections/t_connections pattern.

diff --git a/dev/manual/eng-data-model.html b/dev/manual/eng-data-model.html index 923f3be7c..97aac9255 100644 --- a/dev/manual/eng-data-model.html +++ b/dev/manual/eng-data-model.html @@ -9,4 +9,4 @@ ... ), ... -)

Valid component types are those that are documented in the sections below. Each component object is identified by an id, which must be a string (id <: String), but id does not appear inside of the component dictionary, and only appears as keys to the component dictionaries under each component type. Note that this requirement is so that data structures will be JSON serializable.

Each edge or node component (i.e. all those that are not data objects or buses), is expected to have status fields to specify whether the component is active or disabled, bus or f_bus and t_bus, to specify the buses that are connected to the component, and connections or f_connections and t_connections, to specify the terminals of the buses that are actively connected in an ordered list. NOTE: terminals, connections, f_connections, and t_connections, must be type Vector{Int}.

Parameter values on components are expected to be specified in SI units by default (where applicable) in the engineering data model. Relevant expected units are noted in the sections below. It is possible for the user to select universal scalar factors for power and voltages. For example, if power_scalar_factor and voltage_scalar_factor are their default values given below, where units is listed as watt or var, real units will be kW and kvar. Where units are listed as volt, real units will be kV (multiplied by vm_nom, where that value exists).

The Used column describes the situations where certain parameters are used. "always" indicates those values are used in all contexts, opf, mld, or any other problem name abbreviation indicate they are used in particular for those problems. "solution" indicates that those parameters are outputs from the solvers. "multinetwork" indicates these values are only used to build multinetwork problems.

Those parameters that have a default may be omitted by the user from the data model, they will be populated by the specified default values.

Components that support "codes", such as lines, switches, and transformers, behave such that any property on said object that conflicts with a value in the code will override the value given in the code object. This is noted on each object where this is relevant.

Root-Level Properties

At the root level of the data structure, the following fields can be found.

NameDefaultTypeUsedDescription
nameStringCase name
data_modelENGINEERINGDataModelalwaysENGINEERING, MATHEMATICAL, or DSS. Type of the data model (this document describes data_model==ENGINEERING)
settingsDict()Dict{String,<:Any}alwaysBase settings for the data model, see Settings section below for details

Settings (settings)

At the root-level of the data model a settings dictionary object is expected, containing the following fields.

NameDefaultTypeUnitsUsedDescription
voltage_scale_factor1e3RealalwaysScalar multiplier for voltage values
power_scale_factor1e3RealalwaysScalar multiplier for power values
vbases_defaultDict{String,Real}alwaysInstruction to set the vbase at a number of buses for non-dimensionalization
sbase_defaultRealalwaysInstruction to set the power base for non-dimensionalization
base_frequency60.0RealHzalwaysFrequency base, i.e. the base frequency of the whole circuit

The parameters voltage_scale_factor and power_scale_factordetermine the base for all voltage and power parameters in this data model. For example,

where the mentioned fields vm_nom, pd_nom and qd_nom are sample voltage and power variables which are defined later.

On the other hand,vbase_default and sbase_default provide default values for a 'per unit' conversion; these do not affect the interpretation of the parameters in this model, like the scale factors do. Note that vbase_default is a Dict{Any,Real}, with pairs of bus ids and voltage magnitude levels, since in per unit conversion, the voltage base can change from bus to bus. The power base is the same everywhere, and therefore sbase_default has a single value.

Buses (bus)

The data model below allows us to include buses of arbitrary many terminals (i.e., more than the usual four). This would be useful for

NameDefaultTypeUnitsUsedDescription
terminals[1,2,3,4]Vector{Int}alwaysTerminals for which the bus has active connections
vm_lbVector{Real}voltopfMinimum conductor-to-ground voltage magnitude, size=nphases
vm_ubVector{Real}voltopfMaximum conductor-to-ground voltage magnitude, size=nphases
vm_pair_ubVector{Tuple}opfe.g. [(1,2,210)] means |U1-U2|>210
vm_pair_lbVector{Tuple}opfe.g. [(1,2,230)] means |U1-U2|<230
grounded[]Vector{Int}alwaysList of terminals which are grounded
rg[]Vector{Real}alwaysResistance of each defined grounding, size=length(grounded)
xg[]Vector{Real}alwaysReactance of each defined grounding, size=length(grounded)
vmVector{Real}voltalwaysVoltage magnitude at bus. If set, voltage magnitude at bus is fixed
vaVector{Real}degreealwaysVoltage angle at bus. If set, voltage angle at bus is fixed
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

Each terminal c of the bus has an associated complex voltage phasor v[c]. There are two types of voltage magnitude bounds. The first type bounds the voltage magnitude of each v[c] individually,

However, especially in four-wire networks, bounds are more naturally imposed on the difference of two terminal voltages instead, e.g. for terminals c and d,

This is why we introduce the fields vm_pair_lb and vm_pair_ub, which define bounds for pairs of terminals,

Finally, we give an example of how grounding impedances should be entered. If terminal 4 is grounded through an impedance Z=1+j2, we write

Special Case: three-phase bus

For three-phase buses, instead of specifying bounds explicitly for each pair of windings, often we want to specify 'phase-to-phase', 'phase-to-neutral' and 'neutral-to-ground' bounds. This can be done conveniently with a number of additional fields. First, phases is a list of the phase terminals, and neutral designates a single terminal to be the neutral.

If all of these are specified, these bounds also imply valid bounds for the individual voltage magnitudes,

Instead of defining the bounds directly, they can be specified through an associated voltage zone.

NameDefaultTypeUnitsUsedDescription
phasesVector{Int}alwaysIdentifies the terminal that represents the neutral conductor
neutralIntalwaysIdentifies the terminal that represents the neutral conductor
vm_pn_lbRealopfMinimum phase-to-neutral voltage magnitude for all phases
vm_pn_ubRealopfMaximum phase-to-neutral voltage magnitude for all phases
vm_pp_lbRealopfMinimum phase-to-phase voltage magnitude for all phases
vm_pp_ubRealopfMaximum phase-to-phase voltage magnitude for all phases
vm_ng_ubRealopfMaximum neutral-to-ground voltage magnitude

Edge Objects

These objects represent edges on the power grid and therefore require f_bus and t_bus (or buses in the case of transformers), and f_connections and t_connections (or connections in the case of transformers).

Lines (line)

This is a pi-model branch. When a linecode is given, and any of rs, xs, b_fr, b_to, g_fr or g_to are specified, any of those overwrite the values on the linecode.

NameDefaultTypeUnitsUsedDescription
f_busStringalwaysid of from-side bus connection
t_busStringalwaysid of to-side bus connection
f_connectionsVector{Int}alwaysIndicates for each conductor, to which terminal of the f_bus it connects
t_connectionsVector{Int}alwaysIndicates for each conductor, to which terminal of the t_bus it connects
linecodeStringalwaysid of an associated linecode
rsMatrix{Real}ohm/meteralwaysSeries resistance matrix, size=(nconductors,nconductors)
xsMatrix{Real}ohm/meteralwaysSeries reactance matrix, size=(nconductors,nconductors)
g_frzeros(nconductors, nconductors)Matrix{Real}siemens/meter/HzalwaysFrom-side conductance, size=(nconductors,nconductors)
b_frzeros(nconductors, nconductors)Matrix{Real}siemens/meter/HzalwaysFrom-side susceptance, size=(nconductors,nconductors)
g_tozeros(nconductors, nconductors)Matrix{Real}siemens/meter/HzalwaysTo-side conductance, size=(nconductors,nconductors)
b_tozeros(nconductors, nconductors)Matrix{Real}siemens/meter/HzalwaysTo-side susceptance, size=(nconductors,nconductors)
length1.0RealmeteralwaysLength of the line
cm_ubVector{Real}ampopfSymmetrically applicable current rating, size=nconductors
sm_ubVector{Real}wattopfSymmetrically applicable power rating, size=nconductors
vad_lbVector{Real}degreeopfVoltage angle difference lower bound
vad_ubVector{Real}degreeopfVoltage angle difference upper bound
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively

Transformers (transformer)

These are n-winding (nwinding), n-phase (nphase), lossy transformers. Note that most properties are now Vectors (or Vectors of Vectors), indexed over the windings.

NameDefaultTypeUnitsUsedDescription
busVector{String}alwaysList of bus for each winding, size=nwindings
connectionsVector{Vector{Int}}alwaysList of connection for each winding, size=((nconductors),nwindings)
configurationsfill(WYE, nwindings)Vector{ConnConfig}alwaysWYE or DELTA. List of configuration for each winding, size=nwindings
xfmrcodeStringalwaysid of
xsczeros(nwindings*(nwindings-1)/2)Vector{Real}sm_nom[1]alwaysList of short-circuit reactances between each pair of windings, relative to the VA rating of the first winding; enter as a list of the upper-triangle elements
rwzeros(nwindings)Vector{Real}sm_nom[1]alwaysActive power lost due to resistance of each winding, relative to the VA rating of each winding winding
cmag0.0Realsm_nom[1]alwaysTotal no-load reactive power drawn by the transformer, relative to VA rating of the first winding (magnetizing current)
noloadloss0.0Realsm_nom[1]alwaysTotal no-load active power drawn by the transformer, relative to VA rating of the first winding
tm_nomones(nwindings)Vector{Real}alwaysNominal tap ratio for the transformer, size=nwindings (multiplier)
tm_ubVector{Vector{Real}}opfMaximum tap ratio for each winding and phase, size=((nphases),nwindings) (base=tm_nom)
tm_lbVector{Vector{Real}}opfMinimum tap ratio for for each winding and phase, size=((nphases),nwindings) (base=tm_nom)
tm_setfill(fill(1.0,nphases),nwindings)Vector{Vector{Real}}alwaysSet tap ratio for each winding and phase, size=((nphases),nwindings) (base=tm_nom)
tm_fixfill(fill(true,nphases),nwindings)Vector{Vector{Bool}}oltcIndicates for each winding and phase whether the tap ratio is fixed, size=((nphases),nwindings)
polarityfill(1,nwindings)Vector{Int}always
vm_nomVector{Real}voltalways
sm_nomVector{Real}wattalways
sm_ubRealwattopfRating for the total apparent power magnitude at each winding
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively

Asymmetric, Lossless, Two-Winding (AL2W) Transformers (transformer)

Special case of the Generic transformer, which is still a transformer object, but has a simplified method for its definition. These are transformers are asymmetric (A), lossless (L) and two-winding (2W). Asymmetric refers to the fact that the secondary is always has a WYE configuration, whilst the primary can be DELTA. The table below indicates alternate, more simple ways to specify the special case of an AL2W Transformer. xsc and rw cannot be specified for an AL2W transformer, because it is lossless. To use this definition format, all of f_bus, t_bus, f_connections, t_connections, and configuration must be used, and none of buses, connections, configurations may be used. xfmrcode is ignored for this component.

NameDefaultTypeUnitsUsedDescription
f_busStringalwaysAlternative way to specify buses, requires both f_bus and t_bus
t_busStringalwaysAlternative way to specify buses, requires both f_bus and t_bus
f_connectionsVector{Int}alwaysAlternative way to specify connections, requires both f_connections and t_connections, size=nphases
t_connectionsVector{Int}alwaysAlternative way to specify connections, requires both f_connections and t_connections, size=nphases
configurationWYEConnConfigalwaysWYE or DELTA. Alternative way to specify the from-side configuration, to-side is always WYE
tm_nom1.0RealalwaysNominal tap ratio for the transformer (multiplier)
tm_ubVector{Real}opfMaximum tap ratio for each phase (base=tm_nom), size=nphases
tm_lbVector{Real}opfMinimum tap ratio for each phase (base=tm_nom), size=nphases
tm_setfill(1.0,nphases)Vector{Real}alwaysSet tap ratio for each phase (base=tm_nom), size=nphases
tm_fixfill(true,nphases)Vector{Bool}oltcIndicates for each phase whether the tap ratio is fixed, size=nphases
sm_ubRealopfRating for the total apparent power magnitude at each winding

Transformers with voltage regulator control (controls)

Special case of the Generic transformer, which is part of the transformer object, and emulates a standard utility voltage regulator. The taps of these transformers can be controlled by modelling a line drop compensator.

NameDefaultTypeUnitsUsedDescription
vregVector{Vector{Real}}voltoltcVoltage regulator reference, default value is 120.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)
bandVector{Vector{Real}}voltoltcVoltage bandwidth, default value is 3.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)
ptratioVector{Vector{Real}}oltcVoltage ratio of the potential transformer, default value is 60.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)
ctprimVector{Vector{Real}}ampoltcCurrent transformer rating on primary side, default value is 300.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)
rVector{Vector{Real}}voltoltcResistance setting on line drop compensator, default value is 0.0 for both controlled winding and winding without regulator control, size=((nphases),nwindings)
xVector{Vector{Real}}voltoltcReactance setting on line drop compensator, default value is 0.0 for both controlled winding and winding without regulator control, size=((nphases),nwindings)

Switches (switch)

Switches without rs, xs or a linecode (conductance/susceptance not considered), defined the switch will be treated as lossless. If lossy parameters are defined, switch objects will be decomposed into virtual branch & bus, and an ideal switch.

NameDefaultTypeUnitsUsedDescription
f_busStringalwaysid of from-side bus connection
t_busStringalwaysid of to-side bus connection
f_connectionsVector{Int}alwaysIndicates for each conductor, to which terminal of the f_bus it connects
t_connectionsVector{Int}alwaysIndicates for each conductor, to which terminal of the t_bus it connects
cm_ubVector{Real}ampopfSymmetrically applicable current rating
sm_ubVector{Real}wattopfSymmetrically applicable power rating
linecodeStringalwaysid of an associated linecode, does not take into account conductance/susceptance
rszeros(nphases,nphases)Matrix{Real}ohmalwaysSeries resistance matrix, size=(nphases,nphases)
xszeros(nphases,nphases)Matrix{Real}ohmalwaysSeries reactance matrix, size=(nphases,nphases)
dispatchableNODispatchableNO or YES, indicates whether switch state can be changed in a switching optimization problem
stateCLOSEDSwitchStatealwaysCLOSED: closed or OPEN: open, to indicate state of switch
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively

Node Objects

These are objects that have single bus connections. Every object will have at least bus, connections, and status.

Shunts (shunt)

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
gsMatrix{Real}siemensalwaysConductance, size=(nconductors,nconductors)
bsMatrix{Real}siemensalwaysSusceptance, size=(nconductors,nconductors)
modelGENERICShuntModelGENERIC, CAPACITOR, or REACTOR. Indicates the type of shunt which may be necessary for transient stability analysis
dispatchableNODispatchablemldNO or YES, indicates whether a shunt can be shed
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,Any}multinetworkDictionary containing time series parameters.

Shunts with capacitor control (controls)

Special case of the shunt capacitors, which is part of the shunt object, and emulates a typical utility capacitor control (CapControl) by sending switching messages.

NameDefaultTypeUnitsUsedDescription
typeVector{String}capcControl type, default is current for controlled phase, `for uncontrolled phase,size=1forkvartype, otherwisesize=(nphases)`
elementStringcapcsource_id of element (typically line or transformer) to which CapControl is connected
terminalVector{Int}capcNumber of the terminal of circuit element to which CapControl is connected, default is 1 for controlled phase, 0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)
onsettingVector{Real}capcValue at which the CapControl switches the capacitor on, default is 300.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)
offsettingVector{Real}capcValue at which the CapControl switches the capacitor off, default is 200.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)
voltoverrideVector{Bool}capcIndicate whether voltage over ride is enabled, default is false for both controlled and uncontrolled phases, size=1 for kvar type, otherwise size=(nphases)
ptratioVector{Real}capcRatio of potential transformer, default is 60.0 for controlled phase, 0.0 for uncontrolled phase, size=(nphases)
ctratioVector{Real}capcRatio of current transformer, default is 60.0 for controlled phase, 0.0 for uncontrolled phase, size=(nphases)
vminVector{Real}voltcapcMinimum voltage below which CapControl switches the capacitor on, default is 115.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)
vmaxVector{Real}voltcapcMaximum voltage above which CapControl switches the capacitor off, default is 126.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)

Loads (load)

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
configurationWYEConnConfigalwaysWYE or DELTA. If WYE, connections[end]=neutral
modelPOWERLoadModelalwaysPOWER, IMPEDANCE, CURRENT, EXPONENTIAL, or ZIP. Indicates the type of voltage-dependency
pd_nomVector{Real}wattalwaysNominal active load, with respect to vm_nom, size=nphases
qd_nomVector{Real}varalwaysNominal reactive load, with respect to vm_nom, size=nphases
vm_nomRealvoltmodel!=POWERNominal voltage (multiplier)
dispatchableNODispatchablemldNO or YES, indicates whether a load can be shed
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

Multi-phase loads define a number of individual loads connected between two terminals each. How they are connected, is defined both by configuration and connections. The table below indicates the value of configuration and lengths of the other properties for a consistent definition,

configurationconnectionspd_nom | qd_nom | pd_exp
DELTA21
DELTA33
WYE21
WYE32
WYENN-1

Note that for delta loads, only 2 and 3 connections are allowed. Each individual load i is connected between two terminals, exposed to a voltage magnitude v[i], which leads to a consumption pd[i]+j*qd[i]. The model then defines the relationship between these quantities,

modelpd[i]/pd_nom[i]=qd[i]/qd_nom[i]=
POWER11
CURRENT(v[i]/vm_nom)(v[i]/vm_nom)
IMPEDANCE(v[i]/vm_nom)^2(v[i]/vm_nom)^2

Two more model types are supported, which need additional fields and are defined below.

model == EXPONENTIAL

NameDefaultTypeUnitsUsedDescription
pd_expRealmodel==EXPONENTIAL
qd_expRealmodel==EXPONENTIAL

model == ZIP

ZIP load models are split into IMPEDANCE, CURRENT, POWER models.

NameDefaultTypeUnitsUsedDescription
zipvVector{Real}model==ZIPFirst 3 are ZIP weighting factors for active power (pd_cz,pd_ci,pd_cp), next 3 are ZIP weighting factors for reactive power (qd_cz,qd_ci,qd_cp), last 1 is cut-off voltage in p.u. of base kV; load is 0 below this cut-off

Generators (generator)

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
configurationWYEConnConfigalwaysWYE or DELTA. If WYE, connections[end]=neutral
vgVector{Real}voltcontrol_mode==ISOCHRONOUSVoltage magnitude setpoint
pg_lbzeros(nphases)Vector{Real}wattopfLower bound on active power generation per phase, size=nphases
pg_ubfill(Inf, nphases)Vector{Real}wattopfUpper bound on active power generation per phase, size=nphases
qg_lb-pg_ubVector{Real}varopfLower bound on reactive power generation per phase, size=nphases
qg_ubpg_ubVector{Real}varopfUpper bound on reactive power generation per phase, size=nphases
pgVector{Real}wattsolutionPresent active power generation per phase, size=nphases
qgVector{Real}varsolutionPresent reactive power generation per phase, size=nphases
control_modeFREQUENCYDROOPControlModeFREQUENCYDROOP or ISOCHRONOUS
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

generator Cost Model

The generator cost model is currently specified by the following fields.

NameDefaultTypeUnitsUsedDescription
cost_pg_model2IntopfCost model type, 1 = piecewise-linear, 2 = polynomial
cost_pg_parameters[0.0, 1.0, 0.0]Vector{Real}/MVAopfCost model polynomial

Photovoltaic Systems (solar)

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
configurationWYEConnConfigalwaysWYE or DELTA. If WYE, connections[end]=neutral
pg_lbVector{Real}wattopfLower bound on active power generation per phase, size=nphases
pg_ubVector{Real}wattopfUpper bound on active power generation per phase, size=nphases
qg_lbVector{Real}varopfLower bound on reactive power generation per phase, size=nphases
qg_ubVector{Real}varopfUpper bound on reactive power generation per phase, size=nphases
pgVector{Real}wattsolutionPresent active power generation per phase, size=nphases
qgVector{Real}varsolutionPresent reactive power generation per phase, size=nphases
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

solar Cost Model

The cost model for a photovoltaic system currently matches that of generators.

NameDefaultTypeUnitsUsedDescription
cost_pg_model2IntopfCost model type, 1 = piecewise-linear, 2 = polynomial
cost_pg_parameters[0.0, 1.0, 0.0]Vector{Real}/MVAopfCost model polynomial

Wind Turbine Systems (wind)

Wind turbine systems are most closely approximated by induction machines, also known as asynchronous machines. These are not currently supported, but there is plans to support them in the future.

Storage (storage)

A storage object is a flexible component that can represent a variety of energy storage objects, like Li-ion batteries, hydrogen fuel cells, flywheels, etc.

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
configurationWYEConnConfigalwaysWYE or DELTA. If WYE, connections[end]=neutral
energyRealwatt-hralwaysStored energy
energy_ubRealopfmaximum energy rating
charge_ubRealopfmaximum charge rating
discharge_ubRealopfmaximum discharge rating
sm_ubRealwattopfPower rating,
cm_ubRealampopfCurrent rating,
charge_efficiencyRealpercentalwayscharging efficiency (losses)
discharge_efficiencyRealpercentalwaysdischarging efficiency (losses)
qs_ubRealopfMaximum reactive power injection,
qs_lbRealopfMinimum reactive power injection,
rsRealohmalwaysconverter resistance
xsRealohmalwaysconverter reactance
pexRealalwaysTotal active power standby exogenous flow (loss)
qexRealalwaysTotal reactive power standby exogenous flow (loss)
psVector{Real}wattsolutionPresent active power injection
qsVector{Real}varsolutionPresent reactive power injection
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

Voltage Sources (voltage_source)

A voltage source is a source of power at a set voltage magnitude and angle connected to a slack bus. If rs or xs are not specified, the voltage source is assumed to be lossless, otherwise virtual branch and bus will be created in the mathematical model to represent the internal losses of the voltage source.

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
configurationWYEConnConfigalwaysWYE or DELTA. If WYE, connections[end]=neutral
vmones(nphases)Vector{Real}voltalwaysVoltage magnitude set at slack bus, size=nphases
vazeros(nphases)RealdegreealwaysVoltage angle offsets at slack bus, applies symmetrically to each phase angle
rszeros(nconductors,nconductors)Matrix{Real}ohmalwaysInternal series resistance of voltage source, size=(nconductors,nconductors)
xszeros(nconductors,nconductors)Matrix{Real}ohmalwaysInternal series reactance of voltage soure, size=(nconductors,nconductors)
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

Data Objects (codes, time series, etc.)

These objects are referenced by node and edge objects, but are not part of the network themselves, only containing data.

Linecodes (linecode)

Linecodes are easy ways to specify properties common to multiple lines.

NameDefaultTypeUnitsUsedDescription
rsMatrix{Real}ohm/meteralwaysSeries resistance, size=(nconductors,nconductors)
xsMatrix{Real}ohm/meteralwaysSeries reactance, size=(nconductors,nconductors)
g_frzeros(nconductors,nconductors)Matrix{Real}siemens/meter/HzalwaysFrom-side conductance, size=(nconductors,nconductors)
b_frzeros(nconductors,nconductors)Matrix{Real}siemens/meter/HzalwaysFrom-side susceptance, size=(nconductors,nconductors)
g_tozeros(nconductors,nconductors)Matrix{Real}siemens/meter/HzalwaysTo-side conductance, size=(nconductors,nconductors)
b_tozeros(nconductors,nconductors)Matrix{Real}siemens/meter/HzalwaysTo-side susceptance, size=(nconductors,nconductors)
cm_ubfill(Inf,nconductors)Vector{Real}ampereopfmaximum current per conductor, symmetrically applicable
sm_ubfill(Inf,nconductors)Vector{Real}wattopfmaximum power per conductor, symmetrically applicable

Transformer Codes (xfmrcode)

Transformer codes are easy ways to specify properties common to multiple transformers

NameDefaultTypeUnitsUsedDescription
configurationsfill(WYE, nwindings)Vector{ConnConfig}alwaysWYE or DELTA. List of configuration for each winding, size=nwindings
xsc[0.0]Vector{Real}ohmalwaysList of short-circuit reactances between each pair of windings; enter as a list of the upper-triangle elements, size=(nwindings == 2 ? 1 : 3)
rwzeros(nwindings)Vector{Real}ohmalwaysList of the winding resistance for each winding, size=nwindings
tm_nomones(nwindings)Vector{Real}alwaysNominal tap ratio for the transformer, size=nwindings (multiplier)
tm_ubVector{Vector{Real}}opfMaximum tap ratio for each winding and phase, size=((nphases), nwindings) (base=tm_nom)
tm_lbVector{Vector{Real}}opfMinimum tap ratio for for each winding and phase, size=((nphases), nwindings) (base=tm_nom)
tm_setfill(fill(1.0, nphases), nwindings)Vector{Vector{Real}}alwaysSet tap ratio for each winding and phase, size=((nphases), nwindings) (base=tm_nom)
tm_fixfill(fill(true, nphases), nwindings)Vector{Vector{Bool}}alwaysIndicates for each winding and phase whether the tap ratio is fixed, size=((nphases), nwindings)

Time Series (time_series)

Time series objects are used to specify time series for e.g. load or generation forecasts.

Some parameters for components specified in this document can support a time series by inserting a reference to a time_series object into the time_series dictionary inside a component under the relevant parameter name. For example, for a load, if pd_nom is supposed to be a time series, the user would specify "time_series" => Dict("pd_nom" => time_series_id) where time_series_id is the id of an object in time_series, and has type Any.

NameDefaultTypeUnitsUsedDescription
timeUnion{Vector{Real},Vector{String}}houralwaysTime points at which values are specified. If time is specified in String, units not required to be in hours.
valuesVector{Real}alwaysMultipers at each time step given in time
offset0RealhouralwaysStart time offset
replacetrueBoolalwaysIndicates to replace with data, instead of multiply. Will only work on non-Array data

Fuses (fuse)

Fuses can be defined on any terminal of any physical component

NameDefaultTypeUnitsUsedDescription
component_typeString
component_idString
terminalsVector{Int}
fuse_curveArray{Vector{Real},2}specifies the fuse blowing condition
minimum_melting_curveArray{Vector{Real},2}specifies the minimum melting conditions of the fuse
+)

Valid component types are those that are documented in the sections below. Each component object is identified by an id, which must be a string (id <: String), but id does not appear inside of the component dictionary, and only appears as keys to the component dictionaries under each component type. Note that this requirement is so that data structures will be JSON serializable.

Each edge or node component (i.e. all those that are not data objects or buses), is expected to have status fields to specify whether the component is active or disabled, bus or f_bus and t_bus, to specify the buses that are connected to the component, and connections or f_connections and t_connections, to specify the terminals of the buses that are actively connected in an ordered list. NOTE: terminals, connections, f_connections, and t_connections, must be type Vector{Int}.

Parameter values on components are expected to be specified in SI units by default (where applicable) in the engineering data model. Relevant expected units are noted in the sections below. It is possible for the user to select universal scalar factors for power and voltages. For example, if power_scalar_factor and voltage_scalar_factor are their default values given below, where units is listed as watt or var, real units will be kW and kvar. Where units are listed as volt, real units will be kV (multiplied by vm_nom, where that value exists).

The Used column describes the situations where certain parameters are used. "always" indicates those values are used in all contexts, opf, mld, or any other problem name abbreviation indicate they are used in particular for those problems. "solution" indicates that those parameters are outputs from the solvers. "multinetwork" indicates these values are only used to build multinetwork problems.

Those parameters that have a default may be omitted by the user from the data model, they will be populated by the specified default values.

Components that support "codes", such as lines, switches, and transformers, behave such that any property on said object that conflicts with a value in the code will override the value given in the code object. This is noted on each object where this is relevant.

Root-Level Properties

At the root level of the data structure, the following fields can be found.

NameDefaultTypeUsedDescription
nameStringCase name
data_modelENGINEERINGDataModelalwaysENGINEERING, MATHEMATICAL, or DSS. Type of the data model (this document describes data_model==ENGINEERING)
settingsDict()Dict{String,<:Any}alwaysBase settings for the data model, see Settings section below for details

Settings (settings)

At the root-level of the data model a settings dictionary object is expected, containing the following fields.

NameDefaultTypeUnitsUsedDescription
voltage_scale_factor1e3RealalwaysScalar multiplier for voltage values
power_scale_factor1e3RealalwaysScalar multiplier for power values
vbases_defaultDict{String,Real}alwaysInstruction to set the vbase at a number of buses for non-dimensionalization
sbase_defaultRealalwaysInstruction to set the power base for non-dimensionalization
base_frequency60.0RealHzalwaysFrequency base, i.e. the base frequency of the whole circuit

The parameters voltage_scale_factor and power_scale_factordetermine the base for all voltage and power parameters in this data model. For example,

where the mentioned fields vm_nom, pd_nom and qd_nom are sample voltage and power variables which are defined later.

On the other hand,vbase_default and sbase_default provide default values for a 'per unit' conversion; these do not affect the interpretation of the parameters in this model, like the scale factors do. Note that vbase_default is a Dict{Any,Real}, with pairs of bus ids and voltage magnitude levels, since in per unit conversion, the voltage base can change from bus to bus. The power base is the same everywhere, and therefore sbase_default has a single value.

Buses (bus)

The data model below allows us to include buses of arbitrary many terminals (i.e., more than the usual four). This would be useful for

NameDefaultTypeUnitsUsedDescription
terminals[1,2,3,4]Vector{Int}alwaysTerminals for which the bus has active connections
vm_lbVector{Real}voltopfMinimum conductor-to-ground voltage magnitude, size=nphases
vm_ubVector{Real}voltopfMaximum conductor-to-ground voltage magnitude, size=nphases
vm_pair_ubVector{Tuple}opfe.g. [(1,2,210)] means |U1-U2|>210
vm_pair_lbVector{Tuple}opfe.g. [(1,2,230)] means |U1-U2|<230
grounded[]Vector{Int}alwaysList of terminals which are grounded
rg[]Vector{Real}alwaysResistance of each defined grounding, size=length(grounded)
xg[]Vector{Real}alwaysReactance of each defined grounding, size=length(grounded)
vmVector{Real}voltalwaysVoltage magnitude at bus. If set, voltage magnitude at bus is fixed
vaVector{Real}degreealwaysVoltage angle at bus. If set, voltage angle at bus is fixed
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

Each terminal c of the bus has an associated complex voltage phasor v[c]. There are two types of voltage magnitude bounds. The first type bounds the voltage magnitude of each v[c] individually,

However, especially in four-wire networks, bounds are more naturally imposed on the difference of two terminal voltages instead, e.g. for terminals c and d,

This is why we introduce the fields vm_pair_lb and vm_pair_ub, which define bounds for pairs of terminals,

Finally, we give an example of how grounding impedances should be entered. If terminal 4 is grounded through an impedance Z=1+j2, we write

Special Case: three-phase bus

For three-phase buses, instead of specifying bounds explicitly for each pair of windings, often we want to specify 'phase-to-phase', 'phase-to-neutral' and 'neutral-to-ground' bounds. This can be done conveniently with a number of additional fields. First, phases is a list of the phase terminals, and neutral designates a single terminal to be the neutral.

If all of these are specified, these bounds also imply valid bounds for the individual voltage magnitudes,

Instead of defining the bounds directly, they can be specified through an associated voltage zone.

NameDefaultTypeUnitsUsedDescription
phasesVector{Int}alwaysIdentifies the terminal that represents the neutral conductor
neutralIntalwaysIdentifies the terminal that represents the neutral conductor
vm_pn_lbRealopfMinimum phase-to-neutral voltage magnitude for all phases
vm_pn_ubRealopfMaximum phase-to-neutral voltage magnitude for all phases
vm_pp_lbRealopfMinimum phase-to-phase voltage magnitude for all phases
vm_pp_ubRealopfMaximum phase-to-phase voltage magnitude for all phases
vm_ng_ubRealopfMaximum neutral-to-ground voltage magnitude

Edge Objects

These objects represent edges on the power grid and therefore require f_bus and t_bus (or buses in the case of transformers), and f_connections and t_connections (or connections in the case of transformers).

Lines (line)

This is a pi-model branch. When a linecode is given, and any of rs, xs, b_fr, b_to, g_fr or g_to are specified, any of those overwrite the values on the linecode.

NameDefaultTypeUnitsUsedDescription
f_busStringalwaysid of from-side bus connection
t_busStringalwaysid of to-side bus connection
f_connectionsVector{Int}alwaysIndicates for each conductor, to which terminal of the f_bus it connects
t_connectionsVector{Int}alwaysIndicates for each conductor, to which terminal of the t_bus it connects
linecodeStringalwaysid of an associated linecode
rsMatrix{Real}ohm/meteralwaysSeries resistance matrix, size=(nconductors,nconductors)
xsMatrix{Real}ohm/meteralwaysSeries reactance matrix, size=(nconductors,nconductors)
g_frzeros(nconductors, nconductors)Matrix{Real}siemens/meter/HzalwaysFrom-side conductance, size=(nconductors,nconductors)
b_frzeros(nconductors, nconductors)Matrix{Real}siemens/meter/HzalwaysFrom-side susceptance, size=(nconductors,nconductors)
g_tozeros(nconductors, nconductors)Matrix{Real}siemens/meter/HzalwaysTo-side conductance, size=(nconductors,nconductors)
b_tozeros(nconductors, nconductors)Matrix{Real}siemens/meter/HzalwaysTo-side susceptance, size=(nconductors,nconductors)
length1.0RealmeteralwaysLength of the line
cm_ubVector{Real}ampopfSymmetrically applicable current rating, size=nconductors
sm_ubVector{Real}wattopfSymmetrically applicable power rating, size=nconductors
vad_lbVector{Real}degreeopfVoltage angle difference lower bound
vad_ubVector{Real}degreeopfVoltage angle difference upper bound
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively

Transformers (transformer)

These are n-winding (nwinding), n-phase (nphase), lossy transformers. Note that most properties are now Vectors (or Vectors of Vectors), indexed over the windings.

NameDefaultTypeUnitsUsedDescription
busVector{String}alwaysList of bus for each winding, size=nwindings
connectionsVector{Vector{Int}}alwaysList of connection for each winding, size=((nconductors),nwindings)
configurationsfill(WYE, nwindings)Vector{ConnConfig}alwaysWYE or DELTA. List of configuration for each winding, size=nwindings
xfmrcodeStringalwaysid of
xsczeros(nwindings*(nwindings-1)/2)Vector{Real}sm_nom[1]alwaysList of short-circuit reactances between each pair of windings, relative to the VA rating of the first winding; enter as a list of the upper-triangle elements
rwzeros(nwindings)Vector{Real}sm_nom[1]alwaysActive power lost due to resistance of each winding, relative to the VA rating of each winding winding
cmag0.0Realsm_nom[1]alwaysTotal no-load reactive power drawn by the transformer, relative to VA rating of the first winding (magnetizing current)
noloadloss0.0Realsm_nom[1]alwaysTotal no-load active power drawn by the transformer, relative to VA rating of the first winding
tm_nomones(nwindings)Vector{Real}alwaysNominal tap ratio for the transformer, size=nwindings (multiplier)
tm_ubVector{Vector{Real}}opfMaximum tap ratio for each winding and phase, size=((nphases),nwindings) (base=tm_nom)
tm_lbVector{Vector{Real}}opfMinimum tap ratio for for each winding and phase, size=((nphases),nwindings) (base=tm_nom)
tm_setfill(fill(1.0,nphases),nwindings)Vector{Vector{Real}}alwaysSet tap ratio for each winding and phase, size=((nphases),nwindings) (base=tm_nom)
tm_fixfill(fill(true,nphases),nwindings)Vector{Vector{Bool}}oltcIndicates for each winding and phase whether the tap ratio is fixed, size=((nphases),nwindings)
polarityfill(1,nwindings)Vector{Int}always
vm_nomVector{Real}voltalways
sm_nomVector{Real}wattalways
sm_ubRealwattopfRating for the total apparent power magnitude at each winding
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively

Asymmetric, Lossless, Two-Winding (AL2W) Transformers (transformer)

Special case of the Generic transformer, which is still a transformer object, but has a simplified method for its definition. These are transformers are asymmetric (A), lossless (L) and two-winding (2W). Asymmetric refers to the fact that the secondary is always has a WYE configuration, whilst the primary can be DELTA. The table below indicates alternate, more simple ways to specify the special case of an AL2W Transformer. xsc and rw cannot be specified for an AL2W transformer, because it is lossless. To use this definition format, all of f_bus, t_bus, f_connections, t_connections, and configuration must be used, and none of buses, connections, configurations may be used. xfmrcode is ignored for this component.

NameDefaultTypeUnitsUsedDescription
f_busStringalwaysAlternative way to specify buses, requires both f_bus and t_bus
t_busStringalwaysAlternative way to specify buses, requires both f_bus and t_bus
f_connectionsVector{Int}alwaysAlternative way to specify connections, requires both f_connections and t_connections, size=nphases
t_connectionsVector{Int}alwaysAlternative way to specify connections, requires both f_connections and t_connections, size=nphases
configurationWYEConnConfigalwaysWYE or DELTA. Alternative way to specify the from-side configuration, to-side is always WYE
tm_nom1.0RealalwaysNominal tap ratio for the transformer (multiplier)
tm_ubVector{Real}opfMaximum tap ratio for each phase (base=tm_nom), size=nphases
tm_lbVector{Real}opfMinimum tap ratio for each phase (base=tm_nom), size=nphases
tm_setfill(1.0,nphases)Vector{Real}alwaysSet tap ratio for each phase (base=tm_nom), size=nphases
tm_fixfill(true,nphases)Vector{Bool}oltcIndicates for each phase whether the tap ratio is fixed, size=nphases
sm_ubRealopfRating for the total apparent power magnitude at each winding

Transformers with voltage regulator control (controls)

Special case of the Generic transformer, which is part of the transformer object, and emulates a standard utility voltage regulator. The taps of these transformers can be controlled by modelling a line drop compensator.

NameDefaultTypeUnitsUsedDescription
vregVector{Vector{Real}}voltoltcVoltage regulator reference, default value is 120.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)
bandVector{Vector{Real}}voltoltcVoltage bandwidth, default value is 3.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)
ptratioVector{Vector{Real}}oltcVoltage ratio of the potential transformer, default value is 60.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)
ctprimVector{Vector{Real}}ampoltcCurrent transformer rating on primary side, default value is 300.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)
rVector{Vector{Real}}voltoltcResistance setting on line drop compensator, default value is 0.0 for both controlled winding and winding without regulator control, size=((nphases),nwindings)
xVector{Vector{Real}}voltoltcReactance setting on line drop compensator, default value is 0.0 for both controlled winding and winding without regulator control, size=((nphases),nwindings)

Switches (switch)

Switches without rs, xs or a linecode (conductance/susceptance not considered), defined the switch will be treated as lossless. If lossy parameters are defined, switch objects will be decomposed into virtual branch & bus, and an ideal switch.

NameDefaultTypeUnitsUsedDescription
f_busStringalwaysid of from-side bus connection
t_busStringalwaysid of to-side bus connection
f_connectionsVector{Int}alwaysIndicates for each conductor, to which terminal of the f_bus it connects
t_connectionsVector{Int}alwaysIndicates for each conductor, to which terminal of the t_bus it connects
cm_ubVector{Real}ampopfSymmetrically applicable current rating
sm_ubVector{Real}wattopfSymmetrically applicable power rating
linecodeStringalwaysid of an associated linecode, does not take into account conductance/susceptance
rszeros(nphases,nphases)Matrix{Real}ohmalwaysSeries resistance matrix, size=(nphases,nphases)
xszeros(nphases,nphases)Matrix{Real}ohmalwaysSeries reactance matrix, size=(nphases,nphases)
dispatchableNODispatchableNO or YES, indicates whether switch state can be changed in a switching optimization problem
stateCLOSEDSwitchStatealwaysCLOSED: closed or OPEN: open, to indicate state of switch
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively

Node Objects

These are objects that have single bus connections. Every object will have at least bus, connections, and status.

Shunts (shunt)

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
gsMatrix{Real}siemensalwaysConductance, size=(nconductors,nconductors)
bsMatrix{Real}siemensalwaysSusceptance, size=(nconductors,nconductors)
modelGENERICShuntModelGENERIC, CAPACITOR, or REACTOR. Indicates the type of shunt which may be necessary for transient stability analysis
dispatchableNODispatchablemldNO or YES, indicates whether a shunt can be shed
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,Any}multinetworkDictionary containing time series parameters.

Shunts with capacitor control (controls)

Special case of the shunt capacitors, which is part of the shunt object, and emulates a typical utility capacitor control (CapControl) by sending switching messages.

NameDefaultTypeUnitsUsedDescription
typeVector{String}capcControl type, default is current for controlled phase, `for uncontrolled phase,size=1forkvartype, otherwisesize=(nphases)`
elementStringcapcsource_id of element (typically line or transformer) to which CapControl is connected
terminalVector{Int}capcNumber of the terminal of circuit element to which CapControl is connected, default is 1 for controlled phase, 0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)
onsettingVector{Real}capcValue at which the CapControl switches the capacitor on, default is 300.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)
offsettingVector{Real}capcValue at which the CapControl switches the capacitor off, default is 200.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)
voltoverrideVector{Bool}capcIndicate whether voltage over ride is enabled, default is false for both controlled and uncontrolled phases, size=1 for kvar type, otherwise size=(nphases)
ptratioVector{Real}capcRatio of potential transformer, default is 60.0 for controlled phase, 0.0 for uncontrolled phase, size=(nphases)
ctratioVector{Real}capcRatio of current transformer, default is 60.0 for controlled phase, 0.0 for uncontrolled phase, size=(nphases)
vminVector{Real}voltcapcMinimum voltage below which CapControl switches the capacitor on, default is 115.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)
vmaxVector{Real}voltcapcMaximum voltage above which CapControl switches the capacitor off, default is 126.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)

Loads (load)

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
configurationWYEConnConfigalwaysWYE or DELTA. If WYE, connections[end]=neutral
modelPOWERLoadModelalwaysPOWER, IMPEDANCE, CURRENT, EXPONENTIAL, or ZIP. Indicates the type of voltage-dependency
pd_nomVector{Real}wattalwaysNominal active load, with respect to vm_nom, size=nphases
qd_nomVector{Real}varalwaysNominal reactive load, with respect to vm_nom, size=nphases
vm_nomRealvoltmodel!=POWERNominal voltage (multiplier)
dispatchableNODispatchablemldNO or YES, indicates whether a load can be shed
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

Multi-phase loads define a number of individual loads connected between two terminals each. How they are connected, is defined both by configuration and connections. The table below indicates the value of configuration and lengths of the other properties for a consistent definition,

configurationconnectionspd_nom | qd_nom | pd_exp
DELTA21
DELTA33
WYE21
WYE32
WYENN-1

Note that for delta loads, only 2 and 3 connections are allowed. Each individual load i is connected between two terminals, exposed to a voltage magnitude v[i], which leads to a consumption pd[i]+j*qd[i]. The model then defines the relationship between these quantities,

modelpd[i]/pd_nom[i]=qd[i]/qd_nom[i]=
POWER11
CURRENT(v[i]/vm_nom)(v[i]/vm_nom)
IMPEDANCE(v[i]/vm_nom)^2(v[i]/vm_nom)^2

Two more model types are supported, which need additional fields and are defined below.

model == EXPONENTIAL

NameDefaultTypeUnitsUsedDescription
pd_expRealmodel==EXPONENTIAL
qd_expRealmodel==EXPONENTIAL

model == ZIP

ZIP load models are split into IMPEDANCE, CURRENT, POWER models.

NameDefaultTypeUnitsUsedDescription
zipvVector{Real}model==ZIPFirst 3 are ZIP weighting factors for active power (pd_cz,pd_ci,pd_cp), next 3 are ZIP weighting factors for reactive power (qd_cz,qd_ci,qd_cp), last 1 is cut-off voltage in p.u. of base kV; load is 0 below this cut-off

Generators (generator)

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
configurationWYEConnConfigalwaysWYE or DELTA. If WYE, connections[end]=neutral
vgVector{Real}voltcontrol_mode==ISOCHRONOUSVoltage magnitude setpoint
pg_lbzeros(nphases)Vector{Real}wattopfLower bound on active power generation per phase, size=nphases
pg_ubfill(Inf, nphases)Vector{Real}wattopfUpper bound on active power generation per phase, size=nphases
qg_lb-pg_ubVector{Real}varopfLower bound on reactive power generation per phase, size=nphases
qg_ubpg_ubVector{Real}varopfUpper bound on reactive power generation per phase, size=nphases
pgVector{Real}wattsolutionPresent active power generation per phase, size=nphases
qgVector{Real}varsolutionPresent reactive power generation per phase, size=nphases
control_modeFREQUENCYDROOPControlModeFREQUENCYDROOP or ISOCHRONOUS
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

generator Cost Model

The generator cost model is currently specified by the following fields.

NameDefaultTypeUnitsUsedDescription
cost_pg_model2IntopfCost model type, 1 = piecewise-linear, 2 = polynomial
cost_pg_parameters[0.0, 1.0, 0.0]Vector{Real}/MVAopfCost model polynomial

Photovoltaic Systems (solar)

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
configurationWYEConnConfigalwaysWYE or DELTA. If WYE, connections[end]=neutral
pg_lbVector{Real}wattopfLower bound on active power generation per phase, size=nphases
pg_ubVector{Real}wattopfUpper bound on active power generation per phase, size=nphases
qg_lbVector{Real}varopfLower bound on reactive power generation per phase, size=nphases
qg_ubVector{Real}varopfUpper bound on reactive power generation per phase, size=nphases
pgVector{Real}wattsolutionPresent active power generation per phase, size=nphases
qgVector{Real}varsolutionPresent reactive power generation per phase, size=nphases
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

solar Cost Model

The cost model for a photovoltaic system currently matches that of generators.

NameDefaultTypeUnitsUsedDescription
cost_pg_model2IntopfCost model type, 1 = piecewise-linear, 2 = polynomial
cost_pg_parameters[0.0, 1.0, 0.0]Vector{Real}/MVAopfCost model polynomial

Wind Turbine Systems (wind)

Wind turbine systems are most closely approximated by induction machines, also known as asynchronous machines. These are not currently supported, but there is plans to support them in the future.

Storage (storage)

A storage object is a flexible component that can represent a variety of energy storage objects, like Li-ion batteries, hydrogen fuel cells, flywheels, etc.

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
configurationWYEConnConfigalwaysWYE or DELTA. If WYE, connections[end]=neutral
energyRealwatt-hralwaysStored energy
energy_ubRealopfmaximum energy rating
charge_ubRealopfmaximum charge rating
discharge_ubRealopfmaximum discharge rating
sm_ubRealwattopfPower rating,
cm_ubRealampopfCurrent rating,
charge_efficiencyRealpercentalwayscharging efficiency (losses)
discharge_efficiencyRealpercentalwaysdischarging efficiency (losses)
qs_ubRealopfMaximum reactive power injection,
qs_lbRealopfMinimum reactive power injection,
rsRealohmalwaysconverter resistance
xsRealohmalwaysconverter reactance
pexRealalwaysTotal active power standby exogenous flow (loss)
qexRealalwaysTotal reactive power standby exogenous flow (loss)
psVector{Real}wattsolutionPresent active power injection
qsVector{Real}varsolutionPresent reactive power injection
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

Voltage Sources (voltage_source)

A voltage source is a source of power at a set voltage magnitude and angle connected to a slack bus. If rs or xs are not specified, the voltage source is assumed to be lossless, otherwise virtual branch and bus will be created in the mathematical model to represent the internal losses of the voltage source.

NameDefaultTypeUnitsUsedDescription
busStringalwaysid of bus connection
connectionsVector{Int}alwaysOrdered list of connected conductors, size=nconductors
configurationWYEConnConfigalwaysWYE or DELTA. If WYE, connections[end]=neutral
vmones(nphases)Vector{Real}voltalwaysVoltage magnitude set at slack bus, size=nphases
vazeros(nphases)RealdegreealwaysVoltage angle offsets at slack bus, applies symmetrically to each phase angle
rszeros(nconductors,nconductors)Matrix{Real}ohmalwaysInternal series resistance of voltage source, size=(nconductors,nconductors)
xszeros(nconductors,nconductors)Matrix{Real}ohmalwaysInternal series reactance of voltage soure, size=(nconductors,nconductors)
statusENABLEDStatusalwaysENABLED or DISABLED. Indicates if component is enabled or disabled, respectively
time_seriesDict{String,String}multinetworkDictionary containing time series parameters.

Data Objects (codes, time series, etc.)

These objects are referenced by node and edge objects, but are not part of the network themselves, only containing data.

Linecodes (linecode)

Linecodes are easy ways to specify properties common to multiple lines.

NameDefaultTypeUnitsUsedDescription
rsMatrix{Real}ohm/meteralwaysSeries resistance, size=(nconductors,nconductors)
xsMatrix{Real}ohm/meteralwaysSeries reactance, size=(nconductors,nconductors)
g_frzeros(nconductors,nconductors)Matrix{Real}siemens/meter/HzalwaysFrom-side conductance, size=(nconductors,nconductors)
b_frzeros(nconductors,nconductors)Matrix{Real}siemens/meter/HzalwaysFrom-side susceptance, size=(nconductors,nconductors)
g_tozeros(nconductors,nconductors)Matrix{Real}siemens/meter/HzalwaysTo-side conductance, size=(nconductors,nconductors)
b_tozeros(nconductors,nconductors)Matrix{Real}siemens/meter/HzalwaysTo-side susceptance, size=(nconductors,nconductors)
cm_ubfill(Inf,nconductors)Vector{Real}ampereopfmaximum current per conductor, symmetrically applicable
sm_ubfill(Inf,nconductors)Vector{Real}wattopfmaximum power per conductor, symmetrically applicable

Transformer Codes (xfmrcode)

Transformer codes are easy ways to specify properties common to multiple transformers

NameDefaultTypeUnitsUsedDescription
configurationsfill(WYE, nwindings)Vector{ConnConfig}alwaysWYE or DELTA. List of configuration for each winding, size=nwindings
xsc[0.0]Vector{Real}ohmalwaysList of short-circuit reactances between each pair of windings; enter as a list of the upper-triangle elements, size=(nwindings == 2 ? 1 : 3)
rwzeros(nwindings)Vector{Real}ohmalwaysList of the winding resistance for each winding, size=nwindings
tm_nomones(nwindings)Vector{Real}alwaysNominal tap ratio for the transformer, size=nwindings (multiplier)
tm_ubVector{Vector{Real}}opfMaximum tap ratio for each winding and phase, size=((nphases), nwindings) (base=tm_nom)
tm_lbVector{Vector{Real}}opfMinimum tap ratio for for each winding and phase, size=((nphases), nwindings) (base=tm_nom)
tm_setfill(fill(1.0, nphases), nwindings)Vector{Vector{Real}}alwaysSet tap ratio for each winding and phase, size=((nphases), nwindings) (base=tm_nom)
tm_fixfill(fill(true, nphases), nwindings)Vector{Vector{Bool}}alwaysIndicates for each winding and phase whether the tap ratio is fixed, size=((nphases), nwindings)

Time Series (time_series)

Time series objects are used to specify time series for e.g. load or generation forecasts.

Some parameters for components specified in this document can support a time series by inserting a reference to a time_series object into the time_series dictionary inside a component under the relevant parameter name. For example, for a load, if pd_nom is supposed to be a time series, the user would specify "time_series" => Dict("pd_nom" => time_series_id) where time_series_id is the id of an object in time_series, and has type Any.

NameDefaultTypeUnitsUsedDescription
timeUnion{Vector{Real},Vector{String}}houralwaysTime points at which values are specified. If time is specified in String, units not required to be in hours.
valuesVector{Real}alwaysMultipers at each time step given in time
offset0RealhouralwaysStart time offset
replacetrueBoolalwaysIndicates to replace with data, instead of multiply. Will only work on non-Array data

Fuses (fuse)

Fuses can be defined on any terminal of any physical component

NameDefaultTypeUnitsUsedDescription
component_typeString
component_idString
terminalsVector{Int}
fuse_curveArray{Vector{Real},2}specifies the fuse blowing condition
minimum_melting_curveArray{Vector{Real},2}specifies the minimum melting conditions of the fuse
diff --git a/dev/manual/eng2math.html b/dev/manual/eng2math.html index a290c4320..81a24caa8 100644 --- a/dev/manual/eng2math.html +++ b/dev/manual/eng2math.html @@ -1,2 +1,2 @@ -Conversion to Mathematical Model · PowerModelsDistribution

Engineering to Mathematical Data Model Mapping

In this document we define the mapping from the engineering data model down to the mathematical data model for each physical component.

bus objects

Buses are parsed into bus and potentially shunt objects.

The mathematical bus model contains only lossless connections to ground. All other connections to grounds are converted to equivalent shunts at that bus. For example, take a bus defined as

bus_eng = Dict("grounded"=>[4, 5], "rg"=>[1.0, 0.0], "xg"=>[2.0, 0.0],...).

This is equivalent to a shunt g+im*b = 1/(1.0+im*2.0) connected to terminal 4, and a lossless grounding at terminal 5 (since rg[2]==xg[2]==0.0). This is mapped to

bus_math = Dict("grounded"=>[5], ...),

shunt_math = Dict("connections"=>[4], "b"=>[b], "g"=>[g]...).

This simplifies the mathematical model, as the modeller does no longer have to consider lossy groundings explicitly.

line objects

Lines are parsed into branch objects with transformer=false

switch objects

Switches are parsed into switch. If there are loss parameters provided (i.e. rs and/or xs) then a virtual branch and virtual bus are created to model the impedance

transformer objects

A transformer can have N windings, each with its own configuration (delta or wye are supported). This is decomposed to a network of N lossless, two-winding transformers which connect to an internal loss model. The to-winding is always wye-connected, hence we refer to these transformers as 'asymmetric'.

The internal loss model is a function of

  • the winding resistance rw,
  • the short-circuit reactance xsc,
  • the no-load loss properties noloadloss (resistive) and magnetizing current imag (reactive).

If all of these are non-zero, this leads to an internal loss model consisting of N virtual buses, (N^2+N)/2 virtual branches, and 1 shunt. These virtual buses and branches are automatically merged and simplified whenever possible; e.g., when all these loss parameters are zero, this simplifies to a single virtual bus, to which all two-winding transformers connect.

For more detail, please refer to [upcoming technical paper]. #TODO add link to paper

shunt objects

Shunts are parsed directly into shunt objects.

load objects

Loads are parsed into load objects. See the discussion under the Load Model documentation on the sidebar, for a detailed discussion of the various load models.

generator objects

Generators are parsed into gen objects.

solar objects

Solar objects (photovoltaic systems) are parsed into gen objects.

voltage_source objects

Voltage sources are parsed into gen objects. If loss parameters are specified (i.e. rs and/or xs) then a virtual bus and branch are created to model the internal impedance.

+Conversion to Mathematical Model · PowerModelsDistribution

Engineering to Mathematical Data Model Mapping

In this document we define the mapping from the engineering data model down to the mathematical data model for each physical component.

bus objects

Buses are parsed into bus and potentially shunt objects.

The mathematical bus model contains only lossless connections to ground. All other connections to grounds are converted to equivalent shunts at that bus. For example, take a bus defined as

bus_eng = Dict("grounded"=>[4, 5], "rg"=>[1.0, 0.0], "xg"=>[2.0, 0.0],...).

This is equivalent to a shunt g+im*b = 1/(1.0+im*2.0) connected to terminal 4, and a lossless grounding at terminal 5 (since rg[2]==xg[2]==0.0). This is mapped to

bus_math = Dict("grounded"=>[5], ...),

shunt_math = Dict("connections"=>[4], "b"=>[b], "g"=>[g]...).

This simplifies the mathematical model, as the modeller does no longer have to consider lossy groundings explicitly.

line objects

Lines are parsed into branch objects with transformer=false

switch objects

Switches are parsed into switch. If there are loss parameters provided (i.e. rs and/or xs) then a virtual branch and virtual bus are created to model the impedance

transformer objects

A transformer can have N windings, each with its own configuration (delta or wye are supported). This is decomposed to a network of N lossless, two-winding transformers which connect to an internal loss model. The to-winding is always wye-connected, hence we refer to these transformers as 'asymmetric'.

The internal loss model is a function of

  • the winding resistance rw,
  • the short-circuit reactance xsc,
  • the no-load loss properties noloadloss (resistive) and magnetizing current imag (reactive).

If all of these are non-zero, this leads to an internal loss model consisting of N virtual buses, (N^2+N)/2 virtual branches, and 1 shunt. These virtual buses and branches are automatically merged and simplified whenever possible; e.g., when all these loss parameters are zero, this simplifies to a single virtual bus, to which all two-winding transformers connect.

For more detail, please refer to [upcoming technical paper]. #TODO add link to paper

shunt objects

Shunts are parsed directly into shunt objects.

load objects

Loads are parsed into load objects. See the discussion under the Load Model documentation on the sidebar, for a detailed discussion of the various load models.

generator objects

Generators are parsed into gen objects.

solar objects

Solar objects (photovoltaic systems) are parsed into gen objects.

voltage_source objects

Voltage sources are parsed into gen objects. If loss parameters are specified (i.e. rs and/or xs) then a virtual bus and branch are created to model the internal impedance.

diff --git a/dev/manual/enums.html b/dev/manual/enums.html index 0136d793d..d6e50a751 100644 --- a/dev/manual/enums.html +++ b/dev/manual/enums.html @@ -1,2 +1,2 @@ -Enums in Engineering Model · PowerModelsDistribution

PowerModelsDistribution Enum Types

Within the PowerModelsDistribution Engineering Model we have included the use of Enums. Here we document the fields for which Enums are expected and the possible Enums available.

Data Model

Any place in PowerModelsDistribution that calls for specifying the data_model, either in function calls or the "data_model" field inside the data structure itself, will expect a DataModel type.

The DSS data model is an output of parse_dss, and is an untranslated raw parse of a DSS file. This Enum exists for use by count_nodes, where the method to count the number of active nodes is different between all three models.

Component Status

All "status" fields in the ENGINEERING model expect a Status type.

Connection Configuration

All "configuration" fields in the ENGINEERING model expect a ConnConfig type.

Load Model

For load objects, the "model" field expects a LoadModel type to specify the type of load model to use, where

  • POWER indicates constant power,
  • CURRENT indicates constant current,
  • IMPEDANCE indicates constant impedance,
  • EXPONENTIAL indicates an exponential load model, and
  • ZIP indicates a ZIP model

Shunt Model

For shunt objects, the "model" field expects a ShuntModel type to specify the origin of the shunt object, which is important for transient analysis.

Switch State

For switch objects, the "state" field expects a SwitchState type to specify whether the switch is currently open or closed.

Dispatchable Component

Some components can be Dispatchable, e.g. if a switch is dispatchable that means it is free to open or close, but if not then it is fixed in place, or if a load is dispatchable it implies that it can be shed in a run_mc_mld problem.

Generator Control Mode

For generator objects, the "control_mode" field expects a ControlMode type to specify whether the generator is operating in an isochronous mode (i.e. is frequency forming) or droop mode (i.e. is frequency following).

+Enums in Engineering Model · PowerModelsDistribution

PowerModelsDistribution Enum Types

Within the PowerModelsDistribution Engineering Model we have included the use of Enums. Here we document the fields for which Enums are expected and the possible Enums available.

Data Model

Any place in PowerModelsDistribution that calls for specifying the data_model, either in function calls or the "data_model" field inside the data structure itself, will expect a DataModel type.

The DSS data model is an output of parse_dss, and is an untranslated raw parse of a DSS file. This Enum exists for use by count_nodes, where the method to count the number of active nodes is different between all three models.

Component Status

All "status" fields in the ENGINEERING model expect a Status type.

Connection Configuration

All "configuration" fields in the ENGINEERING model expect a ConnConfig type.

Load Model

For load objects, the "model" field expects a LoadModel type to specify the type of load model to use, where

  • POWER indicates constant power,
  • CURRENT indicates constant current,
  • IMPEDANCE indicates constant impedance,
  • EXPONENTIAL indicates an exponential load model, and
  • ZIP indicates a ZIP model

Shunt Model

For shunt objects, the "model" field expects a ShuntModel type to specify the origin of the shunt object, which is important for transient analysis.

Switch State

For switch objects, the "state" field expects a SwitchState type to specify whether the switch is currently open or closed.

Dispatchable Component

Some components can be Dispatchable, e.g. if a switch is dispatchable that means it is free to open or close, but if not then it is fixed in place, or if a load is dispatchable it implies that it can be shed in a run_mc_mld problem.

Generator Control Mode

For generator objects, the "control_mode" field expects a ControlMode type to specify whether the generator is operating in an isochronous mode (i.e. is frequency forming) or droop mode (i.e. is frequency following).

diff --git a/dev/manual/external-data-formats.html b/dev/manual/external-data-formats.html index 50428dfd9..aff14fdb1 100644 --- a/dev/manual/external-data-formats.html +++ b/dev/manual/external-data-formats.html @@ -1,2 +1,2 @@ -External Data Formats · PowerModelsDistribution

External Data Formats

OpenDSS

PowerModelsDistribution supports parsing OpenDSS format files. In particular, we support a raw parsing of all OpenDSS specified components into a dictionary (serializable) structure, and support converting the data values of a smaller subsection of components into their expected types. Those include

  • Line
  • Load
  • Generator
  • Capactior (shunt capacitors only)
  • Reactor
  • Transformer
  • Linecode
  • Xfmrcode
  • Loadshape
  • XYCurve
  • Circuit
  • VSource
  • PVSystem
  • Storage

Of those, a subset of configurations are converted into a PowerModelsDistribution internal data model, namely:

Edge Elements

  • line (from lines and line reactors)
  • transformer (arbitrary winding, all connections except zig-zag)
  • switch (from lines w/ switch=y)

Node Elements

  • generator
  • voltage_source
  • solar (from PVSystem)
  • load (incl. support for constant POWER, constant IMPEDANCE, constant CURRENT, and EXPONENTIAL models)
  • shunt (from shunt capacitors and shunt reactors)
  • storage

Data Elements

  • linecode
  • xfmrcode
  • time_series (from loadshapes)

Several notes about the specific design choices w.r.t. OpenDSS are explained below.

Circuit

The default connection to the transmission system is modeled as an ideal voltage source named "source" in OpenDSS, which is connected by default to a node named "sourcebus", but this can be changed.

Lines

Although Lines and Linecodes are supported, the more generic LineGeometry is not yet supported.

Transformers

Unfortunately, in the OpenDSS format, multi-phase transformers with different taps for each phase are not explicitly supported, so to work around this limitation multiple single phase transformers should be defined, which are then "banked" together using the bank property.

Capacitors and Reactors

Capacitors and reactors are supported as shunts, although shunts to ground via delta connections are not yet supported. Furthermore, generic reactors are not supported, only those whose second terminal is connected to ground (default for unspecified second terminal). Reactors are also supported as a resistanceless line if their second terminal is connected, but only for topological continuity of the network.

PowerModelsDistribution JSON

You can export a PowerModelsDistribution data structure to a JSON file using the print_file command and parse one in using the parse_file command

+External Data Formats · PowerModelsDistribution

External Data Formats

OpenDSS

PowerModelsDistribution supports parsing OpenDSS format files. In particular, we support a raw parsing of all OpenDSS specified components into a dictionary (serializable) structure, and support converting the data values of a smaller subsection of components into their expected types. Those include

  • Line
  • Load
  • Generator
  • Capactior (shunt capacitors only)
  • Reactor
  • Transformer
  • Linecode
  • Xfmrcode
  • Loadshape
  • XYCurve
  • Circuit
  • VSource
  • PVSystem
  • Storage

Of those, a subset of configurations are converted into a PowerModelsDistribution internal data model, namely:

Edge Elements

  • line (from lines and line reactors)
  • transformer (arbitrary winding, all connections except zig-zag)
  • switch (from lines w/ switch=y)

Node Elements

  • generator
  • voltage_source
  • solar (from PVSystem)
  • load (incl. support for constant POWER, constant IMPEDANCE, constant CURRENT, and EXPONENTIAL models)
  • shunt (from shunt capacitors and shunt reactors)
  • storage

Data Elements

  • linecode
  • xfmrcode
  • time_series (from loadshapes)

Several notes about the specific design choices w.r.t. OpenDSS are explained below.

Circuit

The default connection to the transmission system is modeled as an ideal voltage source named "source" in OpenDSS, which is connected by default to a node named "sourcebus", but this can be changed.

Lines

Although Lines and Linecodes are supported, the more generic LineGeometry is not yet supported.

Transformers

Unfortunately, in the OpenDSS format, multi-phase transformers with different taps for each phase are not explicitly supported, so to work around this limitation multiple single phase transformers should be defined, which are then "banked" together using the bank property.

Capacitors and Reactors

Capacitors and reactors are supported as shunts, although shunts to ground via delta connections are not yet supported. Furthermore, generic reactors are not supported, only those whose second terminal is connected to ground (default for unspecified second terminal). Reactors are also supported as a resistanceless line if their second terminal is connected, but only for topological continuity of the network.

PowerModelsDistribution JSON

You can export a PowerModelsDistribution data structure to a JSON file using the print_file command and parse one in using the parse_file command

diff --git a/dev/manual/formulations.html b/dev/manual/formulations.html index da1a6f057..e41dc2e75 100644 --- a/dev/manual/formulations.html +++ b/dev/manual/formulations.html @@ -48,4 +48,4 @@ EN-ACR (AbstractExplicitNeutralIVRModel) | -|-- ACRENPowerModel +|-- ACRENPowerModel diff --git a/dev/manual/load-model.html b/dev/manual/load-model.html index 11eb95644..e4135673d 100644 --- a/dev/manual/load-model.html +++ b/dev/manual/load-model.html @@ -3,4 +3,4 @@ S^d&=\text{pd}+j.\text{qd} & S^\text{bus}&=\text{pd_bus}+j.\text{qd_bus}\\ I^d&=\text{crd}+j.\text{cid} & I^\text{bus}&=\text{crd_bus}+j.\text{cid_bus}\\ U^d&=\text{vrd}+j.\text{vid} & U^\text{bus}&=\text{vr}+j.\text{vi}\\ -\end{align}\]

Voltage dependency

The general, exponential load model is defined as

\[P^d_i = P^{d,0}_i \left(\frac{V^d_i}{V^{d,0}_i}\right)^{\alpha_i} = a_i \left(V^d_i\right)^{\alpha_i}\]

\[Q^d_i = Q^{d,0}_i \left(\frac{V^d_i}{V^{d,0}_i}\right)^{\beta_i} = b_i \left(V^d_i\right)^{\beta_i}.\]

There are a few cases which get a special name: constant power ($\alpha=\beta=0$), constant current ($\alpha=\beta=1$), and constant impedance ($\alpha=\beta=2$).

Wye-connected Loads

A wye-connected load connects between a set of phases $\mathcal{P}$ and a neutral conductor $n$. The voltage as seen by each individual load is then

\[U^d = U^\text{bus}_\mathcal{P}-U^\text{bus}_n,\]

whilst the current

\[I^\text{bus}_\mathcal{P} = I^\text{d},\;\;\;I^\text{bus}_n=-1^TI^d\]

We now develop the expression for the power drawn at the bus for the phase conductors

\[S^\text{bus}_\mathcal{P} = (U^d+U^\text{bus}_n)\odot(I^d)^* = S^d+U^\text{bus}_n S^d\oslash U^d.\]

From conservation of power or simply the formulas above,

\[S^\text{bus}_n = -1^TS^\text{bus}_\mathcal{P}+1^TS^d.\]

Grounded neutral

Note that when the neutral is grounded, i.e. $U^\text{bus}_n=0$, these formulas simplify to

\[S^\text{bus}_\mathcal{P}=S^d,\;\;\;S^\text{bus}_n=0,\]

which is why in Kron-reduced unbalanced networks, you can directly insert the power consumed by the loads, in the nodal power balance equations.

Delta-connected Loads

Firstly, define the three-phase delta transformation matrix

\[M^\Delta_3 = \begin{bmatrix}\;\;\;1 & -1 & \;\;0\\ \;\;\;0 & \;\;\;1 & -1\\ -1 & \;\;\;0 & \;\;\;1\end{bmatrix},\]

which can be extended to more phases in a straight-forward manner. For loads connected between split-phase terminals of triplex nodes (usually located on the secondary side of center-tapped transformers), we define a single-phase delta transformation matrix

\[M^\Delta_1 = \begin{bmatrix} 1 & -1 \end{bmatrix}.\]

Now,

\[U^d = M^\Delta U^\text{bus},\;\;\; I^\text{bus} = \left(M^\Delta\right)^T I^d.\]

We can related $S^\text{bus}$ to $U^\text{bus}$ and $I^d$

\[S^\text{bus} = U^\text{bus}\odot \left(I^\text{bus}\right)^* = U^\text{bus}\odot \left(M^\Delta\right)^T\left(I^d\right)^*,\]

and using the fact that $\left(I^d\right)^*=S^d \oslash U^d$, and the expression above for $U^d$,

\[S^\text{bus} = U^\text{bus}\left(M^\Delta\right)^T S^d \oslash M^\Delta U^\text{bus}\]

+\end{align}\]

Voltage dependency

The general, exponential load model is defined as

\[P^d_i = P^{d,0}_i \left(\frac{V^d_i}{V^{d,0}_i}\right)^{\alpha_i} = a_i \left(V^d_i\right)^{\alpha_i}\]

\[Q^d_i = Q^{d,0}_i \left(\frac{V^d_i}{V^{d,0}_i}\right)^{\beta_i} = b_i \left(V^d_i\right)^{\beta_i}.\]

There are a few cases which get a special name: constant power ($\alpha=\beta=0$), constant current ($\alpha=\beta=1$), and constant impedance ($\alpha=\beta=2$).

Wye-connected Loads

A wye-connected load connects between a set of phases $\mathcal{P}$ and a neutral conductor $n$. The voltage as seen by each individual load is then

\[U^d = U^\text{bus}_\mathcal{P}-U^\text{bus}_n,\]

whilst the current

\[I^\text{bus}_\mathcal{P} = I^\text{d},\;\;\;I^\text{bus}_n=-1^TI^d\]

We now develop the expression for the power drawn at the bus for the phase conductors

\[S^\text{bus}_\mathcal{P} = (U^d+U^\text{bus}_n)\odot(I^d)^* = S^d+U^\text{bus}_n S^d\oslash U^d.\]

From conservation of power or simply the formulas above,

\[S^\text{bus}_n = -1^TS^\text{bus}_\mathcal{P}+1^TS^d.\]

Grounded neutral

Note that when the neutral is grounded, i.e. $U^\text{bus}_n=0$, these formulas simplify to

\[S^\text{bus}_\mathcal{P}=S^d,\;\;\;S^\text{bus}_n=0,\]

which is why in Kron-reduced unbalanced networks, you can directly insert the power consumed by the loads, in the nodal power balance equations.

Delta-connected Loads

Firstly, define the three-phase delta transformation matrix

\[M^\Delta_3 = \begin{bmatrix}\;\;\;1 & -1 & \;\;0\\ \;\;\;0 & \;\;\;1 & -1\\ -1 & \;\;\;0 & \;\;\;1\end{bmatrix},\]

which can be extended to more phases in a straight-forward manner. For loads connected between split-phase terminals of triplex nodes (usually located on the secondary side of center-tapped transformers), we define a single-phase delta transformation matrix

\[M^\Delta_1 = \begin{bmatrix} 1 & -1 \end{bmatrix}.\]

Now,

\[U^d = M^\Delta U^\text{bus},\;\;\; I^\text{bus} = \left(M^\Delta\right)^T I^d.\]

We can related $S^\text{bus}$ to $U^\text{bus}$ and $I^d$

\[S^\text{bus} = U^\text{bus}\odot \left(I^\text{bus}\right)^* = U^\text{bus}\odot \left(M^\Delta\right)^T\left(I^d\right)^*,\]

and using the fact that $\left(I^d\right)^*=S^d \oslash U^d$, and the expression above for $U^d$,

\[S^\text{bus} = U^\text{bus}\left(M^\Delta\right)^T S^d \oslash M^\Delta U^\text{bus}\]

diff --git a/dev/manual/math-model.html b/dev/manual/math-model.html index e14f14efd..36490c5e7 100644 --- a/dev/manual/math-model.html +++ b/dev/manual/math-model.html @@ -61,4 +61,4 @@ & |diag(\mathbf{S}_{ij})| \leq \mathbf{s}^u_{ij} \;\; \forall (i,j) \in E \cup E^R \\ & \theta^{\Delta l}_{ij,c} \leq \angle (V_{i,c} V^*_{j,c}) \leq \theta^{\Delta u}_{ij,c} \;\; \forall (i,j) \in E, \forall c \in C % -\end{align}\]

+\end{align}\]

diff --git a/dev/manual/power-flow.html b/dev/manual/power-flow.html index 3095c8210..0be512cc8 100644 --- a/dev/manual/power-flow.html +++ b/dev/manual/power-flow.html @@ -1,5 +1,5 @@ -Power Flow Computations · PowerModelsDistribution

Power Flow Computations

The typical goal of PowerModelsDistribution is to build a JuMP model that is used to solve distribution power network optimization problems. The JuMP model abstraction enables PowerModelsDistribution to have state-of-the-art performance on a wide range of problem formulations. That said, for the specific case of power flow computations, in some specific applications performance gains can be had by avoiding the JuMP model abstraction and solving the problem more directly. To that end, PowerModelsDistribution includes Julia-native solvers for AC power flow in rectangular voltage coordinates. This section provides an overview of the different power flow options that are available in PowerModelsDistribution and under what circumstances they may be beneficial.

Generic Power Flow

The general purpose power flow solver in PowerModelsDistribution is,

This function builds a JuMP model for a wide variety of unbalanced power flow formulations supported by PowerModelsDistribution. For example it supports,

  • ACPUPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in polar coordinates
  • ACRPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in rectangular coordinates
  • ACRENPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in rectangular coordinates with explicit neutral conductor
  • IVRUPowerModel - a non-convex nonlinear AC power unbalanced flow using current voltage variables in rectangular coordinates
  • IVRENPowerModel - a non-convex nonlinear AC unbalanced power flow using current voltage variables in rectangular coordinates with explicit neutral conductor

The solve_mc_pf solution method is both formulation and solver agnostic and can leverage the wide range of solvers that are available in the JuMP ecosystem. Many of these solvers are commercial-grade, which in turn makes solve_mc_pf the most reliable power flow solution method in PowerModelsDistribution.

Warm Starting

In some applications an initial guess of the power flow solution may be available. In such a case, this information may be able to decrease a solver's time to convergence, especially when solving systems of nonlinear equations. The _start postfix can be used in the network data to initialize the solver's variables and provide a suitable solution guess. The most common values are as follows,

For each generator,

  • pg_start - active power injection starting point
  • qg_start - reactive power injection starting point

For each bus,

  • vm_start - voltage magnitude starting point for the ACPUPowerModel model
  • va_start - voltage angle starting point for the ACPUPowerModel model
  • vr_start - real voltage starting point for the IVRUPowerModel model
  • vi_start - imaginary voltage starting point for the IVRUPowerModel model

The following helper function can be used to use the solution point in the network data as the starting point for solve_mc_pf.

PowerModelsDistribution.add_start_voltage!Function
add_start_voltage!(
+Power Flow Computations · PowerModelsDistribution

Power Flow Computations

The typical goal of PowerModelsDistribution is to build a JuMP model that is used to solve distribution power network optimization problems. The JuMP model abstraction enables PowerModelsDistribution to have state-of-the-art performance on a wide range of problem formulations. That said, for the specific case of power flow computations, in some specific applications performance gains can be had by avoiding the JuMP model abstraction and solving the problem more directly. To that end, PowerModelsDistribution includes Julia-native solvers for AC power flow in rectangular voltage coordinates. This section provides an overview of the different power flow options that are available in PowerModelsDistribution and under what circumstances they may be beneficial.

Generic Power Flow

The general purpose power flow solver in PowerModelsDistribution is,

This function builds a JuMP model for a wide variety of unbalanced power flow formulations supported by PowerModelsDistribution. For example it supports,

  • ACPUPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in polar coordinates
  • ACRPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in rectangular coordinates
  • ACRENPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in rectangular coordinates with explicit neutral conductor
  • IVRUPowerModel - a non-convex nonlinear AC power unbalanced flow using current voltage variables in rectangular coordinates
  • IVRENPowerModel - a non-convex nonlinear AC unbalanced power flow using current voltage variables in rectangular coordinates with explicit neutral conductor

The solve_mc_pf solution method is both formulation and solver agnostic and can leverage the wide range of solvers that are available in the JuMP ecosystem. Many of these solvers are commercial-grade, which in turn makes solve_mc_pf the most reliable power flow solution method in PowerModelsDistribution.

Warm Starting

In some applications an initial guess of the power flow solution may be available. In such a case, this information may be able to decrease a solver's time to convergence, especially when solving systems of nonlinear equations. The _start postfix can be used in the network data to initialize the solver's variables and provide a suitable solution guess. The most common values are as follows,

For each generator,

  • pg_start - active power injection starting point
  • qg_start - reactive power injection starting point

For each bus,

  • vm_start - voltage magnitude starting point for the ACPUPowerModel model
  • va_start - voltage angle starting point for the ACPUPowerModel model
  • vr_start - real voltage starting point for the IVRUPowerModel model
  • vi_start - imaginary voltage starting point for the IVRUPowerModel model

The following helper function can be used to use the solution point in the network data as the starting point for solve_mc_pf.

PowerModelsDistribution.add_start_voltage!Function
add_start_voltage!(
     data_math::Dict{String,Any};
     coordinates=:rectangular,
     uniform_v_start=missing,
@@ -8,7 +8,7 @@
     vm_default=0.0,
     va_default=0.0,
     epsilon::Number=1E-3,
-)::Dict{String,Any}

Adds start values for the voltage to the buses. For a multinetwork data model, you can calculate the start voltages for a representative network through 'calcstartvoltage', and pass the result as 'uniformvstart' to use the same values for all networks and avoid recalculating it for each network. The argument 'epsilon' controls the offset added to ungrounded terminals which would otherwise be set to zero.

source
Warning

Warm starting a solver is a very delicate task and can easily result in degraded performance. Using PowerModelsDistribution' default flat-start values is recommended before experimenting with warm starting a solver.

Native Power Flow

The AC Unbalanced Power Flow problem is ubiquitous in power system analysis. The problem requires solving a system of nonlinear equations, usually via a Newton-Raphson type of algorithm. In PowerModelsDistribution, the standard Julia library is used for solving this system of nonlinear equations. The following function is used to solve Unbalanced Power Flow problem with voltages in rectangular coordinates.

PowerModelsDistribution.compute_mc_pfFunction
compute_mc_pf(
+)::Dict{String,Any}

Adds start values for the voltage to the buses. For a multinetwork data model, you can calculate the start voltages for a representative network through 'calcstartvoltage', and pass the result as 'uniformvstart' to use the same values for all networks and avoid recalculating it for each network. The argument 'epsilon' controls the offset added to ungrounded terminals which would otherwise be set to zero.

source
Warning

Warm starting a solver is a very delicate task and can easily result in degraded performance. Using PowerModelsDistribution' default flat-start values is recommended before experimenting with warm starting a solver.

Native Power Flow

The AC Unbalanced Power Flow problem is ubiquitous in power system analysis. The problem requires solving a system of nonlinear equations, usually via a Newton-Raphson type of algorithm. In PowerModelsDistribution, the standard Julia library is used for solving this system of nonlinear equations. The following function is used to solve Unbalanced Power Flow problem with voltages in rectangular coordinates.

PowerModelsDistribution.compute_mc_pfFunction
compute_mc_pf(
     data::Dict{String,<:Any};
     explicit_neutral::Bool=false,
     max_iter::Int=100,
@@ -26,13 +26,13 @@
     make_si::Bool=!get(data, "per_unit", false),
     make_si_extensions::Vector{<:Function}=Function[],
     dimensionalize_math_extensions::Dict{String,Dict{String,Vector{String}}}=Dict{String,Dict{String,Vector{String}}}(),
-)::Dict{String,Any}

Takes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns a solution in the original data model defined by data.

Technical description of the native power flow can be found at https://arxiv.org/abs/2305.04405 where implementation fo the fixed-point current injection algorithm, inspired by the existing open-source implementation in OpenDSS. The current injection method is commonly conceived as a system of nonlinear equalities solved by Newton’s method. However, the fixed point iteration variant commonly outperforms most methods, while supporting meshed topologies from the ground up

If make_si is false, data will remain in per-unit.

For an explanation of multinetwork and global_keys, see make_multinetwork

For an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model

For an explanation of make_pu_extensions, see make_per_unit!

For an explanation of ref_extensions, see instantiate_mc_model

For an explanation of map_math2eng_extensions, make_si, make_si_extensions, and dimensionalize_math_extensions, see solution_make_si

source
compute_mc_pf(
+)::Dict{String,Any}

Takes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns a solution in the original data model defined by data.

Technical description of the native power flow can be found at https://arxiv.org/abs/2305.04405 where implementation fo the fixed-point current injection algorithm, inspired by the existing open-source implementation in OpenDSS. The current injection method is commonly conceived as a system of nonlinear equalities solved by Newton’s method. However, the fixed point iteration variant commonly outperforms most methods, while supporting meshed topologies from the ground up

If make_si is false, data will remain in per-unit.

For an explanation of multinetwork and global_keys, see make_multinetwork

For an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model

For an explanation of make_pu_extensions, see make_per_unit!

For an explanation of ref_extensions, see instantiate_mc_model

For an explanation of map_math2eng_extensions, make_si, make_si_extensions, and dimensionalize_math_extensions, see solution_make_si

source
compute_mc_pf(
   pdf::PowerFlowData,
   max_iter::Int,
   stat_tol::Float,
   verbose::Bool
-)

Computes native power flow and requires PowerFlowData (See https://arxiv.org/abs/2305.04405).

source

compute_mc_pf is based on the current injection method and is inspired by OpenDSS's algorithm. compute_mc_pf will typically provide an identical result to solve_mc_pf. However, the existence of solution degeneracy around generator injection assignments and multiple power flow solutions can yield different results. The primary advantage of compute_mc_pf over solve_mc_pf is that it does not require building a JuMP model. If the initial point for the Unbalanced Power Flow solution is near-feasible then compute_mc_pf can result in a significant runtime saving by converging quickly and reducing data-wrangling and memory allocation overheads. This initial guess is provided using the standard _start values. The add_start_voltage! function provides a convenient way of setting a suitable starting point.

Tip

If compute_mc_pf fails to converge try solve_mc_pf instead.

The table below reports the accuracy of the native power flow with respect to OpenDSS native solver tested on three IEEE testcases: | IEEE testcases | maximum voltage p.u difference with OpenDSS power flow solver | | –––––––-| ––––––––––––––––––––––––––––––- | | IEEE13 | 3.765096388188572e-6 | | IEEE34 | 6.805369850332029e-8 | | IEEE123 | 4.021326251365659e-8 |

Input arguments

compute_mc_pf receives input arguments as follows,

  • data_math - network data in MATHEMATICAL format
  • explicit_neutral - a boolean input indication wether or not the neutral is explicitly modelled
  • v_start - warm start if different from in-built initialization algorithm
  • max_iter - maximum iterations
  • stat_tol - statistical tolerance

Outputs

compute_mc_pf provides the following outputs,

  • solution - solution dictionary
  • iterations - number of iterations
  • time_build - time spent on building the power flow data
  • time_solve - time spent on solving the native power flow
  • time_post - time spent to generate solutions
  • time_total - total time
  • termination_status - termination status

Limitations

compute_mc_pf has the following limitations,

  • starting from the math dictionary means that transformer decomposition is already done, which is different from what OpenDSS does
  • we calculate the primitive admittance matrix in p.u. whereas OpenDSS algorithm works with actual units
  • no load model relaxation is performed
  • inspired by OpenDSS, we add small ppm values to certain component primitive admittance values to avoid singularity issues
  • inspired by OpenDSS, switch primitive admittance has specific values

Network Admittance Matrix

Internally compute_mc_pf utilizes an admittance matrix representation of the network data, which may be useful in other contexts. The foundational type for the admittance matrix representations is SparseMatrixCSC.

The following function can be used to compute the admittance matrix from PowerModelsDistribution network data.

compute_mc_pf is based on the current injection method and is inspired by OpenDSS's algorithm. compute_mc_pf will typically provide an identical result to solve_mc_pf. However, the existence of solution degeneracy around generator injection assignments and multiple power flow solutions can yield different results. The primary advantage of compute_mc_pf over solve_mc_pf is that it does not require building a JuMP model. If the initial point for the Unbalanced Power Flow solution is near-feasible then compute_mc_pf can result in a significant runtime saving by converging quickly and reducing data-wrangling and memory allocation overheads. This initial guess is provided using the standard _start values. The add_start_voltage! function provides a convenient way of setting a suitable starting point.

Tip

If compute_mc_pf fails to converge try solve_mc_pf instead.

The table below reports the accuracy of the native power flow with respect to OpenDSS native solver tested on three IEEE testcases: | IEEE testcases | maximum voltage p.u difference with OpenDSS power flow solver | | –––––––-| ––––––––––––––––––––––––––––––- | | IEEE13 | 3.765096388188572e-6 | | IEEE34 | 6.805369850332029e-8 | | IEEE123 | 4.021326251365659e-8 |

Input arguments

compute_mc_pf receives input arguments as follows,

  • data_math - network data in MATHEMATICAL format
  • explicit_neutral - a boolean input indication wether or not the neutral is explicitly modelled
  • v_start - warm start if different from in-built initialization algorithm
  • max_iter - maximum iterations
  • stat_tol - statistical tolerance

Outputs

compute_mc_pf provides the following outputs,

  • solution - solution dictionary
  • iterations - number of iterations
  • time_build - time spent on building the power flow data
  • time_solve - time spent on solving the native power flow
  • time_post - time spent to generate solutions
  • time_total - total time
  • termination_status - termination status

Limitations

compute_mc_pf has the following limitations,

  • starting from the math dictionary means that transformer decomposition is already done, which is different from what OpenDSS does
  • we calculate the primitive admittance matrix in p.u. whereas OpenDSS algorithm works with actual units
  • no load model relaxation is performed
  • inspired by OpenDSS, we add small ppm values to certain component primitive admittance values to avoid singularity issues
  • inspired by OpenDSS, switch primitive admittance has specific values

Network Admittance Matrix

Internally compute_mc_pf utilizes an admittance matrix representation of the network data, which may be useful in other contexts. The foundational type for the admittance matrix representations is SparseMatrixCSC.

The following function can be used to compute the admittance matrix from PowerModelsDistribution network data.

+)

Calculates the admittance matrix from PowerFlowData struct.

source
diff --git a/dev/manual/quickguide.html b/dev/manual/quickguide.html index 347238035..f71e235ee 100644 --- a/dev/manual/quickguide.html +++ b/dev/manual/quickguide.html @@ -12,4 +12,4 @@ [c in 1:ncnds], base_name="$(nw)_vm_$(i)", start = comp_start_value(ref(pm, nw, :bus, i), "vm_start", c, 1.0) ) for i in ids(pm, nw, :bus) -)

Finally, it should be noted that if va_start and vm_start are present in a data dictionary which is passed to the ACR or IVR formulation, these are converted to their rectangular equivalents and used as vr_start and vi_start.

Examples

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

+)

Finally, it should be noted that if va_start and vm_start are present in a data dictionary which is passed to the ACR or IVR formulation, these are converted to their rectangular equivalents and used as vr_start and vi_start.

Examples

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

diff --git a/dev/manual/specifications.html b/dev/manual/specifications.html index 280bca781..8f6e23d34 100644 --- a/dev/manual/specifications.html +++ b/dev/manual/specifications.html @@ -20,4 +20,4 @@ & z^g_i S^{gl}_{i,c} \leq S^g_{i,c} \leq z^g_i S^{gu}_{i,c}\ \ \forall i \in G,\forall c \in C \\ & \sum_{\substack{k\in G_i,c\in C}} S^g_{k,c} - \sum_{\substack{k\in L_i,c\in C}} z^d_k S^d_{k,c}- \sum_{\substack{k\in H_i,c\in C}} z^s_k Y^s_{k,c}\left | V_{i,c} \right |^2 \nonumber \\ & = \sum_{\substack{(i,j)\in E_i\cup E_i^R,c\in C}} S_{ij,c}\ \forall i \in N -\end{align}\]

+\end{align}\]

diff --git a/dev/reference/base.html b/dev/reference/base.html index e78cdaaf9..1ad423827 100644 --- a/dev/reference/base.html +++ b/dev/reference/base.html @@ -1,32 +1,32 @@ -Base · PowerModelsDistribution

Base

Helper functions

PowerModelsDistribution.set_lower_boundFunction
function set_lower_bound(
+Base · PowerModelsDistribution

Base

Helper functions

PowerModelsDistribution.set_lower_boundFunction
function set_lower_bound(
 	x::JuMP.VariableRef,
 	bound::Real
-)

Local wrapper method for JuMP.setlowerbound, which skips NaN and infinite (-Inf only)

source
function set_lower_bound(
+)

Local wrapper method for JuMP.setlowerbound, which skips NaN and infinite (-Inf only)

source
function set_lower_bound(
 	xs::Vector{JuMP.VariableRef},
 	bound::Real
-)

Local wrapper method for JuMP.setlowerbound, which skips NaN and infinite (-Inf only). Note that with this signature, the bound is applied to every variable in the vector.

source
PowerModelsDistribution.set_upper_boundFunction
function set_upper_bound(
+)

Local wrapper method for JuMP.setlowerbound, which skips NaN and infinite (-Inf only). Note that with this signature, the bound is applied to every variable in the vector.

source
PowerModelsDistribution.set_upper_boundFunction
function set_upper_bound(
 	x::JuMP.VariableRef,
 	bound
-)

Local wrapper method for JuMP.setupperbound, which skips NaN and infinite (+Inf only)

source
function set_upper_bound(
+)

Local wrapper method for JuMP.setupperbound, which skips NaN and infinite (+Inf only)

source
function set_upper_bound(
 	xs::Vector{JuMP.VariableRef},
 	bound::Real
-)

Local wrapper method for JuMP.setupperbound, which skips NaN and infinite (+Inf only). Note that with this signature, the bound is applied to every variable in the vector.

source
PowerModelsDistribution.comp_start_valueFunction
comp_start_value(
+)

Local wrapper method for JuMP.setupperbound, which skips NaN and infinite (+Inf only). Note that with this signature, the bound is applied to every variable in the vector.

source
PowerModelsDistribution.comp_start_valueFunction
comp_start_value(
   comp::Dict,
   keys::Vector{String},
   conductor::Int,
   default::Any
-)

Searches for start value for a variable key in order from a list of keys of a component comp for conductor conductor, and if one does not exist, uses default

source
function comp_start_value(
+)

Searches for start value for a variable key in order from a list of keys of a component comp for conductor conductor, and if one does not exist, uses default

source
function comp_start_value(
 	comp::Dict{String,<:Any},
 	key::String,
 	conductor::Int,
 	default::Any
-)

Searches for start value for a variable key of a component comp for conductor conductor, and if one does not exist, uses default

source
function comp_start_value(
+)

Searches for start value for a variable key of a component comp for conductor conductor, and if one does not exist, uses default

source
function comp_start_value(
 	comp::Dict{String,<:Any},
 	keys::String,
 	default::Any=0.0
-)

Searches for start value for a variable key in order from a list of keys of a component comp, and if one does not exist, uses default. This is the conductor-agnostic version of comp_start_value.

source
function comp_start_value(
+)

Searches for start value for a variable key in order from a list of keys of a component comp, and if one does not exist, uses default. This is the conductor-agnostic version of comp_start_value.

source
function comp_start_value(
   comp::Dict,
   key::String,
   default::Any=0.0
-)

Searches for start value for a variable key of a component comp, and if one does not exist, uses default. This is the conductor-agnostic version of comp_start_value.

source

Ref Creation Functions

PowerModelsDistribution.ref_add_core!Method
ref_add_core!(ref::Dict{Symbol,Any})

Returns a dict that stores commonly used pre-computed data from of the data dictionary, primarily for converting data-types, filtering out deactivated components, and storing system-wide values that need to be computed globally. Some of the common keys include:

  • :off_angmin and :off_angmax (see calc_theta_delta_bounds(data)),
  • :bus – the set {(i, bus) in ref[:bus] : bus["bus_type"] != 4},
  • :gen – the set {(i, gen) in ref[:gen] : gen["gen_status"] == 1 && gen["gen_bus"] in keys(ref[:bus])},
  • :branch – the set of branches that are active in the network (based on the component status values),
  • :arcs_branch_from – the set [(i,b["f_bus"],b["t_bus"]) for (i,b) in ref[:branch]],
  • :arcs_branch_to – the set [(i,b["t_bus"],b["f_bus"]) for (i,b) in ref[:branch]],
  • :arcs_branch – the set of arcs from both arcs_from and arcs_to,
  • :arcs_switch_from – the set [(i,b["f_bus"],b["t_bus"]) for (i,b) in ref[:switch]],
  • :arcs_switch_to – the set [(i,b["t_bus"],b["f_bus"]) for (i,b) in ref[:switch]],
  • :arcs_switch – the set of arcs from both arcs_switch_from and arcs_switch_to,
  • :arcs_transformer_from – the set [(i,b["f_bus"],b["t_bus"]) for (i,b) in ref[:transformer]],
  • :arcs_transformer_to – the set [(i,b["t_bus"],b["f_bus"]) for (i,b) in ref[:transformer]],
  • :arcs_transformer – the set of arcs from both arcs_transformer_from and arcs_transformer_to,
  • :bus_arcs_branch – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_branch]]),
  • :bus_arcs_transformer – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_transformer]]),
  • :bus_arcs_switch – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_switch]]),
  • :buspairs – (see buspair_parameters(ref[:arcs_branch_from], ref[:branch], ref[:bus])),
  • :bus_gens – the mapping Dict(i => [gen["gen_bus"] for (i,gen) in ref[:gen]]).
  • :bus_loads – the mapping Dict(i => [load["load_bus"] for (i,load) in ref[:load]]).
  • :bus_shunts – the mapping Dict(i => [shunt["shunt_bus"] for (i,shunt) in ref[:shunt]]).
source

InfrastructureModels Extensions

InfrastructureModels.build_solution_valuesFunction

custom build_solution_values for multiconductor (vector) variables

source

custom build_solution_values for multiconductor (vector) nonlinear expressions

source

custom build_solution_values for multiconductor (vector) generic affine expressions

source

custom build_solution_values for multiconductor (vector) constants

source

custom build_solution_values for generic dense axis arrays

source

custom build_solution_values for multiconductor (vector) constants

source
+)

Searches for start value for a variable key of a component comp, and if one does not exist, uses default. This is the conductor-agnostic version of comp_start_value.

source

Ref Creation Functions

PowerModelsDistribution.ref_add_core!Method
ref_add_core!(ref::Dict{Symbol,Any})

Returns a dict that stores commonly used pre-computed data from of the data dictionary, primarily for converting data-types, filtering out deactivated components, and storing system-wide values that need to be computed globally. Some of the common keys include:

  • :off_angmin and :off_angmax (see calc_theta_delta_bounds(data)),
  • :bus – the set {(i, bus) in ref[:bus] : bus["bus_type"] != 4},
  • :gen – the set {(i, gen) in ref[:gen] : gen["gen_status"] == 1 && gen["gen_bus"] in keys(ref[:bus])},
  • :branch – the set of branches that are active in the network (based on the component status values),
  • :arcs_branch_from – the set [(i,b["f_bus"],b["t_bus"]) for (i,b) in ref[:branch]],
  • :arcs_branch_to – the set [(i,b["t_bus"],b["f_bus"]) for (i,b) in ref[:branch]],
  • :arcs_branch – the set of arcs from both arcs_from and arcs_to,
  • :arcs_switch_from – the set [(i,b["f_bus"],b["t_bus"]) for (i,b) in ref[:switch]],
  • :arcs_switch_to – the set [(i,b["t_bus"],b["f_bus"]) for (i,b) in ref[:switch]],
  • :arcs_switch – the set of arcs from both arcs_switch_from and arcs_switch_to,
  • :arcs_transformer_from – the set [(i,b["f_bus"],b["t_bus"]) for (i,b) in ref[:transformer]],
  • :arcs_transformer_to – the set [(i,b["t_bus"],b["f_bus"]) for (i,b) in ref[:transformer]],
  • :arcs_transformer – the set of arcs from both arcs_transformer_from and arcs_transformer_to,
  • :bus_arcs_branch – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_branch]]),
  • :bus_arcs_transformer – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_transformer]]),
  • :bus_arcs_switch – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_switch]]),
  • :buspairs – (see buspair_parameters(ref[:arcs_branch_from], ref[:branch], ref[:bus])),
  • :bus_gens – the mapping Dict(i => [gen["gen_bus"] for (i,gen) in ref[:gen]]).
  • :bus_loads – the mapping Dict(i => [load["load_bus"] for (i,load) in ref[:load]]).
  • :bus_shunts – the mapping Dict(i => [shunt["shunt_bus"] for (i,shunt) in ref[:shunt]]).
source

InfrastructureModels Extensions

InfrastructureModels.build_solution_valuesFunction

custom build_solution_values for multiconductor (vector) variables

source

custom build_solution_values for multiconductor (vector) nonlinear expressions

source

custom build_solution_values for multiconductor (vector) generic affine expressions

source

custom build_solution_values for multiconductor (vector) constants

source

custom build_solution_values for generic dense axis arrays

source

custom build_solution_values for multiconductor (vector) constants

source
diff --git a/dev/reference/constants.html b/dev/reference/constants.html index e05022fab..b379d2809 100644 --- a/dev/reference/constants.html +++ b/dev/reference/constants.html @@ -1,2 +1,2 @@ -Constants · PowerModelsDistribution

Constants

+Constants · PowerModelsDistribution

Constants

diff --git a/dev/reference/constraints.html b/dev/reference/constraints.html index db3a12d25..f40c0b91b 100644 --- a/dev/reference/constraints.html +++ b/dev/reference/constraints.html @@ -1,31 +1,31 @@ -Constraints · PowerModelsDistribution

Constraints

PowerModelsDistribution.constraint_SWL_psdMethod

Take a multi-conductor voltage variable V and a current variable I. The associated power is then defined as S = VI^H Define the lifted variables as W and L as W = VV^H, L = I*I^H Then, it is equally valid that [W S; S^H L] ∈ PSDCone, rank([W S; S^H L])=1 This function adds this PSD constraint for the rectangular coordinates of S, W and L.

source
PowerModelsDistribution.constraint_capacitor_on_offMethod
constraint_capacitor_on_off(pm::AbstractUnbalancedACPModel, i::Int; nw::Int=nw_id_default)

Add constraints to model capacitor switching

\[\begin{align} +Constraints · PowerModelsDistribution

Constraints

PowerModelsDistribution.constraint_SWL_psdMethod

Take a multi-conductor voltage variable V and a current variable I. The associated power is then defined as S = VI^H Define the lifted variables as W and L as W = VV^H, L = I*I^H Then, it is equally valid that [W S; S^H L] ∈ PSDCone, rank([W S; S^H L])=1 This function adds this PSD constraint for the rectangular coordinates of S, W and L.

source
PowerModelsDistribution.constraint_capacitor_on_offMethod
constraint_capacitor_on_off(pm::AbstractUnbalancedACPModel, i::Int; nw::Int=nw_id_default)

Add constraints to model capacitor switching

\[\begin{align} &\text{kvar control (ON): } q-q_\text{on} ≤ M_q ⋅ z - ϵ ⋅ (1-z), \\ &\text{kvar control (OFF): } q-q_\text{off} ≥ -M_q ⋅ (1-z) - ϵ ⋅ z, \\ &\text{voltage control (ON): } v-v_\text{min} ≥ -M_v ⋅ z + ϵ ⋅ (1-z), \\ &\text{voltage control (OFF): } v-v_\text{max} ≤ M_v ⋅ (1-z) - ϵ ⋅ z. -\end{align}\]

source
PowerModelsDistribution.constraint_capacitor_on_offMethod
constraint_capacitor_on_off(pm::AbstractUnbalancedACRModel, i::Int; nw::Int=nw_id_default)

Add constraints to model capacitor switching

\[\begin{align} &\text{kvar control (ON): } q-q_\text{on} ≤ M_q ⋅ z - ϵ ⋅ (1-z), \\ &\text{kvar control (OFF): } q-q_\text{off} ≥ -M_q ⋅ (1-z) - ϵ ⋅ z, \\ &\text{voltage control (ON): } v_r^2 + v_i^2 - v_\text{min}^2 ≥ -M_v ⋅ z + ϵ ⋅ (1-z), \\ &\text{voltage control (OFF): } v_r^2 + v_i^2 - v_\text{max}^2 ≤ M_v ⋅ (1-z) - ϵ ⋅ z. -\end{align}\]

source
PowerModelsDistribution.constraint_capacitor_on_offMethod
constraint_capacitor_on_off(pm::AbstractUnbalancedIVRModel, i::Int; nw::Int=nw_id_default)

Add constraints to model capacitor switching

\[\begin{align} &\text{kvar control: } s = (vr_fr+im*vi_fr).*(cr_fr-im*ci_fr),\\ &\text{kvar control (ON): } \Im{s}-q_\text{on} ≤ M_q ⋅ z - ϵ ⋅ (1-z), \\ &\text{kvar control (OFF): } \Im{s}-q_\text{off} ≥ -M_q ⋅ (1-z) - ϵ ⋅ z, \\ &\text{voltage control (ON): } v_r^2 + v_i^2 - v_\text{min}^2 ≥ -M_v ⋅ z + ϵ ⋅ (1-z), \\ &\text{voltage control (OFF): } v_r^2 + v_i^2 - v_\text{max}^2 ≤ M_v ⋅ (1-z) - ϵ ⋅ z. -\end{align}\]

source
PowerModelsDistribution.constraint_capacitor_on_offMethod
constraint_capacitor_on_off(pm::FBSUBFPowerModel, i::Int; nw::Int=nw_id_default)

Add constraints to model capacitor switching

\[\begin{align} &\text{kvar control (ON): } q-q_\text{on} ≤ M_q ⋅ z - ϵ ⋅ (1-z), \\ &\text{kvar control (OFF): } q-q_\text{off} ≥ -M_q ⋅ (1-z) - ϵ ⋅ z, \\ &\text{voltage control (ON): } 2 ⋅ v_{r0} ⋅ v_r + 2 ⋅ v_{i0} ⋅ v_i - v_{r0}^2 - v_{i0}^2 - v_\text{min}^2 ≥ -M_v ⋅ z + ϵ ⋅ (1-z), \\ &\text{voltage control (OFF): } 2 ⋅ v_{r0} ⋅ v_r + 2 ⋅ v_{i0} ⋅ v_i - v_{r0}^2 - v_{i0}^2 - v_\text{max}^2 ≤ M_v ⋅ (1-z) - ϵ ⋅ z. -\end{align}\]

source
PowerModelsDistribution.constraint_capacitor_on_offMethod
constraint_capacitor_on_off(pm::LPUBFDiagModel, i::Int; nw::Int=nw_id_default)

Add constraints to model capacitor switching

\[\begin{align} &\text{kvar control (ON): } q-q_\text{on} ≤ M_q ⋅ z - ϵ ⋅ (1-z), \\ &\text{kvar control (OFF): } q-q_\text{off} ≥ -M_q ⋅ (1-z) - ϵ ⋅ z, \\ &\text{voltage control (ON): } w - v_\text{min}^2 ≥ -M_v ⋅ z + ϵ ⋅ (1-z), \\ &\text{voltage control (OFF): } w - v_\text{max}^2 ≤ M_v ⋅ (1-z) - ϵ ⋅ z. -\end{align}\]

source
PowerModelsDistribution.constraint_mc_ampacity_fromMethod
constraint_mc_ampacity_from(pm::AbstractUnbalancedACPModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches from-side

mathp_{fr}^2 + q_{fr}^2 \leq vm_{fr}^2 i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_fromMethod
constraint_mc_ampacity_from(pm::AbstractUnbalancedRectangularModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches from-side

mathp_{fr}^2 + q_{fr}^2 \leq (vr_{fr}^2 + vi_{fr}^2) i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_fromMethod
constraint_mc_ampacity_from(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches from-side

mathp_{fr}^2 + q_{fr}^2 \leq w_{fr} i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_fromMethod
constraint_mc_ampacity_from(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})

ACP current limit constraint on branches from-side

mathp_{fr}^2 + q_{fr}^2 \leq w_{fr} i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_toMethod
constraint_mc_ampacity_to(pm::AbstractUnbalancedACPModel, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches to-side

mathp_{to}^2 + q_{to}^2 \leq vm_{to}^2 i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_toMethod
constraint_mc_ampacity_to(pm::AbstractUnbalancedRectangularModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches to-side

mathp_{to}^2 + q_{to}^2 \leq (vr_{to}^2 + vi_{to}^2) i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_toMethod
constraint_mc_ampacity_to(pm::AbstractUnbalancedWModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches to-side

mathp_{to}^2 + q_{to}^2 \leq w_{to} i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_toMethod
constraint_mc_ampacity_to(pm::AbstractUnbalancedWModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})

ACP current limit constraint on branches to-side

mathp_{to}^2 + q_{to}^2 \leq w_{to} i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_fromMethod
constraint_mc_ampacity_from(pm::AbstractUnbalancedACPModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches from-side

mathp_{fr}^2 + q_{fr}^2 \leq vm_{fr}^2 i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_fromMethod
constraint_mc_ampacity_from(pm::AbstractUnbalancedRectangularModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches from-side

mathp_{fr}^2 + q_{fr}^2 \leq (vr_{fr}^2 + vi_{fr}^2) i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_fromMethod
constraint_mc_ampacity_from(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches from-side

mathp_{fr}^2 + q_{fr}^2 \leq w_{fr} i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_fromMethod
constraint_mc_ampacity_from(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})

ACP current limit constraint on branches from-side

mathp_{fr}^2 + q_{fr}^2 \leq w_{fr} i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_toMethod
constraint_mc_ampacity_to(pm::AbstractUnbalancedACPModel, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches to-side

mathp_{to}^2 + q_{to}^2 \leq vm_{to}^2 i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_toMethod
constraint_mc_ampacity_to(pm::AbstractUnbalancedRectangularModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches to-side

mathp_{to}^2 + q_{to}^2 \leq (vr_{to}^2 + vi_{to}^2) i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_toMethod
constraint_mc_ampacity_to(pm::AbstractUnbalancedWModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on branches to-side

mathp_{to}^2 + q_{to}^2 \leq w_{to} i_{max}^2

source
PowerModelsDistribution.constraint_mc_ampacity_toMethod
constraint_mc_ampacity_to(pm::AbstractUnbalancedWModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})

ACP current limit constraint on branches to-side

mathp_{to}^2 + q_{to}^2 \leq w_{to} i_{max}^2

source
PowerModelsDistribution.constraint_mc_branch_current_limitMethod
function constraint_mc_branch_current_limit(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	f_idx::Tuple{Int,Int,Int},
@@ -35,7 +35,7 @@
 	c_rating::Vector{<:Real};
 	report::Bool=true
 )

For ACR models with explicit neutrals, imposes a bound on the total current magnitude per conductor.

p_fr^2 + q_fr^2 <= r^2 * (vr_fr^2 + vi_fr^2)
-p_to^2 + q_to^2 <= r^2 * (vr_to^2 + vi_to^2)
source
PowerModelsDistribution.constraint_mc_branch_current_limitMethod
function constraint_mc_branch_current_limit(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	f_idx::Tuple{Int,Int,Int},
@@ -45,13 +45,13 @@
 	c_rating::Vector{<:Real};
 	report::Bool=true
 )

For IVR models with explicit neutrals, imposes a bound on the current magnitude per conductor at both ends of the branch (total current, i.e. including shunt contributions).

cr_fr^2 + ci_fr^2 <= c_rating^2
-cr_to^2 + ci_to^2 <= c_rating^2
source
PowerModelsDistribution.constraint_mc_branch_current_limitMethod
function constraint_mc_branch_current_limit(
 	pm::ExplicitNeutralModels,
 	id::Int;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true,
-)

For models with explicit neutrals, imposes a bound on the current magnitude per conductor at both ends of the branch (total current, i.e. including shunt contributions)

source
PowerModelsDistribution.constraint_mc_branch_flowMethod
constraint_mc_branch_flow(pm::AbstractUnbalancedPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int})

For superconducting branch flow (brr and brx all zeros)

source
PowerModelsDistribution.constraint_mc_bus_voltage_balanceMethod
constraint_mc_bus_voltage_balance(pm::AbstractUnbalancedPowerModel, bus_id::Int; nw=nw_id_default)::Nothing

Template function for bus voltage balance constraints.

Impose all balance related constraints for which key present in data model of bus. For a discussion of sequence components and voltage unbalance factor (VUF), see @INPROCEEDINGS{girigoudarmolzahnroald-2019, author={K. Girigoudar and D. K. Molzahn and L. A. Roald}, booktitle={submitted}, title={{Analytical and Empirical Comparisons of Voltage Unbalance Definitions}}, year={2019}, month={}, url={https://molzahn.github.io/pubs/girigoudarmolzahnroald-2019.pdf} }

source
PowerModelsDistribution.constraint_mc_branch_flowMethod
constraint_mc_branch_flow(pm::AbstractUnbalancedPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int})

For superconducting branch flow (brr and brx all zeros)

source
PowerModelsDistribution.constraint_mc_bus_voltage_balanceMethod
constraint_mc_bus_voltage_balance(pm::AbstractUnbalancedPowerModel, bus_id::Int; nw=nw_id_default)::Nothing

Template function for bus voltage balance constraints.

Impose all balance related constraints for which key present in data model of bus. For a discussion of sequence components and voltage unbalance factor (VUF), see @INPROCEEDINGS{girigoudarmolzahnroald-2019, author={K. Girigoudar and D. K. Molzahn and L. A. Roald}, booktitle={submitted}, title={{Analytical and Empirical Comparisons of Voltage Unbalance Definitions}}, year={2019}, month={}, url={https://molzahn.github.io/pubs/girigoudarmolzahnroald-2019.pdf} }

source
PowerModelsDistribution.constraint_mc_bus_voltage_dropMethod
function constraint_mc_bus_voltage_drop(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	i::Int,
@@ -63,7 +63,7 @@
 	r::Matrix{<:Real},
 	x::Matrix{<:Real}
 )

For IVR models with explicit neutrals, defines voltage drop over a branch, linking from and to side complex voltage.

vr_to == vr_fr - r*csr_fr + x*csi_fr
-vi_to == vi_fr - r*csi_fr - x*csr_fr
source
PowerModelsDistribution.constraint_mc_current_balanceMethod
function constraint_mc_current_balance(
 	pm::RectangularVoltageExplicitNeutralModels,
 	nw::Int,
 	i::Int,
@@ -76,7 +76,7 @@
 	bus_storage::Vector{Tuple{Int,Vector{Int}}},
 	bus_loads::Vector{Tuple{Int,Vector{Int}}},
 	bus_shunts::Vector{Tuple{Int,Vector{Int}}}
-)

Kirchhoff's current law applied to buses sum(cr + im*ci) = 0

source
PowerModelsDistribution.constraint_mc_current_balance_capcMethod
constraint_mc_current_balance_capc(pm::AbstractUnbalancedIVRModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Current balance constraints with capacitor control.

source
PowerModelsDistribution.constraint_mc_current_balance_capcMethod
constraint_mc_current_balance_capc(pm::AbstractUnbalancedIVRModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Current balance constraints with capacitor control.

source
PowerModelsDistribution.constraint_mc_current_fromMethod
function constraint_mc_current_from(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	f_bus::Int,
@@ -86,7 +86,7 @@
 	b_sh_fr::Matrix{<:Real};
 	report::Bool=true
 )

For IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.

cr_fr == csr_fr + g_sh_fr*vr_fr - b_sh_fr*vi_fr
-ci_fr == csi_fr + g_sh_fr*vi_fr + b_sh_fr*vr_fr
source
PowerModelsDistribution.constraint_mc_current_fromMethod
function constraint_mc_current_from(
 	pm::ReducedExplicitNeutralIVRModels,
 	nw::Int,
 	f_bus::Int,
@@ -96,7 +96,7 @@
 	b_sh_fr::Matrix{<:Real};
 	report::Bool=true
 )

For branch-reduced IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.

cr_fr = csr_fr + g_sh_fr*vr_fr - b_sh_fr*vi_fr
-ci_fr = csi_fr + g_sh_fr*vi_fr + b_sh_fr*vr_fr
source
PowerModelsDistribution.constraint_mc_current_toMethod
function constraint_mc_current_to(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	t_bus,
@@ -108,7 +108,7 @@
 	b_sh_to::Matrix{<:Real};
 	report::Bool=true
 )

For IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.

cr_to == csr_to + g_sh_to*vr_to - b_sh_to*vi_to
-ci_to == csi_to + g_sh_to*vi_to + b_sh_to*vr_to
source
PowerModelsDistribution.constraint_mc_current_toMethod
function constraint_mc_current_to(
 	pm::ReducedExplicitNeutralIVRModels,
 	nw::Int,
 	t_bus,
@@ -120,35 +120,35 @@
 	b_sh_to::Matrix{<:Real};
 	report::Bool=true
 )

For branch-reduced IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.

cr_to = csr_to + g_sh_to*vr_to - b_sh_to*vi_to
-ci_to = csi_to + g_sh_to*vi_to + b_sh_to*vr_to
source
PowerModelsDistribution.constraint_mc_generator_currentMethod
function constraint_mc_generator_current(
 	pm::AbstractExplicitNeutralIVRModel,
 	id::Int;
 	nw::Int=nw_id_default,
 	report::Bool=true,
 	bounded::Bool=true
-)

For IVR models with explicit neutrals, creates expressions for the terminal current flows :crg_bus and :cig_bus.

source
PowerModelsDistribution.constraint_mc_generator_current_deltaMethod
function constraint_mc_generator_current_delta(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
 	connections::Vector{Int};
 	report::Bool=true,
 	bounded::Bool=true
-)

For IVR models with explicit neutrals, creates expressions for the terminal current flows :crg_bus and :cig_bus of delta-connected generators

source
PowerModelsDistribution.constraint_mc_generator_current_wyeMethod
function constraint_mc_generator_current_wye(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
 	connections::Vector{Int};
 	report::Bool=true,
 	bounded::Bool=true
-)

For IVR models with explicit neutrals, creates expressions for the terminal current flows :crg_bus and :cig_bus of wye-connected generators

source
PowerModelsDistribution.constraint_mc_generator_powerMethod
constraint_mc_generator_power(pm::AbstractUnbalancedPowerModel, id::Int; nw::Int=nw_id_default, report::Bool=true, bounded::Bool=true)::Nothing

Template function for generator power constraints

DELTA

When connected in delta, the load power gives the reference in the delta reference frame. This means

\[sd_1 = v_ab.conj(i_ab) = (v_a-v_b).conj(i_ab)\]

We can relate this to the per-phase power by

\[sn_a = v_a.conj(i_a) +)

For IVR models with explicit neutrals, creates expressions for the terminal current flows :crg_bus and :cig_bus of wye-connected generators

source
PowerModelsDistribution.constraint_mc_generator_powerMethod
constraint_mc_generator_power(pm::AbstractUnbalancedPowerModel, id::Int; nw::Int=nw_id_default, report::Bool=true, bounded::Bool=true)::Nothing

Template function for generator power constraints

DELTA

When connected in delta, the load power gives the reference in the delta reference frame. This means

\[sd_1 = v_ab.conj(i_ab) = (v_a-v_b).conj(i_ab)\]

We can relate this to the per-phase power by

\[sn_a = v_a.conj(i_a) = v_a.conj(i_ab-i_ca) = v_a.conj(conj(s_ab/v_ab) - conj(s_ca/v_ca)) - = v_a.(s_ab/(v_a-v_b) - s_ca/(v_c-v_a))\]

So for delta, sn is constrained indirectly.

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
function constraint_mc_generator_power_delta(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	id::Int,
@@ -160,7 +160,7 @@
 	qmax::Vector{<:Real};
 	report::Bool=true,
 	bounded::Bool=true
-)

For ACR models with explicit neutrals, links the terminal power flows :pg_bus and :qg_bus to the power variables :pg and :qg for delta-connected generators

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
function constraint_mc_generator_power_delta(
 	pm::AbstractNLExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
@@ -171,7 +171,7 @@
 	qmin::Vector{<:Real},
 	qmax::Vector{<:Real};
 	report::Bool=true
-)

For IVR models with explicit neutrals, creates non-linear expressions for the generator power :pd and :qd of delta-connected generators as a function of voltage and current

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
function constraint_mc_generator_power_delta(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
@@ -183,7 +183,7 @@
 	qmax::Vector{<:Real};
 	report::Bool=true,
 	bounded::Bool=true
-)

For quadratic IVR models with explicit neutrals, links the generator power variables :pd and :qd of delta-connected generators to the voltage and current

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
constraint_mc_generator_power_delta(pm::FBSUBFPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)

Adds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).

\[\begin{align} +)

For quadratic IVR models with explicit neutrals, links the generator power variables :pd and :qd of delta-connected generators to the voltage and current

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
constraint_mc_generator_power_delta(pm::FBSUBFPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)

Adds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).

\[\begin{align} &\text{Initial line-neutral voltage: } V_0 = V_{r0} +j V_{i0}\\ &\text{Three-phase delta transformation matrix: } M^\Delta = \begin{bmatrix}\;\;\;1 & -1 & \;\;0\\ \;\;\;0 & \;\;\;1 & -1\\ -1 & \;\;\;0 & \;\;\;1\end{bmatrix} \\ &\text{Single-phase delta transformation matrix (triple nodes): } M^\Delta = \begin{bmatrix}\;1 & -1 \end{bmatrix} \\ @@ -191,7 +191,7 @@ &\text{Line-line current: } (I^\Delta)^* = S^\Delta \oslash V_0^\Delta \\ &\text{Line-neutral current: } I_{bus} = (M^\Delta)^T I^\Delta \\ &\text{Bus generation power: } S_{bus} = V_0 \oslash I_{bus}^* -\end{align}\]

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
constraint_mc_generator_power_delta(pm::FOTPUPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)

Adds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
constraint_mc_generator_power_delta(pm::FOTPUPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)

Adds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).

\[\begin{align} &\text{Initial line-neutral voltage: } V_0 = V_{m0} \angle V_{a0}\\ &\text{Three-phase delta transformation matrix: } M^\Delta = \begin{bmatrix}\;\;\;1 & -1 & \;\;0\\ \;\;\;0 & \;\;\;1 & -1\\ -1 & \;\;\;0 & \;\;\;1\end{bmatrix} \\ &\text{Single-phase delta transformation matrix (triple nodes): } M^\Delta = \begin{bmatrix}\;1 & -1 \end{bmatrix} \\ @@ -199,7 +199,7 @@ &\text{Line-line current: } (I^\Delta)^* = S^\Delta \oslash V_0^\Delta \\ &\text{Line-neutral current: } I_{bus} = (M^\Delta)^T I^\Delta \\ &\text{Line-neutral generation power: } S_{bus} = V_0 \oslash I_{bus}^* -\end{align}\]

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
constraint_mc_generator_power_delta(pm::FOTRUPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)

Adds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
constraint_mc_generator_power_delta(pm::FOTRUPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)

Adds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).

\[\begin{align} &\text{Initial line-neutral voltage: } V_0 = V_{r0} +j V_{i0}\\ &\text{Three-phase delta transformation matrix: } M^\Delta = \begin{bmatrix}\;\;\;1 & -1 & \;\;0\\ \;\;\;0 & \;\;\;1 & -1\\ -1 & \;\;\;0 & \;\;\;1\end{bmatrix} \\ &\text{Single-phase delta transformation matrix (triple nodes): } M^\Delta = \begin{bmatrix}\;1 & -1 \end{bmatrix} \\ @@ -207,17 +207,17 @@ &\text{Line-line current: } (I^\Delta)^* = S^\Delta \oslash V_0^\Delta \\ &\text{Line-neutral current: } I_{bus} = (M^\Delta)^T I^\Delta \\ &\text{Line-neutral generation power: } S_{bus} = V_0 \oslash I_{bus}^* -\end{align}\]

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
constraint_mc_generator_power_delta(pm::LPUBFDiagModel, nw::Int, gen_id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)

Adds constraints for delta-connected generators similar to delta-connected loads (using auxilary variable X).

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
constraint_mc_generator_power_delta(pm::LPUBFDiagModel, nw::Int, gen_id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)

Adds constraints for delta-connected generators similar to delta-connected loads (using auxilary variable X).

\[\begin{align} &\text{Three-phase delta transformation matrix: } T^\Delta = \begin{bmatrix}\;\;\;1 & -1 & \;\;0\\ \;\;\;0 & \;\;\;1 & -1\\ -1 & \;\;\;0 & \;\;\;1\end{bmatrix} \\ &\text{Single-phase delta transformation matrix (triple nodes): } T^\Delta = \begin{bmatrix}\;1 & -1 \end{bmatrix} \\ &\text{Line-neutral generation power: } S_{bus} = diag(T^\Delta X_g) \\ &\text{Line-line generation power: } S^\Delta = diag(X_g T^\Delta) -\end{align}\]

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
constraint_mc_generator_power_delta(pm::SOCUBFModels, nw::Int, gen_id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)

Adds constraints for delta-connected generators similar to delta-connected loads (using auxilary variable X).

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_generator_power_deltaMethod
constraint_mc_generator_power_delta(pm::SOCUBFModels, nw::Int, gen_id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)

Adds constraints for delta-connected generators similar to delta-connected loads (using auxilary variable X).

\[\begin{align} &\text{Three-phase delta transformation matrix: } T^\Delta = \begin{bmatrix}\;\;\;1 & -1 & \;\;0\\ \;\;\;0 & \;\;\;1 & -1\\ -1 & \;\;\;0 & \;\;\;1\end{bmatrix} \\ &\text{Single-phase delta transformation matrix (triple nodes): } T^\Delta = \begin{bmatrix}\;1 & -1 \end{bmatrix} \\ &\text{Line-neutral generation power: } S_{bus} = diag(T^\Delta X_g) \\ &\text{Line-line generation power: } S^\Delta = diag(X_g T^\Delta) -\end{align}\]

source
PowerModelsDistribution.constraint_mc_generator_power_wyeMethod
function constraint_mc_generator_power_wye(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	id::Int,
@@ -229,7 +229,7 @@
 	qmax::Vector{<:Real};
 	report::Bool=true,
 	bounded::Bool=true
-)

For ACR models with explicit neutrals, links the terminal power flows :pg_bus and :qg_bus to the power variables :pg and :qg for wye-connected generators

source
PowerModelsDistribution.constraint_mc_generator_power_wyeMethod
function constraint_mc_generator_power_wye(
 	pm::AbstractNLExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
@@ -240,7 +240,7 @@
 	qmin::Vector{<:Real},
 	qmax::Vector{<:Real};
 	report::Bool=true
-)

For IVR models with explicit neutrals, creates non-linear expressions for the generator power :pd and :qd of wye-connected generators as a function of voltage and current

source
PowerModelsDistribution.constraint_mc_generator_power_wyeMethod
function constraint_mc_generator_power_wye(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
@@ -252,18 +252,18 @@
 	qmax::Vector{<:Real};
 	report::Bool=true,
 	bounded::Bool=true
-)

For quadratic IVR models with explicit neutrals, links the generator power variables :pd and :qd of wye-connected generators to the voltage and current

source
PowerModelsDistribution.constraint_mc_load_currentMethod
function constraint_mc_load_current(
 	pm::AbstractExplicitNeutralIVRModel,
 	id::Int;
 	nw::Int=nw_id_default,
 	report::Bool=true
-)

For IVR models with explicit neutrals, create non-linear expressions for the terminal current flows :crd_bus and :cid_bus

source
PowerModelsDistribution.constraint_mc_load_currentMethod
function constraint_mc_load_current(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	id::Int;
 	nw::Int=nw_id_default,
 	report::Bool=true,
 	bounded::Bool=true
-)

For quadratic IVR models with explicit neutrals, create expressions for the terminal current flows :crd_bus and :cid_bus

source
PowerModelsDistribution.constraint_mc_load_current_deltaMethod
function constraint_mc_load_current_delta(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
@@ -274,14 +274,14 @@
 	b::Vector{<:Real},
 	beta::Vector{<:Real};
 	report::Bool=true
-)

For IVR models with explicit neutrals, create non-linear expressions for the terminal current flows :crd_bus and :cid_bus of delta-connected loads

source
PowerModelsDistribution.constraint_mc_load_current_deltaMethod
function constraint_mc_load_current_delta(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
 	connections::Vector{Int};
 	report::Bool=true,
 	bounded::Bool=true
-)

For quadratic IVR models with explicit neutrals, create expressions for the terminal current flows :crd_bus and :cid_bus for delta-connected loads

source
PowerModelsDistribution.constraint_mc_load_current_deltaMethod
constraint_mc_load_current_delta(pm::FOTPUPowerModel, nw::Int, load_id::Int, load_bus_id::Int, cp::Vector, cq::Vector)

No loads require a current variable. Delta loads are zero-order approximations and wye loads are first-order approximations around the initial operating point.

source
PowerModelsDistribution.constraint_mc_load_current_deltaMethod
constraint_mc_load_current_delta(pm::FOTPUPowerModel, nw::Int, load_id::Int, load_bus_id::Int, cp::Vector, cq::Vector)

No loads require a current variable. Delta loads are zero-order approximations and wye loads are first-order approximations around the initial operating point.

source
PowerModelsDistribution.constraint_mc_load_current_wyeMethod
function constraint_mc_load_current_wye(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
@@ -292,56 +292,56 @@
 	b::Vector{<:Real},
 	beta::Vector{<:Real};
 	report::Bool=true
-)

For IVR models with explicit neutrals, create non-linear expressions for the terminal current flows :crd_bus and :cid_bus of wye-connected loads

source
PowerModelsDistribution.constraint_mc_load_current_wyeMethod
function constraint_mc_load_current_wye(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
 	connections::Vector{Int};
 	report::Bool=true,
 	bounded::Bool=true
-)

For quadratic IVR models with explicit neutrals, create expressions for the terminal current flows :crd_bus and :cid_bus for wye-connected loads

source
PowerModelsDistribution.constraint_mc_load_powerMethod
function constraint_mc_load_power(
 	pm::AbstractExplicitNeutralIVRModel,
 	id::Int;
 	nw::Int=nw_id_default,
 	report::Bool=true
-)

For IVR models with explicit neutrals, the load power does not require any constraints.

source
PowerModelsDistribution.constraint_mc_load_powerMethod
function constraint_mc_load_power(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	id::Int;
 	nw::Int=nw_id_default,
 	report::Bool=true
-)

For quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables

source
PowerModelsDistribution.constraint_mc_load_powerMethod
constraint_mc_load_power(pm::AbstractUnbalancedPowerModel, id::Int; nw::Int=nw_id_default, report::Bool=true)::Nothing

Template function for load constraints.

CONSTANT POWER

Fixes the load power sd.

\[sd = [sd_1, sd_2, sd_3]\]

What is actually fixed, depends on whether the load is connected in delta or wye. When connected in wye, the load power equals the per-phase power sn drawn at the bus to which the load is connected.

\[sd_1 = v_a.conj(i_a) = sn_a\]

CONSTANT CURRENT

Sets the active and reactive load power sd to be proportional to the the voltage magnitude.

\[pd = cp.|vm| +)

For quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables

source
PowerModelsDistribution.constraint_mc_load_powerMethod
constraint_mc_load_power(pm::AbstractUnbalancedPowerModel, id::Int; nw::Int=nw_id_default, report::Bool=true)::Nothing

Template function for load constraints.

CONSTANT POWER

Fixes the load power sd.

\[sd = [sd_1, sd_2, sd_3]\]

What is actually fixed, depends on whether the load is connected in delta or wye. When connected in wye, the load power equals the per-phase power sn drawn at the bus to which the load is connected.

\[sd_1 = v_a.conj(i_a) = sn_a\]

CONSTANT CURRENT

Sets the active and reactive load power sd to be proportional to the the voltage magnitude.

\[pd = cp.|vm| qd = cq.|vm| sd = cp.|vm| + j.cq.|vm|\]

CONSTANT IMPEDANCE

Sets the active and reactive power drawn by the load to be proportional to the square of the voltage magnitude.

\[pd = cp.|vm|^2 qd = cq.|vm|^2 sd = cp.|vm|^2 + j.cq.|vm|^2\]

DELTA

When connected in delta, the load power gives the reference in the delta reference frame. This means

\[sd_1 = v_ab.conj(i_ab) = (v_a-v_b).conj(i_ab)\]

We can relate this to the per-phase power by

\[sn_a = v_a.conj(i_a) = v_a.conj(i_ab-i_ca) = v_a.conj(conj(s_ab/v_ab) - conj(s_ca/v_ca)) - = v_a.(s_ab/(v_a-v_b) - s_ca/(v_c-v_a))\]

So for delta, sn is constrained indirectly.

source
PowerModelsDistribution.constraint_mc_load_powerMethod
constraint_mc_load_power(pm::FBSUBFPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)

Load model is linearized around initial operating point. Wye loads are first-order and delta loads are zero-order approximations.

\[\begin{align} + = v_a.(s_ab/(v_a-v_b) - s_ca/(v_c-v_a))\]

So for delta, sn is constrained indirectly.

source
PowerModelsDistribution.constraint_mc_load_powerMethod
constraint_mc_load_power(pm::FBSUBFPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)

Load model is linearized around initial operating point. Wye loads are first-order and delta loads are zero-order approximations.

\[\begin{align} &\text{Initial operating point: } v_{rd}^0 + j ⋅ v_{id}^0~\text{where}~{(v_m^0)}^2 = {(v_{rd}^0)}^2 + {(v_{id}^0)}^2\\ &\text{Constant power: } P^d = P^{d0},~Q^d = Q^{d0} \\ &\text{Constant impedance: } P^d = a ⋅ \left(2\cdot v_{rd} ⋅ v_{rd}^0+2 ⋅ v_{id}*v_{id}^0-{(v_{m}^0)}^2\right),\\ & Q^d = b ⋅ \left(2\cdot v_{rd} ⋅ v_{rd}^0+2 ⋅ v_{id}*v_{id}^0-{(v_{m}^0)}^2\right), \\ &\text{Constant current: } P^d = a ⋅ \left(v_{m}^0 + \frac{v_{rd} ⋅ v_{rd}^0+ v_{id}*v_{id}^0-{(v_{m}^0)}^2}{v_{m}^0} \right),\\ & Q^d = b ⋅ \left(v_{m}^0 + \frac{v_{rd} ⋅ v_{rd}^0+ v_{id}*v_{id}^0-{(v_{m}^0)}^2}{v_{m}^0} \right). -\end{align}\]

source
PowerModelsDistribution.constraint_mc_load_powerMethod
constraint_mc_load_power(pm::FOTPUPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)

Load model is linearized around initial operating point. Wye loads are first-order and delta loads are zero-order approximations.

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_load_powerMethod
constraint_mc_load_power(pm::FOTPUPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)

Load model is linearized around initial operating point. Wye loads are first-order and delta loads are zero-order approximations.

\[\begin{align} &\text{Initial operating point: } v_{m0} \angle v_{a0}\\ &\text{Constant power: } P^d = P^{d0},~Q^d = Q^{d0} \\ &\text{Constant impedance: } P^d = a \cdot \left({v_{m0}}^2+2 \cdot v_{m0} \cdot (v_m-v_{m0})\right),\\ & Q^d = b \cdot \left({v_{m0}}^2+2 \cdot v_{m0} \cdot (v_m-v_{m0})\right), \\ &\text{Constant current: } P^d = a \cdot v_m,\\ & Q^d = b \cdot v_m. -\end{align}\]

source
PowerModelsDistribution.constraint_mc_load_powerMethod
constraint_mc_load_power(pm::LPUBFDiagModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)

Delta/voltage-dependent load models for LPUBFDiagModel. Delta loads use the auxilary power variable (X). The constant current load model is derived by linearizing around the flat-start voltage solution.

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_load_powerMethod
constraint_mc_load_power(pm::LPUBFDiagModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)

Delta/voltage-dependent load models for LPUBFDiagModel. Delta loads use the auxilary power variable (X). The constant current load model is derived by linearizing around the flat-start voltage solution.

\[\begin{align} &\text{Constant power:} \Rightarrow P_i^d = P_i^{d0},~Q_i^d = Q_i^{d0} ~\forall i \in L \\ &\text{Constant impedance (Wye):} \Rightarrow P_i^d = a_i \cdot w_i,~Q_i^d = b_i \cdot w_i ~\forall i \in L \\ &\text{Constant impedance (Delta):} \Rightarrow P_i^d = 3\cdot a_i \cdot w_i,~Q_i^d = 3\cdot b_i \cdot w_i ~\forall i \in L \\ &\text{Constant current (Wye):} \Rightarrow P_i^d = \frac{a_i}{2}\cdot \left( 1+w_i \right),~Q_i^d = \frac{b_i}{2}\cdot \left( 1+w_i \right) \forall i \in L \\ &\text{Constant current (Delta):} \Rightarrow P_i^d = \frac{\sqrt{3} \cdot a_i}{2}\cdot \left( 1+w_i \right),~Q_i^d = \frac{\sqrt{3} \cdot b_i}{2}\cdot \left( 1+w_i \right) \forall i \in L -\end{align}\]

source
PowerModelsDistribution.constraint_mc_load_power_deltaMethod
function constraint_mc_load_power_delta(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	id::Int,
@@ -352,7 +352,7 @@
 	b::Vector{<:Real},
 	beta::Vector{<:Real};
 	report::Bool=true
-)

For ACR models with explicit neutrals, creates non-linear expressions for terminal power flows ':pdbus' and ':qdbus' of delta-connected loads

source
PowerModelsDistribution.constraint_mc_load_power_deltaMethod
function constraint_mc_load_power_delta(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
@@ -363,7 +363,7 @@
 	b::Vector{<:Real};
 	report::Bool=true,
 	bounded::Bool=true
-)

For quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables for delta-connected loads

source
PowerModelsDistribution.constraint_mc_load_power_wyeMethod
function constraint_mc_load_power_wye(
+)

For quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables for delta-connected loads

source
PowerModelsDistribution.constraint_mc_load_power_wyeMethod
function constraint_mc_load_power_wye(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	id::Int,
@@ -374,7 +374,7 @@
 	b::Vector{<:Real},
 	beta::Vector{<:Real};
 	report::Bool=true
-)

For ACR models with explicit neutrals, creates non-linear expressions for terminal power flows ':pdbus' and ':qdbus' of wye-connected loads

source
PowerModelsDistribution.constraint_mc_load_power_wyeMethod
function constraint_mc_load_power_wye(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
@@ -385,7 +385,7 @@
 	b::Vector{<:Real};
 	report::Bool=true,
 	bounded::Bool=true
-)

For quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables for wye-connected loads

source
PowerModelsDistribution.constraint_mc_model_voltage_magnitude_differenceMethod
constraint_mc_model_voltage_magnitude_difference(pm::FBSUBFPowerModel, nw::Int, i::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, r::Matrix{<:Real}, x::Matrix{<:Real}, g_sh_fr::Matrix{<:Real}, b_sh_fr::Matrix{<:Real})

Voltage drop over a branch linearized around initial operating point (forward sweep)

\[\begin{align} +)

For quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables for wye-connected loads

source
PowerModelsDistribution.constraint_mc_model_voltage_magnitude_differenceMethod
constraint_mc_model_voltage_magnitude_difference(pm::FBSUBFPowerModel, nw::Int, i::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, r::Matrix{<:Real}, x::Matrix{<:Real}, g_sh_fr::Matrix{<:Real}, b_sh_fr::Matrix{<:Real})

Voltage drop over a branch linearized around initial operating point (forward sweep)

\[\begin{align} &\text{Initial operating points: } (v_{r0}^{fr} + j ⋅ v_{i0}^{fr}),~ (v_{r0}^{to} + j ⋅ v_{i0}^{to})\\ &\text{Series active power flow: } p_s^{fr} = p^{fr} - g_{sh}^{fr} ⋅ {(v_{m0}^{fr})}^2,\\ &\text{Series reactive power flow: } q_s^{fr} = q^{fr} + b_{sh}^{fr} ⋅ {(v_{m0}^{fr})}^2,\\ @@ -393,7 +393,7 @@ &\text{Series imaginary current flow: } ci_s^{fr} = \frac{(-q_s^{fr} ⋅ v_{r0}^{fr} + p_s^{fr} ⋅ v_{i0}^{fr})}{{(v_{m0}^{fr})}^2},\\ &\text{Series real voltage drop: } v_{r}^{to} = v_{r}^{fr} - r ⋅ cr_s^{fr} + x ⋅ ci_s^{fr} ,\\ &\text{Series imaginary voltage drop: } v_{i}^{to} = v_{i}^{fr} - x ⋅ cr_s^{fr} - r ⋅ ci_s^{fr}. -\end{align}\]

source
PowerModelsDistribution.constraint_mc_ohms_yt_fromMethod
function constraint_mc_ohms_yt_from(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	f_bus::Int,
@@ -408,7 +408,7 @@
 	B_fr::Matrix{<:Real}
 )

For ACR models with explicit neutrals, creates Ohms constraints for ACR models with explicit neutrals.

s_fr = v_fr.*conj(Y*(v_fr-v_to))
 s_fr = (vr_fr+im*vi_fr).*(G-im*B)*([vr_fr-vr_to]-im*[vi_fr-vi_to])
-s_fr = (vr_fr+im*vi_fr).*([G*vr_fr-G*vr_to-B*vi_fr+B*vi_to]-im*[G*vi_fr-G*vi_to+B*vr_fr-B*vr_to])
source
PowerModelsDistribution.constraint_mc_ohms_yt_fromMethod

Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)

p_fr ==     g[c,c] * vm_fr[c]^2 +
+s_fr = (vr_fr+im*vi_fr).*([G*vr_fr-G*vr_to-B*vi_fr+B*vi_to]-im*[G*vi_fr-G*vi_to+B*vr_fr-B*vr_to])
source
PowerModelsDistribution.constraint_mc_ohms_yt_fromMethod

Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)

p_fr ==     g[c,c] * vm_fr[c]^2 +
             sum( g[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) +
                  b[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c) +
             sum(-g[c,d]*vm_fr[c]*vm_to[d]*cos(va_fr[c]-va_to[d]) +
@@ -425,7 +425,7 @@
             -b_fr[c,c] *vm_fr[c]^2 -
             sum( b_fr[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) -
                  g_fr[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c)
-            )
source
PowerModelsDistribution.constraint_mc_ohms_yt_fromMethod
constraint_mc_ohms_yt_from(pm::FOTPUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_fr::Matrix{<:Real}, B_fr::Matrix{<:Real})

Ohm constraints similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating points.

source
PowerModelsDistribution.constraint_mc_ohms_yt_fromMethod
constraint_mc_ohms_yt_from(pm::FOTRUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_fr::Matrix{<:Real}, B_fr::Matrix{<:Real})

Creates Ohms constraints by linearizing (similar to power balance constraints) around initial operating point.

source
PowerModelsDistribution.constraint_mc_ohms_yt_fromMethod
constraint_mc_ohms_yt_from(pm::FOTPUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_fr::Matrix{<:Real}, B_fr::Matrix{<:Real})

Ohm constraints similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating points.

source
PowerModelsDistribution.constraint_mc_ohms_yt_fromMethod
constraint_mc_ohms_yt_from(pm::FOTRUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_fr::Matrix{<:Real}, B_fr::Matrix{<:Real})

Creates Ohms constraints by linearizing (similar to power balance constraints) around initial operating point.

source
PowerModelsDistribution.constraint_mc_ohms_yt_toMethod
function constraint_mc_ohms_yt_to(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	f_bus::Int,
@@ -439,9 +439,9 @@
 	G_to::Matrix,
 	B_to::Matrix
 )

For ACR models with explicit neutrals, creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form).

p[t_idx] ==  (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
-q[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
source
PowerModelsDistribution.constraint_mc_ohms_yt_toMethod

Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)

p[t_idx] ==  (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
-q[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
source
PowerModelsDistribution.constraint_mc_ohms_yt_toMethod

Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)

p[t_idx] ==  (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
-q[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
source
PowerModelsDistribution.constraint_mc_ohms_yt_toMethod
constraint_mc_ohms_yt_to(pm::FOTPUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_to::Matrix{<:Real}, B_to::Matrix{<:Real})

Ohm constraints similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating points.

source
PowerModelsDistribution.constraint_mc_ohms_yt_toMethod
constraint_mc_ohms_yt_to(pm::FOTRUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix, B::Matrix, G_to::Matrix, B_to::Matrix)

Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)

source
PowerModelsDistribution.constraint_mc_power_balanceMethod
constraint_mc_power_balance(pm::AbstractUnbalancedActivePowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

power balanace constraint with line shunts and transformers, active power only

\[p_{br} + p_{tr} + p_{sw} == p_{g} - p_{s} - p_{d} - G\]

source
PowerModelsDistribution.constraint_mc_power_balanceMethod
constraint_mc_power_balance(pm::FBSUBFPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints similar to ACRUPowerModel with shunt current calculated using initial operating point.

source
PowerModelsDistribution.constraint_mc_power_balanceMethod
constraint_mc_power_balance(pm::FOTPUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance equations similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating point.

\[\begin{align} +q[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))

source
PowerModelsDistribution.constraint_mc_ohms_yt_toMethod

Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)

p[t_idx] ==  (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
+q[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
source
PowerModelsDistribution.constraint_mc_ohms_yt_toMethod

Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)

p[t_idx] ==  (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
+q[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
source
PowerModelsDistribution.constraint_mc_ohms_yt_toMethod
constraint_mc_ohms_yt_to(pm::FOTPUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_to::Matrix{<:Real}, B_to::Matrix{<:Real})

Ohm constraints similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating points.

source
PowerModelsDistribution.constraint_mc_ohms_yt_toMethod
constraint_mc_ohms_yt_to(pm::FOTRUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix, B::Matrix, G_to::Matrix, B_to::Matrix)

Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)

source
PowerModelsDistribution.constraint_mc_power_balanceMethod
constraint_mc_power_balance(pm::AbstractUnbalancedActivePowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

power balanace constraint with line shunts and transformers, active power only

\[p_{br} + p_{tr} + p_{sw} == p_{g} - p_{s} - p_{d} - G\]

source
PowerModelsDistribution.constraint_mc_power_balanceMethod
constraint_mc_power_balance(pm::FBSUBFPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints similar to ACRUPowerModel with shunt current calculated using initial operating point.

source
PowerModelsDistribution.constraint_mc_power_balanceMethod
constraint_mc_power_balance(pm::FOTPUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance equations similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating point.

\[\begin{align} &\text{Initial operating points: } v_{m0}^{t} \angle v_{a0}^t,~v_{m0}^u \angle v_{a0}^u\\ & {v_m^t}^2 \Rightarrow {v_{m0}^t}^2+2 \cdot v_{m0}^t \cdot (v_m^t-v_{m0}^t)\\ & v_m^t \cdot v_m^u \cdot \cos(v_a^t-v_a^u) \Rightarrow v_{m0}^t \cdot v_{m0}^u \cdot \cos(v_{a0}^t-v_{a0}^u) + @@ -470,10 +470,10 @@ v_a^t-v_{a0}^t \\ v_a^u-v_{a0}^u \end{bmatrix} -\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_balanceMethod
constraint_mc_power_balance(pm::FOTRUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints similar to ACRUPowerModel with shunt current linearized around initial operating point.

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_balanceMethod
constraint_mc_power_balance(pm::FOTRUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints similar to ACRUPowerModel with shunt current linearized around initial operating point.

\[\begin{align} &\text{Initial operating point: } (v_{r0} + j ⋅ v_{i0})\\ & v_{r} ⋅ v_{i} = v_{r0} ⋅ v_{i0} + v_{r} ⋅ v_{i0} + v_{r0} ⋅ v_{i} - 2 ⋅ v_{r0} ⋅ v_{i0} -\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_balanceMethod
function constraint_mc_power_balance(
 	pm::RectangularVoltageExplicitNeutralModels,
 	nw::Int,
 	i::Int,
@@ -486,15 +486,15 @@
 	bus_storage::Vector{Tuple{Int,Vector{Int}}},
 	bus_loads::Vector{Tuple{Int,Vector{Int}}},
 	bus_shunts::Vector{Tuple{Int,Vector{Int}}}
-)

Imposes power balance constraints at each ungrounded terminal of bus i for rectangular voltage models with explicit neutrals. sum(p + im*q) = 0

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::AbstractUnbalancedACPModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control.

\[\begin{align} +)

Imposes power balance constraints at each ungrounded terminal of bus i for rectangular voltage models with explicit neutrals. sum(p + im*q) = 0

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::AbstractUnbalancedACPModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control.

\[\begin{align} & Bs = z ⋅ bs, \\ &\text{capacitor ON: } z = 1, \\ &\text{capacitor OFF: } z = 0. -\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::AbstractUnbalancedACRModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control.

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::AbstractUnbalancedACRModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control.

\[\begin{align} & Bt = z ⋅ bs, \\ &\text{capacitor ON: } z = 1, \\ &\text{capacitor OFF: } z = 0. -\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::FBSUBFPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control similar to ACRUPowerModel with shunt current calculated using initial operating point.

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::FOTPUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control with shunt current calculated using initial operating point.

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::FBSUBFPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control similar to ACRUPowerModel with shunt current calculated using initial operating point.

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::FOTPUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control with shunt current calculated using initial operating point.

\[\begin{align} & B_s = b_s ⋅ z,~~ cq_{sh} = B_s ⋅ v, \\ & B_s \cdot v_m^t \cdot v_m^u \cdot \cos(v_a^t-v_a^u) \Rightarrow B_{s0} \cdot v_{m0}^t \cdot v_{m0}^u \cdot \cos(v_{a0}^t-v_{a0}^u) + \begin{bmatrix} @@ -527,21 +527,21 @@ B_{s} -B_{s0} \end{bmatrix} -\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::FOTRUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control with shunt current calculated using initial operating point.

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::FOTRUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control with shunt current calculated using initial operating point.

\[\begin{align} & B_t = b_s ⋅ z,~~ cq_{sh} = B_t ⋅ v, \\ &\text{FOT approximation: } B_t ⋅ v_r ⋅ v_i = B_{t0} ⋅ v_{r0} ⋅ v_{i0} + B_{t} ⋅ v_{r0} ⋅ v_{i0} + B_{t0} ⋅ v_{r} ⋅ v_{i0} + B_{t0} ⋅ v_{r0} ⋅ v_{i} - 3 ⋅ B_{t0} ⋅ v_{r0} ⋅ v_{i0} -\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::LPUBFDiagModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control linearized using McCormick envelopes

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_balance_capcMethod
constraint_mc_power_balance_capc(pm::LPUBFDiagModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})

Power balance constraints with capacitor control linearized using McCormick envelopes

\[\begin{align} & B_s = b_s ⋅ z,~~ cq_{sh} = B_s ⋅ w, \\ &\text{Underestimator: } cq_{sh} ≥ B_s ⋅ w_\text{min},~~ cq_{sh} ≥ b_s ⋅ w + B_s ⋅ w_\text{max} - b_s ⋅ w_\text{max}\\ &\text{Overestimator: } cq_{sh} ≤ B_s ⋅ w_\text{max},~~ cq_{sh} ≤ b_s ⋅ w + B_s ⋅ w_\text{min} - b_s ⋅ w_\text{min}\\ -\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_lossesMethod
constraint_mc_power_losses(pm::FBSUBFPowerModel, nw::Int, i::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, r::Matrix{<:Real}, x::Matrix{<:Real}, g_sh_fr::Matrix{<:Real}, g_sh_to::Matrix{<:Real}, b_sh_fr::Matrix{<:Real}, b_sh_to::Matrix{<:Real})

Branch flow model power flow equation linearized around initial operating point (backward sweep)

\[\begin{align} +\end{align}\]

source
PowerModelsDistribution.constraint_mc_power_lossesMethod
constraint_mc_power_losses(pm::FBSUBFPowerModel, nw::Int, i::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, r::Matrix{<:Real}, x::Matrix{<:Real}, g_sh_fr::Matrix{<:Real}, g_sh_to::Matrix{<:Real}, b_sh_fr::Matrix{<:Real}, b_sh_to::Matrix{<:Real})

Branch flow model power flow equation linearized around initial operating point (backward sweep)

\[\begin{align} &\text{Initial operating points: } (v_{r0}^{fr} + j ⋅ v_{i0}^{fr}),~ (v_{r0}^{to} + j ⋅ v_{i0}^{to})\\ &\text{Voltage drop: } v_{drop} = (v_{r0}^{fr} + j ⋅ v_{i0}^{fr}) - (v_{r0}^{to} + j ⋅ v_{i0}^{to}),\\ &\text{Line series admittance: } y = (r+j ⋅ x)^{-1},\\ &\text{Power loss: } s_{loss} = v_{drop} ⋅ (y ⋅ v_{drop})^*,\\ &\text{Active power flow: } p^{fr} + p^{to} = g_{sh}^{fr} ⋅ {(v_{m0}^{fr})}^2 + g_{sh}^{to} ⋅ {(v_{m0}^{to})}^2 + \Re(s_{loss}),\\ &\text{Reactive power flow: } q^{fr} + q^{to} = -b_{sh}^{fr} ⋅ {(v_{m0}^{fr})}^2 - b_{sh}^{to} ⋅ {(v_{m0}^{to})}^2 + \Im(s_{loss}). -\end{align}\]

source
PowerModelsDistribution.constraint_mc_switch_ampacityMethod
constraint_mc_switch_ampacity(pm::AbstractUnbalancedACPModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on switches

mathp_{fr}^2 + q_{fr}^2 \leq vm_{fr}^2 i_{max}^2

source
PowerModelsDistribution.constraint_mc_switch_ampacityMethod
constraint_mc_switch_ampacity(pm::AbstractUnbalancedRectangularModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on switches

mathp_{fr}^2 + q_{fr}^2 \leq (vr_{fr}^2 + vi_{fr}^2) i_{max}^2

source
PowerModelsDistribution.constraint_mc_switch_ampacityMethod
constraint_mc_switch_ampacity(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on switches from-side

mathp_{fr}^2 + q_{fr}^2 \leq w_{fr} i_{max}^2

source
PowerModelsDistribution.constraint_mc_switch_ampacityMethod
constraint_mc_switch_ampacity(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})

ACP current limit constraint on switches from-side

mathp_{fr}^2 + q_{fr}^2 \leq w_{fr} i_{max}^2

source
PowerModelsDistribution.constraint_mc_switch_ampacityMethod
constraint_mc_switch_ampacity(pm::AbstractUnbalancedACPModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on switches

mathp_{fr}^2 + q_{fr}^2 \leq vm_{fr}^2 i_{max}^2

source
PowerModelsDistribution.constraint_mc_switch_ampacityMethod
constraint_mc_switch_ampacity(pm::AbstractUnbalancedRectangularModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on switches

mathp_{fr}^2 + q_{fr}^2 \leq (vr_{fr}^2 + vi_{fr}^2) i_{max}^2

source
PowerModelsDistribution.constraint_mc_switch_ampacityMethod
constraint_mc_switch_ampacity(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing

ACP current limit constraint on switches from-side

mathp_{fr}^2 + q_{fr}^2 \leq w_{fr} i_{max}^2

source
PowerModelsDistribution.constraint_mc_switch_ampacityMethod
constraint_mc_switch_ampacity(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})

ACP current limit constraint on switches from-side

mathp_{fr}^2 + q_{fr}^2 \leq w_{fr} i_{max}^2

source
PowerModelsDistribution.constraint_mc_switch_currentMethod
function constraint_mc_switch_current(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
@@ -550,24 +550,24 @@
 	f_connections::Vector{Int},
 	t_connections::Vector{Int};
 	report::Bool=true
-)

For IVR models with explicit neutrals, create expressions for the terminal current flows :crsw_bus and cisw_bus, and link the from-side to the to-side switch current

source
PowerModelsDistribution.constraint_mc_switch_current_limitMethod
function constraint_mc_switch_current_limit(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	f_idx::Tuple{Int,Int,Int},
 	f_connections::Vector{Int},
 	rating::Vector{<:Real}
-)

For ACR models with explicit neutrals, imposes a bound on the switch current magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side current, so it suffices to apply this only explicitly at the from-side.

source
PowerModelsDistribution.constraint_mc_switch_current_limitMethod
function constraint_mc_switch_current_limit(
+)

For ACR models with explicit neutrals, imposes a bound on the switch current magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side current, so it suffices to apply this only explicitly at the from-side.

source
PowerModelsDistribution.constraint_mc_switch_current_limitMethod
function constraint_mc_switch_current_limit(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	f_idx::Tuple{Int,Int,Int},
 	connections::Vector{Int},
 	rating::Vector{<:Real}
-)

For IVR models with explicit neutrals, imposes a bound on the switch current magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side current, so it suffices to apply this only explicitly at the from-side.

source
PowerModelsDistribution.constraint_mc_switch_powerMethod
function constraint_mc_switch_power(
+)

For IVR models with explicit neutrals, imposes a bound on the switch current magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side current, so it suffices to apply this only explicitly at the from-side.

source
PowerModelsDistribution.constraint_mc_switch_powerMethod
function constraint_mc_switch_power(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	id::Int,
@@ -576,84 +576,84 @@
 	f_connections::Vector{Int},
 	t_connections::Vector{Int};
 	report::Bool=true
-)

constraintmcswitchpower( pm::ReducedExplicitNeutralIVRModels, nw::Int, id::Int, fidx::Tuple{Int,Int,Int}, tidx::Tuple{Int,Int,Int}, fconnections::Vector{Int}, t_connections::Vector{Int}; report::Bool=true )

For IVR models with explicit neutrals, create expressions for the terminal power flows :psw_bus and qsw_bus, and link the from-side to the to-side switch power

source
PowerModelsDistribution.constraint_mc_switch_powerMethod
function constraint_mc_switch_power(
+)

constraintmcswitchpower( pm::ReducedExplicitNeutralIVRModels, nw::Int, id::Int, fidx::Tuple{Int,Int,Int}, tidx::Tuple{Int,Int,Int}, fconnections::Vector{Int}, t_connections::Vector{Int}; report::Bool=true )

For IVR models with explicit neutrals, create expressions for the terminal power flows :psw_bus and qsw_bus, and link the from-side to the to-side switch power

source
PowerModelsDistribution.constraint_mc_switch_powerMethod
function constraint_mc_switch_power(
     pm::ExplicitNeutralModels,
     id::Int;
     nw::Int=nw_id_default,
     report::Bool=true
-)

For IVR models with explicit neutrals, link the switch power or create appropiate expressions for them

source
PowerModelsDistribution.constraint_mc_switch_thermal_limitMethod
function constraint_mc_switch_thermal_limit(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	f_idx::Tuple{Int,Int,Int},
 	f_connections::Vector{Int},
 	rating::Vector{<:Real}
-)

For ACR models with explicit neutrals, imposes a bound on the switch power magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side power when the switch is closed (equal voltages), and also when it is open since the power then equals zero on both ends.

source
PowerModelsDistribution.constraint_mc_switch_thermal_limitMethod
function constraint_mc_switch_thermal_limit(
+)

For ACR models with explicit neutrals, imposes a bound on the switch power magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side power when the switch is closed (equal voltages), and also when it is open since the power then equals zero on both ends.

source
PowerModelsDistribution.constraint_mc_switch_thermal_limitMethod
function constraint_mc_switch_thermal_limit(
 	pm::AbstractNLExplicitNeutralIVRModel,
 	nw::Int,
 	f_idx::Tuple{Int,Int,Int},
 	f_connections::Vector{Int},
 	rating::Vector{<:Real}
-)

This method is not yet implemented for AbstractLPUBFModel. If the limit is finite, a warning is thrown.

source
PowerModelsDistribution.constraint_mc_switch_thermal_limitMethod
function constraint_mc_switch_thermal_limit(
 	pm::AbstractNLExplicitNeutralIVRModel,
 	nw::Int,
 	f_idx::Tuple{Int,Int,Int},
 	f_connections::Vector{Int},
 	rating::Vector{<:Real}
-)

For IVR models with explicit neutrals, imposes a bound on the switch power magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side power when the switch is closed (equal voltages), and also when it is open since the power then equals zero on both ends.

source
PowerModelsDistribution.constraint_mc_switch_thermal_limitMethod
function constraint_mc_switch_thermal_limit(
+)

For IVR models with explicit neutrals, imposes a bound on the switch power magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side power when the switch is closed (equal voltages), and also when it is open since the power then equals zero on both ends.

source
PowerModelsDistribution.constraint_mc_switch_thermal_limitMethod
function constraint_mc_switch_thermal_limit(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	nw::Int,
 	f_idx::Tuple{Int,Int,Int},
 	f_connections::Vector{Int},
 	rating::Vector{<:Real}
-)

For quadratic IVR models with explicit neutrals, throw an error because this cannot be represented quadratically without introducing explicit power variables.

source
PowerModelsDistribution.constraint_mc_switch_thermal_limitMethod
constraint_mc_switch_thermal_limit(pm::AbstractUnbalancedActivePowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, rating::Vector{<:Real})::Nothing

Active power only switch thermal limit constraint

math-S_{max} \leq p_{fr} \leq S_{max}

source
PowerModelsDistribution.constraint_mc_switch_thermal_limitMethod
constraint_mc_switch_thermal_limit(pm::AbstractUnbalancedActivePowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, rating::Vector{<:Real})::Nothing

Active power only switch thermal limit constraint

math-S_{max} \leq p_{fr} \leq S_{max}

source
PowerModelsDistribution.constraint_mc_thermal_limit_fromMethod
function constraint_mc_thermal_limit_from(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	f_idx::Tuple{Int,Int,Int},
 	f_connections::Vector{Int},
 	rate_a::Vector{<:Real}
-)

For ACR models with explicit neutrals, imposes a bound on the from-side line power magnitude.

source
PowerModelsDistribution.constraint_mc_thermal_limit_fromMethod
function constraint_mc_thermal_limit_from(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	f_idx::Tuple{Int,Int,Int},
 	f_connections::Vector{Int},
 	rate_a::Vector{<:Real}
-)

For IVR models with explicit neutrals, imposes a bound on the from-side line power magnitude.

source
PowerModelsDistribution.constraint_mc_thermal_limit_fromMethod
function constraint_mc_thermal_limit_from(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	nw::Int,
 	f_idx::Tuple{Int,Int,Int},
 	f_connections::Vector{Int},
 	rate_a::Vector{<:Real}
-)

For quadratic IVR models with explicit neutrals, throw an error because this cannot be represented quadratically without introducing explicit power variables.

source
PowerModelsDistribution.constraint_mc_thermal_limit_toMethod
function constraint_mc_thermal_limit_to(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	t_idx::Tuple{Int,Int,Int},
 	t_connections::Vector{Int},
 	rate_a::Vector{<:Real}
-)

For ACR models with explicit neutrals, imposes a bound on the from-side line power magnitude.

source
PowerModelsDistribution.constraint_mc_thermal_limit_toMethod
function constraint_mc_thermal_limit_to(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	t_idx::Tuple{Int,Int,Int},
 	t_connections::Vector{Int},
 	rate_a::Vector{<:Real}
-)

For IVR models with explicit neutrals, imposes a bound on the to-side line power magnitude.

source
PowerModelsDistribution.constraint_mc_thermal_limit_toMethod
function constraint_mc_thermal_limit_to(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	nw::Int,
 	t_idx::Tuple{Int,Int,Int},
 	t_connections::Vector{Int},
 	rate_a::Vector{<:Real}
-)

For quadratic IVR models with explicit neutrals, throw an error because this cannot be represented quadratically without introducing explicit power variables.

source
PowerModelsDistribution.constraint_mc_theta_refMethod
function constraint_mc_theta_ref(
 	pm::RectangularVoltageExplicitNeutralModels,
 	nw::Int,
 	i::Int,
 	va::Vector{<:Real},
 	terminals::Vector{Int},
 	grounded::Vector{Bool}
-)

Creates phase angle constraints at bus i

source
PowerModelsDistribution.constraint_mc_transformer_currentMethod
function constraint_mc_transformer_current(
 	pm::AbstractExplicitNeutralIVRModel,
 	i::Int;
 	nw::Int=nw_id_default,
 	fix_taps::Bool=true
-)

For IVR models with explicit neutrals, links the current variables of the from-side and to-side transformer windings, and creates expressions for the terminal current flows

source
PowerModelsDistribution.constraint_mc_transformer_current_dyMethod
function constraint_mc_transformer_current_dy(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	trans_id::Int,
@@ -668,7 +668,7 @@
 	tm_fixed::Vector{Bool},
 	tm_scale::Real
 )

For IVR models with explicit neutrals, links the current variables of the from-side and to-side transformer windings, and creates expressions for the terminal current flows for delta-wye connected transformers

scale*cr_fr_P + cr_to_P == 0
-scale*ci_fr_P + ci_to_P == 0
source
PowerModelsDistribution.constraint_mc_transformer_current_yyMethod
function constraint_mc_transformer_current_yy(
 	pm::AbstractExplicitNeutralIVRModel,
 	nw::Int,
 	trans_id::Int,
@@ -683,7 +683,7 @@
 	tm_fixed::Vector{Bool},
 	tm_scale::Real
 )

For IVR models with explicit neutrals, links the current variables of the from-side and to-side transformer windings, and creates expressions for the terminal current flows for wye-wye connected transformers

scale*cr_fr_P + cr_to_P == 0
-scale*ci_fr_P + ci_to_P == 0
source
PowerModelsDistribution.constraint_mc_transformer_powerMethod
constraint_mc_transformer_power(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default, fix_taps::Bool=true)::Nothing

Template function for Transformer constraints in Power-voltage space, considering winding type, conductor order, polarity and tap settings.

source
PowerModelsDistribution.constraint_mc_transformer_powerMethod
constraint_mc_transformer_power(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default, fix_taps::Bool=true)::Nothing

Template function for Transformer constraints in Power-voltage space, considering winding type, conductor order, polarity and tap settings.

source
PowerModelsDistribution.constraint_mc_transformer_power_dyMethod
function constraint_mc_transformer_power_dy(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	trans_id::Int,
@@ -697,7 +697,7 @@
 	tm_set::Vector{<:Real},
 	tm_fixed::Vector{Bool},
 	tm_scale::Real
-)

For ACR models with explicit neutrals, links the from-side and to-side power variables of delta-wye connected transformers. Expressions for the terminal power flow variables are also added.

source
PowerModelsDistribution.constraint_mc_transformer_power_dyMethod
constraint_mc_transformer_power_dy(pm::FBSUBFPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, delta-wye connected transformer similar to ACRUPowerModel with power constraints using initial operating point voltage instead of actual voltage variables.

source
PowerModelsDistribution.constraint_mc_transformer_power_dyMethod
constraint_mc_transformer_power_dy(pm::FOTPUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, delta-wye connected transformer similar to ACPUPowerModel with voltage constraints linearized using first-order Taylor approximation and power constraints simplified using initial operating point voltage instead of actual voltage variables.

source
PowerModelsDistribution.constraint_mc_transformer_power_dyMethod
constraint_mc_transformer_power_dy(pm::FOTRUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, delta-wye connected transformer similar to ACRUPowerModel with power constraints using initial operating point voltage instead of actual voltage variables.

source
PowerModelsDistribution.constraint_mc_transformer_power_dyMethod
constraint_mc_transformer_power_dy(pm::SOCUBFModels, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Constraints to model a two-winding, delta-wye connected transformer.

\[\begin{align} +)

For ACR models with explicit neutrals, links the from-side and to-side power variables of delta-wye connected transformers. Expressions for the terminal power flow variables are also added.

source
PowerModelsDistribution.constraint_mc_transformer_power_dyMethod
constraint_mc_transformer_power_dy(pm::FBSUBFPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, delta-wye connected transformer similar to ACRUPowerModel with power constraints using initial operating point voltage instead of actual voltage variables.

source
PowerModelsDistribution.constraint_mc_transformer_power_dyMethod
constraint_mc_transformer_power_dy(pm::FOTPUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, delta-wye connected transformer similar to ACPUPowerModel with voltage constraints linearized using first-order Taylor approximation and power constraints simplified using initial operating point voltage instead of actual voltage variables.

source
PowerModelsDistribution.constraint_mc_transformer_power_dyMethod
constraint_mc_transformer_power_dy(pm::FOTRUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, delta-wye connected transformer similar to ACRUPowerModel with power constraints using initial operating point voltage instead of actual voltage variables.

source
PowerModelsDistribution.constraint_mc_transformer_power_dyMethod
constraint_mc_transformer_power_dy(pm::SOCUBFModels, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Constraints to model a two-winding, delta-wye connected transformer.

\[\begin{align} &{W}_{fr}^{ij}-{W}_{fr}^{ik}-{W}_{fr}^{lj}+{W}_{fr}^{lk} = t_m^2{W}_{to}^{ij} ~\forall i,j \in \{1,2,3\}~ \text{and}~ k,l \in \{2,3,1\} \\ &{S}_{fr} = X_tT_t \\ &{S}_{fr}^\Delta = T_tX_t \\ @@ -707,7 +707,7 @@ {W}_{fr} & {X}_{t} \\ {X}_{t}^{\text{H}} & {L}_{\Delta} \end{bmatrix} \succeq 0 -\end{align}\]

source
PowerModelsDistribution.constraint_mc_transformer_power_yyMethod
function constraint_mc_transformer_power_yy(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	trans_id::Int,
@@ -721,10 +721,10 @@
 	tm_set::Vector{<:Real},
 	tm_fixed::Vector{Bool},
 	tm_scale::Real
-)

For ACR models with explicit neutrals, links the from-side and to-side power variables of wye-wye connected transformers. Expressions for the terminal power flow variables are also added.

source
PowerModelsDistribution.constraint_mc_transformer_power_yyMethod
constraint_mc_transformer_power_yy(pm::FBSUBFPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, wye-wye connected transformer similar to ACRUPowerModel.

source
PowerModelsDistribution.constraint_mc_transformer_power_yyMethod
constraint_mc_transformer_power_yy(pm::FOTPUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, wye-wye connected transformer similar to ACPUPowerModel.

source
PowerModelsDistribution.constraint_mc_transformer_power_yyMethod
constraint_mc_transformer_power_yy(pm::FOTRUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, wye-wye connected transformer similar to ACRUPowerModel.

source
PowerModelsDistribution.constraint_mc_transformer_power_yyMethod
constraint_mc_transformer_power_yy(pm::SOCUBFModels, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Constraints to model a two-winding, wye-wye connected transformer.

\[\begin{align} +)

For ACR models with explicit neutrals, links the from-side and to-side power variables of wye-wye connected transformers. Expressions for the terminal power flow variables are also added.

source
PowerModelsDistribution.constraint_mc_transformer_power_yyMethod
constraint_mc_transformer_power_yy(pm::FBSUBFPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, wye-wye connected transformer similar to ACRUPowerModel.

source
PowerModelsDistribution.constraint_mc_transformer_power_yyMethod
constraint_mc_transformer_power_yy(pm::FOTPUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, wye-wye connected transformer similar to ACPUPowerModel.

source
PowerModelsDistribution.constraint_mc_transformer_power_yyMethod
constraint_mc_transformer_power_yy(pm::FOTRUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Add all constraints required to model a two-winding, wye-wye connected transformer similar to ACRUPowerModel.

source
PowerModelsDistribution.constraint_mc_transformer_power_yyMethod
constraint_mc_transformer_power_yy(pm::SOCUBFModels, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)

Constraints to model a two-winding, wye-wye connected transformer.

\[\begin{align} & {W}_{fr} = {T}_{m}{T}_{m}^{H} {W}_{to} \\ & {s}_{fr} + {s}_{to} = 0 -\end{align}\]

source
PowerModelsDistribution.constraint_mc_transformer_thermal_limitMethod
function constraint_mc_transformer_thermal_limit(
 	pm::AbstractExplicitNeutralACRModel,
 	nw::Int,
 	id::Int,
@@ -738,7 +738,7 @@
 	sm_ub::Real;
 	report::Bool=true
 )

For ACR models with explicit neutrals, imposes a bound on the magnitude of the total apparent power at each winding of the transformer.

sum(pt_fr)^2 + sum(qt_fr)^2 <= sm_ub^2
-sum(pt_to)^2 + sum(qt_to)^2 <= sm_ub^2
source
PowerModelsDistribution.constraint_mc_transformer_thermal_limitMethod
function constraint_mc_transformer_thermal_limit(
 	pm::AbstractNLExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
@@ -752,7 +752,7 @@
 	sm_ub::Real;
 	report::Bool=true
 )

For non-linear IVR models with explicit neutrals, imposes a bound on the magnitude of the total apparent power at both windings. Expressions are created for the transformer power variables.

sum(pt_fr)^2 + sum(qt_fr)^2 <= sm_ub^2
-sum(pt_to)^2 + sum(qt_to)^2 <= sm_ub^2
source
PowerModelsDistribution.constraint_mc_transformer_thermal_limitMethod
function constraint_mc_transformer_thermal_limit(
 	pm::AbstractQuadraticExplicitNeutralIVRModel,
 	nw::Int,
 	id::Int,
@@ -766,18 +766,18 @@
 	sm_ub::Real;
 	report::Bool=true
 )

For quadratic IVR models with explicit neutrals, imposes a bound on the magnitude of the total apparent power at both windings.

sum(pt_fr)^2 + sum(qt_fr)^2 <= sm_ub^2
-sum(pt_to)^2 + sum(qt_to)^2 <= sm_ub^2
source
PowerModelsDistribution.constraint_mc_transformer_voltage_dyMethod
function constraint_mc_transformer_voltage_dy(
 	pm::RectangularVoltageExplicitNeutralModels,
 	nw::Int,
 	trans_id::Int,
@@ -792,7 +792,7 @@
 	tm_fixed::Vector{Bool},
 	tm_scale::Real
 )

For rectangular voltage models with explicit neutrals, links the voltage of the from-side and to-side transformer windings for delta-wye connected transformers

Md*vr_fr_P == scale * (vr_to_P - vr_to_n)
-Md*vi_fr_P == scale * (vi_to_P - vi_to_n)
source
PowerModelsDistribution.constraint_mc_transformer_voltage_yyMethod
function constraint_mc_transformer_voltage_yy(
 	pm::RectangularVoltageExplicitNeutralModels,
 	nw::Int,
 	trans_id::Int,
@@ -807,7 +807,7 @@
 	tm_fixed::Vector{Bool},
 	tm_scale::Real
 )

For rectangular voltage models with explicit neutrals, links the voltage of the from-side and to-side transformer windings for wye-wye connected transformers

(vr_fr_P-vr_fr_n) == scale * (vr_to_P.-vr_to_n)
-(vi_fr_P-vi_fr_n) == scale * (vi_to_P.-vi_to_n)
source
PowerModelsDistribution.constraint_mc_voltage_absoluteMethod
function constraint_mc_voltage_absolute(
 	pm::RectangularVoltageExplicitNeutralModels,
 	nw::Int,
 	i::Int,
@@ -816,13 +816,13 @@
 	vmin::Vector{<:Real},
 	vmax::Vector{<:Real};
 	report::Bool=true
-)

Imposes absolute voltage magnitude bounds for models with explicit neutrals

source
PowerModelsDistribution.constraint_mc_voltage_absoluteMethod
function constraint_mc_voltage_absolute(
     pm::RectangularVoltageExplicitNeutralModels,
     id::Int;
     nw::Int=nw_id_default,
     bounded::Bool=true,
     report::Bool=true,
-)

Imposes absolute voltage magnitude bounds for models with explicit neutrals

source
PowerModelsDistribution.constraint_mc_voltage_angle_differenceMethod
constraint_mc_voltage_angle_difference(pm::FBSUBFPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, angmin::Vector{<:Real}, angmax::Vector{<:Real})

Nothing to do, this model ignores angle difference constraints"

source
PowerModelsDistribution.constraint_mc_voltage_angle_differenceMethod
constraint_mc_voltage_angle_difference(pm::FOTRUPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, angmin::Vector{<:Real}, angmax::Vector{<:Real})

Nothing to do, this model ignores angle difference constraints"

source
PowerModelsDistribution.constraint_mc_voltage_angle_differenceMethod
constraint_mc_voltage_angle_difference(pm::FBSUBFPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, angmin::Vector{<:Real}, angmax::Vector{<:Real})

Nothing to do, this model ignores angle difference constraints"

source
PowerModelsDistribution.constraint_mc_voltage_angle_differenceMethod
constraint_mc_voltage_angle_difference(pm::FOTRUPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, angmin::Vector{<:Real}, angmax::Vector{<:Real})

Nothing to do, this model ignores angle difference constraints"

source
PowerModelsDistribution.constraint_mc_voltage_fixedMethod
function constraint_mc_voltage_fixed(
 	pm::RectangularVoltageExplicitNeutralModels,
 	nw::Int,
 	i::Int,
@@ -830,14 +830,14 @@
 	va::Vector{<:Real},
 	terminals::Vector{Int},
 	grounded::Vector{Bool}
-)

Fixes the voltage variables at bus i to vm.*exp.(im*va)

source
PowerModelsDistribution.constraint_mc_voltage_magnitude_boundsMethod
constraint_mc_voltage_magnitude_bounds(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing

Template function for voltage magnitude bounds constraints.

This constraint captures problem agnostic constraints that define limits for voltage magnitudes (where variable bounds cannot be used). Notable examples include IVRUPowerModel and ACRUPowerModel.

source
PowerModelsDistribution.constraint_mc_voltage_magnitude_boundsMethod
constraint_mc_voltage_magnitude_bounds(pm::FBSUBFPowerModel, nw::Int, i::Int, vmin::Vector{<:Real}, vmax::Vector{<:Real})

Upper voltage magnitude limits are linearized using outer approximation. Lower voltage magnitude limits are linearized around initial operating point.

\[\begin{align} +)

Fixes the voltage variables at bus i to vm.*exp.(im*va)

source
PowerModelsDistribution.constraint_mc_voltage_magnitude_boundsMethod
constraint_mc_voltage_magnitude_bounds(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing

Template function for voltage magnitude bounds constraints.

This constraint captures problem agnostic constraints that define limits for voltage magnitudes (where variable bounds cannot be used). Notable examples include IVRUPowerModel and ACRUPowerModel.

source
PowerModelsDistribution.constraint_mc_voltage_magnitude_boundsMethod
constraint_mc_voltage_magnitude_bounds(pm::FBSUBFPowerModel, nw::Int, i::Int, vmin::Vector{<:Real}, vmax::Vector{<:Real})

Upper voltage magnitude limits are linearized using outer approximation. Lower voltage magnitude limits are linearized around initial operating point.

\[\begin{align} &\text{Initial operating point: } ⇒ v_{r}^0 + j ⋅ v_{i}^0~\text{where}~{(v_m^0)}^2 = {(v_{r}^0)}^2 + {(v_{i}^0)}^2\\ &\text{Lower limits: } 2 ⋅ v_{r} ⋅ v_{r}^0 + 2 ⋅ v_{i} ⋅ v_{i}^0 - {(v_{m}^0)}^2 ≥ v_{min}^2,\\ &\text{Upper limits: } -v_{max} ≤ v_{r} ≤ v_{max},\\ & -v_{max} ≤ v_{i} ≤ v_{max},\\ &-\sqrt{2} ⋅ v_{max} ≤ v_{r} + v_{i} ≤ \sqrt{2} ⋅ v_{max},\\ & -\sqrt{2} ⋅ v_{max} ≤ v_{r} - v_{i} ≤ \sqrt{2} ⋅ v_{max}. -\end{align}\]

source
PowerModelsDistribution.constraint_mc_voltage_pairwiseMethod
function constraint_mc_voltage_pairwise(
 	pm::RectangularVoltageExplicitNeutralModels,
 	nw::Int,
 	i::Int,
@@ -854,19 +854,19 @@
 	vm_pair_lb::Vector,
 	vm_pair_ub::Vector;
 	report::Bool=true
-)

Imposes pairwise voltage magnitude bounds, i.e. magnitude bounds on the voltage between to terminals, for models with explicit neutrals

source
PowerModelsDistribution.constraint_mc_voltage_pairwiseMethod
function constraint_mc_voltage_pairwise(
     pm::RectangularVoltageExplicitNeutralModels,
     id::Int;
     nw::Int=nw_id_default,
     bounded::Bool=true,
     report::Bool=true,
-)

Imposes pairwise voltage magnitude bounds, i.e. magnitude bounds on the voltage between to terminals, for models with explicit neutrals

source
PowerModelsDistribution.constraint_pqwMethod

Creates the constraints modelling the (relaxed) voltage-dependency of the power consumed in each phase, s=p+jq. This is completely symmetrical for p and q, with appropriate substitutions of the variables and parameters: p->q, a->b, alpha->beta, pmin->qmin, pmax->qmax

source
PowerModelsDistribution.constraint_switch_thermal_limitMethod
constraint_switch_thermal_limit(pm::AbstractUnbalancedPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, rating::Vector{<:Real})::Nothing

Generic thermal limit constraint for switches (from-side)

mathp_{fr}^2 + q_{fr}^2 \leq S_{max}^2

source

Relaxation Helpers

PowerModelsDistribution.cut_complex_product_and_angle_differenceMethod
cut_complex_product_and_angle_difference(m, wf, wt, wr, wi, angmin, angmax)

A valid inequality for the product of two complex variables with magnitude and angle difference bounds. In the literature this constraints are called the Lifted Nonlinear Cuts (LNCs). @misc{1512.04644, Author = {Carleton Coffrin and Hassan Hijazi and Pascal Van Hentenryck}, Title = {Strengthening the SDP Relaxation of AC Power Flows with Convex Envelopes, Bound Tightening, and Lifted Nonlinear Cuts}, Year = {2015}, Eprint = {arXiv:1512.04644}, }

source
PowerModelsDistribution.relaxation_psd_to_socMethod
relaxation_psd_to_soc(m::JuMP.Model, mxreal, mximag; complex::Bool=true)

See section 4.3 for complex to real PSD constraint transformation: @article{Fazel2001, author = {Fazel, M. and Hindi, H. and Boyd, S.P.}, title = {{A rank minimization heuristic with application to minimum order system approximation}}, doi = {10.1109/ACC.2001.945730}, journal = {Proc. American Control Conf.}, number = {2}, pages = {4734–4739}, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=945730}, volume = {6}, year = {2001} }

source
PowerModelsDistribution.constraint_pqwMethod

Creates the constraints modelling the (relaxed) voltage-dependency of the power consumed in each phase, s=p+jq. This is completely symmetrical for p and q, with appropriate substitutions of the variables and parameters: p->q, a->b, alpha->beta, pmin->qmin, pmax->qmax

source
PowerModelsDistribution.constraint_switch_thermal_limitMethod
constraint_switch_thermal_limit(pm::AbstractUnbalancedPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, rating::Vector{<:Real})::Nothing

Generic thermal limit constraint for switches (from-side)

mathp_{fr}^2 + q_{fr}^2 \leq S_{max}^2

source

Relaxation Helpers

PowerModelsDistribution.cut_complex_product_and_angle_differenceMethod
cut_complex_product_and_angle_difference(m, wf, wt, wr, wi, angmin, angmax)

A valid inequality for the product of two complex variables with magnitude and angle difference bounds. In the literature this constraints are called the Lifted Nonlinear Cuts (LNCs). @misc{1512.04644, Author = {Carleton Coffrin and Hassan Hijazi and Pascal Van Hentenryck}, Title = {Strengthening the SDP Relaxation of AC Power Flows with Convex Envelopes, Bound Tightening, and Lifted Nonlinear Cuts}, Year = {2015}, Eprint = {arXiv:1512.04644}, }

source
PowerModelsDistribution.relaxation_psd_to_socMethod
relaxation_psd_to_soc(m::JuMP.Model, mxreal, mximag; complex::Bool=true)

See section 4.3 for complex to real PSD constraint transformation: @article{Fazel2001, author = {Fazel, M. and Hindi, H. and Boyd, S.P.}, title = {{A rank minimization heuristic with application to minimum order system approximation}}, doi = {10.1109/ACC.2001.945730}, journal = {Proc. American Control Conf.}, number = {2}, pages = {4734–4739}, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=945730}, volume = {6}, year = {2001} }

source
PowerModelsDistribution.relaxation_psd_to_soc_complexMethod
relaxation_psd_to_soc_complex(m, mxreal, mximag)

SDP to SOC relaxation of type 2, applied to complex-value matrix, as described in:

@article{Kim2003,
 author = {Kim, S and Kojima, M and Yamashita, M},
 title = {{Second order cone programming relaxation of a positive semidefinite constraint}},
 doi = {10.1080/1055678031000148696},
@@ -875,7 +875,7 @@
 pages = {535--541},
 volume = {18},
 year = {2003}
-}
source
PowerModelsDistribution.relaxation_psd_to_soc_complex_conicMethod
relaxation_psd_to_soc_complex_conic(m, mxreal, mximag)

SDP to SOC relaxation of type 2, applied to complex-value matrix, as described in:

@article{Kim2003,
 author = {Kim, S and Kojima, M and Yamashita, M},
 title = {{Second order cone programming relaxation of a positive semidefinite constraint}},
 doi = {10.1080/1055678031000148696},
@@ -884,7 +884,7 @@
 pages = {535--541},
 volume = {18},
 year = {2003}
-}
source
PowerModelsDistribution.relaxation_psd_to_soc_conicMethod
relaxation_psd_to_soc_conic(m, mxreal, mximag; complex=true)

See section 4.3 for complex to real PSD constraint transformation: @article{Fazel2001, author = {Fazel, M. and Hindi, H. and Boyd, S.P.}, title = {{A rank minimization heuristic with application to minimum order system approximation}}, doi = {10.1109/ACC.2001.945730}, journal = {Proc. American Control Conf.}, number = {2}, pages = {4734–4739}, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=945730}, volume = {6}, year = {2001} }

source
PowerModelsDistribution.relaxation_psd_to_soc_conicMethod
relaxation_psd_to_soc_conic(m, mxreal, mximag; complex=true)

See section 4.3 for complex to real PSD constraint transformation: @article{Fazel2001, author = {Fazel, M. and Hindi, H. and Boyd, S.P.}, title = {{A rank minimization heuristic with application to minimum order system approximation}}, doi = {10.1109/ACC.2001.945730}, journal = {Proc. American Control Conf.}, number = {2}, pages = {4734–4739}, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=945730}, volume = {6}, year = {2001} }

source
PowerModelsDistribution.relaxation_psd_to_soc_realMethod
relaxation_psd_to_soc_real(m, mx)

SDP to SOC relaxation of type 2, applied to real-value matrix, as described in:

@article{Kim2003,
 author = {Kim, S and Kojima, M and Yamashita, M},
 title = {{Second order cone programming relaxation of a positive semidefinite constraint}},
 doi = {10.1080/1055678031000148696},
@@ -893,7 +893,7 @@
 pages = {535--541},
 volume = {18},
 year = {2003}
-}
source
PowerModelsDistribution.relaxation_psd_to_soc_real_conicMethod
relaxation_psd_to_soc_real_conic(m, mx)

SDP to SOC relaxation of type 2, applied to real-value matrix, as described in:

@article{Kim2003,
 author = {Kim, S and Kojima, M and Yamashita, M},
 title = {{Second order cone programming relaxation of a positive semidefinite constraint}},
 doi = {10.1080/1055678031000148696},
@@ -902,4 +902,4 @@
 pages = {535--541},
 volume = {18},
 year = {2003}
-}
source

Miscellaneous Helpers

+}
source

Miscellaneous Helpers

diff --git a/dev/reference/data_models.html b/dev/reference/data_models.html index 0a8c2ad27..d329c5530 100644 --- a/dev/reference/data_models.html +++ b/dev/reference/data_models.html @@ -16,19 +16,19 @@ kron_reduce::Bool=true, phase_project::Bool=false, time_series::String="daily" -)::Dict{String,Any}

Parses the IOStream of a file into a PowerModelsDistribution data structure

If filetype is missing, parse_file will attempt to detect the filetype, but this may fail, and it is advised to pass the filetype if it is known.

If data_model is MATHEMATICAL, the data model type will be automatically transformed via transform_data_model.

For explanation of import_all, bank_transformers, and time_series, see parse_opendss

For explanation of dss2eng_extensions, see parse_opendss

For explanation of kron_reduce, see apply_kron_reduction!

For explanation of phase_project, see apply_phase_projection!

For explanation of multinetwork and global_keys, see make_multinetwork and transform_data_model

For explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model

For explanation of make_pu and make_pu_extensions, see make_per_unit!.

source
parse_file(file::String; kwargs...)::Dict{String,Any}

Loads file into IOStream and passes it onto parse_file

source
PowerModelsDistribution.parse_dssFunction
source
PowerModelsDistribution.parse_opendssFunction
parse_opendss(
+)::Dict{String,Any}

Parses the IOStream of a file into a PowerModelsDistribution data structure

If filetype is missing, parse_file will attempt to detect the filetype, but this may fail, and it is advised to pass the filetype if it is known.

If data_model is MATHEMATICAL, the data model type will be automatically transformed via transform_data_model.

For explanation of import_all, bank_transformers, and time_series, see parse_opendss

For explanation of dss2eng_extensions, see parse_opendss

For explanation of kron_reduce, see apply_kron_reduction!

For explanation of phase_project, see apply_phase_projection!

For explanation of multinetwork and global_keys, see make_multinetwork and transform_data_model

For explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model

For explanation of make_pu and make_pu_extensions, see make_per_unit!.

source
parse_file(file::String; kwargs...)::Dict{String,Any}

Loads file into IOStream and passes it onto parse_file

source
PowerModelsDistribution.parse_dssFunction
source
PowerModelsDistribution.parse_opendssFunction
parse_opendss(
     io::IO;
     import_all::Bool=false,
     bank_transformers::Bool=true,
     time_series::String="daily",
     dss2eng_extensions::Vector{<:Function}=Function[],
-)::Dict{String,Any}

Parses an IO, into raw dss dictionary via parse_dss, into the ENGINEERING DataModel

See parse_opendss

source
parse_opendss(
+)::Dict{String,Any}

Parses an IO, into raw dss dictionary via parse_dss, into the ENGINEERING DataModel

See parse_opendss

source
parse_opendss(
     data_dss::OpenDssDataModel;
     import_all::Bool=false,
     bank_transformers::Bool=true,
     time_series::String="daily",
     dss2eng_extensions::Vector{<:Function}=Function[]
-)::Dict{String,Any}

Parses a raw dss data structure (dictionary), resulting from the parsing of a DSS file, into the ENGINEERING DataModel

If import_all is true, all raw dss properties will be included in the final dictionary under "dss".

If bank_transformers is true (default), transformers that are indicated to be part of a bank in dss will be combined into a single multiphase transformer.

time_series defines which property the time series will be taken from, "daily" or "yearly". More complex parsing of time series data should be performed with dss2eng_extensions.

dss2eng_extensions

If a user wishes to parse additional components that are not yet natively supported by PowerModelsDistribution, dss2eng_extensions can be utilized. Custom user functions provided under dss2eng_extensions will be excuted after all built-in dss2eng transformations have been performed and transformers have been banked together (if bank_transformers==true). dss2eng_extension functions should have the following function signature:

dss2eng_func!(data_eng, data_dss)

where data_eng is a non-multinetwork ENGINEERING data model (i.e., time series data has not yet been expanded into a multinetwork structure), and data_dss is the raw dss data parsed by parse_dss.

source
PowerModelsDistribution.parse_jsonFunction
parse_json(file::String)

parses json files that were dumped via JSON.print (or PMD.print_file)

source
parse_json(io::IO)

parses json files that were dumped via JSON.print (or PMD.print_file)

source
PowerModelsDistribution.print_fileFunction
print_file(path::String, data::Dict{String,<:Any}; indent::Int=2)

prints a PowerModelsDistribution data structure into a JSON file

source
print_file(io::IO, data::Dict{String,<:Any}; indent::Int=2)

prints a PowerModelsDistribution data structure into a JSON file

source

print_file variant for InfrastructureModel that converts to Dict first

source

Constructors

PowerModelsDistribution.ModelFunction
Model(model_type::DataModel)

Instantiates a PowerModelsDistribution data model

source
PowerModelsDistribution.add_bus!Function

adds a bus to provided ENGINEERING model, see create_bus

source
PowerModelsDistribution.add_generator!Function

adds a generator to provided ENGINEERING model, see create_generator

source
PowerModelsDistribution.add_line!Function

adds a line to provided ENGINEERING model, see create_line

source
PowerModelsDistribution.add_linecode!Function

adds a linecode to provided ENGINEERING model, see create_linecode

source
PowerModelsDistribution.add_load!Function

adds a load to provided ENGINEERING model, see create_load

source
PowerModelsDistribution.add_object!Method
add_object!(data_eng::Dict{String,<:Any}, obj_type::String, obj_id::String, object::Dict{String,<:Any})

Generic add function to add components to an engineering data model

source
PowerModelsDistribution.add_shunt!Function

adds a shunt to provided ENGINEERING model, see create_shunt

source
PowerModelsDistribution.add_solar!Function

adds a PV to provided ENGINEERING model, see create_solar

source
PowerModelsDistribution.add_storage!Function

adds a storage to provided ENGINEERING model, see create_storage

source
PowerModelsDistribution.add_switch!Function

adds a switch to provided ENGINEERING model, see create_switch

source
PowerModelsDistribution.add_transformer!Function

adds a transformer to provided ENGINEERING model, see create_transformer and create_al2w_transformer

source
PowerModelsDistribution.add_vbase_default!Method
add_vbase_default!(data_eng::Dict{String,<:Any}, bus::String, vbase::Real)

Function to add default vbase for a bus

source
PowerModelsDistribution.add_voltage_source!Function

adds a voltage source to provided ENGINEERING model, see create_voltage_source

source
PowerModelsDistribution.add_xfmrcode!Function

adds a transformer code (xmfrcode) to provided ENGINEERING model, see create_xfmrcode

source
PowerModelsDistribution.create_al2w_transformerMethod
create_al2w_transformer(
+)::Dict{String,Any}

Parses a raw dss data structure (dictionary), resulting from the parsing of a DSS file, into the ENGINEERING DataModel

If import_all is true, all raw dss properties will be included in the final dictionary under "dss".

If bank_transformers is true (default), transformers that are indicated to be part of a bank in dss will be combined into a single multiphase transformer.

time_series defines which property the time series will be taken from, "daily" or "yearly". More complex parsing of time series data should be performed with dss2eng_extensions.

dss2eng_extensions

If a user wishes to parse additional components that are not yet natively supported by PowerModelsDistribution, dss2eng_extensions can be utilized. Custom user functions provided under dss2eng_extensions will be excuted after all built-in dss2eng transformations have been performed and transformers have been banked together (if bank_transformers==true). dss2eng_extension functions should have the following function signature:

dss2eng_func!(data_eng, data_dss)

where data_eng is a non-multinetwork ENGINEERING data model (i.e., time series data has not yet been expanded into a multinetwork structure), and data_dss is the raw dss data parsed by parse_dss.

source
PowerModelsDistribution.parse_jsonFunction
parse_json(file::String)

parses json files that were dumped via JSON.print (or PMD.print_file)

source
parse_json(io::IO)

parses json files that were dumped via JSON.print (or PMD.print_file)

source
PowerModelsDistribution.print_fileFunction
print_file(path::String, data::Dict{String,<:Any}; indent::Int=2)

prints a PowerModelsDistribution data structure into a JSON file

source
print_file(io::IO, data::Dict{String,<:Any}; indent::Int=2)

prints a PowerModelsDistribution data structure into a JSON file

source

print_file variant for InfrastructureModel that converts to Dict first

source

Constructors

PowerModelsDistribution.ModelFunction
Model(model_type::DataModel)

Instantiates a PowerModelsDistribution data model

source
PowerModelsDistribution.add_bus!Function

adds a bus to provided ENGINEERING model, see create_bus

source
PowerModelsDistribution.add_generator!Function

adds a generator to provided ENGINEERING model, see create_generator

source
PowerModelsDistribution.add_line!Function

adds a line to provided ENGINEERING model, see create_line

source
PowerModelsDistribution.add_linecode!Function

adds a linecode to provided ENGINEERING model, see create_linecode

source
PowerModelsDistribution.add_load!Function

adds a load to provided ENGINEERING model, see create_load

source
PowerModelsDistribution.add_object!Method
add_object!(data_eng::Dict{String,<:Any}, obj_type::String, obj_id::String, object::Dict{String,<:Any})

Generic add function to add components to an engineering data model

source
PowerModelsDistribution.add_shunt!Function

adds a shunt to provided ENGINEERING model, see create_shunt

source
PowerModelsDistribution.add_solar!Function

adds a PV to provided ENGINEERING model, see create_solar

source
PowerModelsDistribution.add_storage!Function

adds a storage to provided ENGINEERING model, see create_storage

source
PowerModelsDistribution.add_switch!Function

adds a switch to provided ENGINEERING model, see create_switch

source
PowerModelsDistribution.add_transformer!Function

adds a transformer to provided ENGINEERING model, see create_transformer and create_al2w_transformer

source
PowerModelsDistribution.add_vbase_default!Method
add_vbase_default!(data_eng::Dict{String,<:Any}, bus::String, vbase::Real)

Function to add default vbase for a bus

source
PowerModelsDistribution.add_voltage_source!Function

adds a voltage source to provided ENGINEERING model, see create_voltage_source

source
PowerModelsDistribution.add_xfmrcode!Function

adds a transformer code (xmfrcode) to provided ENGINEERING model, see create_xfmrcode

source
PowerModelsDistribution.create_al2w_transformerMethod
create_al2w_transformer(
     f_bus::String,
     t_bus::String,
     f_connections::Vector{Int},
@@ -41,14 +41,14 @@
     tm_fix::Union{Vector{Bool},Missing}=missing,
     status::Status=ENABLED,
     kwargs...
-)::Dict{String,Any}

creates a aysmmetric lossless 2-winding transformer object with some defaults

source
PowerModelsDistribution.create_busMethod
create_bus(;
+)::Dict{String,Any}

creates a aysmmetric lossless 2-winding transformer object with some defaults

source
PowerModelsDistribution.create_busMethod
create_bus(;
     status::Status=ENABLED,
     terminals::Vector{Int}=Int[],
     grounded::Vector{Int}=Int[],
     rg::Vector{<:Real}=Float64[],
     xg::Vector{<:Real}=Float64[],
     kwargs...
-)::Dict{String,Any}

creates a bus object with some defaults

source
PowerModelsDistribution.create_generatorMethod
create_generator(
+)::Dict{String,Any}

creates a bus object with some defaults

source
PowerModelsDistribution.create_generatorMethod
create_generator(
     bus::String,
     connections::Vector{Int};
     configuration::ConnConfig=WYE,
@@ -62,7 +62,7 @@
     control_mode::ControlMode=FREQUENCYDROOP,
     status::Status=ENABLED,
     kwargs...
-)::Dict{String,Any}

creates a generator object with some defaults

source
PowerModelsDistribution.create_lineMethod
create_line(
+)::Dict{String,Any}

creates a generator object with some defaults

source
PowerModelsDistribution.create_lineMethod
create_line(
     f_bus::String,
     t_bus::String,
     f_connections::Vector{Int},
@@ -81,7 +81,7 @@
     vad_ub::Union{Vector{<:Real},Missing}=missing,
     status::Status=ENABLED,
     kwargs...
-)::Dict{String,Any}

Create a line with some default values

source
PowerModelsDistribution.create_linecodeMethod
create_linecode(
+)::Dict{String,Any}

Create a line with some default values

source
PowerModelsDistribution.create_linecodeMethod
create_linecode(
     rs::Matrix{<:Real},
     xs::Matrix{<:Real};
     g_fr::Union{Matrix{<:Real},Missing}=missing,
@@ -90,7 +90,7 @@
     b_to::Union{Matrix{<:Real},Missing}=missing,
     cm_ub::Union{Vector{<:Real},Missing}=missing,
     kwargs...
-)::Dict{String,Any}

creates a linecode with some defaults

source
PowerModelsDistribution.create_loadMethod
create_load(
+)::Dict{String,Any}

creates a linecode with some defaults

source
PowerModelsDistribution.create_loadMethod
create_load(
     bus::String,
     connections::Vector{Int};
     configuration::ConnConfig=WYE,
@@ -101,7 +101,7 @@
     dispatchable::Dispatchable=NO,
     status::Status=ENABLED,
     kwargs...
-)::Dict{String,Any}

creates a load object with some defaults

source
PowerModelsDistribution.create_shuntMethod
create_shunt(
+)::Dict{String,Any}

creates a load object with some defaults

source
PowerModelsDistribution.create_shuntMethod
create_shunt(
     bus::String,
     connections::Vector{Int};
     gs::Union{Matrix{<:Real},Missing}=missing,
@@ -110,7 +110,7 @@
     dispatchable::Dispatchable=NO,
     status::Status=ENABLED,
     kwargs...
-)::Dict{String,Any}

creates a generic shunt with some defaults

source
PowerModelsDistribution.create_solarMethod
create_solar(
+)::Dict{String,Any}

creates a generic shunt with some defaults

source
PowerModelsDistribution.create_solarMethod
create_solar(
     bus::String,
     connections::Vector{Int};
     configuration::ConnConfig=WYE,
@@ -122,7 +122,7 @@
     qg::Union{Vector{<:Real},Missing}=missing,
     status::Status=ENABLED,
     kwargs...
-)::Dict{String,Any}

creates a solar generator with some defaults

source
PowerModelsDistribution.create_storageMethod
create_storage(
+)::Dict{String,Any}

creates a solar generator with some defaults

source
PowerModelsDistribution.create_storageMethod
create_storage(
     configuration::ConnConfig=WYE,
     energy::Real=0.0,
     energy_ub::Real=0.0,
@@ -142,7 +142,7 @@
     qs::Union{Real,Vector{<:Real},Missing}=missing,
     status::Status=ENABLED,
     kwargs...
-    )::Dict{String,Any}

creates energy storage object with some defaults

source
PowerModelsDistribution.create_switchMethod
create_switch(
+    )::Dict{String,Any}

creates energy storage object with some defaults

source
PowerModelsDistribution.create_switchMethod
create_switch(
     f_bus::String,
     t_bus::String,
     f_connections::Vector{Int},
@@ -156,7 +156,7 @@
     state::SwitchState=CLOSED,
     status::Status=ENABLED,
     kwargs...
-)::Dict{String,Any}

creates a switch object with some defaults

source
PowerModelsDistribution.create_transformerMethod
create_transformer(
+)::Dict{String,Any}

creates a switch object with some defaults

source
PowerModelsDistribution.create_transformerMethod
create_transformer(
     buses::Vector{String},
     connections::Vector{Vector{Int}};
     configurations::Union{Vector{ConnConfig},Missing}=missing,
@@ -175,7 +175,7 @@
     sm_nom::Union{Vector{<:Real},Missing}=missing,
     status::Status=ENABLED,
     kwargs...
-)::Dict{String,Any}

creates a n-winding transformer object with some defaults

source
PowerModelsDistribution.create_voltage_sourceMethod
create_voltage_source(
+)::Dict{String,Any}

creates a n-winding transformer object with some defaults

source
PowerModelsDistribution.create_voltage_sourceMethod
create_voltage_source(
     bus::String,
     connections::Vector{Int};
     configuration::ConnConfig=WYE,
@@ -187,7 +187,7 @@
     xs::Union{Vector{<:Real},Missing}=missing,
     status::Status=ENABLED,
     kwargs...
-)::Dict{String,Any}

creates a voltage source with some defaults

source
PowerModelsDistribution.create_xfmrcodeMethod
create_xfmrcode(;
+)::Dict{String,Any}

creates a voltage source with some defaults

source
PowerModelsDistribution.create_xfmrcodeMethod
create_xfmrcode(;
     configurations::Union{Vector{ConnConfig},Missing}=missing,
     xsc::Union{Vector{<:Real},Missing}=missing,
     rw::Union{Vector{<:Real},Missing}=missing,
@@ -197,7 +197,7 @@
     tm_set::Union{Vector{Vector{<:Real}},Missing}=missing,
     tm_fix::Union{Vector{Vector{<:Real}},Missing}=missing,
     kwargs...
-)::Dict{String,Any}

creates transformer code with some defaults

source
PowerModelsDistribution.delete_component!Method
delete_component!(data_eng::Dict{String,<:Any}, component_type::String, component_id::String)

deletes a component from the engineering data model

source

Model Transformations

PowerModelsDistribution.transform_data_modelFunction

default transform_data_model ErrorException for unsupported combinations

source
source
transform_data_model(
+)::Dict{String,Any}

creates transformer code with some defaults

source
PowerModelsDistribution.delete_component!Method
delete_component!(data_eng::Dict{String,<:Any}, component_type::String, component_id::String)

deletes a component from the engineering data model

source

Model Transformations

PowerModelsDistribution.transform_data_modelFunction

default transform_data_model ErrorException for unsupported combinations

source
source
transform_data_model(
     data::Dict{String,<:Any};
     kron_reduce::Bool=true,
     multinetwork::Bool=false,
@@ -209,7 +209,7 @@
 )::Dict{String,Any}

Transforms a data model model between ENGINEERING (high-level) and MATHEMATICAL (low-level) DataModel.

Notes

Kron reduction

If kron_reduce==true, apply_kron_reduction! and apply_phase_projection_delta! will be applied to the network data.

Phase projection

If phase_project==true, apply_phase_projection! will be applied to the network data.

Multinetwork transformations

If multinetwork==true, the data model will be transformed into a multinetwork (e.g., time series) data structure using make_multinetwork before being transformed into a MATHEMATICAL DataModel.

global_keys::Set{String} can be used to add custom top-level items to the multinetwork data structure, and will only be used in the context where multinetwork==true, and ignored otherwise.

Custom eng2math transformations

To add custom transformations between ENGINEERING and MATHEMATICAL data models, eng2math_extensions::Vector{<:Function} can be utilized to pass user-created functions, which are expected to have the signature

eng2math_func!(data_math::Dict{String,Any}, data_eng::Dict{String,Any})

where datamath and dataeng equivalent to single subnetworks in a multinetwork data structure, or a non-multinetwork data structure.

These functions are run after all built-in eng2math transformations have been performed.

Mapping back to ENGINEERING

See transform_solution

Passthrough properties

To more simply pass through some properties in the built-in eng2math transformations, eng2math_passthrough::Dict{String,Vector{String}} can be used. For example, if in the ENGINEERING model, a property called z was added to switch objects, and a property at the root level of the dictionary was added called max_switch_actions, the user could pass the following dictionary to eng2math_passthrough:

Dict{String,Vector{String}}(
     "switch" => String["z"],
     "root" => String["max_switch_actions"],
-)

This will result in z showing up on the switch object in the MATHEMATICAL model. Passthrough properties will always land on the primary conversion object in the MATHEMATICAL model if that object gets converted to multiple object types, e.g., voltage_source with internal impedance will result in gen, bus, and branch objects in the MATHEMATICAL model, but passthrough properties will only land on gen.

Custom per-unit transformations

To add additional per-unit transformations, a user can supply custom functions to make_pu_extensions::Vector{<:Function}, which will only be used if make_pu==true.

See make_per_unit! for further explanation.

source
PowerModelsDistribution.transform_solutionFunction
transform_solution(
+)

This will result in z showing up on the switch object in the MATHEMATICAL model. Passthrough properties will always land on the primary conversion object in the MATHEMATICAL model if that object gets converted to multiple object types, e.g., voltage_source with internal impedance will result in gen, bus, and branch objects in the MATHEMATICAL model, but passthrough properties will only land on gen.

Custom per-unit transformations

To add additional per-unit transformations, a user can supply custom functions to make_pu_extensions::Vector{<:Function}, which will only be used if make_pu==true.

See make_per_unit! for further explanation.

source
PowerModelsDistribution.transform_solutionFunction
transform_solution(
     solution_math::Dict{String,<:Any},
     data_math::Dict{String,<:Any};
     map::Union{Vector{<:Dict{String,<:Any}},Missing}=missing,
@@ -223,12 +223,12 @@
     "to" => Union{String,Vector{String}},
     "unmap_function" => PowerModelsDistribution.function!,
     "apply_to_subnetworks" => Bool
-)

Important things to note are that

  1. The function must be included in map_math2eng_extensions, which has the form:

    julia Dict{String,Function}( "_map_math2eng_func!" => _map_math2eng_func!, )

  2. "apply_to_subnetworks" is optional, and is true by default.

  3. "from" needs to be a single object

  4. "to" can be multiple objects or a single object

source

Data Transformations

Multinetworks

InfrastructureModels.ismultinetworkMethod
ismultinetwork(pm::AbstractUnbalancedPowerModel)

Checks if power model struct is multinetwork

source
PowerModelsDistribution.make_multinetworkMethod
make_multinetwork(
+)

Important things to note are that

  1. The function must be included in map_math2eng_extensions, which has the form:

    julia Dict{String,Function}( "_map_math2eng_func!" => _map_math2eng_func!, )

  2. "apply_to_subnetworks" is optional, and is true by default.

  3. "from" needs to be a single object

  4. "to" can be multiple objects or a single object

source

Data Transformations

Multinetworks

InfrastructureModels.ismultinetworkMethod
ismultinetwork(pm::AbstractUnbalancedPowerModel)

Checks if power model struct is multinetwork

source
PowerModelsDistribution.make_multinetworkMethod
make_multinetwork(
     data::Dict{String,<:Any};
     sparse::Bool=false,
     time_elapsed::Union{Missing,Real,Vector{<:Real}}=missing,
     global_keys::Set{String}=Set{String}(),
-)::Dict{String,Any}

Expands a data structure into a multinetwork assuming there are time_series objects defined and assigned to some components.

If global_keys::Set{String} is defined, the global keys that will appear at the top-level of the data structure will include both the default global keys for that data model type, and additionally the keys defined in global_keys.

time_elapsed defines the time elapsed between subnetworkin hours, and can either be a single Real value, and thus a constant time between each time step, or a Vector with the same length as the number of time steps, or can be left missing, in which case time elapsed will attempt to be discovered, with a fallback on 1 hour default. Time elapsed can be adjusted later using set_time_elapsed!

make_multinetwork assumes all "time" values in "timeseries" objects to be in the same units, and will attempt to automatically sort multinetworks in the correct order. [`sortmultinetwork!`](@ref sort_multinetwork!) can be used after the fact to re-sort the subnetworks.

sparse is currently unsupported, and is only included for future compatibility

source
PowerModelsDistribution.set_time_elapsed!Method
set_time_elapsed!(data::Dict{String,<:Any}, time_elapsed::Union{Real,Vector{<:Real}})

Helper function to set time_elapsed in multinetwork data, given either some constant value of time elapsed or a Vector of time elapsed values of the same length as the number of subnetworks.

source
PowerModelsDistribution.sort_multinetwork!Method
sort_multinetwork!(mn_data::Dict{String,<:Any}, times::Vector{<:Any})

Helper function to manually sort your multinetwork frames, given some pre-sorted vector of time values times

source

Unit conversions

PowerModelsDistribution.calc_eng_voltage_basesMethod
calc_eng_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}

Calculates voltage bases for each voltage zone for buses and branches for a ENGINEERING data_model

source
PowerModelsDistribution.calc_math_voltage_basesMethod
calc_math_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}

Calculates voltage bases for each voltage zone for buses and branches for a MATHEMATICAL data_model

source
PowerModelsDistribution.calc_voltage_basesMethod
calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}

Calculates voltage bases for each voltage zone for buses and branches, attempting to automatically decern the data_model type

source
PowerModelsDistribution.discover_eng_voltage_zonesMethod
discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}

finds voltage zones by walking through the network and analyzing the transformers for a ENGINEERING data_model

source
PowerModelsDistribution.discover_math_voltage_zonesMethod
discover_math_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}

finds voltage zones by walking through the network and analyzing the transformers for a MATHEMATICAL data_model

source
PowerModelsDistribution.discover_voltage_zonesMethod
discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}

finds voltage zones by walking through the network and analyzing the transformers, attempting to decern the type of data_model

source
PowerModelsDistribution.make_per_unit!Method
make_per_unit!(
+)::Dict{String,Any}

Expands a data structure into a multinetwork assuming there are time_series objects defined and assigned to some components.

If global_keys::Set{String} is defined, the global keys that will appear at the top-level of the data structure will include both the default global keys for that data model type, and additionally the keys defined in global_keys.

time_elapsed defines the time elapsed between subnetworkin hours, and can either be a single Real value, and thus a constant time between each time step, or a Vector with the same length as the number of time steps, or can be left missing, in which case time elapsed will attempt to be discovered, with a fallback on 1 hour default. Time elapsed can be adjusted later using set_time_elapsed!

make_multinetwork assumes all "time" values in "timeseries" objects to be in the same units, and will attempt to automatically sort multinetworks in the correct order. [`sortmultinetwork!`](@ref sort_multinetwork!) can be used after the fact to re-sort the subnetworks.

sparse is currently unsupported, and is only included for future compatibility

source
PowerModelsDistribution.set_time_elapsed!Method
set_time_elapsed!(data::Dict{String,<:Any}, time_elapsed::Union{Real,Vector{<:Real}})

Helper function to set time_elapsed in multinetwork data, given either some constant value of time elapsed or a Vector of time elapsed values of the same length as the number of subnetworks.

source
PowerModelsDistribution.sort_multinetwork!Method
sort_multinetwork!(mn_data::Dict{String,<:Any}, times::Vector{<:Any})

Helper function to manually sort your multinetwork frames, given some pre-sorted vector of time values times

source

Unit conversions

PowerModelsDistribution.calc_eng_voltage_basesMethod
calc_eng_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}

Calculates voltage bases for each voltage zone for buses and branches for a ENGINEERING data_model

source
PowerModelsDistribution.calc_math_voltage_basesMethod
calc_math_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}

Calculates voltage bases for each voltage zone for buses and branches for a MATHEMATICAL data_model

source
PowerModelsDistribution.calc_voltage_basesMethod
calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}

Calculates voltage bases for each voltage zone for buses and branches, attempting to automatically decern the data_model type

source
PowerModelsDistribution.discover_eng_voltage_zonesMethod
discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}

finds voltage zones by walking through the network and analyzing the transformers for a ENGINEERING data_model

source
PowerModelsDistribution.discover_math_voltage_zonesMethod
discover_math_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}

finds voltage zones by walking through the network and analyzing the transformers for a MATHEMATICAL data_model

source
PowerModelsDistribution.discover_voltage_zonesMethod
discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}

finds voltage zones by walking through the network and analyzing the transformers, attempting to decern the type of data_model

source
PowerModelsDistribution.make_per_unit!Method
make_per_unit!(
     data::Dict{String,Any};
     vbases::Union{Missing,Dict{String,Real}}=missing,
     sbase::Union{Missing,Real}=missing,
@@ -241,7 +241,7 @@
     sbase::Real,
     sbase_old::Real,
     voltage_scale_factor::Real
-)

where,

  • nw is equivalent to the a single subnetwork in a multinetwork data structure (which may be the same as data_math, in the case of a single network),
  • data_math is the complete data structure with the global keys,
  • bus_vbase is a dictionary of the voltage bases of each bus indexed by their MATHEMATICAL model indices,
  • line_vbase is a dictionary of the voltage bases of each branch indexed by their MATHEMATICAL model indices,
  • sbase is the new power base,
  • sbase_old is the power base the data structure started with, and
  • voltage_scale_factor is the scaling factor for voltage.
source
PowerModelsDistribution.solution_make_siMethod
solution_make_si(
+)

where,

  • nw is equivalent to the a single subnetwork in a multinetwork data structure (which may be the same as data_math, in the case of a single network),
  • data_math is the complete data structure with the global keys,
  • bus_vbase is a dictionary of the voltage bases of each bus indexed by their MATHEMATICAL model indices,
  • line_vbase is a dictionary of the voltage bases of each branch indexed by their MATHEMATICAL model indices,
  • sbase is the new power base,
  • sbase_old is the power base the data structure started with, and
  • voltage_scale_factor is the scaling factor for voltage.
source
PowerModelsDistribution.solution_make_siMethod
solution_make_si(
     solution::Dict{String,<:Any},
     math_model::Dict{String,<:Any};
     mult_sbase::Bool=true,
@@ -254,4 +254,4 @@
     "branch" => Dict{String,Vector{String}}(
         "ibase" => String["cfr"]
     )
-)

which would ensure that this variable gets converted back to SI units upon transformation.

source

Data Checking and Correction

PowerModelsDistribution.check_branch_loopsMethod
check_branch_loops(data::Dict{String,<:Any})

checks that all branches connect two distinct buses

source
PowerModelsDistribution.check_connectivityMethod
check_connectivity(data::Dict{String,<:Any})

checks that all buses are unique and other components link to valid buses

source
PowerModelsDistribution.check_cost_modelsMethod
check_cost_models(pm::AbstractUnbalancedPowerModel)

Checks that all cost models are of the same type

source
PowerModelsDistribution.check_eng_data_modelMethod
check_eng_data_model(data_eng::Dict{String,<:Any})

checks the engineering data model for correct data types, required fields and applies default checks

source
PowerModelsDistribution.check_gen_cost_modelsMethod
check_gen_cost_models(pm::AbstractUnbalancedPowerModel)

Checks that all generator cost models are of the same type

source
PowerModelsDistribution.correct_branch_directions!Method
correct_branch_directions!(data::Dict{String,<:Any})

checks that all parallel branches have the same orientation

source
PowerModelsDistribution.correct_bus_types!Method

checks bus types are suitable for a power flow study, if not, fixes them. the primary checks are that all type 2 buses (i.e., PV) have a connected and active generator and there is a single type 3 bus (i.e., slack bus) with an active connected generator. assumes that the network is a single connected component

source
PowerModelsDistribution.correct_cost_functions!Method
correct_cost_functions!(data::Dict{String,<:Any})

throws warnings if cost functions are malformed

source
PowerModelsDistribution.correct_json_import!Method
correct_json_import!(data::Dict{String,<:Any})

helper function to correct data imported from json

source
PowerModelsDistribution.correct_mc_thermal_limits!Method
correct_mc_thermal_limits!(data::Dict{String,<:Any})

checks that each branch has non-negative thermal ratings and removes zero thermal ratings

source
PowerModelsDistribution.correct_mc_voltage_angle_differences!Function
correct_mc_voltage_angle_differences!(data::Dict{String,<:Any}, default_pad::Real=deg2rad(10.0))

checks that voltage angle differences are within 90 deg., if not tightens to a default of 10deg (adjustable)

source
PowerModelsDistribution.correct_network_data!Method
correct_network_data!(data::Dict{String,Any}; make_pu::Bool=true, make_pu_extensions::Vector{<:Function}=Function[])

Makes corrections and performs checks on network data structure in either ENGINEERING or MATHEMATICAL formats, and converts to per-unit if data a is MATHEMATICAL data model.

If make_pu is false, converting to per-unit will be skipped.

Custom per-unit transformations

See make_per_unit!

source

Statistics and Analysis

PowerModelsDistribution.count_nodesFunction
count_nodes(data::Dict{String,<:Any})::Int

Counts number of nodes in network

source
count_nodes(data::Dict{String,<:Any})::Int

Counts number of nodes in network

source
PowerModelsDistribution.count_active_connectionsFunction
count_active_connections(data::Dict{String,<:Any})

Counts active ungrounded connections on edge components

source
PowerModelsDistribution.count_active_terminalsFunction
count_active_terminals(data::Dict{String,<:Any}; count_grounded::Bool=false)

Counts active ungrounded terminals on buses

source
PowerModelsDistribution.identify_load_blocksFunction
identify_load_blocks(data::Dict{String,<:Any})

computes load blocks based on switch locations

source
PowerModelsDistribution.identify_blocksFunction
identify_blocks(data::Dict{String,<:Any})

computes connected blocks currently in the model based on switch states

source
PowerModelsDistribution.identify_islandsFunction
identify_islands(data::Dict{String,<:Any})

computes component islands base only on edge and bus status

source
PowerModelsDistribution.calc_connected_componentsFunction
calc_connected_components(data::Dict{String,<:Any}; edges::Union{Missing, Vector{<:String}}=missing, type::Union{Missing,String}=missing, check_enabled::Bool=true)::Set

computes the connected components of the network graph returns a set of sets of bus ids, each set is a connected component

source

Helper Functions

PowerModelsDistribution.isengFunction
iseng(data::Dict{String,Any})

Helper function to check is data is ENGINEERING model

source
PowerModelsDistribution.ismathFunction
ismath(data::Dict{String,Any})

Helper function to check if data is MATHEMATICAL model

source
PowerModelsDistribution.find_conductor_ids!Function
find_conductor_ids!(data::Dict{String,Any})

Finds all conductor ids and puts a list of them under "conductor_ids" at the root level

source
PowerModelsDistribution.make_multiconductor!Function
make_multiconductor!(data::Dict{String,<:Any}, conductors::Int)

This function is not meant to be an officially supported method for creating reasonable multiconductor data sets.

Hacky helper function to transform single-conductor network data, from, e.g., matpower/psse, into multi-conductor data.

source
PowerModelsDistribution.discover_voltage_zonesFunction
discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}

finds voltage zones by walking through the network and analyzing the transformers, attempting to decern the type of data_model

source
PowerModelsDistribution.calc_voltage_basesFunction
calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}

Calculates voltage bases for each voltage zone for buses and branches, attempting to automatically decern the data_model type

source
PowerModelsDistribution.apply_pmd!Function
apply_pmd!(func!::Function, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true, kwargs...)

Version of apply_pmd! that supports kwargs

source
apply_pmd!(func!::Function, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true, kwargs...)

Version of apply_pmd! that supports kwargs

source
apply_pmd!(func!::Function, data::Dict{String,<:Any}, args...; apply_to_subnetworks::Bool=true, kwargs...)

Version of apply_pmd! that supports args and kwargs

source
apply_pmd!(func!::Function, ref::Dict{Symbol,<:Any}, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true)

PowerModelsDistribution wrapper for the InfrastructureModels apply! function

source
PowerModelsDistribution.get_pmd_dataFunction
get_pmd_data(data::Dict{String, <:Any})

Convenience function for retrieving the power-distribution-only portion of network data

source
+)

which would ensure that this variable gets converted back to SI units upon transformation.

source

Data Checking and Correction

PowerModelsDistribution.check_branch_loopsMethod
check_branch_loops(data::Dict{String,<:Any})

checks that all branches connect two distinct buses

source
PowerModelsDistribution.check_connectivityMethod
check_connectivity(data::Dict{String,<:Any})

checks that all buses are unique and other components link to valid buses

source
PowerModelsDistribution.check_cost_modelsMethod
check_cost_models(pm::AbstractUnbalancedPowerModel)

Checks that all cost models are of the same type

source
PowerModelsDistribution.check_eng_data_modelMethod
check_eng_data_model(data_eng::Dict{String,<:Any})

checks the engineering data model for correct data types, required fields and applies default checks

source
PowerModelsDistribution.check_gen_cost_modelsMethod
check_gen_cost_models(pm::AbstractUnbalancedPowerModel)

Checks that all generator cost models are of the same type

source
PowerModelsDistribution.correct_branch_directions!Method
correct_branch_directions!(data::Dict{String,<:Any})

checks that all parallel branches have the same orientation

source
PowerModelsDistribution.correct_bus_types!Method

checks bus types are suitable for a power flow study, if not, fixes them. the primary checks are that all type 2 buses (i.e., PV) have a connected and active generator and there is a single type 3 bus (i.e., slack bus) with an active connected generator. assumes that the network is a single connected component

source
PowerModelsDistribution.correct_cost_functions!Method
correct_cost_functions!(data::Dict{String,<:Any})

throws warnings if cost functions are malformed

source
PowerModelsDistribution.correct_json_import!Method
correct_json_import!(data::Dict{String,<:Any})

helper function to correct data imported from json

source
PowerModelsDistribution.correct_mc_thermal_limits!Method
correct_mc_thermal_limits!(data::Dict{String,<:Any})

checks that each branch has non-negative thermal ratings and removes zero thermal ratings

source
PowerModelsDistribution.correct_mc_voltage_angle_differences!Function
correct_mc_voltage_angle_differences!(data::Dict{String,<:Any}, default_pad::Real=deg2rad(10.0))

checks that voltage angle differences are within 90 deg., if not tightens to a default of 10deg (adjustable)

source
PowerModelsDistribution.correct_network_data!Method
correct_network_data!(data::Dict{String,Any}; make_pu::Bool=true, make_pu_extensions::Vector{<:Function}=Function[])

Makes corrections and performs checks on network data structure in either ENGINEERING or MATHEMATICAL formats, and converts to per-unit if data a is MATHEMATICAL data model.

If make_pu is false, converting to per-unit will be skipped.

Custom per-unit transformations

See make_per_unit!

source

Statistics and Analysis

PowerModelsDistribution.count_nodesFunction
count_nodes(data::Dict{String,<:Any})::Int

Counts number of nodes in network

source
count_nodes(data::Dict{String,<:Any})::Int

Counts number of nodes in network

source
PowerModelsDistribution.count_active_connectionsFunction
count_active_connections(data::Dict{String,<:Any})

Counts active ungrounded connections on edge components

source
PowerModelsDistribution.count_active_terminalsFunction
count_active_terminals(data::Dict{String,<:Any}; count_grounded::Bool=false)

Counts active ungrounded terminals on buses

source
PowerModelsDistribution.identify_load_blocksFunction
identify_load_blocks(data::Dict{String,<:Any})

computes load blocks based on switch locations

source
PowerModelsDistribution.identify_blocksFunction
identify_blocks(data::Dict{String,<:Any})

computes connected blocks currently in the model based on switch states

source
PowerModelsDistribution.identify_islandsFunction
identify_islands(data::Dict{String,<:Any})

computes component islands base only on edge and bus status

source
PowerModelsDistribution.calc_connected_componentsFunction
calc_connected_components(data::Dict{String,<:Any}; edges::Union{Missing, Vector{<:String}}=missing, type::Union{Missing,String}=missing, check_enabled::Bool=true)::Set

computes the connected components of the network graph returns a set of sets of bus ids, each set is a connected component

source

Helper Functions

PowerModelsDistribution.isengFunction
iseng(data::Dict{String,Any})

Helper function to check is data is ENGINEERING model

source
PowerModelsDistribution.ismathFunction
ismath(data::Dict{String,Any})

Helper function to check if data is MATHEMATICAL model

source
PowerModelsDistribution.find_conductor_ids!Function
find_conductor_ids!(data::Dict{String,Any})

Finds all conductor ids and puts a list of them under "conductor_ids" at the root level

source
PowerModelsDistribution.make_multiconductor!Function
make_multiconductor!(data::Dict{String,<:Any}, conductors::Int)

This function is not meant to be an officially supported method for creating reasonable multiconductor data sets.

Hacky helper function to transform single-conductor network data, from, e.g., matpower/psse, into multi-conductor data.

source
PowerModelsDistribution.discover_voltage_zonesFunction
discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}

finds voltage zones by walking through the network and analyzing the transformers, attempting to decern the type of data_model

source
PowerModelsDistribution.calc_voltage_basesFunction
calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}

Calculates voltage bases for each voltage zone for buses and branches, attempting to automatically decern the data_model type

source
PowerModelsDistribution.apply_pmd!Function
apply_pmd!(func!::Function, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true, kwargs...)

Version of apply_pmd! that supports kwargs

source
apply_pmd!(func!::Function, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true, kwargs...)

Version of apply_pmd! that supports kwargs

source
apply_pmd!(func!::Function, data::Dict{String,<:Any}, args...; apply_to_subnetworks::Bool=true, kwargs...)

Version of apply_pmd! that supports args and kwargs

source
apply_pmd!(func!::Function, ref::Dict{Symbol,<:Any}, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true)

PowerModelsDistribution wrapper for the InfrastructureModels apply! function

source
PowerModelsDistribution.get_pmd_dataFunction
get_pmd_data(data::Dict{String, <:Any})

Convenience function for retrieving the power-distribution-only portion of network data

source
diff --git a/dev/reference/enums.html b/dev/reference/enums.html index e8cb5ec4d..420feedc1 100644 --- a/dev/reference/enums.html +++ b/dev/reference/enums.html @@ -1,2 +1,2 @@ -Enums · PowerModelsDistribution

Enums

+Enums · PowerModelsDistribution

Enums

diff --git a/dev/reference/formulations.html b/dev/reference/formulations.html index d055819cb..3f358f773 100644 --- a/dev/reference/formulations.html +++ b/dev/reference/formulations.html @@ -1,5 +1,5 @@ -Formulations · PowerModelsDistribution

Formulations

Abstract Models

PowerModelsDistribution.LPUBFDiagModelType

LinDist3Flow per Arnold et al. (2016), using vector variables for power, voltage and current

D. B. Arnold, M. Sankur, R. Dobbe, K. Brady, D. S. Callaway and A. Von Meier, "Optimal dispatch of reactive power for voltage regulation and balancing in unbalanced distribution systems," 2016 IEEE Power and Energy Society General Meeting (PESGM), Boston, MA, 2016, pp. 1-5, doi: 10.1109/PESGM.2016.7741261.

source

Abstract Union Models

Power Models

PowerModelsDistribution.ACPUPowerModelType

AC power flow Model with polar bus voltage variables. The seminal reference of AC OPF:

@article{carpentier1962contribution,
+Formulations · PowerModelsDistribution

Formulations

Abstract Models

PowerModelsDistribution.LPUBFDiagModelType

LinDist3Flow per Arnold et al. (2016), using vector variables for power, voltage and current

D. B. Arnold, M. Sankur, R. Dobbe, K. Brady, D. S. Callaway and A. Von Meier, "Optimal dispatch of reactive power for voltage regulation and balancing in unbalanced distribution systems," 2016 IEEE Power and Energy Society General Meeting (PESGM), Boston, MA, 2016, pp. 1-5, doi: 10.1109/PESGM.2016.7741261.

source

Abstract Union Models

Power Models

PowerModelsDistribution.ACPUPowerModelType

AC power flow Model with polar bus voltage variables. The seminal reference of AC OPF:

@article{carpentier1962contribution,
   title={Contribution to the economic dispatch problem},
   author={Carpentier, J},
   journal={Bulletin de la Societe Francoise des Electriciens},
@@ -13,18 +13,18 @@
   year = {2012}
   pages = {1--36},
   url = {https://www.ferc.gov/industries/electric/indus-act/market-planning/opf-papers/acopf-1-history-Model-testing.pdf}
-}
source
PowerModelsDistribution.ACRUPowerModelType

AC power flow Model with rectangular bus voltage variables.

@techreport{Cain2012,
   author = {Cain, Mary B and {O' Neill}, Richard P and Castillo, Anya},
   pages = {1--36},
   title = {{History of optimal power flow and Models}},
   url = {https://www.ferc.gov/industries/electric/indus-act/market-planning/opf-papers/acopf-1-history-Model-testing.pdf}
   year = {2012}
-}
source
PowerModelsDistribution.IVRUPowerModelType

Current voltage formulation of AC OPF. The formulation uses rectangular coordinates for both current and voltage. Note that, even though Kirchhoff's circuit laws are linear in current and voltage, this formulation is nonconvex due to constants power loads/generators and apparent power limits.

@techreport{ONeill2012,
+}
source
PowerModelsDistribution.IVRUPowerModelType

Current voltage formulation of AC OPF. The formulation uses rectangular coordinates for both current and voltage. Note that, even though Kirchhoff's circuit laws are linear in current and voltage, this formulation is nonconvex due to constants power loads/generators and apparent power limits.

@techreport{ONeill2012,
     author = {{O' Neill}, Richard P and Castillo, Anya and Cain, Mary B},
     pages = {1--18},
     title = {{The IV formulation and linear approximations of the ac optimal power flow problem}},
     year = {2012}
-}

Applicable to problem formulations with _iv in the name.

source
PowerModelsDistribution.DCPUPowerModelType

Linearized 'DC' power flow Model with polar voltage variables. This model is a basic linear active-power-only approximation, which uses branch susceptance values br_b = -br_x / (br_x^2 + br_x^2) for determining the network phase angles. Furthermore, transformer parameters such as tap ratios and phase shifts are not considered as part of this model. It is important to note that it is also common for active-power-only approximations to use 1/br_x for determining the network phase angles, instead of the br_b value that is used here. Small discrepancies in solutions should be expected when comparing active-power-only approximations across multiple tools.

@ARTICLE{4956966,
+}

Applicable to problem formulations with _iv in the name.

source
PowerModelsDistribution.DCPUPowerModelType

Linearized 'DC' power flow Model with polar voltage variables. This model is a basic linear active-power-only approximation, which uses branch susceptance values br_b = -br_x / (br_x^2 + br_x^2) for determining the network phase angles. Furthermore, transformer parameters such as tap ratios and phase shifts are not considered as part of this model. It is important to note that it is also common for active-power-only approximations to use 1/br_x for determining the network phase angles, instead of the br_b value that is used here. Small discrepancies in solutions should be expected when comparing active-power-only approximations across multiple tools.

@ARTICLE{4956966,
   author={B. Stott and J. Jardim and O. Alsac},
   journal={IEEE Transactions on Power Systems},
   title={DC Power Flow Revisited},
@@ -35,4 +35,4 @@
   pages={1290-1300},
   doi={10.1109/TPWRS.2009.2021235},
   ISSN={0885-8950}
-}
source

Mutable Stuct creator

+}
source

Mutable Stuct creator

diff --git a/dev/reference/internal.html b/dev/reference/internal.html index 5db004d12..df8045d24 100644 --- a/dev/reference/internal.html +++ b/dev/reference/internal.html @@ -1,70 +1,70 @@ -Internal Functions · PowerModelsDistribution

Internal Functions

Base.delete!Method

Base.delete! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.delete!Method

Base.delete! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.eltypeMethod

Base.eltype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.getMethod

Base.get for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.getindexMethod

Base.getindex for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.getpropertyMethod

Base.getproperty for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.haskeyMethod

Base.haskey for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.isemptyMethod

Base.isempty for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.iterateMethod

Base.iterate for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.keysMethod

Base.keys for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.keytypeMethod

Base.keytype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.lengthMethod

Base.length for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.merge!Method

Base.merge! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.parseMethod

Parses dss capacitor control type into CapControlType enum

source
Base.setindex!Method

Base.setindex! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.setproperty!Method

Base.setproperty! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.showMethod

Base.show variant for InfrastructureModel,InfrastructureObject to make them Dict-like

source
Base.showMethod

Base.show variant for InfrastructureModel,InfrastructureObject to make them Dict-like

source
Base.summaryMethod

Base.summary for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.valtypeMethod

Base.valtype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
PowerModelsDistribution._adjust_small_line_admittances!Method
_adjust_small_line_admittances!(data_eng::Dict{String,<:Any}; min_admittance_val::Real=1e-2, replace_admittance_val::Real=0.0)

Replaces admittances (gfr, gto, bfr, bto) on lines, linecodes, and switches lower than min_admittance_val with replace_admittance_val.

source
PowerModelsDistribution._adjust_small_line_impedances!Method
_adjust_small_line_impedances!(data_eng::Dict{String,<:Any}; min_impedance_val::Real=1e-2, replace_impedance_val::Real=0.0)

Replaces impedances (rs, xs) on lines, linecodes, and switches lower than min_impedance_val with replace_impedance_val.

source
PowerModelsDistribution._apply_kron_reduction!Method
_apply_kron_reduction!(data_eng::Dict{String,<:Any}; kr_phases::Union{Vector{Int},Vector{String}}=[1,2,3], kr_neutral::Union{Int,String}=4)

Applies a Kron Reduction to the network, reducing out the kr_neutral, leaving only the kr_phases

source
PowerModelsDistribution._apply_voltage_bounds!Method
_apply_voltage_bounds!(data_eng::Dict{String,<:Any}; vm_lb::Union{Real,Missing}=0.9, vm_ub::Union{Real,Missing}=1.1)

add voltage bounds to all buses based on per-unit upper (vm_ub) and lower (vm_lb), scaled by the bus's voltage based

source
PowerModelsDistribution._bts_to_start_voltageMethod
_bts_to_start_voltage(
+Internal Functions · PowerModelsDistribution

Internal Functions

Base.delete!Method

Base.delete! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.delete!Method

Base.delete! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.eltypeMethod

Base.eltype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.getMethod

Base.get for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.getindexMethod

Base.getindex for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.getpropertyMethod

Base.getproperty for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.haskeyMethod

Base.haskey for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.isemptyMethod

Base.isempty for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.iterateMethod

Base.iterate for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.keysMethod

Base.keys for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.keytypeMethod

Base.keytype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.lengthMethod

Base.length for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.merge!Method

Base.merge! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.parseMethod

Parses dss capacitor control type into CapControlType enum

source
Base.setindex!Method

Base.setindex! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.setproperty!Method

Base.setproperty! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.showMethod

Base.show variant for InfrastructureModel,InfrastructureObject to make them Dict-like

source
Base.showMethod

Base.show variant for InfrastructureModel,InfrastructureObject to make them Dict-like

source
Base.summaryMethod

Base.summary for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
Base.valtypeMethod

Base.valtype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior

source
PowerModelsDistribution._adjust_small_line_admittances!Method
_adjust_small_line_admittances!(data_eng::Dict{String,<:Any}; min_admittance_val::Real=1e-2, replace_admittance_val::Real=0.0)

Replaces admittances (gfr, gto, bfr, bto) on lines, linecodes, and switches lower than min_admittance_val with replace_admittance_val.

source
PowerModelsDistribution._adjust_small_line_impedances!Method
_adjust_small_line_impedances!(data_eng::Dict{String,<:Any}; min_impedance_val::Real=1e-2, replace_impedance_val::Real=0.0)

Replaces impedances (rs, xs) on lines, linecodes, and switches lower than min_impedance_val with replace_impedance_val.

source
PowerModelsDistribution._apply_kron_reduction!Method
_apply_kron_reduction!(data_eng::Dict{String,<:Any}; kr_phases::Union{Vector{Int},Vector{String}}=[1,2,3], kr_neutral::Union{Int,String}=4)

Applies a Kron Reduction to the network, reducing out the kr_neutral, leaving only the kr_phases

source
PowerModelsDistribution._apply_voltage_bounds!Method
_apply_voltage_bounds!(data_eng::Dict{String,<:Any}; vm_lb::Union{Real,Missing}=0.9, vm_ub::Union{Real,Missing}=1.1)

add voltage bounds to all buses based on per-unit upper (vm_ub) and lower (vm_lb), scaled by the bus's voltage based

source
PowerModelsDistribution._calc_branch_current_maxMethod

Returns a total (shunt+series) current magnitude bound for the from and to side of a branch. The total power rating also implies a current bound through the lower bound on the voltage magnitude of the connected buses.

source
PowerModelsDistribution._calc_branch_power_maxMethod

Returns a total (shunt+series) power magnitude bound for the from and to side of a branch. The total current rating also implies a current bound through the upper bound on the voltage magnitude of the connected buses.

source
PowerModelsDistribution._calc_branch_power_max_frtoMethod

Returns a total (shunt+series) power magnitude bound for the from and to side of a branch. The total current rating also implies a current bound through the upper bound on the voltage magnitude of the connected buses.

source
PowerModelsDistribution._calc_bus_vm_ll_boundsMethod

Returns bounds in line-to-line bounds on the voltage magnitude. If these are not part of the problem specification, then a valid upper bound is implied by the line-to-neutral bounds, but a lower bound (greater than zero) is not. Therefore, a default lower bound is then used, specified by the keyword argument vdmin_eps. The returned bounds are for the pairs 1->2, 2->3, 3->1

source
PowerModelsDistribution._calc_load_vboundsMethod

Returns the voltage magnitude bounds for the individual load elements in a multiphase load. These are inferred from vmin/vmax for wye loads and from calcbusvmll_bounds for delta loads.

source
PowerModelsDistribution._calc_shuntMethod

Given a set of addmittances 'y' connected from the conductors 'fcnds' to the conductors 'tcnds', this method will return a list of conductors 'cnd' and a matrix 'Y', which will satisfy I[cnds] = Y*V[cnds].

source
PowerModelsDistribution._calc_voltage_basesMethod
_calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real}, edge_elements::Vector{String})::Tuple{Dict,Dict}

Calculates voltage bases for each voltage zone for buses and branches given a list of edge_elements

source
PowerModelsDistribution._calc_branch_current_maxMethod

Returns a total (shunt+series) current magnitude bound for the from and to side of a branch. The total power rating also implies a current bound through the lower bound on the voltage magnitude of the connected buses.

source
PowerModelsDistribution._calc_branch_power_maxMethod

Returns a total (shunt+series) power magnitude bound for the from and to side of a branch. The total current rating also implies a current bound through the upper bound on the voltage magnitude of the connected buses.

source
PowerModelsDistribution._calc_branch_power_max_frtoMethod

Returns a total (shunt+series) power magnitude bound for the from and to side of a branch. The total current rating also implies a current bound through the upper bound on the voltage magnitude of the connected buses.

source
PowerModelsDistribution._calc_bus_vm_ll_boundsMethod

Returns bounds in line-to-line bounds on the voltage magnitude. If these are not part of the problem specification, then a valid upper bound is implied by the line-to-neutral bounds, but a lower bound (greater than zero) is not. Therefore, a default lower bound is then used, specified by the keyword argument vdmin_eps. The returned bounds are for the pairs 1->2, 2->3, 3->1

source
PowerModelsDistribution._calc_load_vboundsMethod

Returns the voltage magnitude bounds for the individual load elements in a multiphase load. These are inferred from vmin/vmax for wye loads and from calcbusvmll_bounds for delta loads.

source
PowerModelsDistribution._calc_shuntMethod

Given a set of addmittances 'y' connected from the conductors 'fcnds' to the conductors 'tcnds', this method will return a list of conductors 'cnd' and a matrix 'Y', which will satisfy I[cnds] = Y*V[cnds].

source
PowerModelsDistribution._calc_voltage_basesMethod
_calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real}, edge_elements::Vector{String})::Tuple{Dict,Dict}

Calculates voltage bases for each voltage zone for buses and branches given a list of edge_elements

source
PowerModelsDistribution._compute_UvMethod
_compute_Uv(
   pfd::PowerFlowData,
   max_iter::Int,
   stat_tol::Float,
   verbose::Bool
-)

Computes a nonlinear AC power flow in rectangular coordinates based on the admittance matrix of the network data using the fixed-point current injection method (See https://arxiv.org/abs/2305.04405). Returns a solution data structure in PowerModelsDistribution Dict format.

source
PowerModelsDistribution._compute_mc_pfMethod
_compute_mc_pf(
+)

Computes a nonlinear AC power flow in rectangular coordinates based on the admittance matrix of the network data using the fixed-point current injection method (See https://arxiv.org/abs/2305.04405). Returns a solution data structure in PowerModelsDistribution Dict format.

source
PowerModelsDistribution._compute_mc_pfMethod
_compute_mc_pf(
     data_math::Dict{String,<:Any};
     v_start::Union{Dict{<:Any,<:Any},Missing}=missing,
     explicit_neutral::Bool=false,
     max_iter::Int=100,
     stat_tol::Real=1E-8,
     verbose::Bool=false
-)::Dict{String,Any}

Computes native power flow and outputs the result dict (See https://arxiv.org/abs/2305.04405).

Abbreviations:

  • ntype: node type (variable, fixed, grounded, virtual)
  • bts: bus-terminals for the component
  • ns: nodes
  • vns: virtual nodes
  • nr_vns: number of virtual nodes
  • y_prim: primitive admittance matrix for the component
  • cnlfunc: nonlinear compensation current function handle for the component
  • ctotsfunc: total current function handle for the component
source
PowerModelsDistribution._correct_bus_types!Method

checks bus types are suitable for a power flow study, if not, fixes them. the primary checks are that all type 2 buses (i.e., PV) have a connected and active generator and there is a single type 3 bus (i.e., slack bus) with an active connected generator. Assumes that the network is a single connected component

source
PowerModelsDistribution._cpf_branch_interfaceMethod
_cpf_branch_interface(
+)::Dict{String,Any}

Computes native power flow and outputs the result dict (See https://arxiv.org/abs/2305.04405).

Abbreviations:

  • ntype: node type (variable, fixed, grounded, virtual)
  • bts: bus-terminals for the component
  • ns: nodes
  • vns: virtual nodes
  • nr_vns: number of virtual nodes
  • y_prim: primitive admittance matrix for the component
  • cnlfunc: nonlinear compensation current function handle for the component
  • ctotsfunc: total current function handle for the component
source
PowerModelsDistribution._correct_bus_types!Method

checks bus types are suitable for a power flow study, if not, fixes them. the primary checks are that all type 2 buses (i.e., PV) have a connected and active generator and there is a single type 3 bus (i.e., slack bus) with an active connected generator. Assumes that the network is a single connected component

source
PowerModelsDistribution._cpf_branch_interfaceMethod
_cpf_branch_interface(
   branch::Dict,
   v_start::Dict,
   explicit_neutral::Bool,
   line_vbase::Dict,
   sbase::Float
-)

Branch component interface outputs branch primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.1).

source
PowerModelsDistribution._cpf_generator_interfaceMethod
_cpf_generator_interface(
   gen::Dict,
   v_start::Dict,
   explicit_neutral::Bool,
   line_vbase::Dict,
   sbase::Float
-)

Generator component interface outputs generator primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.4 and 4.5).

source
PowerModelsDistribution._cpf_load_interfaceMethod
_cpf_load_interface(
   load::Dict,
   v_start::Dict,
   explicit_neutral::Bool,
   line_vbase::Dict,
   sbase::Float
-)

Load component interface outputs load primitive Y matrix (See https://arxiv.org/abs/2305.04405 Sections 4.4 and 4.5).

source
PowerModelsDistribution._cpf_shunt_interfaceMethod
_cpf_shunt_interface(
   shunt::Dict,
   v_start::Dict,
   explicit_neutral::Bool,
   line_vbase::Dict,
   sbase::Float
-)

Shunt component interface outputs shunt primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.2).

source
PowerModelsDistribution._cpf_storage_interfaceMethod
_cpf_storage_interface(
   storage::Dict,
   v_start::Dict,
   explicit_neutral::Bool,
   line_vbase::Dict,
   sbase::Float
-)

Storage component interface outputs storage primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.4 and 4.5).

source
PowerModelsDistribution._cpf_switch_interfaceMethod
_cpf_switch_interface(
   switch::Dict,
   v_start::Dict,
   explicit_neutral::Bool,
   line_vbase::Dict,
   sbase::Float
-)

Branch component interface outputs branch primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.2).

source
PowerModelsDistribution._cpf_transformer_interfaceMethod
_cpf_transformer_interface(
   tr::Dict,
   v_start::Dict,
   explicit_neutral::Bool,
   line_vbase::Dict,
   sbase::Float
-)

Transformer component interface outputs transformer primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.3).

source
PowerModelsDistribution._dss2eng_load!Function

Adds loads to data_eng from data_dss

Constant can still be scaled by other settings, fixed cannot Note that in the current feature set, fixed therefore equals constant

1: Constant P and Q, default 2: Constant Z 3: Constant P and quadratic Q 4: Exponential 5: Constant I 6: Constant P and fixed Q

7: Constant P and quadratic Q (i.e., fixed reactance)

8: ZIP

source
PowerModelsDistribution._dss2eng_load!Function

Adds loads to data_eng from data_dss

Constant can still be scaled by other settings, fixed cannot Note that in the current feature set, fixed therefore equals constant

1: Constant P and Q, default 2: Constant Z 3: Constant P and quadratic Q 4: Exponential 5: Constant I 6: Constant P and fixed Q

7: Constant P and quadratic Q (i.e., fixed reactance)

8: ZIP

source
PowerModelsDistribution._infer_neutral_terminalsMethod

Return a list of all implicit neutrals as a list of bus-terminal pairs. This is done by starting from a list of all terminals which are either a.connected to the neutral of wye-connected components; b. or are grounded. This initial list is then expanded to all terminals which are galvanically connected to terminals in the initial list.

source
PowerModelsDistribution._kronMethod
_kron(Z::Matrix{T}, Y::Matrix{T}, nconds::Int)::Tuple{Matrix{T}, Matrix{T}} where T <: Complex

Kron reduces impedance and shunt admittance matrices down to size (nconds, nconds)

source
PowerModelsDistribution._kron_reduce_implicit_neutrals!Method
_kron_reduce_implicit_neutrals!(data_eng::Dict{String,Any})::Dict{String,Any}

Kron-reduce all (implied) neutral conductors of lines, switches and shunts, and remove any terminals which become unconnected. A line or switch conductor is considered as a neutral conductor if it is connected between two neutral terminals. A terminal is a neutral terminals if it is galvanically connected (i.e. through a line or switch) to a grounded terminal, or the neutral conductor of a wye-connected component.

source
PowerModelsDistribution._load_expmodel_paramsMethod
_load_expmodel_params(load::Dict{String,<:Any}, bus::Dict{String,<:Any})

Returns the exponential load model parameters for a load. For an exponential load it simply returns certain data model properties, whilst for constantpower, constantcurrent and constant_impedance it returns the equivalent exponential model parameters.

source
PowerModelsDistribution._make_lossless!Method
_make_lossless!(data_eng::Dict{String,<:Any})

Remove parameters from objects with loss models to make them lossless. This includes linecodes, lines, switches, xfmrcodes, transformers, voltage sources, generators, solar, and storage, which all have (or will have in the future), loss model parameters that can be omitted.

source
PowerModelsDistribution._infer_neutral_terminalsMethod

Return a list of all implicit neutrals as a list of bus-terminal pairs. This is done by starting from a list of all terminals which are either a.connected to the neutral of wye-connected components; b. or are grounded. This initial list is then expanded to all terminals which are galvanically connected to terminals in the initial list.

source
PowerModelsDistribution._kronMethod
_kron(Z::Matrix{T}, Y::Matrix{T}, nconds::Int)::Tuple{Matrix{T}, Matrix{T}} where T <: Complex

Kron reduces impedance and shunt admittance matrices down to size (nconds, nconds)

source
PowerModelsDistribution._kron_reduce_implicit_neutrals!Method
_kron_reduce_implicit_neutrals!(data_eng::Dict{String,Any})::Dict{String,Any}

Kron-reduce all (implied) neutral conductors of lines, switches and shunts, and remove any terminals which become unconnected. A line or switch conductor is considered as a neutral conductor if it is connected between two neutral terminals. A terminal is a neutral terminals if it is galvanically connected (i.e. through a line or switch) to a grounded terminal, or the neutral conductor of a wye-connected component.

source
PowerModelsDistribution._load_expmodel_paramsMethod
_load_expmodel_params(load::Dict{String,<:Any}, bus::Dict{String,<:Any})

Returns the exponential load model parameters for a load. For an exponential load it simply returns certain data model properties, whilst for constantpower, constantcurrent and constant_impedance it returns the equivalent exponential model parameters.

source
PowerModelsDistribution._make_lossless!Method
_make_lossless!(data_eng::Dict{String,<:Any})

Remove parameters from objects with loss models to make them lossless. This includes linecodes, lines, switches, xfmrcodes, transformers, voltage sources, generators, solar, and storage, which all have (or will have in the future), loss model parameters that can be omitted.

source
PowerModelsDistribution._make_matrix_variable_elementMethod
_make_matrix_variable_element(
     model::JuMP.Model,
     indices::Array{T,1},
     n::Int,
@@ -72,7 +72,7 @@
     upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,
     lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,
     varname::String=""
-) where T

Sometimes we want to bound only a subset of the elements of a matrix variable. For example, an unbounded Hermitian variable usually still has a lower bound of zero on the real diagonal elements. When there is a mix of bounded and unbounded elements, the unboundedness is encoded as 'Inf' and '-Inf' in the bound parameters. This cannot be passed directlty to JuMP, because it would lead to an error in Mosek for example. Instead, this method checks whether all bounds for an element (n,m) are Inf, and if so, does not pass a bound to JuMP.

source
PowerModelsDistribution._remove_all_bounds!Method
_remove_all_bounds!(data_eng; exclude::Vector{<:String}=String["energy_ub"], exclude_asset_type::Vector{String}=String[])

Removes all fields ending in 'ub' or 'lb' that aren't required by the math model. Properties can be excluded from this removal with exclude::Vector{String}

Whole asset types (e.g., "line") can be excluded using the keyword argument exclude_asset_type::Vector{String}

By default, "energy_ub" is excluded from this removal, since it is a required properly on storage.

source
PowerModelsDistribution._sanatize_lineMethod
_sanatize_line(line::String)::String

Sanitizes lines by stripping them clean of extra space and the beginnging and end, making everything lowercase, changing ~ or m to more, and stripping comments

source
PowerModelsDistribution._sc2br_impedanceMethod

Converts a set of short-circuit tests to an equivalent reactance network. Reference: R. C. Dugan, “A perspective on transformer modeling for distribution system analysis,” in 2003 IEEE Power Engineering Society General Meeting (IEEE Cat. No.03CH37491), 2003, vol. 1, pp. 114-119 Vol. 1.

source
PowerModelsDistribution._sol_data_model_acr!Method
_sol_data_model_acr!(solution::Dict{String,<:Any})

solutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert ACR variables back into polar representation (default data model voltage form)

source
PowerModelsDistribution._solve_mc_modelMethod
_solve_mc_model(
+) where T

Sometimes we want to bound only a subset of the elements of a matrix variable. For example, an unbounded Hermitian variable usually still has a lower bound of zero on the real diagonal elements. When there is a mix of bounded and unbounded elements, the unboundedness is encoded as 'Inf' and '-Inf' in the bound parameters. This cannot be passed directlty to JuMP, because it would lead to an error in Mosek for example. Instead, this method checks whether all bounds for an element (n,m) are Inf, and if so, does not pass a bound to JuMP.

source
PowerModelsDistribution._remove_all_bounds!Method
_remove_all_bounds!(data_eng; exclude::Vector{<:String}=String["energy_ub"], exclude_asset_type::Vector{String}=String[])

Removes all fields ending in 'ub' or 'lb' that aren't required by the math model. Properties can be excluded from this removal with exclude::Vector{String}

Whole asset types (e.g., "line") can be excluded using the keyword argument exclude_asset_type::Vector{String}

By default, "energy_ub" is excluded from this removal, since it is a required properly on storage.

source
PowerModelsDistribution._sanatize_lineMethod
_sanatize_line(line::String)::String

Sanitizes lines by stripping them clean of extra space and the beginnging and end, making everything lowercase, changing ~ or m to more, and stripping comments

source
PowerModelsDistribution._sc2br_impedanceMethod

Converts a set of short-circuit tests to an equivalent reactance network. Reference: R. C. Dugan, “A perspective on transformer modeling for distribution system analysis,” in 2003 IEEE Power Engineering Society General Meeting (IEEE Cat. No.03CH37491), 2003, vol. 1, pp. 114-119 Vol. 1.

source
PowerModelsDistribution._sol_data_model_acr!Method
_sol_data_model_acr!(solution::Dict{String,<:Any})

solutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert ACR variables back into polar representation (default data model voltage form)

source
PowerModelsDistribution._transform_loops!Method
_transform_loops!(
     data_eng::Dict{String,Any};
     zero_series_impedance_threshold::Real=1E-8,
     shunt_id_prefix::AbstractString="line_loop"
-)::Dict{String,Any}

Transform line loops (connected to a single bus), which are not allowed in the mathematical model. Lossy line loops are converted to equivalent shunts, and lossless ones (i.e. short-circuits) are represented by merging the short-circuited terminals. The argument 'zeroseriesimpedance_threshold' controls the threshold below which the series impedance is considered to be a short-ciruit. This is useful because OpenDSS modelers have to insert tiny impedances to represent short-circuit reactors. The addmittance to ground should be zero to trigger the short-circuit handling.

source
+)::Dict{String,Any}

Transform line loops (connected to a single bus), which are not allowed in the mathematical model. Lossy line loops are converted to equivalent shunts, and lossless ones (i.e. short-circuits) are represented by merging the short-circuited terminals. The argument 'zeroseriesimpedance_threshold' controls the threshold below which the series impedance is considered to be a short-ciruit. This is useful because OpenDSS modelers have to insert tiny impedances to represent short-circuit reactors. The addmittance to ground should be zero to trigger the short-circuit handling.

source
diff --git a/dev/reference/logging.html b/dev/reference/logging.html index c1d9664c5..79faeca0f 100644 --- a/dev/reference/logging.html +++ b/dev/reference/logging.html @@ -1,2 +1,2 @@ -Logging · PowerModelsDistribution

Logging

+Logging · PowerModelsDistribution

Logging

diff --git a/dev/reference/objectives.html b/dev/reference/objectives.html index 295337ebb..730efb6b8 100644 --- a/dev/reference/objectives.html +++ b/dev/reference/objectives.html @@ -1,2 +1,2 @@ -Objectives · PowerModelsDistribution

Objectives

Helpers

PowerModelsDistribution.calc_pwl_pointsFunction
calc_pwl_points(ncost::Int, cost::Vector{<:Real}, pmin::Real, pmax::Real; tolerance=1e-2)

cleans up raw pwl cost points in preparation for building a mathamatical model. The key mathematical properties,

  • the first and last points are strickly outside of the pmin-to-pmax range
  • pmin and pmax occur in the first and last line segments.
source
+Objectives · PowerModelsDistribution

Objectives

Helpers

PowerModelsDistribution.calc_pwl_pointsFunction
calc_pwl_points(ncost::Int, cost::Vector{<:Real}, pmin::Real, pmax::Real; tolerance=1e-2)

cleans up raw pwl cost points in preparation for building a mathamatical model. The key mathematical properties,

  • the first and last points are strickly outside of the pmin-to-pmax range
  • pmin and pmax occur in the first and last line segments.
source
diff --git a/dev/reference/problems.html b/dev/reference/problems.html index 4e6efec7e..22508fa54 100644 --- a/dev/reference/problems.html +++ b/dev/reference/problems.html @@ -1,5 +1,5 @@ -Problems · PowerModelsDistribution

Problems

Solvers

PowerModelsDistribution.solve_mc_modelMethod
solve_mc_model(
+Problems · PowerModelsDistribution

Problems

Solvers

PowerModelsDistribution.solve_mc_modelMethod
solve_mc_model(
     data::Dict{String,<:Any},
     model_type::Type,
     optimizer,
@@ -13,7 +13,7 @@
     make_si_extensions::Vector{<:Function}=Function[],
     dimensionalize_math_extensions::Dict{String,Dict{String,Vector{String}}}=Dict{String,Dict{String,Vector{String}}}(),
     kwargs...
-)::Dict{String,Any}

Takes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns a solution in the original data model defined by data.

If make_si is false, data will remain in per-unit.

For an explanation of multinetwork and global_keys, see make_multinetwork

For an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model

For an explanation of make_pu_extensions, see make_per_unit!

For an explanation of ref_extensions, see instantiate_mc_model

For an explanation of map_math2eng_extensions, make_si, make_si_extensions, and dimensionalize_math_extensions, see solution_make_si

source
PowerModelsDistribution.solve_mc_modelMethod
solve_mc_model(
+)::Dict{String,Any}

Takes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns a solution in the original data model defined by data.

If make_si is false, data will remain in per-unit.

For an explanation of multinetwork and global_keys, see make_multinetwork

For an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model

For an explanation of make_pu_extensions, see make_per_unit!

For an explanation of ref_extensions, see instantiate_mc_model

For an explanation of map_math2eng_extensions, make_si, make_si_extensions, and dimensionalize_math_extensions, see solution_make_si

source
PowerModelsDistribution.solve_mc_modelMethod
solve_mc_model(
     file::String,
     model_type::Type,
     optimizer,
@@ -22,33 +22,33 @@
     multinetwork::Bool=false,
     global_keys::Set{String}=Set{String}(),
     kwargs...
-)::Dict{String,Any}

Given a file::String, data will be parsed automatically from the file.

See solve_mc_model for detailed explanation of function arguments.

source

Builders

Builders

PowerModelsDistribution.build_pf_resultMethod
build_pf_result(
   pfd::PowerFlowData,
   Uv::Vector,
   status::PFTerminationStatus,
@@ -56,10 +56,10 @@
   time::Real,
   stationarity::Real,
   verbose::Bool
-)

Builds the result dict from the solution dict.

source

Model Instantiation

Model Instantiation

PowerModelsDistribution.instantiate_mc_modelFunction
instantiate_mc_model(
     data::Dict{String,<:Any},
     model_type::Type,
     build_method::Function;
@@ -70,4 +70,4 @@
     eng2math_passthrough::Dict{String,<:Vector{<:String}}=Dict{String,Vector{String}}(),
     make_pu_extensions::Vector{<:Function}=Function[],
     kwargs...
-)

Takes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns an AbstractUnbalancedPowerModel structure.

For an explanation of multinetwork and global_keys, see make_multinetwork

For an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model

For an explanation of make_pu_extensions, see make_per_unit!

ref_extensions

Inside of the model structures, data can be quickly accessed via the ref function. By default, the only ref objects available are created by ref_add_core!, but users can add their own custom ref objects by passing functions via ref_extensions that have the signature:

ref_add!(ref::Dict{Symbol,Any}, data::Dict{String,Any})

See the Beginners Guide for an example.

source

Solution Helpers

PowerModelsDistribution.sol_data_model!Method
sol_data_model!(pm::AbstractUnbalancedACRModel, solution::Dict{String,<:Any})

solutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert ACR variables back into polar representation (default data model voltage form)

source
PowerModelsDistribution.sol_data_model!Method
sol_data_model!(pm::AbstractUnbalancedWModels, solution::Dict{String,<:Any})

solutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert W variables back into polar representation (default data model voltage form)

source
PowerModelsDistribution.sol_data_model!Method
sol_data_model!(pm::FBSUBFPowerModel, solution::Dict{String,<:Any})

solution_processor, to convert FBS variables back into polar representation (default data model voltage form)

source
PowerModelsDistribution.sol_data_model!Method
sol_data_model!(pm::FOTRUPowerModel, solution::Dict{String,<:Any})

solution_processor, to convert FOT rectangular variables back into polar representation (default data model voltage form)

source

DEPRECIATED Solver functions

+)

Takes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns an AbstractUnbalancedPowerModel structure.

For an explanation of multinetwork and global_keys, see make_multinetwork

For an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model

For an explanation of make_pu_extensions, see make_per_unit!

ref_extensions

Inside of the model structures, data can be quickly accessed via the ref function. By default, the only ref objects available are created by ref_add_core!, but users can add their own custom ref objects by passing functions via ref_extensions that have the signature:

ref_add!(ref::Dict{Symbol,Any}, data::Dict{String,Any})

See the Beginners Guide for an example.

source

Solution Helpers

PowerModelsDistribution.sol_data_model!Method
sol_data_model!(pm::AbstractUnbalancedACRModel, solution::Dict{String,<:Any})

solutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert ACR variables back into polar representation (default data model voltage form)

source
PowerModelsDistribution.sol_data_model!Method
sol_data_model!(pm::AbstractUnbalancedWModels, solution::Dict{String,<:Any})

solutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert W variables back into polar representation (default data model voltage form)

source
PowerModelsDistribution.sol_data_model!Method
sol_data_model!(pm::FBSUBFPowerModel, solution::Dict{String,<:Any})

solution_processor, to convert FBS variables back into polar representation (default data model voltage form)

source
PowerModelsDistribution.sol_data_model!Method
sol_data_model!(pm::FOTRUPowerModel, solution::Dict{String,<:Any})

solution_processor, to convert FOT rectangular variables back into polar representation (default data model voltage form)

source

DEPRECIATED Solver functions

diff --git a/dev/reference/variables.html b/dev/reference/variables.html index 60d285eb9..eeb7a7d30 100644 --- a/dev/reference/variables.html +++ b/dev/reference/variables.html @@ -4,197 +4,197 @@ nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true -)

For IVR models with explicit neutrals, creates total current variables :cr and :ci, series current variables :csr and :csi, and placeholder dictionaries for the terminal current flows :cr_bus and :ci_bus

source
PowerModelsDistribution.variable_mc_branch_currentMethod
source
PowerModelsDistribution.variable_mc_branch_currentMethod
source
PowerModelsDistribution.variable_mc_branch_currentMethod
source
PowerModelsDistribution.variable_mc_branch_currentMethod
function variable_mc_branch_current(
+)

For IVR models with explicit neutrals, creates total current variables :cr and :ci, series current variables :csr and :csi, and placeholder dictionaries for the terminal current flows :cr_bus and :ci_bus

source
PowerModelsDistribution.variable_mc_branch_currentMethod
source
PowerModelsDistribution.variable_mc_branch_currentMethod
source
PowerModelsDistribution.variable_mc_branch_currentMethod
source
PowerModelsDistribution.variable_mc_branch_currentMethod
function variable_mc_branch_current(
 	pm::ReducedExplicitNeutralIVRModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

For branch-reduced IVR models with explicit neutrals, creates series current variables :csr and :csi, placeholder dictionaries for the total current :cr and :ci, and placeholder dictionaries for the terminal current flows :cr_bus and :ci_bus

source
PowerModelsDistribution.variable_mc_branch_current_imaginaryMethod

variable: ci[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_branch_current_imaginaryMethod
function variable_mc_branch_current_imaginary(
+)

For branch-reduced IVR models with explicit neutrals, creates series current variables :csr and :csi, placeholder dictionaries for the total current :cr and :ci, and placeholder dictionaries for the terminal current flows :cr_bus and :ci_bus

source
PowerModelsDistribution.variable_mc_branch_current_imaginaryMethod

variable: ci[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_branch_current_imaginaryMethod
function variable_mc_branch_current_imaginary(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates branch imaginary current variables :ci for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_branch_current_realMethod

variable: cr[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_branch_current_realMethod
function variable_mc_branch_current_real(
+)

Creates branch imaginary current variables :ci for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_branch_current_realMethod

variable: cr[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_branch_current_realMethod
function variable_mc_branch_current_real(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates branch real current variables :cr for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_branch_current_series_imaginaryMethod

variable: csi[l] for l in branch

source
PowerModelsDistribution.variable_mc_branch_current_series_imaginaryMethod
function variable_mc_branch_current_series_imaginary(
+)

Creates branch real current variables :cr for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_branch_current_series_imaginaryMethod

variable: csi[l] for l in branch

source
PowerModelsDistribution.variable_mc_branch_current_series_imaginaryMethod
function variable_mc_branch_current_series_imaginary(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates branch imaginary series current variables :csi for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_branch_current_series_realMethod

variable: csr[l] for l in branch

source
PowerModelsDistribution.variable_mc_branch_current_series_realMethod
function variable_mc_branch_current_series_real(
+)

Creates branch imaginary series current variables :csi for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_branch_current_series_realMethod

variable: csr[l] for l in branch

source
PowerModelsDistribution.variable_mc_branch_current_series_realMethod
function variable_mc_branch_current_series_real(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates branch real series current variables :csr for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_branch_flow_ne_reactiveMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_branch_powerMethod
function variable_mc_branch_power(
+)

Creates branch real series current variables :csr for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_branch_flow_ne_reactiveMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_branch_powerMethod
function variable_mc_branch_power(
 	pm::AbstractExplicitNeutralACRModel;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true,
-)

For ACR models with explicit neutrals, creates branch power variables :p and :q and placeholder dictionaries for the terminal power flows :p_bus and :q_bus.

source
PowerModelsDistribution.variable_mc_branch_powerMethod
source
PowerModelsDistribution.variable_mc_branch_powerMethod

branch flow variables, delegated back to PowerModels

source
PowerModelsDistribution.variable_mc_branch_powerMethod
variable_mc_branch_power(pm::FBSUBFPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

Branch flow variables similar to LPUBFDiagModel

source
PowerModelsDistribution.variable_mc_branch_powerMethod
source
PowerModelsDistribution.variable_mc_branch_power_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_branch_power_imaginaryMethod

variable: q[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_branch_power_imaginaryMethod
function variable_mc_branch_power_imaginary(
+)

For ACR models with explicit neutrals, creates branch power variables :p and :q and placeholder dictionaries for the terminal power flows :p_bus and :q_bus.

source
PowerModelsDistribution.variable_mc_branch_powerMethod
source
PowerModelsDistribution.variable_mc_branch_powerMethod

branch flow variables, delegated back to PowerModels

source
PowerModelsDistribution.variable_mc_branch_powerMethod
variable_mc_branch_power(pm::FBSUBFPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

Branch flow variables similar to LPUBFDiagModel

source
PowerModelsDistribution.variable_mc_branch_powerMethod
source
PowerModelsDistribution.variable_mc_branch_power_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_branch_power_imaginaryMethod

variable: q[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_branch_power_imaginaryMethod
function variable_mc_branch_power_imaginary(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates branch reactive power variables :q for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_branch_power_realMethod
source
PowerModelsDistribution.variable_mc_branch_power_realMethod

variable: p[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_branch_power_realMethod
function variable_mc_branch_power_real(
+)

Creates branch reactive power variables :q for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_branch_power_realMethod
source
PowerModelsDistribution.variable_mc_branch_power_realMethod

variable: p[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_branch_power_realMethod
function variable_mc_branch_power_real(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates branch active power variables :p for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod

nothing to do, these models do not have complex voltage variables

source
PowerModelsDistribution.variable_mc_bus_voltageMethod
variable_mc_bus_voltage(pm::FBSUBFPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

Voltage variables are defined in rectangular coordinates similar to ACRUPowerModel. An initial operating point is specified for linearization.

source
PowerModelsDistribution.variable_mc_bus_voltageMethod
variable_mc_bus_voltage(pm::FOTPUPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

Voltage variables are defined in polar coordinates similar to ACPUPowerModel. An initial operating point is specified for linearization.

source
PowerModelsDistribution.variable_mc_bus_voltageMethod
variable_mc_bus_voltage(pm::FOTRUPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

Voltage variables are defined in rectangular coordinates similar to ACRUPowerModel. An initial operating point is specified for linearization similar to FBSUBFPowerModel.

source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod
function variable_mc_bus_voltage(
+)

Creates branch active power variables :p for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod

nothing to do, these models do not have complex voltage variables

source
PowerModelsDistribution.variable_mc_bus_voltageMethod
variable_mc_bus_voltage(pm::FBSUBFPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

Voltage variables are defined in rectangular coordinates similar to ACRUPowerModel. An initial operating point is specified for linearization.

source
PowerModelsDistribution.variable_mc_bus_voltageMethod
variable_mc_bus_voltage(pm::FOTPUPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

Voltage variables are defined in polar coordinates similar to ACPUPowerModel. An initial operating point is specified for linearization.

source
PowerModelsDistribution.variable_mc_bus_voltageMethod
variable_mc_bus_voltage(pm::FOTRUPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

Voltage variables are defined in rectangular coordinates similar to ACRUPowerModel. An initial operating point is specified for linearization similar to FBSUBFPowerModel.

source
PowerModelsDistribution.variable_mc_bus_voltageMethod
source
PowerModelsDistribution.variable_mc_bus_voltageMethod
function variable_mc_bus_voltage(
 	pm::RectangularVoltageExplicitNeutralModels;
 	nw=nw_id_default,
 	bounded::Bool=true,
-)

Creates rectangular voltage variables :vr and :vi for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_bus_voltage_angleMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_imaginaryMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_imaginaryMethod
function variable_mc_bus_voltage_imaginary(
+)

Creates rectangular voltage variables :vr and :vi for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_bus_voltage_angleMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_imaginaryMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_imaginaryMethod
function variable_mc_bus_voltage_imaginary(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates imaginary voltage variables :vr for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_bus_voltage_imaginary_on_offMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_indicatorMethod

Create variables for bus status

source
PowerModelsDistribution.variable_mc_bus_voltage_magnitude_on_offMethod

on/off voltage magnitude variable

source
PowerModelsDistribution.variable_mc_bus_voltage_magnitude_onlyMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqrMethod

variable: w[i] >= 0 for i in `buses

source
PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqr_on_offMethod

voltage variable magnitude squared (relaxed form)

source
PowerModelsDistribution.variable_mc_bus_voltage_on_offMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_on_offMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_on_offMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_on_offMethod

Create voltage variables for branch flow model

source
PowerModelsDistribution.variable_mc_bus_voltage_prod_hermitianMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_realMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_realMethod
function variable_mc_bus_voltage_real(
+)

Creates imaginary voltage variables :vr for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_bus_voltage_imaginary_on_offMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_indicatorMethod

Create variables for bus status

source
PowerModelsDistribution.variable_mc_bus_voltage_magnitude_on_offMethod

on/off voltage magnitude variable

source
PowerModelsDistribution.variable_mc_bus_voltage_magnitude_onlyMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqrMethod

variable: w[i] >= 0 for i in `buses

source
PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqr_on_offMethod

voltage variable magnitude squared (relaxed form)

source
PowerModelsDistribution.variable_mc_bus_voltage_on_offMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_on_offMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_on_offMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_on_offMethod

Create voltage variables for branch flow model

source
PowerModelsDistribution.variable_mc_bus_voltage_prod_hermitianMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_realMethod
source
PowerModelsDistribution.variable_mc_bus_voltage_realMethod
function variable_mc_bus_voltage_real(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates real voltage variables :vr for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_bus_voltage_real_on_offMethod
source
PowerModelsDistribution.variable_mc_capacitor_reactive_powerMethod
variable_mc_capacitor_reactive_power(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default)

Capacitor (with capcontrol) relaxed power variables for AbstractLPUBFModel (using McCormick envelopes)

source
PowerModelsDistribution.variable_mc_capacitor_switch_stateMethod
variable_mc_capacitor_switch_state(pm::AbstractUnbalancedPowerModel, relax::Bool; nw::Int=nw_id_default, report::Bool=true)

Capacitor (with capcontrol) switch state (open/close) variables

source
PowerModelsDistribution.variable_mc_capcontrolMethod
variable_mc_capcontrol(pm::AbstractLPUBFModel; nw::Int=nw_id_default, relax::Bool=false, report::Bool=true)

Capacitor switching and relaxed power variables.

source
PowerModelsDistribution.variable_mc_capcontrolMethod

nothing to do, these models do not have complex voltage variables

source
PowerModelsDistribution.variable_mc_capcontrolMethod
variable_mc_capcontrol(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default, relax::Bool=false, report::Bool=true)

Capacitor switching variables.

source
PowerModelsDistribution.variable_mc_gen_indicatorMethod

Create variables for generator status

source
PowerModelsDistribution.variable_mc_generator_currentMethod

For the matrix KCL formulation, the generator needs an explicit current variable.

source
PowerModelsDistribution.variable_mc_generator_currentMethod
source
PowerModelsDistribution.variable_mc_generator_currentMethod
variable_mc_generator_current(pm::SOCUBFModels, gen_ids::Vector{Int}; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

For the SOC branch-flow formulation, the delta-generator needs an explicit current variable.

source
PowerModelsDistribution.variable_mc_generator_current_imaginaryMethod

variable: cig[j] for j in gen

source
PowerModelsDistribution.variable_mc_generator_current_imaginaryMethod
function variable_mc_generator_current_imaginary(
+)

Creates real voltage variables :vr for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_bus_voltage_real_on_offMethod
source
PowerModelsDistribution.variable_mc_capacitor_reactive_powerMethod
variable_mc_capacitor_reactive_power(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default)

Capacitor (with capcontrol) relaxed power variables for AbstractLPUBFModel (using McCormick envelopes)

source
PowerModelsDistribution.variable_mc_capacitor_switch_stateMethod
variable_mc_capacitor_switch_state(pm::AbstractUnbalancedPowerModel, relax::Bool; nw::Int=nw_id_default, report::Bool=true)

Capacitor (with capcontrol) switch state (open/close) variables

source
PowerModelsDistribution.variable_mc_capcontrolMethod
variable_mc_capcontrol(pm::AbstractLPUBFModel; nw::Int=nw_id_default, relax::Bool=false, report::Bool=true)

Capacitor switching and relaxed power variables.

source
PowerModelsDistribution.variable_mc_capcontrolMethod

nothing to do, these models do not have complex voltage variables

source
PowerModelsDistribution.variable_mc_capcontrolMethod
variable_mc_capcontrol(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default, relax::Bool=false, report::Bool=true)

Capacitor switching variables.

source
PowerModelsDistribution.variable_mc_gen_indicatorMethod

Create variables for generator status

source
PowerModelsDistribution.variable_mc_generator_currentMethod

For the matrix KCL formulation, the generator needs an explicit current variable.

source
PowerModelsDistribution.variable_mc_generator_currentMethod
source
PowerModelsDistribution.variable_mc_generator_currentMethod
variable_mc_generator_current(pm::SOCUBFModels, gen_ids::Vector{Int}; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

For the SOC branch-flow formulation, the delta-generator needs an explicit current variable.

source
PowerModelsDistribution.variable_mc_generator_current_imaginaryMethod

variable: cig[j] for j in gen

source
PowerModelsDistribution.variable_mc_generator_current_imaginaryMethod
function variable_mc_generator_current_imaginary(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates generator imaginary current variables :cig for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_generator_current_realMethod

variable: crg[j] for j in gen

source
PowerModelsDistribution.variable_mc_generator_current_realMethod
function variable_mc_generator_current_real(
+)

Creates generator imaginary current variables :cig for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_generator_current_realMethod

variable: crg[j] for j in gen

source
PowerModelsDistribution.variable_mc_generator_current_realMethod
function variable_mc_generator_current_real(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates generator real current variables :crg for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_generator_powerMethod
function variable_mc_generator_power(
+)

Creates generator real current variables :crg for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_generator_powerMethod
function variable_mc_generator_power(
 	pm::AbstractExplicitNeutralACRModel;
 	nw::Int=nw_id_default,
-)

For ACR models with explicit neutrals, creates generator power variables :pg and :qg, and placeholder dictionaries for terminal power flows :pg_bus and :qg_bus,

source
PowerModelsDistribution.variable_mc_generator_powerMethod
function variable_mc_generator_power(
+)

For ACR models with explicit neutrals, creates generator power variables :pg and :qg, and placeholder dictionaries for terminal power flows :pg_bus and :qg_bus,

source
PowerModelsDistribution.variable_mc_generator_powerMethod
function variable_mc_generator_power(
 	pm::AbstractNLExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true
-)

For IVR models with explicit neutrals, no power variables are required

source
PowerModelsDistribution.variable_mc_generator_powerMethod
function variable_mc_generator_power(
+)

For IVR models with explicit neutrals, no power variables are required

source
PowerModelsDistribution.variable_mc_generator_powerMethod
function variable_mc_generator_power(
 	pm::AbstractQuadraticExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true
-)

For quadratic IVR models with explicit neutrals, creates generator power variables :pg and :qg

source
PowerModelsDistribution.variable_mc_generator_powerMethod
variable_mc_generator_power(pm::AbstractUBFModels; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

The variable creation for generators in branch flow model. Delta generators always need an auxilary power variable (X) similar to delta loads. Wye generators however, don't need any variables.

source
PowerModelsDistribution.variable_mc_generator_powerMethod

create variables for generators, delegate to PowerModels

source
PowerModelsDistribution.variable_mc_generator_powerMethod

For the matrix KCL formulation, the generator needs an explicit current and power variable.

source
PowerModelsDistribution.variable_mc_generator_powerMethod
variable_mc_generator_power(pm::SOCUBFModels; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

The variable creation for generators in SOC branch flow model. Delta generators always need an auxilary power variable (X) and current squared variable (CC) similar to delta loads. Wye generators however, don't need any variables.

source
PowerModelsDistribution.variable_mc_generator_power_delta_auxMethod
variable_mc_generator_power_delta_aux(pm::AbstractUBFModels, gen_ids::Vector{Int}; nw::Int=nw_id_default, eps::Real=0.1, bounded::Bool=true, report::Bool=true)

Creates power matrix variable X for delta-connected generators similar to delta loads.

source
PowerModelsDistribution.variable_mc_generator_power_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_generator_power_imaginaryMethod
source
PowerModelsDistribution.variable_mc_generator_power_imaginaryMethod
function variable_mc_generator_power_imaginary(
+)

For quadratic IVR models with explicit neutrals, creates generator power variables :pg and :qg

source
PowerModelsDistribution.variable_mc_generator_powerMethod
variable_mc_generator_power(pm::AbstractUBFModels; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

The variable creation for generators in branch flow model. Delta generators always need an auxilary power variable (X) similar to delta loads. Wye generators however, don't need any variables.

source
PowerModelsDistribution.variable_mc_generator_powerMethod

create variables for generators, delegate to PowerModels

source
PowerModelsDistribution.variable_mc_generator_powerMethod

For the matrix KCL formulation, the generator needs an explicit current and power variable.

source
PowerModelsDistribution.variable_mc_generator_powerMethod
variable_mc_generator_power(pm::SOCUBFModels; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

The variable creation for generators in SOC branch flow model. Delta generators always need an auxilary power variable (X) and current squared variable (CC) similar to delta loads. Wye generators however, don't need any variables.

source
PowerModelsDistribution.variable_mc_generator_power_delta_auxMethod
variable_mc_generator_power_delta_aux(pm::AbstractUBFModels, gen_ids::Vector{Int}; nw::Int=nw_id_default, eps::Real=0.1, bounded::Bool=true, report::Bool=true)

Creates power matrix variable X for delta-connected generators similar to delta loads.

source
PowerModelsDistribution.variable_mc_generator_power_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_generator_power_imaginaryMethod
source
PowerModelsDistribution.variable_mc_generator_power_imaginaryMethod
function variable_mc_generator_power_imaginary(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates generator reactive power variables :qg for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_generator_power_imaginary_on_offMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_generator_power_imaginary_on_offMethod
source
PowerModelsDistribution.variable_mc_generator_power_mxMethod

For the matrix KCL formulation, the generator needs an explicit power variable.

source
PowerModelsDistribution.variable_mc_generator_power_on_offMethod
source
PowerModelsDistribution.variable_mc_generator_power_realMethod
source
PowerModelsDistribution.variable_mc_generator_power_realMethod
function variable_mc_generator_power_real(
+)

Creates generator reactive power variables :qg for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_generator_power_imaginary_on_offMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_generator_power_imaginary_on_offMethod
source
PowerModelsDistribution.variable_mc_generator_power_mxMethod

For the matrix KCL formulation, the generator needs an explicit power variable.

source
PowerModelsDistribution.variable_mc_generator_power_on_offMethod
source
PowerModelsDistribution.variable_mc_generator_power_realMethod
source
PowerModelsDistribution.variable_mc_generator_power_realMethod
function variable_mc_generator_power_real(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates generator active power variables :pg for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_generator_power_real_on_offMethod
source
PowerModelsDistribution.variable_mc_load_currentMethod
function variable_mc_load_current(
+)

Creates generator active power variables :pg for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_generator_power_real_on_offMethod
source
PowerModelsDistribution.variable_mc_load_currentMethod
function variable_mc_load_current(
 	pm::AbstractExplicitNeutralIVRModel;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

For IVR models with explicit neutrals, creates placeholder dictionaries for the load current :crd and :cid, and for the terminal current flows :crd_bus and :cid_bus

source
PowerModelsDistribution.variable_mc_load_currentMethod
function variable_mc_load_current(
+)

For IVR models with explicit neutrals, creates placeholder dictionaries for the load current :crd and :cid, and for the terminal current flows :crd_bus and :cid_bus

source
PowerModelsDistribution.variable_mc_load_currentMethod
function variable_mc_load_current(
 	pm::AbstractQuadraticExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true
-)

For quadratic IVR models with explicit neutrals, creates load current variables :crd and :cid, and placeholder dictionaries for the terminal current flows :crd_bus and :cid_bus

source
PowerModelsDistribution.variable_mc_load_currentMethod

All loads need a current variable; for wye loads, this variable will be in the wye reference frame whilst for delta currents it will be in the delta reference frame.

source
PowerModelsDistribution.variable_mc_load_currentMethod
source
PowerModelsDistribution.variable_mc_load_currentMethod
variable_mc_load_current(pm::FBSUBFPowerModel, load_ids::Vector{Int}; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

No loads require a current variable. Delta loads are zero-order approximations and wye loads are first-order approximations around the initial operating point.

source
PowerModelsDistribution.variable_mc_load_current_imaginaryMethod
function variable_mc_load_current_imaginary(
+)

For quadratic IVR models with explicit neutrals, creates load current variables :crd and :cid, and placeholder dictionaries for the terminal current flows :crd_bus and :cid_bus

source
PowerModelsDistribution.variable_mc_load_currentMethod

All loads need a current variable; for wye loads, this variable will be in the wye reference frame whilst for delta currents it will be in the delta reference frame.

source
PowerModelsDistribution.variable_mc_load_currentMethod
source
PowerModelsDistribution.variable_mc_load_currentMethod
variable_mc_load_current(pm::FBSUBFPowerModel, load_ids::Vector{Int}; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

No loads require a current variable. Delta loads are zero-order approximations and wye loads are first-order approximations around the initial operating point.

source
PowerModelsDistribution.variable_mc_load_current_imaginaryMethod
function variable_mc_load_current_imaginary(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates load imaginary current variables :cid for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_load_current_realMethod
function variable_mc_load_current_real(
+)

Creates load imaginary current variables :cid for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_load_current_realMethod
function variable_mc_load_current_real(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates load real current variables :crd for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_load_indicatorMethod

Create variables for demand status

source
PowerModelsDistribution.variable_mc_load_powerMethod
function variable_mc_load_power(
+)

Creates load real current variables :crd for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_load_indicatorMethod

Create variables for demand status

source
PowerModelsDistribution.variable_mc_load_powerMethod
function variable_mc_load_power(
 	pm::AbstractExplicitNeutralACRModel;
 	nw=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

For ACR models with explicit neutrals, creates placeholder dictionaries for load power expressions :pd and :qd

source
PowerModelsDistribution.variable_mc_load_powerMethod
function variable_mc_load_power(
+)

For ACR models with explicit neutrals, creates placeholder dictionaries for load power expressions :pd and :qd

source
PowerModelsDistribution.variable_mc_load_powerMethod
function variable_mc_load_power(
 	pm::AbstractNLExplicitNeutralIVRModel;
 	nw=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

For non-linear IVR models with explicit neutrals, creates placeholder dictionaries for the load power :pd and :qd, and for the terminal power flows :pd_bus and :qd_bus

source
PowerModelsDistribution.variable_mc_load_powerMethod
function variable_mc_load_power(
+)

For non-linear IVR models with explicit neutrals, creates placeholder dictionaries for the load power :pd and :qd, and for the terminal power flows :pd_bus and :qd_bus

source
PowerModelsDistribution.variable_mc_load_powerMethod
function variable_mc_load_power(
 	pm::AbstractQuadraticExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true
-)

For quadratic IVR models with explicit neutrals, creates load power variables :pd and :qd

source
PowerModelsDistribution.variable_mc_load_powerMethod

These variables reflect the power consumed by the load, NOT the power injected into the bus nodes; these variables only coincide for wye-connected loads with a grounded neutral.

source
PowerModelsDistribution.variable_mc_load_powerMethod

The variable creation for the loads is rather complicated because Expressions are used wherever possible instead of explicit variables. Delta loads always need a current variable and auxilary power variable (X), and all other load model variables are then linear transformations of these (linear Expressions). Wye loads however, don't need any variables when the load is modelled as constant power or constant impedance. In all other cases (e.g. when a cone is used to constrain the power), variables need to be created.

source
PowerModelsDistribution.variable_mc_load_powerMethod

Create a dictionary with values of type Any for the load. Depending on the load model, this can be a parameter or a NLexpression. These will be inserted into KCL.

source
PowerModelsDistribution.variable_mc_load_powerMethod

Create a dictionary with values of type Any for the load. Depending on the load model, this can be a parameter or a NLexpression. These will be inserted into KCL.

source
PowerModelsDistribution.variable_mc_load_powerMethod

The variable creation for the loads is rather complicated because Expressions are used wherever possible instead of explicit variables. All loads need a current variable; for wye loads, this variable will be in the wye reference frame whilst for delta currents it will be in the delta reference frame. All loads need variables for the off-diagonals of the nodal power variables. In some cases, the diagonals elements can be created as Expressions. Delta loads only need a current variable and auxilary power variable (X), and all other load model variables are then linear transformations of these (linear Expressions).

source
PowerModelsDistribution.variable_mc_load_power_activeMethod
function variable_mc_load_power_active(
+)

For quadratic IVR models with explicit neutrals, creates load power variables :pd and :qd

source
PowerModelsDistribution.variable_mc_load_powerMethod

These variables reflect the power consumed by the load, NOT the power injected into the bus nodes; these variables only coincide for wye-connected loads with a grounded neutral.

source
PowerModelsDistribution.variable_mc_load_powerMethod

The variable creation for the loads is rather complicated because Expressions are used wherever possible instead of explicit variables. Delta loads always need a current variable and auxilary power variable (X), and all other load model variables are then linear transformations of these (linear Expressions). Wye loads however, don't need any variables when the load is modelled as constant power or constant impedance. In all other cases (e.g. when a cone is used to constrain the power), variables need to be created.

source
PowerModelsDistribution.variable_mc_load_powerMethod

Create a dictionary with values of type Any for the load. Depending on the load model, this can be a parameter or a NLexpression. These will be inserted into KCL.

source
PowerModelsDistribution.variable_mc_load_powerMethod

Create a dictionary with values of type Any for the load. Depending on the load model, this can be a parameter or a NLexpression. These will be inserted into KCL.

source
PowerModelsDistribution.variable_mc_load_powerMethod

The variable creation for the loads is rather complicated because Expressions are used wherever possible instead of explicit variables. All loads need a current variable; for wye loads, this variable will be in the wye reference frame whilst for delta currents it will be in the delta reference frame. All loads need variables for the off-diagonals of the nodal power variables. In some cases, the diagonals elements can be created as Expressions. Delta loads only need a current variable and auxilary power variable (X), and all other load model variables are then linear transformations of these (linear Expressions).

source
PowerModelsDistribution.variable_mc_load_power_activeMethod
function variable_mc_load_power_active(
 	pm::AbstractQuadraticExplicitNeutralIVRModel;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates load active power variables :pd for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_load_power_busMethod

The bus qualifier denotes that this is the power withdrawn at the bus; Only for grounded wye-connected loads, this is the same as the power consumed by the multi-phase load. The off-diagonals only need to be created for the matrix KCL formulation.

source
PowerModelsDistribution.variable_mc_load_power_delta_auxMethod

Creates power matrix variable X for delta windings; this defines both the wye-side power Sy and the delta-side power Sd through the lin. transformations Sy = X.Td, Sd = Td.X with Td=[1 -1 0; 0 1 -1; -1 0 1]

See the paper by Zhao et al. for the first convex relaxation of delta transformations. @INPROCEEDINGS{zhaooptimal2017, author={C. Zhao, E. Dall'Anese and S. Low}, booktitle={IREP 2017 Bulk Power Systems Dynamics and Control Symposium}, title={{Optimal Power Flow in Multiphase Radial Networks with Delta Connections}}, year={2017}, month={}, url={https://www.nrel.gov/docs/fy18osti/67852.pdf} }

See upcoming paper for discussion of bounds. [reference added when accepted]

source
PowerModelsDistribution.variable_mc_load_power_delta_auxMethod
variable_mc_load_power_delta_aux(pm::FBSUBFPowerModel, load_ids::Vector{Int}; nw::Int=nw_id_default, eps::Real=0.1, bounded::Bool=true, report::Bool=true)

Auxiliary variables are not required since delta loads are zero-order approximations calculated using the initial operating point.

source
PowerModelsDistribution.variable_mc_load_power_reactiveMethod
function variable_mc_load_power_reactive(
+)

Creates load active power variables :pd for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_load_power_busMethod

The bus qualifier denotes that this is the power withdrawn at the bus; Only for grounded wye-connected loads, this is the same as the power consumed by the multi-phase load. The off-diagonals only need to be created for the matrix KCL formulation.

source
PowerModelsDistribution.variable_mc_load_power_delta_auxMethod

Creates power matrix variable X for delta windings; this defines both the wye-side power Sy and the delta-side power Sd through the lin. transformations Sy = X.Td, Sd = Td.X with Td=[1 -1 0; 0 1 -1; -1 0 1]

See the paper by Zhao et al. for the first convex relaxation of delta transformations. @INPROCEEDINGS{zhaooptimal2017, author={C. Zhao, E. Dall'Anese and S. Low}, booktitle={IREP 2017 Bulk Power Systems Dynamics and Control Symposium}, title={{Optimal Power Flow in Multiphase Radial Networks with Delta Connections}}, year={2017}, month={}, url={https://www.nrel.gov/docs/fy18osti/67852.pdf} }

See upcoming paper for discussion of bounds. [reference added when accepted]

source
PowerModelsDistribution.variable_mc_load_power_delta_auxMethod
variable_mc_load_power_delta_aux(pm::FBSUBFPowerModel, load_ids::Vector{Int}; nw::Int=nw_id_default, eps::Real=0.1, bounded::Bool=true, report::Bool=true)

Auxiliary variables are not required since delta loads are zero-order approximations calculated using the initial operating point.

source
PowerModelsDistribution.variable_mc_load_power_reactiveMethod
function variable_mc_load_power_reactive(
 	pm::AbstractQuadraticExplicitNeutralIVRModel;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates load reactive power variables :qd for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_oltc_transformer_tapMethod

no voltage variables

source
PowerModelsDistribution.variable_mc_oltc_transformer_tapMethod

Create tap variables.

source
PowerModelsDistribution.variable_mc_shunt_indicatorMethod

Create variables for shunt status

source
PowerModelsDistribution.variable_mc_slack_bus_powerMethod

generates variables for both active and reactive slack at each bus

source
PowerModelsDistribution.variable_mc_slack_bus_power_imaginaryMethod
source
PowerModelsDistribution.variable_mc_slack_bus_power_realMethod
source
PowerModelsDistribution.variable_mc_storage_currentMethod

do nothing by default but some formulations require this

source
PowerModelsDistribution.variable_mc_storage_currentMethod

do nothing by default but some formulations require this

source
PowerModelsDistribution.variable_mc_storage_indicatorMethod

Create variables for storage status

source
PowerModelsDistribution.variable_mc_storage_powerMethod

variables for modeling storage units, includes grid injection and internal variables

source
PowerModelsDistribution.variable_mc_storage_power_control_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_storage_power_control_imaginaryMethod

a reactive power slack variable that enables the storage device to inject or consume reactive power at its connecting bus, subject to the injection limits of the device.

source
PowerModelsDistribution.variable_mc_storage_power_control_imaginary_on_offMethod

a reactive power slack variable that enables the storage device to inject or consume reactive power at its connecting bus, subject to the injection limits of the device.

source
PowerModelsDistribution.variable_mc_storage_power_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_storage_power_imaginaryMethod
source
PowerModelsDistribution.variable_mc_storage_power_imaginary_on_offMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_storage_power_imaginary_on_offMethod

Create variables for reactive storage injection

source
PowerModelsDistribution.variable_mc_storage_power_miMethod
variable_mc_storage_power_mi(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default, relax::Bool=false, bounded::Bool=true, report::Bool=true)

Variables for storage power (mixed-integer if relax==false)

source
PowerModelsDistribution.variable_mc_storage_power_mi_on_offMethod
source
PowerModelsDistribution.variable_mc_storage_power_on_offMethod

Create variables for active and reactive storage injection

source
PowerModelsDistribution.variable_mc_storage_power_realMethod
source
PowerModelsDistribution.variable_mc_storage_power_real_on_offMethod

Create variables for active storage injection

source
PowerModelsDistribution.variable_mc_switch_currentMethod
function variable_mc_switch_current(
+)

Creates load reactive power variables :qd for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_oltc_transformer_tapMethod

no voltage variables

source
PowerModelsDistribution.variable_mc_oltc_transformer_tapMethod

Create tap variables.

source
PowerModelsDistribution.variable_mc_shunt_indicatorMethod

Create variables for shunt status

source
PowerModelsDistribution.variable_mc_slack_bus_powerMethod

generates variables for both active and reactive slack at each bus

source
PowerModelsDistribution.variable_mc_slack_bus_power_imaginaryMethod
source
PowerModelsDistribution.variable_mc_slack_bus_power_realMethod
source
PowerModelsDistribution.variable_mc_storage_currentMethod

do nothing by default but some formulations require this

source
PowerModelsDistribution.variable_mc_storage_currentMethod

do nothing by default but some formulations require this

source
PowerModelsDistribution.variable_mc_storage_indicatorMethod

Create variables for storage status

source
PowerModelsDistribution.variable_mc_storage_powerMethod

variables for modeling storage units, includes grid injection and internal variables

source
PowerModelsDistribution.variable_mc_storage_power_control_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_storage_power_control_imaginaryMethod

a reactive power slack variable that enables the storage device to inject or consume reactive power at its connecting bus, subject to the injection limits of the device.

source
PowerModelsDistribution.variable_mc_storage_power_control_imaginary_on_offMethod

a reactive power slack variable that enables the storage device to inject or consume reactive power at its connecting bus, subject to the injection limits of the device.

source
PowerModelsDistribution.variable_mc_storage_power_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_storage_power_imaginaryMethod
source
PowerModelsDistribution.variable_mc_storage_power_imaginary_on_offMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_storage_power_imaginary_on_offMethod

Create variables for reactive storage injection

source
PowerModelsDistribution.variable_mc_storage_power_miMethod
variable_mc_storage_power_mi(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default, relax::Bool=false, bounded::Bool=true, report::Bool=true)

Variables for storage power (mixed-integer if relax==false)

source
PowerModelsDistribution.variable_mc_storage_power_mi_on_offMethod
source
PowerModelsDistribution.variable_mc_storage_power_on_offMethod

Create variables for active and reactive storage injection

source
PowerModelsDistribution.variable_mc_storage_power_realMethod
source
PowerModelsDistribution.variable_mc_storage_power_real_on_offMethod

Create variables for active storage injection

source
PowerModelsDistribution.variable_mc_switch_currentMethod
function variable_mc_switch_current(
 	pm::AbstractExplicitNeutralIVRModel;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true,
-)

For IVR models with explicit neutrals, creates switch current variables :crs and :cis, and placeholder dictionaries for the terminal current flows :crsw_bus and :cisw_bus

source
PowerModelsDistribution.variable_mc_switch_currentMethod
source
PowerModelsDistribution.variable_mc_switch_currentMethod
source
PowerModelsDistribution.variable_mc_switch_current_imaginaryMethod
source
PowerModelsDistribution.variable_mc_switch_current_imaginaryMethod
function variable_mc_switch_current_imaginary(
+)

For IVR models with explicit neutrals, creates switch current variables :crs and :cis, and placeholder dictionaries for the terminal current flows :crsw_bus and :cisw_bus

source
PowerModelsDistribution.variable_mc_switch_currentMethod
source
PowerModelsDistribution.variable_mc_switch_currentMethod
source
PowerModelsDistribution.variable_mc_switch_current_imaginaryMethod
source
PowerModelsDistribution.variable_mc_switch_current_imaginaryMethod
function variable_mc_switch_current_imaginary(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

For models with explicit neutrals, creates switch imaginary current variables :cisw for models with explicit neutrals.

source
PowerModelsDistribution.variable_mc_switch_current_realMethod
source
PowerModelsDistribution.variable_mc_switch_current_realMethod
function variable_mc_switch_current_real(
+)

For models with explicit neutrals, creates switch imaginary current variables :cisw for models with explicit neutrals.

source
PowerModelsDistribution.variable_mc_switch_current_realMethod
source
PowerModelsDistribution.variable_mc_switch_current_realMethod
function variable_mc_switch_current_real(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

For models with explicit neutrals, creates switch real current variables :crsw for models with explicit neutrals.

source
PowerModelsDistribution.variable_mc_switch_powerMethod
function variable_mc_switch_power(
+)

For models with explicit neutrals, creates switch real current variables :crsw for models with explicit neutrals.

source
PowerModelsDistribution.variable_mc_switch_powerMethod
function variable_mc_switch_power(
 	pm::AbstractExplicitNeutralACRModel;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true,
-)

For ACR models with explicit neutrals, creates switch power variables :p and :q and placeholder dictionaries for the terminal power flows :ps_bus and :qs_bus.

source
PowerModelsDistribution.variable_mc_switch_powerMethod

matrix power variables for switches

source
PowerModelsDistribution.variable_mc_switch_powerMethod
source
PowerModelsDistribution.variable_mc_switch_powerMethod
variable_mc_switch_power(pm::LPUBFDiagModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

Switch power variables.

source
PowerModelsDistribution.variable_mc_switch_power_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_switch_power_imaginaryMethod
source
PowerModelsDistribution.variable_mc_switch_power_imaginaryMethod
function variable_mc_switch_power_imaginary(
+)

For ACR models with explicit neutrals, creates switch power variables :p and :q and placeholder dictionaries for the terminal power flows :ps_bus and :qs_bus.

source
PowerModelsDistribution.variable_mc_switch_powerMethod

matrix power variables for switches

source
PowerModelsDistribution.variable_mc_switch_powerMethod
source
PowerModelsDistribution.variable_mc_switch_powerMethod
variable_mc_switch_power(pm::LPUBFDiagModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)

Switch power variables.

source
PowerModelsDistribution.variable_mc_switch_power_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_switch_power_imaginaryMethod
source
PowerModelsDistribution.variable_mc_switch_power_imaginaryMethod
function variable_mc_switch_power_imaginary(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

For models with explicit neutrals, creates switch reactive power variables :qsw for models with explicit neutrals. This is defined per arc, i.e. with a variable for the from-side and to-side power.

source
PowerModelsDistribution.variable_mc_switch_power_realMethod
source
PowerModelsDistribution.variable_mc_switch_power_realMethod
function variable_mc_switch_power_real(
+)

For models with explicit neutrals, creates switch reactive power variables :qsw for models with explicit neutrals. This is defined per arc, i.e. with a variable for the from-side and to-side power.

source
PowerModelsDistribution.variable_mc_switch_power_realMethod
source
PowerModelsDistribution.variable_mc_switch_power_realMethod
function variable_mc_switch_power_real(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

For models with explicit neutrals, creates switch active power variables :psw for models with explicit neutrals. This is defined per arc, i.e. with a variable for the from-side and to-side power.

source
PowerModelsDistribution.variable_mc_switch_stateMethod

switch state (open/close) variables

source
PowerModelsDistribution.variable_mc_transformer_currentMethod
function variable_mc_transformer_current(
+)

For models with explicit neutrals, creates switch active power variables :psw for models with explicit neutrals. This is defined per arc, i.e. with a variable for the from-side and to-side power.

source
PowerModelsDistribution.variable_mc_switch_stateMethod

switch state (open/close) variables

source
PowerModelsDistribution.variable_mc_transformer_currentMethod
function variable_mc_transformer_current(
 	pm::AbstractExplicitNeutralIVRModel;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true,
-)

For IVR models with explicit neutrals, create transformer current variables :crt and :cit, and placeholder dictionaries for the terminal current flows :crt_bus and :cit_bus

source
PowerModelsDistribution.variable_mc_transformer_currentMethod
source
PowerModelsDistribution.variable_mc_transformer_current_imaginaryMethod

variable: ci[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_transformer_current_imaginaryMethod
function variable_mc_transformer_current_imaginary(
+)

For IVR models with explicit neutrals, create transformer current variables :crt and :cit, and placeholder dictionaries for the terminal current flows :crt_bus and :cit_bus

source
PowerModelsDistribution.variable_mc_transformer_currentMethod
source
PowerModelsDistribution.variable_mc_transformer_current_imaginaryMethod

variable: ci[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_transformer_current_imaginaryMethod
function variable_mc_transformer_current_imaginary(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates transformer imaginary current variables :cit for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_transformer_current_realMethod

variable: cr[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_transformer_current_realMethod
function variable_mc_transformer_current_real(
+)

Creates transformer imaginary current variables :cit for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_transformer_current_realMethod

variable: cr[l,i,j] for (l,i,j) in arcs

source
PowerModelsDistribution.variable_mc_transformer_current_realMethod
function variable_mc_transformer_current_real(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates transformer real current variables :crt for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_transformer_powerMethod
function variable_mc_transformer_power(
+)

Creates transformer real current variables :crt for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_transformer_powerMethod
function variable_mc_transformer_power(
 	pm::AbstractExplicitNeutralACRModel;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true,
-)

For ACR models with explicit neutrals, creates transfomer power variables :pt and :qt, and placeholder dictionaries for transformer terminal power flows :pt_bus and :qt_bus

source
PowerModelsDistribution.variable_mc_transformer_powerMethod
function variable_mc_transformer_power(
+)

For ACR models with explicit neutrals, creates transfomer power variables :pt and :qt, and placeholder dictionaries for transformer terminal power flows :pt_bus and :qt_bus

source
PowerModelsDistribution.variable_mc_transformer_powerMethod
function variable_mc_transformer_power(
 	pm::AbstractNLExplicitNeutralIVRModel;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true,
-)

For non-linear IVR models with explicit neutrals, no power variables are required.

source
PowerModelsDistribution.variable_mc_transformer_powerMethod
function variable_mc_transformer_power(
+)

For non-linear IVR models with explicit neutrals, no power variables are required.

source
PowerModelsDistribution.variable_mc_transformer_powerMethod
function variable_mc_transformer_power(
 	pm::AbstractQuadraticExplicitNeutralIVRModel;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true,
-)

For quadratic IVR models with explicit neutrals, creates transformer power variables :pt and :qt

source
PowerModelsDistribution.variable_mc_transformer_powerMethod

defines matrix transformer power variables for the unbalanced branch flow models

source
PowerModelsDistribution.variable_mc_transformer_powerMethod

Creates variables for both active and reactive power flow at each transformer.

source
PowerModelsDistribution.variable_mc_transformer_powerMethod

Creates variables for both active and reactive power flow at each transformer.

source
PowerModelsDistribution.variable_mc_transformer_powerMethod

Creates variables for both active and reactive power flow at each transformer.

source
PowerModelsDistribution.variable_mc_transformer_power_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_transformer_power_imaginaryMethod

Create variables for the reactive power flowing into all transformer windings.

source
PowerModelsDistribution.variable_mc_transformer_power_imaginaryMethod
function variable_mc_transformer_power_imaginary(
+)

For quadratic IVR models with explicit neutrals, creates transformer power variables :pt and :qt

source
PowerModelsDistribution.variable_mc_transformer_powerMethod

defines matrix transformer power variables for the unbalanced branch flow models

source
PowerModelsDistribution.variable_mc_transformer_powerMethod

Creates variables for both active and reactive power flow at each transformer.

source
PowerModelsDistribution.variable_mc_transformer_powerMethod

Creates variables for both active and reactive power flow at each transformer.

source
PowerModelsDistribution.variable_mc_transformer_powerMethod

Creates variables for both active and reactive power flow at each transformer.

source
PowerModelsDistribution.variable_mc_transformer_power_imaginaryMethod

apo models ignore reactive power flows

source
PowerModelsDistribution.variable_mc_transformer_power_imaginaryMethod

Create variables for the reactive power flowing into all transformer windings.

source
PowerModelsDistribution.variable_mc_transformer_power_imaginaryMethod
function variable_mc_transformer_power_imaginary(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates transformer reactive power variables :qt for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_transformer_power_realMethod

Create variables for the active power flowing into all transformer windings.

source
PowerModelsDistribution.variable_mc_transformer_power_realMethod
function variable_mc_transformer_power_real(
+)

Creates transformer reactive power variables :qt for models with explicit neutrals

source
PowerModelsDistribution.variable_mc_transformer_power_realMethod

Create variables for the active power flowing into all transformer windings.

source
PowerModelsDistribution.variable_mc_transformer_power_realMethod
function variable_mc_transformer_power_real(
 	pm::ExplicitNeutralModels;
 	nw::Int=nw_id_default,
 	bounded::Bool=true,
 	report::Bool=true
-)

Creates transformer active power variables :pt for models with explicit neutrals

source
PowerModelsDistribution.variable_mx_complexMethod
variable_mx_complex(
+)

Creates transformer active power variables :pt for models with explicit neutrals

source
PowerModelsDistribution.variable_mx_complexMethod
variable_mx_complex(
     model::JuMP.Model,
     indices::Array{T,1},
     N::Dict{T,Vector{Int}},
@@ -204,7 +204,7 @@
     symm_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,
     name::Union{String, Tuple{String,String}}="",
     prefix::String=""
-)::Tuple where T

Shorthand to create two real matrix variables, where the first is the real part and the second the imaginary part.

If the name argument is a String, it will be suffixed with 're' and 'im'. It is possible to specify the names of the real and imaginary part directly as a Tuple as well (to achieve P and Q instead of Sre and Sim for example).

source
PowerModelsDistribution.variable_mx_complex_with_diagMethod
variable_mx_complex_with_diag(
+)::Tuple where T

Shorthand to create two real matrix variables, where the first is the real part and the second the imaginary part.

If the name argument is a String, it will be suffixed with 're' and 'im'. It is possible to specify the names of the real and imaginary part directly as a Tuple as well (to achieve P and Q instead of Sre and Sim for example).

source
PowerModelsDistribution.variable_mx_complex_with_diagMethod
variable_mx_complex_with_diag(
     model::JuMP.Model,
     indices::Array{T,1},
     N::Dict{T,Vector{Int}};
@@ -215,7 +215,7 @@
     diag_im::Dict{T,<:Vector{<:Any}}=Dict([(i, zeros(length(N[i]))) for i in indices]),
     name::Union{String, Tuple{String,String}}="",
     prefix::String=""
-)::Tuple where T

Same as variable_mx_complex, but square and the diagonal of the matrix variables consists of the constants passed as the diagre and diagim argument. The diag argument is a dictionary of (index, 1d-array) pairs.

Useful for power matrices with specified diagonals (constant power wye loads).

source
PowerModelsDistribution.variable_mx_hermitianMethod
variable_mx_hermitian(
+)::Tuple where T

Same as variable_mx_complex, but square and the diagonal of the matrix variables consists of the constants passed as the diagre and diagim argument. The diag argument is a dictionary of (index, 1d-array) pairs.

Useful for power matrices with specified diagonals (constant power wye loads).

source
PowerModelsDistribution.variable_mx_hermitianMethod
variable_mx_hermitian(
     model::JuMP.Model,
     indices::Array{T,1},
     N::Dict{T,Vector{Int}};
@@ -228,7 +228,7 @@
     imag_set_diag_to_zero::Bool=true,
     name::Union{String,Tuple{String,String}}="",
     prefix::String=""
-)::Tuple where T

Returns a pair of symmetric and skew-symmetric matrix variables.

source
PowerModelsDistribution.variable_mx_realMethod
variable_mx_real(
+)::Tuple where T

Returns a pair of symmetric and skew-symmetric matrix variables.

source
PowerModelsDistribution.variable_mx_realMethod
variable_mx_real(
     model::JuMP.Model,
     indices::Array{T,1},
     N::Dict{T,Vector{Int}},
@@ -237,7 +237,7 @@
     lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,
     name::String="",
     prefix::String=""
-) where T

This function creates a set of real matrix variables of size NxM, indexed over the elements of the indices argument. The upper and lower bounds have to be specified, and are dictionaries with the indices as keys and the matrix bounds as values. The name and prefix arguments will be combined into the base_name argument for JuMP; the prefix will typically be the network number nw. Instead of sequentially creating the matrix variables, the elements of the matrices are created sequentially for all matrices at once. I.e., we loop over the elements, and not over the indices. This is needed so that the variable names printed by JuMP are in line with the current design.

Returns a dictionary of (index, matrix variable) pairs

source
PowerModelsDistribution.variable_mx_real_skewsymmetricMethod
variable_mx_real_skewsymmetric(
+) where T

This function creates a set of real matrix variables of size NxM, indexed over the elements of the indices argument. The upper and lower bounds have to be specified, and are dictionaries with the indices as keys and the matrix bounds as values. The name and prefix arguments will be combined into the base_name argument for JuMP; the prefix will typically be the network number nw. Instead of sequentially creating the matrix variables, the elements of the matrices are created sequentially for all matrices at once. I.e., we loop over the elements, and not over the indices. This is needed so that the variable names printed by JuMP are in line with the current design.

Returns a dictionary of (index, matrix variable) pairs

source
PowerModelsDistribution.variable_mx_real_skewsymmetricMethod
variable_mx_real_skewsymmetric(
     model::JuMP.Model,
     indices::Array{T,1},
     N::Dict{T,Vector{Int}};
@@ -246,7 +246,7 @@
     set_diag_to_zero::Bool=true,
     name::String="",
     prefix::String=""
-)::Dict where T

Same as variable_mx_real, but adds skew-symmetry structure.

source
PowerModelsDistribution.variable_mx_real_symmetricMethod
variable_mx_real_symmetric(
+)::Dict where T

Same as variable_mx_real, but adds skew-symmetry structure.

source
PowerModelsDistribution.variable_mx_real_symmetricMethod
variable_mx_real_symmetric(
     model::JuMP.Model,
     indices::Array{T,1},
     N::Dict{T,Vector{Int}};
@@ -254,7 +254,7 @@
     lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,
     name::String="",
     prefix::String=""
-)::Dict where T

Same as variable_mx_real, but adds symmetry structure

source
PowerModelsDistribution.variable_mx_real_with_diagMethod
variable_mx_real_with_diag(
+)::Dict where T

Same as variable_mx_real, but adds symmetry structure

source
PowerModelsDistribution.variable_mx_real_with_diagMethod
variable_mx_real_with_diag(
     model::JuMP.Model,
     indices::Array{T,1},
     N::Dict{T,Vector{Int}};
@@ -263,4 +263,4 @@
     diag::Dict{T,<:Vector{<:Any}}=Dict([(i, fill(0, length(N[i]))) for i in indices]),
     name::String="",
     prefix::String=""
-) where T

Same as variable_mx_real, but has to be square and the diagonal of the matrix variables consists of the elements passed as the diag argument. The diag argument is a dictionary of (index, 1d-array) pairs. Useful for power matrices with specified diagonals (constant power wye loads). If not specified, the diagonal elements are set to zero.

source
PowerModelsDistribution.variable_storage_chargeMethod
source
PowerModelsDistribution.variable_storage_complementary_indicatorMethod
source
PowerModelsDistribution.variable_storage_dischargeMethod
source
PowerModelsDistribution.variable_storage_energyMethod
source
+) where T

Same as variable_mx_real, but has to be square and the diagonal of the matrix variables consists of the elements passed as the diag argument. The diag argument is a dictionary of (index, 1d-array) pairs. Useful for power matrices with specified diagonals (constant power wye loads). If not specified, the diagonal elements are set to zero.

source
PowerModelsDistribution.variable_storage_chargeMethod
source
PowerModelsDistribution.variable_storage_complementary_indicatorMethod
source
PowerModelsDistribution.variable_storage_dischargeMethod
source
PowerModelsDistribution.variable_storage_energyMethod
source
diff --git a/dev/search.html b/dev/search.html index eef9853de..25599191c 100644 --- a/dev/search.html +++ b/dev/search.html @@ -1,2 +1,2 @@ -Search · PowerModelsDistribution

Loading search...

    +Search · PowerModelsDistribution

    Loading search...

      diff --git a/dev/search_index.js b/dev/search_index.js index ae4b4b662..849ed2f8f 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"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 = [PowerModelsDistribution]\nPublic = false","category":"page"},{"location":"reference/internal.html#PowerModelsDistribution._1to1_maps","page":"Internal Functions","title":"PowerModelsDistribution._1to1_maps","text":"items that are mapped one-to-one from engineering to math models\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._CPF_COMPONENT_INTERFACES","page":"Internal Functions","title":"PowerModelsDistribution._CPF_COMPONENT_INTERFACES","text":"A mapping of supported component types to their functional interfaces.\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._array_delimiters","page":"Internal Functions","title":"PowerModelsDistribution._array_delimiters","text":"different acceptable delimiters for arrays\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._conductor_matrix","page":"Internal Functions","title":"PowerModelsDistribution._conductor_matrix","text":"field names that should become multi-conductor matrix not arrays\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._conductorless","page":"Internal Functions","title":"PowerModelsDistribution._conductorless","text":"field names that should not be multi-conductor values\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._convert_to_meters","page":"Internal Functions","title":"PowerModelsDistribution._convert_to_meters","text":"conversion factors for units to meters\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._double_operators","page":"Internal Functions","title":"PowerModelsDistribution._double_operators","text":"two number operators for reverse polish notation\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss2pmd_capcontrol_type","page":"Internal Functions","title":"PowerModelsDistribution._dss2pmd_capcontrol_type","text":"dss to pmd capcontrol type\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss2pmd_load_model","page":"Internal Functions","title":"PowerModelsDistribution._dss2pmd_load_model","text":"dss to pmd load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_array_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_array_regex","text":"regex for dss arrays\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_cmd_buscoords_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_cmd_buscoords_regex","text":"regex for dss 'buscoords' command\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_cmd_more_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_cmd_more_regex","text":"regex for dss 'more' command\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_cmd_new_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_cmd_new_regex","text":"regex for dss 'new' command\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_cmd_set_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_cmd_set_regex","text":"regex for dss 'set' command\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_control_objects","page":"Internal Functions","title":"PowerModelsDistribution._dss_control_objects","text":"all objects that define controls\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_data_objects","page":"Internal Functions","title":"PowerModelsDistribution._dss_data_objects","text":"all data holding objects\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_edge_objects","page":"Internal Functions","title":"PowerModelsDistribution._dss_edge_objects","text":"all edge types that can help define buses\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_matrix_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_matrix_regex","text":"regex for dss matrices\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_monitor_objects","page":"Internal Functions","title":"PowerModelsDistribution._dss_monitor_objects","text":"all objects that provide montoring\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_node_objects","page":"Internal Functions","title":"PowerModelsDistribution._dss_node_objects","text":"all node types that can help define buses\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_property_renames","page":"Internal Functions","title":"PowerModelsDistribution._dss_property_renames","text":"collection of dss properties that have been renamed (i.e., deprecated)\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_rpn_array_sep_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_rpn_array_sep_regex","text":"regex for dss rpn arrays\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_short_prop_names_map","page":"Internal Functions","title":"PowerModelsDistribution._dss_short_prop_names_map","text":"const built at import of short property names\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_supported_commands","page":"Internal Functions","title":"PowerModelsDistribution._dss_supported_commands","text":"supported dss commands\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_supported_components","page":"Internal Functions","title":"PowerModelsDistribution._dss_supported_components","text":"components currently supported for automatic data type parsing\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_unsupported_commands","page":"Internal Functions","title":"PowerModelsDistribution._dss_unsupported_commands","text":"unsupported dss commands\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._eng_edge_elements","page":"Internal Functions","title":"PowerModelsDistribution._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#PowerModelsDistribution._eng_model_checks","page":"Internal Functions","title":"PowerModelsDistribution._eng_model_checks","text":"data check functions for the engineering data model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._eng_model_dtypes","page":"Internal Functions","title":"PowerModelsDistribution._eng_model_dtypes","text":"Data types of accepted fields in the engineering data model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._eng_model_req_fields","page":"Internal Functions","title":"PowerModelsDistribution._eng_model_req_fields","text":"required fields in the engineering data model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._eng_node_elements","page":"Internal Functions","title":"PowerModelsDistribution._eng_node_elements","text":"list of nodal type elements in the engineering model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._like_exclusions","page":"Internal Functions","title":"PowerModelsDistribution._like_exclusions","text":"properties that should be excluded from being overwritten during the application of like\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._loss_model_objects","page":"Internal Functions","title":"PowerModelsDistribution._loss_model_objects","text":"collect of components and their properties that define loss models when transforming to the MATHEMATICAL model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._math_dispatchable_elements","page":"Internal Functions","title":"PowerModelsDistribution._math_dispatchable_elements","text":"list of math asset types that are dispatchable\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._math_edge_elements","page":"Internal Functions","title":"PowerModelsDistribution._math_edge_elements","text":"list of edge type elements in the engineering model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._math_node_elements","page":"Internal Functions","title":"PowerModelsDistribution._math_node_elements","text":"list of nodal type elements in the engineering model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._pmd_math_global_keys","page":"Internal Functions","title":"PowerModelsDistribution._pmd_math_global_keys","text":"list of multinetwork keys that belong at the root level\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._single_operators","page":"Internal Functions","title":"PowerModelsDistribution._single_operators","text":"single number operators in reverse polish notation\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#Base.delete!-Union{Tuple{T}, Tuple{T, String}} where T<:InfrastructureObject","page":"Internal Functions","title":"Base.delete!","text":"Base.delete! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.delete!-Union{Tuple{T}, Tuple{T, Symbol}} where T<:InfrastructureObject","page":"Internal Functions","title":"Base.delete!","text":"Base.delete! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.eltype-Tuple{T} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.eltype","text":"Base.eltype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.get-Union{Tuple{T}, Tuple{T, String, Any}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.get","text":"Base.get for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.getindex-Union{Tuple{T}, Tuple{T, String}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.getindex","text":"Base.getindex for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.getproperty-Tuple{Any, String}","page":"Internal Functions","title":"Base.getproperty","text":"Base.getproperty for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.haskey-Union{Tuple{T}, Tuple{T, String}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.haskey","text":"Base.haskey for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.isempty-Tuple{T} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.isempty","text":"Base.isempty for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.iterate-Union{Tuple{T}, Tuple{T, Int64}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.iterate","text":"Base.iterate for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.keys-Tuple{T} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.keys","text":"Base.keys for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.keytype-Tuple{InfrastructureModel}","page":"Internal Functions","title":"Base.keytype","text":"Base.keytype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.length-Tuple{T} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.length","text":"Base.length for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.merge!-Union{Tuple{T}, Tuple{T, T}} where T<:DssObject","page":"Internal Functions","title":"Base.merge!","text":"Base.merge! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:CapControlType","page":"Internal Functions","title":"Base.parse","text":"Parses dss capacitor control type into CapControlType enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:ConnConfig","page":"Internal Functions","title":"Base.parse","text":"Parses dss conn properties into ConnConfig enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:LoadModel","page":"Internal Functions","title":"Base.parse","text":"Parses dss load model into LoadModel enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:Status","page":"Internal Functions","title":"Base.parse","text":"Parses dss enabled property into Status enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:String","page":"Internal Functions","title":"Base.parse","text":"parser to pass through String\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{subtype}, Tuple{Type{T}, String}} where {subtype, T<:Matrix{subtype}}","page":"Internal Functions","title":"Base.parse","text":"parses a dss type matrix into Matrix{T}\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{subtype}, Tuple{Type{T}, String}} where {subtype, T<:Vector{subtype}}","page":"Internal Functions","title":"Base.parse","text":"parses a dss type vector into Vector{T}\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.setindex!-Union{Tuple{T}, Tuple{U}, Tuple{T, U, String}} where {U, T<:Union{InfrastructureObject, InfrastructureModel}}","page":"Internal Functions","title":"Base.setindex!","text":"Base.setindex! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.setproperty!-Tuple{Any, String, Any}","page":"Internal Functions","title":"Base.setproperty!","text":"Base.setproperty! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.setproperty!-Tuple{DssObject, String, String, Type}","page":"Internal Functions","title":"Base.setproperty!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.show-Union{Tuple{T}, Tuple{IO, MIME{Symbol(\"text/plain\")}, T}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.show","text":"Base.show variant for InfrastructureModel,InfrastructureObject to make them Dict-like\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.show-Union{Tuple{T}, Tuple{IO, T}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.show","text":"Base.show variant for InfrastructureModel,InfrastructureObject to make them Dict-like\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.summary-Union{Tuple{T}, Tuple{IO, T}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.summary","text":"Base.summary for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.valtype-Tuple{T} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.valtype","text":"Base.valtype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{Char}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for Char\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{ConnConfig}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for ConnConfig enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{Dispatchable}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for Dispatchable enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{LoadModel}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for LoadModel enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{ShuntModel}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for ShuntModel enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{Status}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for Status enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{String}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for String\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{SwitchState}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for SwitchState enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{JuMP.Containers.DenseAxisArray{var\"#s1566\", 1, Ax, L} where {var\"#s1566\", Ax, L<:Tuple{JuMP.Containers._AxisLookup}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for generic dense axis arrays\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{JuMP.Containers.DenseAxisArray{var\"#s1566\", 1, Ax, L} where {var\"#s1566\"<:JuMP.GenericAffExpr, Ax, L<:Tuple{JuMP.Containers._AxisLookup}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) generic affine expressions\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{JuMP.Containers.DenseAxisArray{var\"#s1566\", 1, Ax, L} where {var\"#s1566\"<:JuMP.NonlinearExpression, Ax, L<:Tuple{JuMP.Containers._AxisLookup}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) nonlinear expressions\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{JuMP.Containers.DenseAxisArray{var\"#s1566\", 1, Ax, L} where {var\"#s1566\"<:JuMP.VariableRef, Ax, L<:Tuple{JuMP.Containers._AxisLookup}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) variables\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{JuMP.Containers.DenseAxisArray{var\"#s1566\", 1, Ax, L} where {var\"#s1566\"<:Number, Ax, L<:Tuple{JuMP.Containers._AxisLookup}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) constants\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{LinearAlgebra.Symmetric{JuMP.VariableRef, Matrix{JuMP.VariableRef}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) constants\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.solution_preprocessor-Tuple{AbstractUnbalancedPowerModel, Dict}","page":"Internal Functions","title":"InfrastructureModels.solution_preprocessor","text":"Definition of the default solution preprocessor for PowerModelsDistribution\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._add_eng_obj!-Tuple{Dict{String}, String, Any, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._add_eng_obj!","text":"add engineering data object to engineering data model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._add_gen_cost_model!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._add_gen_cost_model!","text":"convert cost model names\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._add_implicit_absolute_bounds!-Tuple{Any, Vector}","page":"Internal Functions","title":"PowerModelsDistribution._add_implicit_absolute_bounds!","text":"When a terminal is grounded, any pairwise bounds it occurs in imply an absolute bound for the other terminal in the pair. This method converts such pairwise bounds to absolute ones.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._add_unused_kwargs!-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._add_unused_kwargs!","text":"adds kwargs that were specified but unused by the required defaults to the component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._adjust_line_limits!-Tuple{Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._adjust_line_limits!","text":"_adjust_line_limits!(data_eng::Dict{String,<:Any}, mult::Real)\n\nMultiplies limits (sm_ub and/or cm_ub) on line objects (line, linecode, switch) by a multiplier mult\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._adjust_small_line_admittances!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._adjust_small_line_admittances!","text":"_adjust_small_line_admittances!(data_eng::Dict{String,<:Any}; min_admittance_val::Real=1e-2, replace_admittance_val::Real=0.0)\n\nReplaces admittances (gfr, gto, bfr, bto) on lines, linecodes, and switches lower than min_admittance_val with replace_admittance_val.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._adjust_small_line_impedances!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._adjust_small_line_impedances!","text":"_adjust_small_line_impedances!(data_eng::Dict{String,<:Any}; min_impedance_val::Real=1e-2, replace_impedance_val::Real=0.0)\n\nReplaces impedances (rs, xs) on lines, linecodes, and switches lower than min_impedance_val with replace_impedance_val.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._adjust_small_line_lengths!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._adjust_small_line_lengths!","text":"_adjust_small_line_lengths!(data_eng::Dict{String,<:Any}; min_length_val::Real=25.0, replace_length_val::Real=0.0)\n\nReplaces length on lines, switches lower than min_length_val with replace_length_val.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._adjust_transformer_limits!-Tuple{Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._adjust_transformer_limits!","text":"_adjust_transformer_limits!(data_eng::Dict{String,<:Any}, mult::Real)\n\nMultiplies limits (sm_ub and/or cm_ub) on transformer objects by a multiplier mult\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._admittance_conversion-Tuple{Dict{String}, Dict{String}, String}","page":"Internal Functions","title":"PowerModelsDistribution._admittance_conversion","text":"converts admittance by multiplying by 2πωl\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_filter!-Tuple{Dict{String}, Vector{String}, Int64, Union{BitArray, Array}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_filter!","text":"Filters out values of a vector or matrix for certain properties (transformer winding variant)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_filter!-Tuple{Dict{String}, Vector{String}, Union{BitArray, Array}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_filter!","text":"Filters out values of a vector or matrix for certain properties\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_func_vals-Tuple{Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._apply_func_vals","text":"helper to apply function values\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_kron_reduction!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_kron_reduction!","text":"_apply_kron_reduction!(data_eng::Dict{String,<:Any}; kr_phases::Union{Vector{Int},Vector{String}}=[1,2,3], kr_neutral::Union{Int,String}=4)\n\nApplies a Kron Reduction to the network, reducing out the kr_neutral, leaving only the kr_phases\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_linecode!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_linecode!","text":"applies a linecode to a line in preparation for converting to mathematical model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_phase_projection!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_phase_projection!","text":"_apply_phase_projection!(data_eng::Dict{String,<:Any})\n\npad matrices and vectors to max number of conductors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_phase_projection_delta!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_phase_projection_delta!","text":"_apply_phase_projection_delta!(data_eng::Dict{String,<:Any})\n\nphase projection for components where unprojected states are not yet supported (delta configurations).\n\nSee apply_phase_projection!\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:DssLinegeometry","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:DssObject","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:DssRegcontrol","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:Union{DssGenerator, DssLoad, DssPvsystem, DssStorage}","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:Union{DssGrowthshape, DssLoadshape, DssSpectrum, DssXycurve}","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:Union{DssTransformer, DssXfmrcode}","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}}} where T<:DssOptions","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_voltage_angle_difference_bounds!","page":"Internal Functions","title":"PowerModelsDistribution._apply_voltage_angle_difference_bounds!","text":"_apply_voltage_angle_difference_bounds!(eng::Dict{String,<:Any}, vad::Real=5.0)\n\nApplies voltage angle difference bound given by vad::Real in degrees (i.e., the allowed drift of angle from one end of a line to another) to all lines. By default, vad=5.0.\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._apply_voltage_bounds!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_voltage_bounds!","text":"_apply_voltage_bounds!(data_eng::Dict{String,<:Any}; vm_lb::Union{Real,Missing}=0.9, vm_ub::Union{Real,Missing}=1.1)\n\nadd voltage bounds to all buses based on per-unit upper (vm_ub) and lower (vm_lb), scaled by the bus's voltage based\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_xfmrcode!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_xfmrcode!","text":"applies a xfmrcode to a transformer in preparation for converting to mathematical model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._bank_transformers!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._bank_transformers!","text":"Combines transformers with 'bank' keyword into a single transformer\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._barrel_roll-Union{Tuple{T}, Tuple{Vector{T}, Int64}} where T","page":"Internal Functions","title":"PowerModelsDistribution._barrel_roll","text":"shifts a vector by shift spots to the left\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._biggest_der-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._biggest_der","text":"finds the largest active generation asset (gen, storage) in an island\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._biggest_generator-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._biggest_generator","text":"find the largest active generator in a collection of generators\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._bts_to_start_voltage-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._bts_to_start_voltage","text":"_bts_to_start_voltage(\n dm::Dict\n)\n\nAssigns the initialisation voltages to appropriate bus terminals.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_bus_shunt_matrices-Tuple{AbstractUnbalancedPowerModel, Int64, Vector{Int64}, Vector{<:Tuple{Int64, Vector{Int64}}}}","page":"Internal Functions","title":"PowerModelsDistribution._build_bus_shunt_matrices","text":"helper function to build bus shunt matrices for power balance constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_loss_model!-Tuple{Dict{String}, String, Vector{String}, Vector{Float64}, Dict{Tuple{Int64, Int64}, ComplexF64}, ComplexF64, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._build_loss_model!","text":"loss model builder for transformer decomposition\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_mn_opb-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_mn_opb","text":"_build_mc_mn_opb(pm::AbstractUnbalancedPowerModel)\n\nConstructor for Optimal Power Balance\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_osw-Tuple{AbstractUBFModels}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_osw","text":"constructor for branch flow osw\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_osw-Tuple{AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_osw","text":"constructor for OSW in current-voltage variable space\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_osw-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_osw","text":"Constructor for Optimal Switching\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_osw_mi-Tuple{AbstractUBFModels}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_osw_mi","text":"_build_mc_osw_mi(pm::AbstractUBFModels)\n\nconstructor for mixed-integer branch flow osw\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_osw_mi-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_osw_mi","text":"Constructor for Optimal Switching\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_time_series_reference!-Tuple{Dict{String}, Union{DssGenerator, DssLoad, DssPvsystem, DssStorage}, OpenDssDataModel, String, String, String}","page":"Internal Functions","title":"PowerModelsDistribution._build_time_series_reference!","text":"helper function to properly reference time series variables from opendss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_branch_current_max-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_branch_current_max","text":"Returns a total (shunt+series) current magnitude bound for the from and to side of a branch. The total power rating also implies a current bound through the lower bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_branch_current_max_frto-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_branch_current_max_frto","text":"Returns a total (shunt+series) current magnitude bound for the from and to side of a branch. The total power rating also implies a current bound through the lower bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_branch_power_max-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_branch_power_max","text":"Returns a total (shunt+series) power magnitude bound for the from and to side of a branch. The total current rating also implies a current bound through the upper bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_branch_power_max_frto-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_branch_power_max_frto","text":"Returns a total (shunt+series) power magnitude bound for the from and to side of a branch. The total current rating also implies a current bound through the upper bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_branch_series_current_max-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_branch_series_current_max","text":"Returns a valid series current magnitude bound for a branch.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_bus_vm_ll_bounds-Tuple{Dict}","page":"Internal Functions","title":"PowerModelsDistribution._calc_bus_vm_ll_bounds","text":"Returns bounds in line-to-line bounds on the voltage magnitude. If these are not part of the problem specification, then a valid upper bound is implied by the line-to-neutral bounds, but a lower bound (greater than zero) is not. Therefore, a default lower bound is then used, specified by the keyword argument vdmin_eps. The returned bounds are for the pairs 1->2, 2->3, 3->1\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_comp_lines-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_comp_lines","text":"_calc_comp_lines(component::Dict{String,<:Any})\n\ncompute lines in m and b from from pwl cost models\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_connected_components_eng-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._calc_connected_components_eng","text":"computes the connected components of the network graph returns a set of sets of bus ids, each set is a connected component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_connected_components_math-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_connected_components_math","text":"computes the connected components of the network graph returns a set of sets of bus ids, each set is a connected component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_gen_current_max-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_gen_current_max","text":"Returns a current magnitude bound for the generators.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_ground_shunt_admittance_matrix-Union{Tuple{T}, Tuple{Vector{Int64}, Matrix{T}, Int64}} where T<:Number","page":"Internal Functions","title":"PowerModelsDistribution._calc_ground_shunt_admittance_matrix","text":"Given a set of terminals 'cnds' with associated shunt admittance 'Y', this method will calculate the reduced admittance matrix if terminal 'ground' is grounded.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_load_current_magnitude_bounds-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_load_current_magnitude_bounds","text":"Returns magnitude bounds for the current going through the load.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_load_current_max-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_load_current_max","text":"Returns a magnitude bound for the current going through the load.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_load_pq_bounds-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_load_pq_bounds","text":"Calculates lower and upper bounds for the loads themselves (not the power withdrawn at the bus).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_load_vbounds-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_load_vbounds","text":"Returns the voltage magnitude bounds for the individual load elements in a multiphase load. These are inferred from vmin/vmax for wye loads and from calcbusvmll_bounds for delta loads.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_max_cost_index-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_max_cost_index","text":"_calc_max_cost_index(data::Dict{String,<:Any})\n\nComputes maximum cost index of subnetworks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_shunt-Tuple{Vector{Int64}, Vector{Int64}, Vector{<:Union{Real, Vector{<:Real}}}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_shunt","text":"Given a set of addmittances 'y' connected from the conductors 'fcnds' to the conductors 'tcnds', this method will return a list of conductors 'cnd' and a matrix 'Y', which will satisfy I[cnds] = Y*V[cnds].\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_transformer_current_max_frto-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_transformer_current_max_frto","text":"Returns a current magnitude bound for the from and to side of a transformer. The total power rating also implies a current bound through the lower bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_transformer_power_ub_frto-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_transformer_power_ub_frto","text":"Returns a power magnitude bound for the from and to side of a transformer. The total current rating also implies a current bound through the upper bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_voltage_bases-Tuple{Dict{String}, Dict{String, <:Real}, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_voltage_bases","text":"_calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real}, edge_elements::Vector{String})::Tuple{Dict,Dict}\n\nCalculates voltage bases for each voltage zone for buses and branches given a list of edge_elements\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cc_dfs-Union{Tuple{T}, Tuple{T, Dict{T, Vector{T}}, Dict{T, Set{T}}, Set{T}}} where T<:Union{Int64, String}","page":"Internal Functions","title":"PowerModelsDistribution._cc_dfs","text":"DFS on a graph\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_branch_loops-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_branch_loops","text":"checks that all branches connect two distinct buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_bus-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_bus","text":"bus data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_bus_and_terminals","page":"Internal Functions","title":"PowerModelsDistribution._check_bus_and_terminals","text":"checks bus_name exists and has terminals\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._check_configuration_infer_dim-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_configuration_infer_dim","text":"checks the connection configuration and infers the dimensions of the connection (number of connected terminals)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_connectivity-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_connectivity","text":"checks connectivity of object\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_connectivity-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_connectivity","text":"checks that all buses are unique and other components link to valid buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_eng_component_dtypes-Tuple{Dict{String}, String, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_eng_component_dtypes","text":"checks that an engineering model component has the correct data types\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_equal-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_equal","text":"checks if data structures are equivalent, and if not, will enumerate the differences\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_generator-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_generator","text":"generator data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_has_keys-Tuple{Dict{String}, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_has_keys","text":"checks that a component has fields\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_has_size-Tuple{Dict{String}, Vector{String}, Union{Int64, Tuple}}","page":"Internal Functions","title":"PowerModelsDistribution._check_has_size","text":"check that fields has size data_size\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_line-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_line","text":"line data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_linecode-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_linecode","text":"linecode data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_load-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_load","text":"load data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_load_needs_cone-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_load_needs_cone","text":"Returns a Bool, indicating whether the convex hull of the voltage-dependent relationship needs a cone inclusion constraint.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_same_size-Tuple{Dict{String}, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_same_size","text":"check that all data in fields have the same size\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_shunt-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_shunt","text":"shunt data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_shunt_capacitor-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_shunt_capacitor","text":"shunt capacitor data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_transformer-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_transformer","text":"Transformer, n-windings three-phase lossy data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_var_keys-NTuple{4, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_var_keys","text":"checks if a sufficient number of variables exist for the given keys collection\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_voltage_source-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_voltage_source","text":"voltage source data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._collect_nw_bus_lookups!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._collect_nw_bus_lookups!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._collect_nw_maps!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._collect_nw_maps!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Dyg-Tuple{Vector{<:Real}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Dyg","text":"composeyprimbankedidealtransformersDyg( ts::Vector, npairsfr::Tuple, npairsto::Tuple, ppm::Float )\n\nModifies ideal delta-wye_grounded transformers to avoid singularity error, through the ppm value, inspired by OpenDSS.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Ygyg-Tuple{Vector{<:Real}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Ygyg","text":"composeyprimbankedidealtransformersYgyg( ts::Vector, npairsfr::Tuple, npairsto::Tuple, ppm::Float )\n\nModifies ideal wyegrounded-wyegrounded transformers to avoid singularity error, through the ppm value, inspired by OpenDSS.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Yy-Tuple{Vector{<:Real}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Yy","text":"_compose_yprim_banked_ideal_transformers_Yy(\n ts::Vector,\n npairs_fr::Tuple,\n npairs_to::Tuple,\n ppm::Float\n)\n\nModifies ideal wye-wye transformers to avoid singularity error, through the ppm value, inspired by OpenDSS.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compute_Uv-Tuple{PowerFlowData}","page":"Internal Functions","title":"PowerModelsDistribution._compute_Uv","text":"_compute_Uv(\n pfd::PowerFlowData,\n max_iter::Int,\n stat_tol::Float,\n verbose::Bool\n)\n\nComputes a nonlinear AC power flow in rectangular coordinates based on the admittance matrix of the network data using the fixed-point current injection method (See https://arxiv.org/abs/2305.04405). Returns a solution data structure in PowerModelsDistribution Dict format.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compute_bus_type-Tuple{Int64, Int64, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._compute_bus_type","text":"computes the bus type based on existing bustype, the status of the generation object, and the controlmode\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compute_mc_pf-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._compute_mc_pf","text":"_compute_mc_pf(\n data_math::Dict{String,<:Any};\n v_start::Union{Dict{<:Any,<:Any},Missing}=missing,\n explicit_neutral::Bool=false,\n max_iter::Int=100,\n stat_tol::Real=1E-8,\n verbose::Bool=false\n)::Dict{String,Any}\n\nComputes native power flow and outputs the result dict (See https://arxiv.org/abs/2305.04405).\n\nAbbreviations:\n\nntype: node type (variable, fixed, grounded, virtual)\nbts: bus-terminals for the component\nns: nodes\nvns: virtual nodes\nnr_vns: number of virtual nodes\ny_prim: primitive admittance matrix for the component\ncnlfunc: nonlinear compensation current function handle for the component\nctotsfunc: total current function handle for the component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._convert_grounding-NTuple{4, Any}","page":"Internal Functions","title":"PowerModelsDistribution._convert_grounding","text":"lossy grounding to perfect grounding and shunts\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._convert_model_to_dict-Tuple{Union{InfrastructureObject, InfrastructureModel}}","page":"Internal Functions","title":"PowerModelsDistribution._convert_model_to_dict","text":"Helper function to convert InfrastructureModel,InfrastructureObject into Dict{String,Any}\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_branch_directions!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._correct_branch_directions!","text":"checks that all parallel branches have the same orientation\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_bus_types!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._correct_bus_types!","text":"checks bus types are suitable for a power flow study, if not, fixes them. the primary checks are that all type 2 buses (i.e., PV) have a connected and active generator and there is a single type 3 bus (i.e., slack bus) with an active connected generator. Assumes that the network is a single connected component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_cost_function!-NTuple{5, Any}","page":"Internal Functions","title":"PowerModelsDistribution._correct_cost_function!","text":"throws warnings if cost functions are malformed\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_cost_functions!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._correct_cost_functions!","text":"throws warnings if cost functions are malformed\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_mc_thermal_limits!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._correct_mc_thermal_limits!","text":"_correct_mc_thermal_limits!(data::Dict{String,<:Any})\n\nchecks that each branch has non-negative thermal ratings and removes zero thermal ratings\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_mc_voltage_angle_differences!","page":"Internal Functions","title":"PowerModelsDistribution._correct_mc_voltage_angle_differences!","text":"_correct_mc_voltage_angle_differences!(data::Dict{String,<:Any}, default_pad::Real=deg2rad(10.0))\n\nchecks that voltage angle differences are within 90 deg., if not tightens to a default of 10deg (adjustable)\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_branch_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_branch_interface","text":"_cpf_branch_interface(\n branch::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nBranch component interface outputs branch primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.1).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_generator_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_generator_interface","text":"_cpf_generator_interface(\n gen::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nGenerator component interface outputs generator primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.4 and 4.5).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_load_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_load_interface","text":"_cpf_load_interface(\n load::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nLoad component interface outputs load primitive Y matrix (See https://arxiv.org/abs/2305.04405 Sections 4.4 and 4.5).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_shunt_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_shunt_interface","text":"_cpf_shunt_interface(\n shunt::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nShunt component interface outputs shunt primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.2).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_storage_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_storage_interface","text":"_cpf_storage_interface(\n storage::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nStorage component interface outputs storage primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.4 and 4.5).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_switch_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_switch_interface","text":"_cpf_switch_interface(\n switch::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nBranch component interface outputs branch primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.2).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_transformer_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_transformer_interface","text":"_cpf_transformer_interface(\n tr::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nTransformer component interface outputs transformer primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.3).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._discover_buses-Tuple{OpenDssDataModel}","page":"Internal Functions","title":"PowerModelsDistribution._discover_buses","text":"Discovers all of the buses (not separately defined in OpenDSS), from 'lines'\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._discover_terminals!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._discover_terminals!","text":"discovers all terminals in the network\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._discover_voltage_zones-Tuple{Dict{String}, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._discover_voltage_zones","text":"discover_voltage_zones(data_model::Dict{String,<:Any}, edge_elements::Vector{String})::Dict{Int,Set{Any}}\n\nfinds voltage zones by walking through the network and analyzing the transformers\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_bus!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_bus!","text":"Adds nodes as buses to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_buscoords!-Tuple{Dict{String}, OpenDssDataModel}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_buscoords!","text":"Parses buscoords lon,lat (if present) into their respective buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_capacitor!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_capacitor!","text":"Adds capacitors to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_capcontrol!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_capcontrol!","text":"Adds capcontrol to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_generator!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_generator!","text":"Adds generators to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_line!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_line!","text":"Adds lines to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_linecode!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_linecode!","text":"Adds lines to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_load!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_load!","text":"Adds loads to data_eng from data_dss\n\nConstant can still be scaled by other settings, fixed cannot Note that in the current feature set, fixed therefore equals constant\n\n1: Constant P and Q, default 2: Constant Z 3: Constant P and quadratic Q 4: Exponential 5: Constant I 6: Constant P and fixed Q\n\n7: Constant P and quadratic Q (i.e., fixed reactance)\n\n8: ZIP\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_loadshape!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_loadshape!","text":"Adds loadshapes to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_pvsystem!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_pvsystem!","text":"Adds pvsystems to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_reactor!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_reactor!","text":"Adds shunt reactors to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_regcontrol!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_regcontrol!","text":"Adds regcontrol to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_storage!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_storage!","text":"Adds storage to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_transformer!-Tuple{Dict{String}, OpenDssDataModel, Bool, String}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_transformer!","text":"Adds transformers to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_vsource!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_vsource!","text":"Adds vsources to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_xfmrcode!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_xfmrcode!","text":"Adds transformers to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._fill_matrix!-Union{Tuple{T}, Tuple{Matrix{T}, Vector{Vector{String}}}} where T","page":"Internal Functions","title":"PowerModelsDistribution._fill_matrix!","text":"Helper function for Base.parse for dss matrices\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._fill_vector!-Union{Tuple{T}, Tuple{Vector{T}, Vector{String}}} where T","page":"Internal Functions","title":"PowerModelsDistribution._fill_vector!","text":"Helper function for Base.parse for dss vectors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._fix_arrays!-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._fix_arrays!","text":"helper function to fix matrices (from vector of vectors) and vector dtypes\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._fix_dtypes!-Tuple{Dict}","page":"Internal Functions","title":"PowerModelsDistribution._fix_dtypes!","text":"recursive function to fix data types from data imported from json\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._fix_enums!-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._fix_enums!","text":"helper function to convert stringified enums\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._fix_nulls!-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._fix_nulls!","text":"helper function to fix null values from json (usually Inf or NaN)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._generate_short_property_names-Tuple{}","page":"Internal Functions","title":"PowerModelsDistribution._generate_short_property_names","text":"Helper function to generate 'short' property names\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._generate_vm_pairs-Tuple{Vector, ConnConfig, Real, Real}","page":"Internal Functions","title":"PowerModelsDistribution._generate_vm_pairs","text":"Generates pairwise bounds for oneport components.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_cncable_data-Tuple{OpenDssDataModel, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._get_cncable_data","text":"gets concentric neutral cable data for line geometry\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_complete_conductor_set-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._get_complete_conductor_set","text":"finds maximal set of ungrounded phases\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_conductor_indicator-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._get_conductor_indicator","text":"returns the conductor indicator for a ENGINEERING component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_conductors_ordered-Tuple{AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._get_conductors_ordered","text":"Returns an ordered list of defined conductors. If ground=false, will omit any 0\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_delta_transformation_matrix-Tuple{Int64}","page":"Internal Functions","title":"PowerModelsDistribution._get_delta_transformation_matrix","text":"creates a delta transformation matrix\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_geometry_data-Tuple{OpenDssDataModel, String}","page":"Internal Functions","title":"PowerModelsDistribution._get_geometry_data","text":"gets line geometry data for line, including applying line spacing if specified\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_idxs-Tuple{Vector, Vector}","page":"Internal Functions","title":"PowerModelsDistribution._get_idxs","text":"Given a vector and a list of elements to find, this method will return a list of the positions of the elements in that vector.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_ilocs-Tuple{Vector, Any}","page":"Internal Functions","title":"PowerModelsDistribution._get_ilocs","text":"get locations of terminal in connections list\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssEdgeObject}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssGictransformer}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssLinecode}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssNodeObject}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssTransformer}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssXfmrcode}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{Union{DssControlObject, DssDataObject}}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases-Tuple{AbstractString, AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases","text":"returns number of phases implied by a two-bus (edge) object\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases-Tuple{AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases","text":"returns number of phases implied by a single-bus (node) object\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases-Tuple{Vector{<:AbstractString}}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases","text":"returns number of phases implied by a transformer object\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_line_impedance_parameters-Tuple{Dict{String, Any}, Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._get_line_impedance_parameters","text":"Obtain impedance parameters, directly or from linecode.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_math_obj-Tuple{Dict{String}, String}","page":"Internal Functions","title":"PowerModelsDistribution._get_math_obj","text":"returns component from the mathematical data model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_raw_fields-Tuple{Vector{Pair{String, String}}}","page":"Internal Functions","title":"PowerModelsDistribution._get_raw_fields","text":"Helper function to pull the specified properties from dss property pairs\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_spacing_data-Tuple{OpenDssDataModel, String}","page":"Internal Functions","title":"PowerModelsDistribution._get_spacing_data","text":"get line spacing data for line or line geometry\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_tight_absolute_voltage_magnitude_bounds-Tuple{Dict}","page":"Internal Functions","title":"PowerModelsDistribution._get_tight_absolute_voltage_magnitude_bounds","text":"Returns the tightest set of absolute voltage magnitude bounds, removing looser bounds which are implied by the tighter ones.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_tight_pairwise_voltage_magnitude_bounds-Tuple{Dict}","page":"Internal Functions","title":"PowerModelsDistribution._get_tight_pairwise_voltage_magnitude_bounds","text":"Returns the tightest set of pairwise voltage magnitude bounds, removing looser bounds which are implied by the tighter ones.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_tscable_data-Tuple{OpenDssDataModel, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._get_tscable_data","text":"gets tape shielded cable data for line geometry\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_v-Tuple{PowerFlowData, Vector{ComplexF64}, Union{Int64, Tuple{Int64, Int64}}}","page":"Internal Functions","title":"PowerModelsDistribution._get_v","text":"_get_v(\n pfd::struct,\n Vp::Vector,\n n::Union{Tuple, Int}\n)\n\nCalculates the voltage from PowerFlowData struct.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_wire_data-Tuple{OpenDssDataModel, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._get_wire_data","text":"gets overhead wire data for line geometry\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._has_nl_expression-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._has_nl_expression","text":"helper to determine if expession has any Nonlinear terms\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._impedance_conversion-Tuple{Dict{String}, Dict{String}, String}","page":"Internal Functions","title":"PowerModelsDistribution._impedance_conversion","text":"converts impendance in Ohm/m by multiplying by length\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._import_all!-Tuple{Dict{String}, DssObject}","page":"Internal Functions","title":"PowerModelsDistribution._import_all!","text":"creates a dss dict inside object that imports all items in prop_order from dss_obj\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._infer_int_dim-Tuple{Vector, ConnConfig, Any}","page":"Internal Functions","title":"PowerModelsDistribution._infer_int_dim","text":"infer the internal dimension of a winding, load or generator based on the connections and the configuration\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._infer_int_dim_transformer-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._infer_int_dim_transformer","text":"infer the internal dimension for a transformer (only in the MATHEMATICAL data model format)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._infer_int_dim_unit-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._infer_int_dim_unit","text":"infer the internal dimension for a unit, i.e. any one-port component with connections and configuration properties\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._infer_neutral_terminals-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._infer_neutral_terminals","text":"Return a list of all implicit neutrals as a list of bus-terminal pairs. This is done by starting from a list of all terminals which are either a.connected to the neutral of wye-connected components; b. or are grounded. This initial list is then expanded to all terminals which are galvanically connected to terminals in the initial list.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._infer_partial_property_name-Union{Tuple{T}, Tuple{AbstractString, T}} where T<:DssObject","page":"Internal Functions","title":"PowerModelsDistribution._infer_partial_property_name","text":"Helper function to infer a full property name from a partial one\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._init_base_components!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._init_base_components!","text":"initializes the base components that are expected by powermodelsdistribution in the mathematical model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._init_dss_data-Tuple{}","page":"Internal Functions","title":"PowerModelsDistribution._init_dss_data","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._init_math_obj-Tuple{String, Any, Dict{String}, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._init_math_obj","text":"initializes the base math object of any type, and copies any one-to-one mappings\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._init_unmap_eng_obj!-Tuple{Dict{String}, String, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._init_unmap_eng_obj!","text":"initialization actions for unmapping\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_after-Tuple{Vector{Pair{String, String}}, String, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._is_after","text":"helper function to determine if property1 appears after property2 in the property pair list for objects that have windings\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_after-Tuple{Vector{Pair{String, String}}, String, String}","page":"Internal Functions","title":"PowerModelsDistribution._is_after","text":"helper function to determine if property1 appears after property2 in the property pair list\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_loadshape_split-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._is_loadshape_split","text":"checks if loadshape has both pmult and qmult\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_loadshape_split-Tuple{DssLoadshape}","page":"Internal Functions","title":"PowerModelsDistribution._is_loadshape_split","text":"checks if loadshape has both pmult and qmult\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_multiport_component-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._is_multiport_component","text":"Indicates whether the passed component has a multiport structure (e.g. transformers).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_oneport_component-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._is_oneport_component","text":"Indicates whether the passed component has a oneport structure (e.g. loads and generators).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_twoport_component-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._is_twoport_component","text":"Indicates whether the passed component has a twoport structure (e.g. lines and switches).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._isa_dss_array-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._isa_dss_array","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._isa_rpn-Tuple{AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._isa_rpn","text":"detects if expr is Reverse Polish Notation expression\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron-Union{Tuple{T}, Tuple{Matrix{T}, Int64}} where T<:Complex","page":"Internal Functions","title":"PowerModelsDistribution._kron","text":"_kron(Z::Matrix{T}, nconds::Int)::Matrix{T} where T <: Complex\n\nKron reduces impedance matrix down to size (nconds, nconds)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron-Union{Tuple{T}, Tuple{Matrix{T}, Matrix{T}, Int64}} where T<:Complex","page":"Internal Functions","title":"PowerModelsDistribution._kron","text":"_kron(Z::Matrix{T}, Y::Matrix{T}, nconds::Int)::Tuple{Matrix{T}, Matrix{T}} where T <: Complex\n\nKron reduces impedance and shunt admittance matrices down to size (nconds, nconds)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_branch!-Tuple{Dict{String}, Vector{String}, Vector{String}, Vector{Int64}, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_branch!","text":"performs kron reduction on branch\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_branch-Tuple{Vector{Matrix}, Vector{Matrix}, Vector{Int64}, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_branch","text":"performs kron reduction on branch - helper function\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_implicit_neutrals!-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_implicit_neutrals!","text":"_kron_reduce_implicit_neutrals!(data_eng::Dict{String,Any})::Dict{String,Any}\n\nKron-reduce all (implied) neutral conductors of lines, switches and shunts, and remove any terminals which become unconnected. A line or switch conductor is considered as a neutral conductor if it is connected between two neutral terminals. A terminal is a neutral terminals if it is galvanically connected (i.e. through a line or switch) to a grounded terminal, or the neutral conductor of a wye-connected component.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_linecode!-Tuple{Any, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_linecode!","text":"Kron-reduce specified neutral conductors of a linecode.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_series_impedance-Tuple{Matrix, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_series_impedance","text":"Return the Kron-reduction of the specified neutral conductors of a series impedance matrix.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_shunt_addmittance-Tuple{Matrix, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_shunt_addmittance","text":"Return the Kron-reduction of the specified neutral conductors of a shunt addmittance matrix.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._line_reverse!-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._line_reverse!","text":"Reverse the direction of a line.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._load_expmodel_params-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._load_expmodel_params","text":"_load_expmodel_params(load::Dict{String,<:Any}, bus::Dict{String,<:Any})\n\nReturns the exponential load model parameters for a load. For an exponential load it simply returns certain data model properties, whilst for constantpower, constantcurrent and constant_impedance it returns the equivalent exponential model parameters.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._loop_line_to_shunt-Tuple{Dict{String, Any}, AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._loop_line_to_shunt","text":"Create an equivalent shunt for a line which connects to a single bus.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_filtered_logger-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._make_filtered_logger","text":"_make_filtered_logger(level::Logging.LogLevel)\n\nHelper function to create the filtered logger for PMD\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_full_matrix_variable-Union{Tuple{T}, Tuple{Vector{T}, Vector{T}, Vector{T}}} where T","page":"Internal Functions","title":"PowerModelsDistribution._make_full_matrix_variable","text":"makes a full matrix variable from a diagonal, and lower and upper triangular vectors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_hermitian_matrix_variable-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._make_hermitian_matrix_variable","text":"makes a hermitian matrix variable from diagonal, and lower and upper triangular vectors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_lossless!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._make_lossless!","text":"_make_lossless!(data_eng::Dict{String,<:Any})\n\nRemove parameters from objects with loss models to make them lossless. This includes linecodes, lines, switches, xfmrcodes, transformers, voltage sources, generators, solar, and storage, which all have (or will have in the future), loss model parameters that can be omitted.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_math_per_unit!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._make_math_per_unit!","text":"converts the MATHEMATICAL model to per unit from SI\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_matrix_variable_element-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Int64, Int64}} where T","page":"Internal Functions","title":"PowerModelsDistribution._make_matrix_variable_element","text":"_make_matrix_variable_element(\n model::JuMP.Model,\n indices::Array{T,1},\n n::Int,\n m::Int;\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n varname::String=\"\"\n) where T\n\nSometimes we want to bound only a subset of the elements of a matrix variable. For example, an unbounded Hermitian variable usually still has a lower bound of zero on the real diagonal elements. When there is a mix of bounded and unbounded elements, the unboundedness is encoded as 'Inf' and '-Inf' in the bound parameters. This cannot be passed directlty to JuMP, because it would lead to an error in Mosek for example. Instead, this method checks whether all bounds for an element (n,m) are Inf, and if so, does not pass a bound to JuMP.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_multiconductor!-Tuple{Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._make_multiconductor!","text":"Hacky helper function to transform single-conductor network data, from, e.g., matpower/psse, into multi-conductor data\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_multinetwork_eng-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._make_multinetwork_eng","text":"Expands an ENGINEERING data structure into a multinetwork, see make_multinetwork\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_multinetwork_math-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._make_multinetwork_math","text":"Expands an MATHEMATICAL data structure into a multinetwork, see make_multinetwork\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_conductor_ids!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_conductor_ids!","text":"helper function to map non integer conductor ids into integers\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math","text":"base function for converting engineering model to mathematical model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_bus!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_bus!","text":"converts engineering bus components into mathematical bus components\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_generator!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_generator!","text":"converts engineering generators into mathematical generators\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_line!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_line!","text":"converts engineering lines into mathematical branches\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_load!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_load!","text":"converts engineering load components into mathematical load components\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_nw!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_nw!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_shunt!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_shunt!","text":"converts engineering generic shunt components into mathematical shunt components\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_solar!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_solar!","text":"converts engineering solar components into mathematical generators\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_storage!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_storage!","text":"converts engineering storage into mathematical storage\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_switch!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._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#PowerModelsDistribution._map_eng2math_transformer!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_transformer!","text":"converts engineering n-winding transformers into mathematical ideal 2-winding lossless transformer branches and impedance branches to represent the loss model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_voltage_source!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._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#PowerModelsDistribution._map_math2eng_bus!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_bus!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_generator!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_generator!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_line!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_line!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_load!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_load!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_root!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_root!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_shunt!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_shunt!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_solar!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_solar!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_storage!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_storage!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_switch!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_switch!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_transformer!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_transformer!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_voltage_source!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_voltage_source!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._mat2ltrivec!-Union{Tuple{Union{Matrix{T}, LinearAlgebra.Symmetric{T, S} where S<:(AbstractMatrix{<:T})}}, Tuple{T}} where T","page":"Internal Functions","title":"PowerModelsDistribution._mat2ltrivec!","text":"matrix to lower triangular vector\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._mat2utrivec!-Union{Tuple{Union{Matrix{T}, LinearAlgebra.Symmetric{T, S} where S<:(AbstractMatrix{<:T})}}, Tuple{T}} where T","page":"Internal Functions","title":"PowerModelsDistribution._mat2utrivec!","text":"matrix to upper triangular vector\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._mat_mult_rm_nan-Tuple{Matrix, Union{LinearAlgebra.Adjoint, Matrix}}","page":"Internal Functions","title":"PowerModelsDistribution._mat_mult_rm_nan","text":"matrix multiplication removing NaN values\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._merge_bus_flows-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Vector, Vector}","page":"Internal Functions","title":"PowerModelsDistribution._merge_bus_flows","text":"Merges flow variables that enter the same terminals, i.e. multiple neutrals of an underground cable connected to same neutral terminal\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._merge_terminals!-Tuple{Dict{String, Any}, String, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._merge_terminals!","text":"Merge a terminal into another for a specified bus, i.e. as if they are short-ciruited.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._missing2false-Tuple{Union{Missing, Bool}}","page":"Internal Functions","title":"PowerModelsDistribution._missing2false","text":"Helper to convert \n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._nan2zero-Tuple{Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._nan2zero","text":"Replaces NaN values with zeros\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad","text":"gen connections adaptation of min fuel cost polynomial linquad objective\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad_switch-Tuple{AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad_switch","text":"Multiconductor adaptation of min fuel cost polynomial linquad objective\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad_switch","text":"gen connections adaptation of min fuel cost polynomial linquad objective\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_nl-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_nl","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_nl_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_nl_switch","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_connections!-Tuple{Dict{String}, String, Int64, Union{Vector{Int64}, Vector{String}}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_connections!","text":"adds conductors to connections during padding process, transformer winding variant\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_connections!-Tuple{Dict{String}, String, Union{Vector{Int64}, Vector{String}}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_connections!","text":"adds conductors to connections during padding process\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_properties!-Tuple{Dict{String}, Vector{String}, Int64, Vector{Int64}, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_properties!","text":"pads properties to have the total number of conductors for the whole system (transformer winding variant)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_properties!-Tuple{Dict{String}, Vector{String}, Vector{Int64}, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_properties!","text":"pads properties to have the total number of conductors for the whole system\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_properties_delta!-Tuple{Dict{String}, Vector{String}, Vector{Int64}, Int64, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_properties_delta!","text":"pads properties to have the total number of conductors for the whole system - delta connection variant\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_properties_delta!-Tuple{Dict{String}, Vector{String}, Vector{Int64}, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_properties_delta!","text":"pads properties to have the total number of conductors for the whole system - delta connection variant\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_array-Union{Tuple{T}, Tuple{Type{T}, AbstractString}} where T","page":"Internal Functions","title":"PowerModelsDistribution._parse_array","text":"helper function to parse reverse polish notation arrays\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_bus_id-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_bus_id","text":"Parses busnames as defined in OpenDSS, e.g. 'primary.1.2.3.0'\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_command_from_line-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_command_from_line","text":"_parse_command_from_line(line::String)::Tuple{String,String}\n\nParses the dss command from the line (if present), optionnally making the command set if implicitly used.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_csvfile-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_csvfile","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dblfile-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dblfile","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_buscoords!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_buscoords!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_buscoords-Tuple{IO}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_buscoords","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_clear!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_clear!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_compile!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_compile!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_disable!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_disable!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_edit!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_edit!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_enable!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_enable!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_latloncoords!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_latloncoords!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_more!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_more!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_new!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_new!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_redirect!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_redirect!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_set!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_set!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_setbusxy!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_setbusxy!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_matrix-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_matrix","text":"Helper function for Base.parse for dss matrices\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_obj_type_name-Tuple{AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_obj_type_name","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_vector-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_vector","text":"Helper function for Base.parse for dss vectors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_file_inside_mult!-Tuple{DssObject, String, String, String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_file_inside_mult!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_file_inside_shape_ref!-Tuple{DssObject, OpenDssDataModel, OpenDssRawDataModel, String, String, String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_file_inside_shape_ref!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_match_element-Tuple{RegexMatch, String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_match_element","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_pqcsvfile-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_pqcsvfile","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_rpn-Tuple{AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._parse_rpn","text":"helper function to parse reverse polish notation\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_rpn-Union{Tuple{T}, Tuple{Type{T}, AbstractString}} where T","page":"Internal Functions","title":"PowerModelsDistribution._parse_rpn","text":"parses Reverse Polish Notation expr\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_rpn-Union{Tuple{T}, Tuple{Type{T}, AbstractString}} where T<:(Vector)","page":"Internal Functions","title":"PowerModelsDistribution._parse_rpn","text":"helper function to parse reverse polish notation vectors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_sngfile-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_sngfile","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pmd_metafmt-Tuple{Base.CoreLogging.LogLevel, Vararg{Any, 5}}","page":"Internal Functions","title":"PowerModelsDistribution._pmd_metafmt","text":"_pmd_metafmt(level::Logging.LogLevel, _module, group, id, file, line)\n\nMetaFormatter for ConsoleLogger for PMD to adjust log message format\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._propagate_network_topology!-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._propagate_network_topology!","text":"_propagate_network_topology!(data::Dict{String,Any})\n\nhelper function to propagate bus status to any connected components\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_branch!-Tuple{Dict{String}, Vararg{Real, 4}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_branch!","text":"per-unit conversion for branches\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_bus!-Tuple{Dict{String}, Vararg{Real, 4}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_bus!","text":"per-unit conversion for buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_generator!-Tuple{Dict{String}, Real, Real, Real, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_generator!","text":"per-unit conversion for generators\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_load!-Tuple{Dict{String}, Vararg{Real, 4}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_load!","text":"per-unit conversion for loads\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_shunt!-Tuple{Dict{String}, Vararg{Real, 4}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_shunt!","text":"per-unit conversion for shunts\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_storage!-Tuple{Dict{String}, Real, Real, Real}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_storage!","text":"per-unit conversion for storage\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_switch!-Tuple{Dict{String}, Vararg{Real, 4}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_switch!","text":"per-unit conversion for switches\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_transformer_2w_ideal!-Tuple{Dict{String}, Vararg{Real, 5}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_transformer_2w_ideal!","text":"per-unit conversion for ideal 2-winding transformers\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._ref_add_connected_components!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._ref_add_connected_components!","text":"adds connected components for opb problem type\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._register_awaiting_ground!-Tuple{Dict{String}, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._register_awaiting_ground!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._remove_all_bounds!-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._remove_all_bounds!","text":"_remove_all_bounds!(data_eng; exclude::Vector{<:String}=String[\"energy_ub\"], exclude_asset_type::Vector{String}=String[])\n\nRemoves all fields ending in 'ub' or 'lb' that aren't required by the math model. Properties can be excluded from this removal with exclude::Vector{String}\n\nWhole asset types (e.g., \"line\") can be excluded using the keyword argument exclude_asset_type::Vector{String}\n\nBy default, \"energy_ub\" is excluded from this removal, since it is a required properly on storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._remove_line_limits!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._remove_line_limits!","text":"_remove_line_limits!(data_eng::Dict{String,<:Any})\n\nRemoves fields cm_ub and sm_ub from lines, switches, and linecodes\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._remove_pwl_cost_duplicates!-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._remove_pwl_cost_duplicates!","text":"checks that each point in the a pwl function is unqiue, simplifies the function if duplicates appear\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._remove_transformer_limits!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._remove_transformer_limits!","text":"_remove_transformer_limits!(data_eng::Dict{String,<:Any})\n\nRemoves field sm_ub from transformers, xfmrcodes\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._remove_unconnected_terminals!-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._remove_unconnected_terminals!","text":"_remove_unconnected_terminals!(data_eng::Dict{String,Any})::Dict{String,Any}\n\nRemove all terminals which are unconnected (not considering a grounding as a connection).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rescale_cost_model!-Tuple{Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._rescale_cost_model!","text":"rescales the cost model terms\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sanatize_line-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._sanatize_line","text":"_sanatize_line(line::String)::String\n\nSanitizes lines by stripping them clean of extra space and the beginnging and end, making everything lowercase, changing ~ or m to more, and stripping comments\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sanitize_property_name-Tuple{String, String}","page":"Internal Functions","title":"PowerModelsDistribution._sanitize_property_name","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sc2br_impedance-Tuple{Dict{Tuple{Int64, Int64}, ComplexF64}}","page":"Internal Functions","title":"PowerModelsDistribution._sc2br_impedance","text":"Converts a set of short-circuit tests to an equivalent reactance network. Reference: R. C. Dugan, “A perspective on transformer modeling for distribution system analysis,” in 2003 IEEE Power Engineering Society General Meeting (IEEE Cat. No.03CH37491), 2003, vol. 1, pp. 114-119 Vol. 1.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._scale-Tuple{Dict{String}, String, Real}","page":"Internal Functions","title":"PowerModelsDistribution._scale","text":"function for applying a scale to a paramter\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._scale_props!-Tuple{Dict{String}, Vector{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._scale_props!","text":"helper function to apply a scale factor to given properties\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._show-Union{Tuple{T}, Tuple{IO, T}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"PowerModelsDistribution._show","text":"Helper functions for Base.show for InfrastructureModel,InfrastructureObject\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._simplify_cost_terms!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._simplify_cost_terms!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._simplify_pwl_cost!-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._simplify_pwl_cost!","text":"checks the slope of each segment in a pwl function, simplifies the function if the slope changes is below a tolerance\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._slice_branches!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._slice_branches!","text":"slices branches based on connected terminals\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sol_data_model_acr!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._sol_data_model_acr!","text":"_sol_data_model_acr!(solution::Dict{String,<:Any})\n\nsolutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert ACR variables back into polar representation (default data model voltage form)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sol_data_model_w!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._sol_data_model_w!","text":"converts w models voltages to standard voltage magnitude (sqrt)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._solve_mc_model-Tuple{Dict{String}, Type, Any, Function}","page":"Internal Functions","title":"PowerModelsDistribution._solve_mc_model","text":"_solve_mc_model(\n data::Dict{String,<:Any},\n model_type::Type,\n optimizer,\n build_method::Function;\n multinetwork::Bool=false,\n ref_extensions::Vector{<:Function}=Function[],\n solution_processors::Vector{<:Function}=Function[],\n relax_integrality::Bool=false,\n kwargs...\n)::Dict{String,Any}\n\nInternal solver interface that uses instantiate_mc_model directly and runs optimize_model!, returning a result\n\nSee solve_mc_model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._solve_mc_osw-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Internal Functions","title":"PowerModelsDistribution._solve_mc_osw","text":"Solve optimal switching problem\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._solve_mc_osw_mi-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Internal Functions","title":"PowerModelsDistribution._solve_mc_osw_mi","text":"Solve mixed-integer optimal switching problem\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._solve_mn_mc_opb-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Internal Functions","title":"PowerModelsDistribution._solve_mn_mc_opb","text":"_solve_mn_mc_opb(data::Union{Dict{String,<:Any},String}, model_type::Type, solver; kwargs...)\n\nsolve test mn mc problem\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._standardize_cost_terms!-Tuple{Dict{String}, Int64, String}","page":"Internal Functions","title":"PowerModelsDistribution._standardize_cost_terms!","text":"ensures all polynomial costs functions have at exactly comp_order terms\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._strip_lines!-Tuple{Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._strip_lines!","text":"strips lines that are either commented (block or single) or empty\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sum_rm_nan-Tuple{Vector}","page":"Internal Functions","title":"PowerModelsDistribution._sum_rm_nan","text":"BOUND manipulation methods (0*Inf->0 is often desired)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._transform_loops!-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._transform_loops!","text":"_transform_loops!(\n data_eng::Dict{String,Any};\n zero_series_impedance_threshold::Real=1E-8,\n shunt_id_prefix::AbstractString=\"line_loop\"\n)::Dict{String,Any}\n\nTransform line loops (connected to a single bus), which are not allowed in the mathematical model. Lossy line loops are converted to equivalent shunts, and lossless ones (i.e. short-circuits) are represented by merging the short-circuited terminals. The argument 'zeroseriesimpedance_threshold' controls the threshold below which the series impedance is considered to be a short-ciruit. This is useful because OpenDSS modelers have to insert tiny impedances to represent short-circuit reactors. The addmittance to ground should be zero to trigger the short-circuit handling.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._update_bus_terminal_projections!-Tuple{Dict{String}, Dict{String, <:Vector{Int64}}}","page":"Internal Functions","title":"PowerModelsDistribution._update_bus_terminal_projections!","text":"helper function to update the terminals on projected buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._vec2ltri!-Union{Tuple{Vector{T}}, Tuple{T}} where T","page":"Internal Functions","title":"PowerModelsDistribution._vec2ltri!","text":"vector to lower triangular\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._vec2utri!-Union{Tuple{Vector{T}}, Tuple{T}} where T","page":"Internal Functions","title":"PowerModelsDistribution._vec2utri!","text":"https://stackoverflow.com/questions/39039553/lower-triangular-matrix-in-julia\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._wrap_to_180-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._wrap_to_180","text":"wraps angles in degrees to 180\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._wrap_to_pi-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._wrap_to_pi","text":"wraps angles in radians to pi\n\n\n\n\n\n","category":"method"},{"location":"tutorials/Extension Tutorial.html#Extending-PowerModelsDistribution.jl","page":"Extending PowerModelsDistribution","title":"Extending PowerModelsDistribution.jl","text":"","category":"section"},{"location":"tutorials/Extension Tutorial.html","page":"Extending PowerModelsDistribution","title":"Extending PowerModelsDistribution","text":"Stub for Extension Tutorial.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"manual/math-model.html#The-PowerModelsDistribution-Mathematical-Model","page":"Mathematical Model","title":"The PowerModelsDistribution Mathematical Model","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"As PowerModelsDistribution implements a variety of power network optimization problems, the implementation is the best reference for precise mathematical formulations. This section provides a complex number based mathematical specification for a prototypical unbalanced AC Optimal Power Flow problem, to provide an overview of the typical mathematical models in PowerModelsDistribution.","category":"page"},{"location":"manual/math-model.html#Unbalanced-AC-Optimal-Power-Flow","page":"Mathematical Model","title":"Unbalanced AC Optimal Power Flow","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"PowerModelsDistribution implements a generalized version of the AC Optimal Power Flow problem, taking into account phase unbalance. [1] These generalizations make it possible for PowerModelsDistribution to more accurately capture real-world distribution network datasets. The core generalizations are,","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"Support for multiple load and shunt components on each bus\nLine charging (shunt) that supports a conductance and asymmetrical values","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"In the mathematical description below,","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"Bold typeface indicates a vector (in mathbbC^c) or matrix (in mathbbC^ctimes c)\nOperator diag takes the diagonal (vector) from a square matrix\nThe set of complex numbers is mathbbC and real numbers is mathbbR\nSuperscript H indicates complex conjugate transpose (Hermitian adjoint)\nNote that complex power is defined as mathbfS_ij = mathbfV_i mathbfI_ij^H and is therefore a complex matrix of dimension c times c\nThe line mathbfY^c_ij mathbfY^c_ji and bus mathbfY^s_k shunt matrices do not need to be diagonal","category":"page"},{"location":"manual/math-model.html#Sets","page":"Mathematical Model","title":"Sets","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"The definitions of the sets involved remain unchanged w.r.t. the balanced OPF problem definition, except for the addition of the conductor set:","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"beginalign\n\nmboxsets nonumber \n N mbox - busesnonumber \n R mbox - references busesnonumber \n E E^R mbox - branches forward and reverse orientation nonumber \n G G_i mbox - generators and generators at bus i nonumber \n L L_i mbox - loads and loads at bus i nonumber \n S S_i mbox - shunts and shunts at bus i nonumber \n C mbox - conductors nonumber \n\nendalign","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"where the set of conductors C typically equals abc.","category":"page"},{"location":"manual/math-model.html#Data","page":"Mathematical Model","title":"Data","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"beginalign\nmboxdata nonumber \n S^gl_kc S^gu_kc in mathbbC forall k in G forall c in C nonumber mathbfS^gl_k= S^gl_kc_c in C mathbfS^gu_k = S^gu_kc_c in C \n c_2k c_1k c_0k in mathbbR forall k in G nonumber \n v^l_ic v^u_ic in mathbbR forall i in N forall c in C nonumber mathbfv^l_i = v^l_ic_c in C mathbfv^u_i = v^u_ic_c in C \n S^d_kcin mathbbC forall k in L forall c in C nonumber mathbfS^d_k = S^d_kc_c in C \n mathbfY^s_kin mathbbC^ctimes c forall k in S nonumber \n mathbfY_ij mathbfY^c_ij mathbfY^c_jiin mathbbC^ctimes c forall (ij) in E nonumber \n s^u_ijc theta^Delta l_ijc theta^Delta u_ijc in mathbbR forall (ij) in E forall c in C nonumber mathbfs^u_ij = s^u_ijc_c in C \n V^textref_ic in mathbbC forall r in R mathbfV^textref_i = V^textref_ic_c in C \n\nendalign","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"where the notation mathbfv^l_i = v^l_ic_c in C reflects that the vector mathbfv^l_i is constructed by putting the individual phase values v^l_ic in a vector (in order abc).","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"Alternatively, the series impedance of a line can be written in impedance form:","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"mathbfZ_ij in mathbbC^ctimes c forall (ij) in E nonumber mathbfY_ij = ( mathbfZ_ij)^-1","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"where superscript -1 indicates the matrix inverse. Note that mathbfY_ij or mathbfZ_ij may not be invertible, e.g. in case of single-phase branches in a three-phase grid. In this case the pseudo-inverse can be used.","category":"page"},{"location":"manual/math-model.html#Variables-for-a-Bus-Injection-Model","page":"Mathematical Model","title":"Variables for a Bus Injection Model","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"beginalign\n S^g_kc in mathbbC forall kin G forall c in C nonumber mathbfS^g_k = S^g_kc_c in C \n V_ic in mathbbC forall iin N forall c in C nonumber mathbfV_i = V_ic_c in C \n mathbfS_ij in mathbbC^ctimes c forall (ij) in E cup E^R \n\nendalign","category":"page"},{"location":"manual/math-model.html#Mathematical-Formulation-of-a-Bus-Injection-Model","page":"Mathematical Model","title":"Mathematical Formulation of a Bus Injection Model","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"A complete mathematical model is as follows,","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"\nbeginalign\nmboxminimize sum_k in G c_2k left( sum_c in C Re(S^g_kc) right)^2 + c_1k sum_c in C Re(S^g_kc) + c_0k \n\nmboxsubject to nonumber \n mathbfV_i = mathbfV^textref_i forall r in R \n S^gl_kc leq S^g_kc leq S^gu_kc forall k in G forall c in C \n v^l_ic leq V_ic leq v^u_ic forall i in N forall c in C \n sum_substackk in G_i mathbfS^g_k - sum_substackk in L_i mathbfS^d_k - sum_substackk in S_i mathbfV_i mathbfV^H_i (mathbfY^s_k)^H = sum_substack(ij)in E_i cup E_i^R diag(mathbfS_ij) forall iin N \n mathbfS_ij = mathbfV_i mathbfV_i^H left( mathbfY_ij + mathbfY^c_ijright)^H - mathbfV_i mathbfV^H_j mathbfY^H_ij forall (ij)in E \n mathbfS_ji = mathbfV_j mathbfV_j^H left( mathbfY_ij + mathbfY^c_ji right)^H - mathbfV^H_i mathbfV_j mathbfY^H_ij forall (ij)in E \n diag(mathbfS_ij) leq mathbfs^u_ij forall (ij) in E cup E^R \n theta^Delta l_ijc leq angle (V_ic V^*_jc) leq theta^Delta u_ijc forall (ij) in E forall c in C\n\nendalign","category":"page"},{"location":"manual/math-model.html#Variables-for-a-Branch-Flow-Model","page":"Mathematical Model","title":"Variables for a Branch Flow Model","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"beginalign\n S^g_kc in mathbbC forall kin G forall c in C nonumber mathbfS^g_k = S^g_kc_c in C \n V_ic in mathbbC forall iin N forall c in C nonumber mathbfV_i = V_ic_c in C \n I^s_ijc in mathbbC forall e in E forall c in C nonumber mathbfI^s_ij = I^s_ijc_c in C \n mathbfS_ij in mathbbC^ctimes c forall (ij) in E cup E^R \n\nendalign","category":"page"},{"location":"manual/math-model.html#Mathematical-Formulation-of-a-Branch-Flow-Model","page":"Mathematical Model","title":"Mathematical Formulation of a Branch Flow Model","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"A complete mathematical model is as follows,","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"beginalign\nmboxminimize sum_k in G c_2k left( sum_c in C Re(S^g_kc) right)^2 + c_1k sum_c in C Re(S^g_kc) + c_0k \n\nmboxsubject to nonumber \n mathbfV_i = mathbfV^textref_i forall r in R \n S^gl_kc leq S^g_kc leq S^gu_kc forall k in G forall c in C \n v^l_ic leq V_ic leq v^u_ic forall i in N forall c in C \n sum_substackk in G_i mathbfS^g_k - sum_substackk in L_i mathbfS^d_k - sum_substackk in S_i mathbfV_i mathbfV^H_i (mathbfY^s_k)^H = sum_substack(ij)in E_i cup E_i^R diag(mathbfS_ij) forall iin N \n mathbfS_ij + mathbfS_ji = mathbfV_i mathbfV_i^H (mathbfY^c_ij)^H + mathbfZ_ij mathbfI^s_ij(mathbfI^s_ij)^H + mathbfV_j mathbfV_j^H (mathbfY^c_ji)^H forall (ij)in E \n mathbfS^s_ij = mathbfS_ij + mathbfV_i mathbfV_i^H (mathbfY^c_ij)^H forall (ij) in E cup E^R \n mathbfS^s_ij = mathbfV_i (mathbfI^s_ij)^H forall (ij) in E cup E^R\n mathbfV_i = mathbfV_j - mathbfZ_ij mathbfI^s_ij forall (ij)in E \n diag(mathbfS_ij) leq mathbfs^u_ij forall (ij) in E cup E^R \n theta^Delta l_ijc leq angle (V_ic V^*_jc) leq theta^Delta u_ijc forall (ij) in E forall c in C\n\nendalign","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"[1]: Gan, L., & Low, S. H. (2014). Convex relaxations and linear approximation for optimal power flow in multiphase radial networks. In PSSC (pp. 1–9). Wroclaw, Poland. https://doi.org/10.1109/PSCC.2014.7038399","category":"page"},{"location":"tutorials/Native Power Flow.html#Native-Power-Flow-Solver","page":"Native Power Flow Solver","title":"Native Power Flow Solver","text":"","category":"section"},{"location":"tutorials/Native Power Flow.html","page":"Native Power Flow Solver","title":"Native Power Flow Solver","text":"Stub for Native Power Flow.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"installation.html#Installation-Guide","page":"Installation Guide","title":"Installation Guide","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"From Julia, PowerModelsDistribution is installed using the built-in package manager:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"import Pkg\nPkg.add(\"PowerModelsDistribution\")","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Or, within the Julia REPL:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"]add PowerModelsDistribution","category":"page"},{"location":"installation.html#Installing-an-Optimizer","page":"Installation Guide","title":"Installing an Optimizer","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"PowerModelsDistribution depends on optimizers to solve Optimization problems, e.g., solve_mc_opf. The table below lists the optimizer packages that have been tested with PowerModelsDistribution, and have been found to work by the team; this list is not exhaustive, there are probably more optimizers that will work.","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Install an optimizer using the Julia Package Manager, e.g.,","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"import Pkg\nPkg.add(\"Ipopt\")","category":"page"},{"location":"installation.html#Known-Working-Optimizers","page":"Installation Guide","title":"Known Working Optimizers","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"The table below contains a truncated list of optimizers from the JuMP documentation that have been used by the development team and are confirmed to work with our package. There may be other Optimizers that work, and the Optimizers listed below are not guaranteed to work with all problems; they must be selected for the appropriate problems.","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Solver Julia Package Installation License Supports\nArtelys Knitro KNITRO.jl Manual Comm. (MI)LP, (MI)SOCP, (MI)NLP\nCbc Cbc.jl EPL (MI)LP\nCPLEX CPLEX.jl Manual Comm. (MI)LP, (MI)SOCP\nGurobi Gurobi.jl Manual Comm. (MI)LP, (MI)SOCP\nIpopt Ipopt.jl EPL LP, QP, NLP\nJuniper.jl Juniper.jl MIT (MI)SOCP, (MI)NLP\nSCS SCS.jl MIT LP, SOCP, SDP","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Where:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"LP = Linear programming\nQP = Quadratic programming\nSOCP = Second-order conic programming (including problems with convex quadratic constraints and/or objective)\nNLP = Nonlinear programming\nSDP = Semidefinite programming\n(MI)XXX = Mixed-integer equivalent of problem type XXX","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"For a complete list of JuMP supported optimizers, see JuMP Documentation.","category":"page"},{"location":"installation.html#Unsatisfiable-requirements-detected","page":"Installation Guide","title":"Unsatisfiable requirements detected","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Did you get an error like Unsatisfiable requirements detected for package D [756980fe]:?","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"The Pkg documentation has a section on how to understand and manage these conflicts.","category":"page"},{"location":"manual/external-data-formats.html#External-Data-Formats","page":"External Data Formats","title":"External Data Formats","text":"","category":"section"},{"location":"manual/external-data-formats.html#OpenDSS","page":"External Data Formats","title":"OpenDSS","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"PowerModelsDistribution supports parsing OpenDSS format files. In particular, we support a raw parsing of all OpenDSS specified components into a dictionary (serializable) structure, and support converting the data values of a smaller subsection of components into their expected types. Those include","category":"page"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Line\nLoad\nGenerator\nCapactior (shunt capacitors only)\nReactor\nTransformer\nLinecode\nXfmrcode\nLoadshape\nXYCurve\nCircuit\nVSource\nPVSystem\nStorage","category":"page"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Of those, a subset of configurations are converted into a PowerModelsDistribution internal data model, namely:","category":"page"},{"location":"manual/external-data-formats.html#Edge-Elements","page":"External Data Formats","title":"Edge Elements","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"line (from lines and line reactors)\ntransformer (arbitrary winding, all connections except zig-zag)\nswitch (from lines w/ switch=y)","category":"page"},{"location":"manual/external-data-formats.html#Node-Elements","page":"External Data Formats","title":"Node Elements","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"generator\nvoltage_source\nsolar (from PVSystem)\nload (incl. support for constant POWER, constant IMPEDANCE, constant CURRENT, and EXPONENTIAL models)\nshunt (from shunt capacitors and shunt reactors)\nstorage","category":"page"},{"location":"manual/external-data-formats.html#Data-Elements","page":"External Data Formats","title":"Data Elements","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"linecode\nxfmrcode\ntime_series (from loadshapes)","category":"page"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Several notes about the specific design choices w.r.t. OpenDSS are explained below.","category":"page"},{"location":"manual/external-data-formats.html#Circuit","page":"External Data Formats","title":"Circuit","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"The default connection to the transmission system is modeled as an ideal voltage source named \"source\" in OpenDSS, which is connected by default to a node named \"sourcebus\", but this can be changed.","category":"page"},{"location":"manual/external-data-formats.html#Lines","page":"External Data Formats","title":"Lines","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Although Lines and Linecodes are supported, the more generic LineGeometry is not yet supported.","category":"page"},{"location":"manual/external-data-formats.html#Transformers","page":"External Data Formats","title":"Transformers","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Unfortunately, in the OpenDSS format, multi-phase transformers with different taps for each phase are not explicitly supported, so to work around this limitation multiple single phase transformers should be defined, which are then \"banked\" together using the bank property.","category":"page"},{"location":"manual/external-data-formats.html#Capacitors-and-Reactors","page":"External Data Formats","title":"Capacitors and Reactors","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Capacitors and reactors are supported as shunts, although shunts to ground via delta connections are not yet supported. Furthermore, generic reactors are not supported, only those whose second terminal is connected to ground (default for unspecified second terminal). Reactors are also supported as a resistanceless line if their second terminal is connected, but only for topological continuity of the network.","category":"page"},{"location":"manual/external-data-formats.html#PowerModelsDistribution-JSON","page":"External Data Formats","title":"PowerModelsDistribution JSON","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"You can export a PowerModelsDistribution data structure to a JSON file using the print_file command and parse one in using the parse_file command","category":"page"},{"location":"tutorials/Explicit Neutral Models.html#Explicit-Neutral-Models","page":"Explicit Neutral Models","title":"Explicit Neutral Models","text":"","category":"section"},{"location":"tutorials/Explicit Neutral Models.html","page":"Explicit Neutral Models","title":"Explicit Neutral Models","text":"Stub for Explicit Neutral Models.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"developer/style.html#Style-Conventions","page":"Style Guide","title":"Style Conventions","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In general, the following conventions should be adhered to when making changes or additions to the code base. These conventions should include any conventions applied across the InfrastructureModels ecosystem specific to power engineering (i.e conventions from InfrastructureModels, PowerModels, PowerModelsRestoration, etc.) with some additions specific to PowerModelsDistribution.","category":"page"},{"location":"developer/style.html#Functions","page":"Style Guide","title":"Functions","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Function additions should meeting the following criteria:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All functions should be clearly named, without abbreviations, and with underscores between words, e.g. parse_file or constraint_bus_voltage_magnitude; in Python this is known as lower_case_with_underscores. The exception to the abbreviate rule is cases where abbreviations would be expected in the modeling of power systems.\nAll functions that are not prepended by an underscore _ will be exported by default (i.e. when a user uses using PowerModelsDistribution). Public functions should have a detailed docstring instructing on usage\nAll functions that modify data in place should end with an exclamation point ! and the function input that is being modified should be the first argument (or first arguments in the case where multiple inputs are being modified in place). The exceptions to this rule are constraint and variable creation functions (i.e. those functions related to JuMP model creation), which do not include the exclamation point\nAll function arguments, including keyword arguments, should have their types specified.\nPrivate functions, i.e. those intended to be for internal use only, should follow the same descriptive naming conventions as functions exported by default, and should always include docstrings to describe their purpose.\nFunctions should be separated by two blank lines","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"\"this function demonstrates how an internal, in-place data altering function should be defined\"\nfunction _concise_descriptive_name!(data::Dict{String,<:Any}, a::Real, b::Vector{<:Real}, c::Matrix{<:Complex}; d::Bool=false, e::Vector{Function}=Function[])\nend","category":"page"},{"location":"developer/style.html#Types-and-Enums","page":"Style Guide","title":"Types & Enums","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"When specifying types, i.e. when specifying the type of a function argument, or creating enums, these guidelines are recommended:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Prefer to use Vector{T} instead of Array{T,1}\nPrefer to use Matrix{T} instead of Array{T,2}\nEnums should only be used in the ENGINEERING data model, never the MATHEMATICAL data model\nEnums must be added to the JSON parser when introduced","category":"page"},{"location":"developer/style.html#Constants","page":"Style Guide","title":"Constants","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Whenever possible, const should be used to eliminate unnecessary re-evaluations of code, and every const should have a docstring, whether internal or public.","category":"page"},{"location":"developer/style.html#JuMP-Variables-and-Constraints","page":"Style Guide","title":"JuMP Variables and Constraints","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"For functions that create JuMP variables and constraints in particular, we follow the following naming convention as originally adopted by PowerModels:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"(_)__(_real|_imaginary|_magnitude|_angle|_factor)(_fr|_to)(_sqr)(_on_off)","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"in the interest of intuitive names for users, the following special cases are also acceptable,","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"_power_real -(can be replaced with)-> _active\n_power_imaginary -(can be replaced with)-> _reactive","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In the case of PowerModelsDistribution, there are additional tags indicating that a function is a multiconductor variant, three-phase specific, etc.:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"mc multi-conductor, with an explicit neutral (which is the last conductor by convention?)\nmp multi-phase, for constraints that have no (explicit) neutral and multiple phases\n3p three-phase, when a constraint is hard-coded for three phases","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Currently, all phase-aware functions use mc, but this is subject to change in the future as we refactor. If the function is not multiphase specific, these are not needed in the function name.","category":"page"},{"location":"developer/style.html#Formulation-Styles","page":"Style Guide","title":"Formulation Styles","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new formulations should have clear error messages when they do not support existing components. For example, if a formulation addition which is intended to work with OPF does not support delta-wye transformers, the constraint_mc_transformer_power_dy\nFormulation abstract type and mutable struct must be specified in CapitalizedWords, which is a subtype of camelCase with the first word also capitalized.","category":"page"},{"location":"developer/style.html#Problem-Specification-Styles","page":"Style Guide","title":"Problem Specification Styles","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"If a new problem specification is only needed due to the requirements of a new formulation, and is not a new type of problem, e.g. another OPF formulation, a build_ function with the same name as the existing formulation should be created that accepts a specific PowerModel (multiple dispatch)\nIf a new problem specification is a new type of problem that will e.g. accept multiple formulations, new build_ and run_ functions should be created that do not collide with existing problem specification functions","category":"page"},{"location":"developer/style.html#Metaprogramming","page":"Style Guide","title":"Metaprogramming","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In general, it is better to avoid metaprogramming patterns, like creating functions algorithmically, in order to aid in the debugging of code. Metaprogramming can create significant challenges in interpreting stacktraces upon errors.","category":"page"},{"location":"developer/style.html#Markdown","page":"Style Guide","title":"Markdown","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Markdown files should be properly formatted, particularly when including tables. Developers are encouraged to use markdownlint and a markdown formatter (such as in VSCode).","category":"page"},{"location":"developer/style.html#File-Structure","page":"Style Guide","title":"File Structure","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"It is important that new functions, variables, constraints, etc. all go into appropriate places in the code base so that future maintenance and debugging is easier. Pay attention to the current file structure and attempt to conform as best as possible to it. In general","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"/src/core contains the core logic of the package, including variable creation and constraint templates, i.e. things that are agnostic to the formulation\n/src/data_model contains all of the logic to transform between the ENGINEERING and MATHEMATICAL data models and model creation helper tools\nsrc/form contains formulation specific variable and constraint functions, organized under separate files for different formulations\nsrc/io contains all of the tools to parse and save files, in particular all of the logic necessary to parse dss files and output json files\nsrc/prob contains all problem specifications\ndocs/src contains all source markdown files for the documentation\nexamples contains Jupyter notebooks with walkthroughs of PowerModelsDistribution for new users","category":"page"},{"location":"developer/style.html#Dependencies-(Project.toml)","page":"Style Guide","title":"Dependencies (Project.toml)","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new dependencies should be carefully considered before being added. It is important to keep the number of external dependencies low to avoid reliance on features that may not be maintained in the future. If possible, Julia Standard Library should be used, particularly in the case where reproducing the desired feature is trivial. There will be cases where it is not simple to duplicate a feature and subsequently maintain it within the package, so adding a dependency would be appropriate in such cases.","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new dependencies are are ultimately approved should also include an entry under [compat] indicating the acceptable versions (Julia automerge requirement). This includes test-only dependencies that appear under [extras]","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"The Manifest.toml should not be included in the repo.","category":"page"},{"location":"tutorials/Beginners Guide.html#Introduction-to-PowerModelsDistribution","page":"Beginners Guide","title":"Introduction to PowerModelsDistribution","text":"","category":"section"},{"location":"tutorials/Beginners Guide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Stub for Beginners Guide.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"tutorials/Engineering Model - Helper Functions.html#tutorial-eng-model-helpers","page":"Engineering Model: Helper Functions","title":"The Engineering Model: Helper Functions","text":"","category":"section"},{"location":"tutorials/Engineering Model - Helper Functions.html","page":"Engineering Model: Helper Functions","title":"Engineering Model: Helper Functions","text":"Stub for Engineering Model - Helper Functions.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"manual/power-flow.html#Power-Flow-Computations","page":"Power Flow Computations","title":"Power Flow Computations","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The typical goal of PowerModelsDistribution is to build a JuMP model that is used to solve distribution power network optimization problems. The JuMP model abstraction enables PowerModelsDistribution to have state-of-the-art performance on a wide range of problem formulations. That said, for the specific case of power flow computations, in some specific applications performance gains can be had by avoiding the JuMP model abstraction and solving the problem more directly. To that end, PowerModelsDistribution includes Julia-native solvers for AC power flow in rectangular voltage coordinates. This section provides an overview of the different power flow options that are available in PowerModelsDistribution and under what circumstances they may be beneficial.","category":"page"},{"location":"manual/power-flow.html#Generic-Power-Flow","page":"Power Flow Computations","title":"Generic Power Flow","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The general purpose power flow solver in PowerModelsDistribution is,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"solve_mc_pf","category":"page"},{"location":"manual/power-flow.html#PowerModelsDistribution.solve_mc_pf","page":"Power Flow Computations","title":"PowerModelsDistribution.solve_mc_pf","text":"Power Flow Problem\n\n\n\n\n\n","category":"function"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"This function builds a JuMP model for a wide variety of unbalanced power flow formulations supported by PowerModelsDistribution. For example it supports,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"ACPUPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in polar coordinates\nACRPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in rectangular coordinates\nACRENPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in rectangular coordinates with explicit neutral conductor\nIVRUPowerModel - a non-convex nonlinear AC power unbalanced flow using current voltage variables in rectangular coordinates\nIVRENPowerModel - a non-convex nonlinear AC unbalanced power flow using current voltage variables in rectangular coordinates with explicit neutral conductor","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The solve_mc_pf solution method is both formulation and solver agnostic and can leverage the wide range of solvers that are available in the JuMP ecosystem. Many of these solvers are commercial-grade, which in turn makes solve_mc_pf the most reliable power flow solution method in PowerModelsDistribution.","category":"page"},{"location":"manual/power-flow.html#Warm-Starting","page":"Power Flow Computations","title":"Warm Starting","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"In some applications an initial guess of the power flow solution may be available. In such a case, this information may be able to decrease a solver's time to convergence, especially when solving systems of nonlinear equations. The _start postfix can be used in the network data to initialize the solver's variables and provide a suitable solution guess. The most common values are as follows,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"For each generator,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"pg_start - active power injection starting point\nqg_start - reactive power injection starting point","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"For each bus,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"vm_start - voltage magnitude starting point for the ACPUPowerModel model\nva_start - voltage angle starting point for the ACPUPowerModel model\nvr_start - real voltage starting point for the IVRUPowerModel model\nvi_start - imaginary voltage starting point for the IVRUPowerModel model","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The following helper function can be used to use the solution point in the network data as the starting point for solve_mc_pf.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"add_start_voltage!","category":"page"},{"location":"manual/power-flow.html#PowerModelsDistribution.add_start_voltage!","page":"Power Flow Computations","title":"PowerModelsDistribution.add_start_voltage!","text":"add_start_voltage!(\n data_math::Dict{String,Any};\n coordinates=:rectangular,\n uniform_v_start=missing,\n vr_default=0.0,\n vi_default=0.0,\n vm_default=0.0,\n va_default=0.0,\n epsilon::Number=1E-3,\n)::Dict{String,Any}\n\nAdds start values for the voltage to the buses. For a multinetwork data model, you can calculate the start voltages for a representative network through 'calcstartvoltage', and pass the result as 'uniformvstart' to use the same values for all networks and avoid recalculating it for each network. The argument 'epsilon' controls the offset added to ungrounded terminals which would otherwise be set to zero.\n\n\n\n\n\n","category":"function"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"warning: Warning\n","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"Warm starting a solver is a very delicate task and can easily result in degraded performance. Using PowerModelsDistribution' default flat-start values is recommended before experimenting with warm starting a solver.","category":"page"},{"location":"manual/power-flow.html#Native-Power-Flow","page":"Power Flow Computations","title":"Native Power Flow","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The AC Unbalanced Power Flow problem is ubiquitous in power system analysis. The problem requires solving a system of nonlinear equations, usually via a Newton-Raphson type of algorithm. In PowerModelsDistribution, the standard Julia library is used for solving this system of nonlinear equations. The following function is used to solve Unbalanced Power Flow problem with voltages in rectangular coordinates.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"compute_mc_pf","category":"page"},{"location":"manual/power-flow.html#PowerModelsDistribution.compute_mc_pf","page":"Power Flow Computations","title":"PowerModelsDistribution.compute_mc_pf","text":"compute_mc_pf(\n data::Dict{String,<:Any};\n explicit_neutral::Bool=false,\n max_iter::Int=100,\n v_start::Union{Dict{<:Any,<:Any},Missing}=missing,\n stat_tol::Real=1e-8,\n verbose::Bool=false,\n kron_reduce::Bool=true,\n phase_project::Bool=false,\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n eng2math_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,<:Vector{<:String}}=Dict{String,Vector{String}}(),\n make_pu_extensions::Vector{<:Function}=Function[],\n map_math2eng_extensions::Dict{String,<:Function}=Dict{String,Function}(),\n make_si::Bool=!get(data, \"per_unit\", false),\n make_si_extensions::Vector{<:Function}=Function[],\n dimensionalize_math_extensions::Dict{String,Dict{String,Vector{String}}}=Dict{String,Dict{String,Vector{String}}}(),\n)::Dict{String,Any}\n\nTakes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns a solution in the original data model defined by data.\n\nTechnical description of the native power flow can be found at https://arxiv.org/abs/2305.04405 where implementation fo the fixed-point current injection algorithm, inspired by the existing open-source implementation in OpenDSS. The current injection method is commonly conceived as a system of nonlinear equalities solved by Newton’s method. However, the fixed point iteration variant commonly outperforms most methods, while supporting meshed topologies from the ground up\n\nIf make_si is false, data will remain in per-unit.\n\nFor an explanation of multinetwork and global_keys, see make_multinetwork\n\nFor an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model\n\nFor an explanation of make_pu_extensions, see make_per_unit!\n\nFor an explanation of ref_extensions, see instantiate_mc_model\n\nFor an explanation of map_math2eng_extensions, make_si, make_si_extensions, and dimensionalize_math_extensions, see solution_make_si\n\n\n\n\n\ncompute_mc_pf(\n pdf::PowerFlowData,\n max_iter::Int,\n stat_tol::Float,\n verbose::Bool\n)\n\nComputes native power flow and requires PowerFlowData (See https://arxiv.org/abs/2305.04405).\n\n\n\n\n\n","category":"function"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"compute_mc_pf is based on the current injection method and is inspired by OpenDSS's algorithm. compute_mc_pf will typically provide an identical result to solve_mc_pf. However, the existence of solution degeneracy around generator injection assignments and multiple power flow solutions can yield different results. The primary advantage of compute_mc_pf over solve_mc_pf is that it does not require building a JuMP model. If the initial point for the Unbalanced Power Flow solution is near-feasible then compute_mc_pf can result in a significant runtime saving by converging quickly and reducing data-wrangling and memory allocation overheads. This initial guess is provided using the standard _start values. The add_start_voltage! function provides a convenient way of setting a suitable starting point.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"tip: Tip\n","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"If compute_mc_pf fails to converge try solve_mc_pf instead.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The table below reports the accuracy of the native power flow with respect to OpenDSS native solver tested on three IEEE testcases: | IEEE testcases | maximum voltage p.u difference with OpenDSS power flow solver | | –––––––-| ––––––––––––––––––––––––––––––- | | IEEE13 | 3.765096388188572e-6 | | IEEE34 | 6.805369850332029e-8 | | IEEE123 | 4.021326251365659e-8 |","category":"page"},{"location":"manual/power-flow.html#Input-arguments","page":"Power Flow Computations","title":"Input arguments","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"compute_mc_pf receives input arguments as follows,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"data_math - network data in MATHEMATICAL format\nexplicit_neutral - a boolean input indication wether or not the neutral is explicitly modelled\nv_start - warm start if different from in-built initialization algorithm\nmax_iter - maximum iterations\nstat_tol - statistical tolerance","category":"page"},{"location":"manual/power-flow.html#Outputs","page":"Power Flow Computations","title":"Outputs","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"compute_mc_pf provides the following outputs,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"solution - solution dictionary\niterations - number of iterations\ntime_build - time spent on building the power flow data\ntime_solve - time spent on solving the native power flow\ntime_post - time spent to generate solutions\ntime_total - total time\ntermination_status - termination status","category":"page"},{"location":"manual/power-flow.html#Limitations","page":"Power Flow Computations","title":"Limitations","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"compute_mc_pf has the following limitations,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"starting from the math dictionary means that transformer decomposition is already done, which is different from what OpenDSS does\nwe calculate the primitive admittance matrix in p.u. whereas OpenDSS algorithm works with actual units\nno load model relaxation is performed\ninspired by OpenDSS, we add small ppm values to certain component primitive admittance values to avoid singularity issues\ninspired by OpenDSS, switch primitive admittance has specific values","category":"page"},{"location":"manual/power-flow.html#Network-Admittance-Matrix","page":"Power Flow Computations","title":"Network Admittance Matrix","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"Internally compute_mc_pf utilizes an admittance matrix representation of the network data, which may be useful in other contexts. The foundational type for the admittance matrix representations is SparseMatrixCSC.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The following function can be used to compute the admittance matrix from PowerModelsDistribution network data.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"calc_admittance_matrix","category":"page"},{"location":"manual/power-flow.html#PowerModelsDistribution.calc_admittance_matrix","page":"Power Flow Computations","title":"PowerModelsDistribution.calc_admittance_matrix","text":"calc_admittance_matrix(\n data_math::Dict,\n v_start::Dict,\n explicit_neutral::Bool\n)\n\nCalculates the admittance matrix from PowerFlowData struct.\n\n\n\n\n\n","category":"function"},{"location":"manual/formulations.html#Unbalanced-Network-Formulations","page":"Unbalanced Formulations","title":"Unbalanced Network Formulations","text":"","category":"section"},{"location":"manual/formulations.html#[AbstractUnbalancedACPModel](@ref-AbstractUnbalancedACPModel)","page":"Unbalanced Formulations","title":"AbstractUnbalancedACPModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Real-valued formulation from:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Formulation without shunts: Mahdad, B., Bouktir, T., & Srairi, K. (2006). A three-phase power flow modelization: a tool for optimal location and control of FACTS devices in unbalanced power systems. In IEEE Industrial Electronics IECON (pp. 2238–2243).","category":"page"},{"location":"manual/formulations.html#[AbstractUnbalancedDCPModel](@ref-AbstractUnbalancedDCPModel)","page":"Unbalanced Formulations","title":"AbstractUnbalancedDCPModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Applying all of the standard DC linearization tricks to the AbstractUnbalancedACPModel","category":"page"},{"location":"manual/formulations.html#[SDPUBFModel](@ref-SDPUBFModel)","page":"Unbalanced Formulations","title":"SDPUBFModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"The BFM SDP relaxation as described in:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Gan, L., & Low, S. H. (2014). Convex relaxations and linear approximation for optimal power flow in multiphase radial networks. In PSSC (pp. 1–9). Wroclaw, Poland. doi:10.1109/PSCC.2014.7038399","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Note that this formulation is complex-valued and additional steps are needed to implement this in JuMP.","category":"page"},{"location":"manual/formulations.html#[SOCNLPUBFModel](@ref-SOCNLPUBFModel)","page":"Unbalanced Formulations","title":"SOCNLPUBFModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"The starting point is SDPUBFModel. The SDP constraint can be relaxed to a set of SOC constraints, starting from either the real or complex form of the matrix on which the PSD-ness constraint is applied.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Kim, S., Kojima, M., & Yamashita, M. (2003). Second order cone programming relaxation of a positive semidefinite constraint. Optimization Methods and Software, 18(5), 535–541. doi:10.1080/1055678031000148696\nAndersen, M. S., Hansson, A., & Vandenberghe, L. (2014). Reduced-complexity semidefinite relaxations of optimal power flow problems. IEEE Trans. Power Syst., 29(4), 1855–1863.","category":"page"},{"location":"manual/formulations.html#[SOCConicUBFModel](@ref-SOCConicUBFModel)","page":"Unbalanced Formulations","title":"SOCConicUBFModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"See SOCNLPUBFModel","category":"page"},{"location":"manual/formulations.html#[LPUBFDiagModel](@ref-LPUBFDiagModel)","page":"Unbalanced Formulations","title":"LPUBFDiagModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This formulation has originally been developed by Sankur et al.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Sankur, M. D., Dobbe, R., Stewart, E., Callaway, D. S., & Arnold, D. B. (2016). A linearized power flow model for optimization in unbalanced distribution systems. arXiv:1606.04492v2","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"and is here cast as only considering the diagonal elements of the linear formulation by Gan and Low:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Gan, L., & Low, S. H. (2014). Convex relaxations and linear approximation for optimal power flow in multiphase radial networks. In PSSC (pp. 1–9). Wroclaw, Poland. doi:10.1109/PSCC.2014.7038399","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This furthermore leads to the imaginary part of the lifted node voltage variable W in Gan and Low being redundant, so it is substituted out in LPUBFDiagModel.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"The full formulation from Gan and Low was supported as LPUBFFullModel in PowerModelsDistribution up to version 0.7. ","category":"page"},{"location":"manual/formulations.html#[FBSUBFPowerModel](@ref-FBSUBFPowerModel),-[FOTPUPowerModel](@ref-FOTPUPowerModel),-[FOTRUPowerModel](@ref-FOTRUPowerModel)","page":"Unbalanced Formulations","title":"FBSUBFPowerModel, FOTPUPowerModel, FOTRUPowerModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"The linear FBS and FOT formulations as described in:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Girigoudar, K., & Roald, L.A. (2021). Linearized Three-Phase Optimal Power Flow Models for Distribution Grids with Voltage Unbalance. 2021 IEEE Conference on Decision and Control (CDC).","category":"page"},{"location":"manual/formulations.html#Unbalanced-Network-Formulation-Type-Hierarchy","page":"Unbalanced Formulations","title":"Unbalanced Network Formulation Type Hierarchy","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"PowerModelsDistribution has a rich model type hierarchy similar to PowerModels. At the top of the type hierarchy we can distinguish between conic, active power only, and branch flow models:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"abstract type AbstractUnbalancedConicModel <: AbstractPowerModel end\nabstract type AbstractUnbalancedActivePowerModel <: AbstractPowerModel end\nabstract type AbstractUBFModel <: AbstractPowerModel end\nabstract type AbstractUBFQPModel <: AbstractUBFModel end\nabstract type AbstractUBFConicModel <: AbstractUBFModel end\nconst AbstractUnbalancedConicModels = Union{AbstractUnbalancedConicModel, AbstractUBFConicModel}","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Several nonlinear (non-convex) models are available at the top level:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"abstract type AbstractUnbalancedACPModel <: AbstractPowerModel end\nabstract type AbstractUnbalancedACRModel <: AbstractPowerModel end\nabstract type AbstractUnbalancedIVRModel <: AbstractUnbalancedACRModel end","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"The following relaxations are available under these hierarchies:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"abstract type AbstractNLPUBFModel <: AbstractUBFQPModel end\nabstract type AbstractConicUBFModel <: AbstractUBFConicModel end\nconst AbstractUBFModels = Union{AbstractNLPUBFModel, AbstractConicUBFModel}\n\nabstract type SDPUBFModel <: AbstractConicUBFModel end\nabstract type SDPUBFKCLMXModel <: SDPUBFModel end\nabstract type SOCNLPUBFModel <: AbstractNLPUBFModel end\nabstract type SOCConicUBFModel <: AbstractConicUBFModel end\nconst SOCUBFModels = Union{SOCNLPUBFModel, SOCConicUBFModel}","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"where UBF is an unbalanced variant of the Branch Flow models from PowerModels. Models which do not contain UBF in their name are Bus Injection Models e.g. AbstractUnbalancedACPModel. Finally, some linear unbalanced power flow models are available under the following hierarchy:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"abstract type AbstractUnbalancedDCPModel <: AbstractUnbalancedActivePowerModel end\nabstract type AbstractUnbalancedNFAModel <: AbstractUnbalancedDCPModel end\nabstract type AbstractLPUBFModel <: AbstractNLPUBFModel end\nabstract type LPUBFDiagModel <: AbstractLPUBFModel end\nconst LinDist3FlowModel = LPUBFDiagModel\nabstract type FBSUBFModel <: AbstractLPUBFModel end","category":"page"},{"location":"manual/formulations.html#Unbalanced-Power-Models","page":"Unbalanced Formulations","title":"Unbalanced Power Models","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Each of these Models can be used as the type parameter for an UnbalancedPowerModel:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"mutable struct ACPUPowerModel <: AbstractUnbalancedACPModel @pmd_fields end\nmutable struct ACRUPowerModel <: AbstractUnbalancedACRModel @pmd_fields end\nmutable struct DCPUPowerModel <: AbstractUnbalancedDCPModel @pmd_fields end\nmutable struct NFAUPowerModel <: AbstractUnbalancedNFAModel @pmd_fields end\n\nmutable struct SDPUBFPowerModel <: SDPUBFModel @pmd_fields end\nmutable struct SDPUBFKCLMXPowerModel <: SDPUBFKCLMXModel @pmd_fields end\n\nmutable struct SOCNLPUBFPowerModel <: SOCNLPUBFModel @pmd_fields end\nmutable struct SOCConicUBFPowerModel <: SOCConicUBFModel @pmd_fields end\n\nmutable struct LPUBFDiagPowerModel <: LPUBFDiagModel @pmd_fields end\nconst LinDist3FlowPowerModel = LPUBFDiagPowerModel\nmutable struct FBSUBFPowerModel <: FBSUBFModel @pmd_fields end\nmutable struct FOTPUPowerModel <: AbstractUnbalancedACPModel @pmd_fields end\nmutable struct FOTRUPowerModel <: AbstractUnbalancedACRModel @pmd_fields end","category":"page"},{"location":"manual/formulations.html#Optimization-problem-classes","page":"Unbalanced Formulations","title":"Optimization problem classes","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"NLP (nonconvex): ACPUPowerModel, ACRUPowerModel, IVRUPowerModel\nSDP: SDPUBFPowerModel, SDPUBFKCLMXPowerModel\nSOC(-representable): SOCNLPUBFPowerModel, SOCConicUBFPowerModel\nLinear: LPUBFDiagPowerModel (LinDist3FlowPowerModel), FBSUBFPowerModel, FOTPUPowerModel, FOTRUPowerModel, DCPUPowerModel, NFAUPowerModel ","category":"page"},{"location":"manual/formulations.html#Matrix-equations-versus-scalar-equations","page":"Unbalanced Formulations","title":"Matrix equations versus scalar equations","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"JuMP supports vectorized syntax, but not for nonlinear constraints. Therefore, certain formulations must be implemented in a scalar fashion. Other formulations can be written as matrix (in)equalities. The current implementations are categorized as follows:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Scalar: ACPUPowerModel, ACRUPowerModel, IVRUPowerModel, DCPUPowerModel, NFAPowerModel, FBSUBFPowerModel, FOTPUPowerModel, FOTRUPowerModel\nMatrix: SDPUBFPowerModel, SDPUBFKCLMXPowerModel, SOCNLPUBFPowerModel, SOCConicUBFPowerModel, LPUBFDiagPowerModel","category":"page"},{"location":"manual/formulations.html#Explicit-Neutral-Models","page":"Unbalanced Formulations","title":"Explicit Neutral Models","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Explicit neutral (EN) models represent the neutral currents explicitly; unlike all the previous models, which implicitly assume they are grounded immediately where they originate.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"There are two broad classes of formulations: IVR ones an ACR one.","category":"page"},{"location":"manual/formulations.html#IVR","page":"Unbalanced Formulations","title":"IVR","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"AbstractExplicitNeutralIVRModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This abstract type groups all EN IVR formulations, and is a subtype of AbstractUnbalancedIVRModel.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"AbstractNLExplicitNeutralIVRModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This abstract type groups non-linear EN IVR formulations, and is a subtype of AbstractExplicitNeutralIVRModel.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"IVRENPowerModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This concrete type is a non-linear EN IVR formulation.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"IVRReducedENPowerModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This concrete type is a non-linear EN IVR formulation, where the branches only have series current variables (instead of also total current variables).","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"AbstractQuadraticExplicitNeutralIVRModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This abstract type groups quadratic EN IVR formulations, and is a subtype of AbstractExplicitNeutralIVRModel.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"IVRQuadraticENPowerModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This concrete type is a quadratic EN IVR formulation.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"IVRReducedQuadraticENPowerModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This concrete type is a quadratic EN IVR formulation, where the branches only have series current variables (instead of also total current variables).","category":"page"},{"location":"manual/formulations.html#ACR","page":"Unbalanced Formulations","title":"ACR","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"AbstractExplicitNeutralACRModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This abstract type is a subtype of AbstractUnbalancedACRModel, analogous to the IVR structure.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"ACRENPowerModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This is the only concrete ACR type amongst the EN formulations.","category":"page"},{"location":"manual/formulations.html#Overview-of-hierarchy","page":"Unbalanced Formulations","title":"Overview of hierarchy","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"EN-IVR (AbstractExplicitNeutralIVRModel)\n|\n|-- NL (AbstractNLExplicitNeutralIVRModel)\n| |\n| |-- IVRENPowerModel\n|\n|-- Quadratic (AbstractQuadraticExplicitNeutralIVRModel)\n |\n |-- IVRENPowerModel\n |\n |-- IVRReducedENPowerModel\n\nEN-ACR (AbstractExplicitNeutralIVRModel)\n|\n|-- ACRENPowerModel","category":"page"},{"location":"manual/enums.html#PowerModelsDistribution-Enum-Types","page":"Enums in Engineering Model","title":"PowerModelsDistribution Enum Types","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"Within the PowerModelsDistribution Engineering Model we have included the use of Enums. Here we document the fields for which Enums are expected and the possible Enums available.","category":"page"},{"location":"manual/enums.html#Data-Model","page":"Enums in Engineering Model","title":"Data Model","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"Any place in PowerModelsDistribution that calls for specifying the data_model, either in function calls or the \"data_model\" field inside the data structure itself, will expect a DataModel type.","category":"page"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"The DSS data model is an output of parse_dss, and is an untranslated raw parse of a DSS file. This Enum exists for use by count_nodes, where the method to count the number of active nodes is different between all three models.","category":"page"},{"location":"manual/enums.html#Component-Status","page":"Enums in Engineering Model","title":"Component Status","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"All \"status\" fields in the ENGINEERING model expect a Status type.","category":"page"},{"location":"manual/enums.html#Connection-Configuration","page":"Enums in Engineering Model","title":"Connection Configuration","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"All \"configuration\" fields in the ENGINEERING model expect a ConnConfig type.","category":"page"},{"location":"manual/enums.html#Load-Model","page":"Enums in Engineering Model","title":"Load Model","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"For load objects, the \"model\" field expects a LoadModel type to specify the type of load model to use, where","category":"page"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"POWER indicates constant power,\nCURRENT indicates constant current,\nIMPEDANCE indicates constant impedance,\nEXPONENTIAL indicates an exponential load model, and\nZIP indicates a ZIP model","category":"page"},{"location":"manual/enums.html#Shunt-Model","page":"Enums in Engineering Model","title":"Shunt Model","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"For shunt objects, the \"model\" field expects a ShuntModel type to specify the origin of the shunt object, which is important for transient analysis.","category":"page"},{"location":"manual/enums.html#Switch-State","page":"Enums in Engineering Model","title":"Switch State","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"For switch objects, the \"state\" field expects a SwitchState type to specify whether the switch is currently open or closed.","category":"page"},{"location":"manual/enums.html#Dispatchable-Component","page":"Enums in Engineering Model","title":"Dispatchable Component","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"Some components can be Dispatchable, e.g. if a switch is dispatchable that means it is free to open or close, but if not then it is fixed in place, or if a load is dispatchable it implies that it can be shed in a run_mc_mld problem.","category":"page"},{"location":"manual/enums.html#Generator-Control-Mode","page":"Enums in Engineering Model","title":"Generator Control Mode","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"For generator objects, the \"control_mode\" field expects a ControlMode type to specify whether the generator is operating in an isochronous mode (i.e. is frequency forming) or droop mode (i.e. is frequency following).","category":"page"},{"location":"manual/specifications.html#Problem-Specifications","page":"Problem Specifications","title":"Problem Specifications","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"In addition to the standard power flow solve_mc_pf, and optimal power flow solve_mc_opf, there are several notable problem specifications included in PowerModelsDistribution.","category":"page"},{"location":"manual/specifications.html#Optimal-Power-Flow-(OPF)-with-On-Load-Tap-Changers-(OLTC)","page":"Problem Specifications","title":"Optimal Power Flow (OPF) with On-Load Tap Changers (OLTC)","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"This problem is identical to mc_opf, except that all transformers are now modelled as on-load tap changers (OLTCs). Each phase has an individual tap ratio, which can be either variable or fixed, as specified in the data model.","category":"page"},{"location":"manual/specifications.html#OLTC-Objective","page":"Problem Specifications","title":"OLTC Objective","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"objective_mc_min_fuel_cost","category":"page"},{"location":"manual/specifications.html#OLTC-Variables","page":"Problem Specifications","title":"OLTC Variables","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"variable_mc_oltc_transformer_tap","category":"page"},{"location":"manual/specifications.html#OLTC-Constraints","page":"Problem Specifications","title":"OLTC Constraints","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"constraint_mc_transformer_power(pm, i, fix_taps=false)","category":"page"},{"location":"manual/specifications.html#Minimal-Load-Delta-(MLD)-Problem-Specification","page":"Problem Specifications","title":"Minimal Load Delta (MLD) Problem Specification","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"Load shed (continuous) problem. See \"Relaxations of AC Maximal Load Delivery for Severe Contingency Analysis\" by C. Coffrin et al. (DOI: 10.1109/TPWRS.2018.2876507) for single-phase case.","category":"page"},{"location":"manual/specifications.html#MLD-Variables","page":"Problem Specifications","title":"MLD Variables","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"beginalign\nmboxvariables nonumber \n z^v_i in 01 forall i in N mbox - bus voltage onoff variable \n z^g_i in 01 forall i in G mbox - generator onoff variable \n z^b_i in 01 forall i in Bmbox - storage onoff variable \n z^d_i in (01) forall i in L mbox - continuous load shedding variable \n z^s_i in (01) forall i in H mbox - continuous shunt shedding variable\nendalign","category":"page"},{"location":"manual/specifications.html#MLD-Objective","page":"Problem Specifications","title":"MLD Objective","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"beginalign\nmboxminimize left (\nsum_substackiin Ncin C10 left (1-z^v_i right ) + sum_substackiin Lcin C10 omega_icleft Releft (S^d_iright )right left ( 1-z^d_i right ) + sum_substackiin Hcin Cleft Releft (S^s_i right )right left (1-z^s_i right ) + sum_substackiin Gcin CDelta^g_i + sum_substackiin Bcin CDelta^b_i right )\nendalign","category":"page"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"where","category":"page"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"beginalign\nDelta^g_i = left Releft (S^g_i(0) right ) - Releft (S^g_i right ) right \nDelta^g_i = -left Releft (S^g_i(0) right ) - Releft (S^g_i right ) right \nDelta^b_i = left Releft (S^b_i(0) right ) - Releft (S^b_i right ) right \nDelta^b_i = -left Releft (S^b_i(0) right ) - Releft (S^b_i right ) right \nendalign","category":"page"},{"location":"manual/specifications.html#MLD-Constraints","page":"Problem Specifications","title":"MLD Constraints","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"beginalign\nmboxsubject to nonumber \n z^v_i v^l_ic leq left V_ic right leq z_i^v v^u_ic forall i in Nforall c in C \n z^g_i S^gl_ic leq S^g_ic leq z^g_i S^gu_ic forall i in Gforall c in C \n sum_substackkin G_icin C S^g_kc - sum_substackkin L_icin C z^d_k S^d_kc- sum_substackkin H_icin C z^s_k Y^s_kcleft V_ic right ^2 nonumber \n = sum_substack(ij)in E_icup E_i^Rcin C S_ijc forall i in N\nendalign","category":"page"},{"location":"reference/logging.html#LoggingAPI","page":"Logging","title":"Logging","text":"","category":"section"},{"location":"reference/logging.html","page":"Logging","title":"Logging","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"logging.jl\"]","category":"page"},{"location":"reference/logging.html#PowerModelsDistribution.reset_logging_level!-Tuple{}","page":"Logging","title":"PowerModelsDistribution.reset_logging_level!","text":"reset_logging_level!()\n\nResets the log level to Info\n\n\n\n\n\n","category":"method"},{"location":"reference/logging.html#PowerModelsDistribution.restore_global_logger!-Tuple{}","page":"Logging","title":"PowerModelsDistribution.restore_global_logger!","text":"restore_global_logger!()\n\nRestores the global logger to its default state (before PMD was loaded)\n\n\n\n\n\n","category":"method"},{"location":"reference/logging.html#PowerModelsDistribution.set_logging_level!-Tuple{Symbol}","page":"Logging","title":"PowerModelsDistribution.set_logging_level!","text":"set_logging_level!(level::Symbol)\n\nSets the logging level for PMD: :Info, :Warn, :Error\n\n\n\n\n\n","category":"method"},{"location":"reference/logging.html#PowerModelsDistribution.silence!-Tuple{}","page":"Logging","title":"PowerModelsDistribution.silence!","text":"silence!()\n\nSets loglevel for PMD to :Error, silencing Info and Warn\n\n\n\n\n\n","category":"method"},{"location":"reference/base.html#Base","page":"Base","title":"Base","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"ref\nvar\nids\ncon\nsol\nnws\nnw_ids","category":"page"},{"location":"reference/base.html#PowerModelsDistribution.ref","page":"Base","title":"PowerModelsDistribution.ref","text":"helper function to access the AbstractUnbalancedPowerModel structs' ref, returns (id,data) pairs\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.var","page":"Base","title":"PowerModelsDistribution.var","text":"helper function to access the AbstractUnbalancedPowerModel structs' var, returns JuMP VariableRef\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.ids","page":"Base","title":"PowerModelsDistribution.ids","text":"helper function to access the ids of AbstractUnbalancedPowerModel structs' ref, returns ints\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.con","page":"Base","title":"PowerModelsDistribution.con","text":"helper function to access the AbstractUnbalancedPowerModel structs' con, returns JuMP Constraint\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.sol","page":"Base","title":"PowerModelsDistribution.sol","text":"helper function to access the AbstractUnbalancedPowerModel structs' sol, returns Dict\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.nws","page":"Base","title":"PowerModelsDistribution.nws","text":"helper function to access multinetwork data from AbstractUnbalancedPowerModel structs, returns (id,data) pairs\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.nw_ids","page":"Base","title":"PowerModelsDistribution.nw_ids","text":"helper function to access the ids of multinetworks from AbstractUnbalancedPowerModel structs, returns ints\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#Helper-functions","page":"Base","title":"Helper functions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"@smart_constraint\nset_lower_bound\nset_upper_bound\ncomp_start_value","category":"page"},{"location":"reference/base.html#PowerModelsDistribution.@smart_constraint","page":"Base","title":"PowerModelsDistribution.@smart_constraint","text":"@smart_constraint model::JuMP.Model vars::Vector expr::JuMP.Expression\n\nDetection of whether a constraint should be NL or not\"\n\n\n\n\n\n","category":"macro"},{"location":"reference/base.html#PowerModelsDistribution.set_lower_bound","page":"Base","title":"PowerModelsDistribution.set_lower_bound","text":"function set_lower_bound(\n\tx::JuMP.VariableRef,\n\tbound::Real\n)\n\nLocal wrapper method for JuMP.setlowerbound, which skips NaN and infinite (-Inf only)\n\n\n\n\n\nfunction set_lower_bound(\n\txs::Vector{JuMP.VariableRef},\n\tbound::Real\n)\n\nLocal wrapper method for JuMP.setlowerbound, which skips NaN and infinite (-Inf only). Note that with this signature, the bound is applied to every variable in the vector.\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.set_upper_bound","page":"Base","title":"PowerModelsDistribution.set_upper_bound","text":"function set_upper_bound(\n\tx::JuMP.VariableRef,\n\tbound\n)\n\nLocal wrapper method for JuMP.setupperbound, which skips NaN and infinite (+Inf only)\n\n\n\n\n\nfunction set_upper_bound(\n\txs::Vector{JuMP.VariableRef},\n\tbound::Real\n)\n\nLocal wrapper method for JuMP.setupperbound, which skips NaN and infinite (+Inf only). Note that with this signature, the bound is applied to every variable in the vector.\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.comp_start_value","page":"Base","title":"PowerModelsDistribution.comp_start_value","text":"comp_start_value(\n comp::Dict,\n keys::Vector{String},\n conductor::Int,\n default::Any\n)\n\nSearches for start value for a variable key in order from a list of keys of a component comp for conductor conductor, and if one does not exist, uses default\n\n\n\n\n\nfunction comp_start_value(\n\tcomp::Dict{String,<:Any},\n\tkey::String,\n\tconductor::Int,\n\tdefault::Any\n)\n\nSearches for start value for a variable key of a component comp for conductor conductor, and if one does not exist, uses default\n\n\n\n\n\nfunction comp_start_value(\n\tcomp::Dict{String,<:Any},\n\tkeys::String,\n\tdefault::Any=0.0\n)\n\nSearches for start value for a variable key in order from a list of keys of a component comp, and if one does not exist, uses default. This is the conductor-agnostic version of comp_start_value.\n\n\n\n\n\nfunction comp_start_value(\n comp::Dict,\n key::String,\n default::Any=0.0\n)\n\nSearches for start value for a variable key of a component comp, and if one does not exist, uses default. This is the conductor-agnostic version of comp_start_value.\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#Ref-Creation-Functions","page":"Base","title":"Ref Creation Functions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"ref_\")","category":"page"},{"location":"reference/base.html#PowerModelsDistribution.ref_add_connected_components!-Tuple{Dict{Symbol}, Dict{String}}","page":"Base","title":"PowerModelsDistribution.ref_add_connected_components!","text":"ref_add_connected_components!(ref::Dict{Symbol,<:Any}, data::Dict{String,<:Any})\n\nRef-extension for opb problem type to add connected components ref\n\n\n\n\n\n","category":"method"},{"location":"reference/base.html#PowerModelsDistribution.ref_add_core!-Tuple{Dict{Symbol, Any}}","page":"Base","title":"PowerModelsDistribution.ref_add_core!","text":"ref_add_core!(ref::Dict{Symbol,Any})\n\nReturns a dict that stores commonly used pre-computed data from of the data dictionary, primarily for converting data-types, filtering out deactivated components, and storing system-wide values that need to be computed globally. Some of the common keys include:\n\n:off_angmin and :off_angmax (see calc_theta_delta_bounds(data)),\n:bus – the set {(i, bus) in ref[:bus] : bus[\"bus_type\"] != 4},\n:gen – the set {(i, gen) in ref[:gen] : gen[\"gen_status\"] == 1 && gen[\"gen_bus\"] in keys(ref[:bus])},\n:branch – the set of branches that are active in the network (based on the component status values),\n:arcs_branch_from – the set [(i,b[\"f_bus\"],b[\"t_bus\"]) for (i,b) in ref[:branch]],\n:arcs_branch_to – the set [(i,b[\"t_bus\"],b[\"f_bus\"]) for (i,b) in ref[:branch]],\n:arcs_branch – the set of arcs from both arcs_from and arcs_to,\n:arcs_switch_from – the set [(i,b[\"f_bus\"],b[\"t_bus\"]) for (i,b) in ref[:switch]],\n:arcs_switch_to – the set [(i,b[\"t_bus\"],b[\"f_bus\"]) for (i,b) in ref[:switch]],\n:arcs_switch – the set of arcs from both arcs_switch_from and arcs_switch_to,\n:arcs_transformer_from – the set [(i,b[\"f_bus\"],b[\"t_bus\"]) for (i,b) in ref[:transformer]],\n:arcs_transformer_to – the set [(i,b[\"t_bus\"],b[\"f_bus\"]) for (i,b) in ref[:transformer]],\n:arcs_transformer – the set of arcs from both arcs_transformer_from and arcs_transformer_to,\n:bus_arcs_branch – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_branch]]),\n:bus_arcs_transformer – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_transformer]]),\n:bus_arcs_switch – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_switch]]),\n:buspairs – (see buspair_parameters(ref[:arcs_branch_from], ref[:branch], ref[:bus])),\n:bus_gens – the mapping Dict(i => [gen[\"gen_bus\"] for (i,gen) in ref[:gen]]).\n:bus_loads – the mapping Dict(i => [load[\"load_bus\"] for (i,load) in ref[:load]]).\n:bus_shunts – the mapping Dict(i => [shunt[\"shunt_bus\"] for (i,shunt) in ref[:shunt]]).\n\n\n\n\n\n","category":"method"},{"location":"reference/base.html#PowerModelsDistribution.ref_calc_storage_injection_bounds-Tuple{Any, Any}","page":"Base","title":"PowerModelsDistribution.ref_calc_storage_injection_bounds","text":"ref_calc_storage_injection_bounds(storage, buses)\n\nComputes storage bounds\n\n\n\n\n\n","category":"method"},{"location":"reference/base.html#InfrastructureModels-Extensions","page":"Base","title":"InfrastructureModels Extensions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"PowerModelsDistribution._IM.solution_preprocessor\nPowerModelsDistribution._IM.build_solution_values","category":"page"},{"location":"reference/base.html#InfrastructureModels.solution_preprocessor","page":"Base","title":"InfrastructureModels.solution_preprocessor","text":"Definition of the default solution preprocessor for PowerModelsDistribution\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#InfrastructureModels.build_solution_values","page":"Base","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) variables\n\n\n\n\n\ncustom build_solution_values for multiconductor (vector) nonlinear expressions\n\n\n\n\n\ncustom build_solution_values for multiconductor (vector) generic affine expressions\n\n\n\n\n\ncustom build_solution_values for multiconductor (vector) constants\n\n\n\n\n\ncustom build_solution_values for generic dense axis arrays\n\n\n\n\n\ncustom build_solution_values for multiconductor (vector) constants\n\n\n\n\n\n","category":"function"},{"location":"reference/variables.html#VariableAPI","page":"Variables","title":"Variables","text":"","category":"section"},{"location":"reference/variables.html","page":"Variables","title":"Variables","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"variable\")","category":"page"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current-Tuple{AbstractExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current","text":"function variable_mc_branch_current(\n\tpm::AbstractExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates total current variables :cr and :ci, series current variables :csr and :csi, and placeholder dictionaries for the terminal current flows :cr_bus and :ci_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current-Tuple{AbstractLPUBFModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current-Tuple{ReducedExplicitNeutralIVRModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current","text":"function variable_mc_branch_current(\n\tpm::ReducedExplicitNeutralIVRModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor branch-reduced IVR models with explicit neutrals, creates series current variables :csr and :csi, placeholder dictionaries for the total current :cr and :ci, and placeholder dictionaries for the terminal current flows :cr_bus and :ci_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_imaginary","text":"variable: ci[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_imaginary-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_imaginary","text":"function variable_mc_branch_current_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch imaginary current variables :ci for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_real","text":"variable: cr[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_real-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_real","text":"function variable_mc_branch_current_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch real current variables :cr for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_series_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_series_imaginary","text":"variable: csi[l] for l in branch\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_series_imaginary-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_series_imaginary","text":"function variable_mc_branch_current_series_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch imaginary series current variables :csi for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_series_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_series_real","text":"variable: csr[l] for l in branch\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_series_real-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_series_real","text":"function variable_mc_branch_current_series_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch real series current variables :csr for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_flow_ne_reactive-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_flow_ne_reactive","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power-Tuple{AbstractExplicitNeutralACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power","text":"function variable_mc_branch_power(\n\tpm::AbstractExplicitNeutralACRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor ACR models with explicit neutrals, creates branch power variables :p and :q and placeholder dictionaries for the terminal power flows :p_bus and :q_bus.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power","text":"branch flow variables, delegated back to PowerModels\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power-Tuple{FBSUBFPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power","text":"variable_mc_branch_power(pm::FBSUBFPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nBranch flow variables similar to LPUBFDiagModel\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power-Tuple{LPUBFDiagModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_imaginary","text":"variable: q[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_imaginary-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_imaginary","text":"function variable_mc_branch_power_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch reactive power variables :q for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_real-Tuple{AbstractUnbalancedAPLossLessModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_real","text":"variable: p[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_real-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_real","text":"function variable_mc_branch_power_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch active power variables :p for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUnbalancedACPModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUnbalancedACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUnbalancedDCPModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUnbalancedNFAModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"nothing to do, these models do not have complex voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{FBSUBFPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"variable_mc_bus_voltage(pm::FBSUBFPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nVoltage variables are defined in rectangular coordinates similar to ACRUPowerModel. An initial operating point is specified for linearization.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{FOTPUPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"variable_mc_bus_voltage(pm::FOTPUPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nVoltage variables are defined in polar coordinates similar to ACPUPowerModel. An initial operating point is specified for linearization.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{FOTRUPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"variable_mc_bus_voltage(pm::FOTRUPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nVoltage variables are defined in rectangular coordinates similar to ACRUPowerModel. An initial operating point is specified for linearization similar to FBSUBFPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{LPUBFDiagModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"function variable_mc_bus_voltage(\n\tpm::RectangularVoltageExplicitNeutralModels;\n\tnw=nw_id_default,\n\tbounded::Bool=true,\n)\n\nCreates rectangular voltage variables :vr and :vi for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_angle-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_angle","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_imaginary-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_imaginary","text":"function variable_mc_bus_voltage_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates imaginary voltage variables :vr for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_imaginary_on_off-Tuple{AbstractUnbalancedACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_imaginary_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_indicator","text":"Create variables for bus status\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_magnitude_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_magnitude_on_off","text":"on/off voltage magnitude variable\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_magnitude_only-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_magnitude_only","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqr-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqr","text":"variable: w[i] >= 0 for i in `buses\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqr_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqr_on_off","text":"voltage variable magnitude squared (relaxed form)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedACPModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedDCPModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_on_off-Tuple{LPUBFDiagModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_on_off","text":"Create voltage variables for branch flow model\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_prod_hermitian-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_prod_hermitian","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_real-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_real","text":"function variable_mc_bus_voltage_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates real voltage variables :vr for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_real_on_off-Tuple{AbstractUnbalancedACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_real_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_capacitor_reactive_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_capacitor_reactive_power","text":"variable_mc_capacitor_reactive_power(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default)\n\nCapacitor (with capcontrol) relaxed power variables for AbstractLPUBFModel (using McCormick envelopes)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_capacitor_switch_state-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_capacitor_switch_state","text":"variable_mc_capacitor_switch_state(pm::AbstractUnbalancedPowerModel, relax::Bool; nw::Int=nw_id_default, report::Bool=true)\n\nCapacitor (with capcontrol) switch state (open/close) variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_capcontrol-Tuple{AbstractLPUBFModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_capcontrol","text":"variable_mc_capcontrol(pm::AbstractLPUBFModel; nw::Int=nw_id_default, relax::Bool=false, report::Bool=true)\n\nCapacitor switching and relaxed power variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_capcontrol-Tuple{AbstractUnbalancedNFAModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_capcontrol","text":"nothing to do, these models do not have complex voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_capcontrol-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_capcontrol","text":"variable_mc_capcontrol(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default, relax::Bool=false, report::Bool=true)\n\nCapacitor switching variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_gen_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_gen_indicator","text":"Create variables for generator status\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current","text":"For the matrix KCL formulation, the generator needs an explicit current variable.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current-Tuple{SOCUBFModels, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current","text":"variable_mc_generator_current(pm::SOCUBFModels, gen_ids::Vector{Int}; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nFor the SOC branch-flow formulation, the delta-generator needs an explicit current variable.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current_imaginary","text":"variable: cig[j] for j in gen\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current_imaginary-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current_imaginary","text":"function variable_mc_generator_current_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates generator imaginary current variables :cig for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current_real","text":"variable: crg[j] for j in gen\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current_real-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current_real","text":"function variable_mc_generator_current_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates generator real current variables :crg for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{AbstractExplicitNeutralACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"function variable_mc_generator_power(\n\tpm::AbstractExplicitNeutralACRModel;\n\tnw::Int=nw_id_default,\n)\n\nFor ACR models with explicit neutrals, creates generator power variables :pg and :qg, and placeholder dictionaries for terminal power flows :pg_bus and :qg_bus,\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{AbstractNLExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"function variable_mc_generator_power(\n\tpm::AbstractNLExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true\n)\n\nFor IVR models with explicit neutrals, no power variables are required\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"function variable_mc_generator_power(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, creates generator power variables :pg and :qg\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"variable_mc_generator_power(pm::AbstractUBFModels; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nThe variable creation for generators in branch flow model. Delta generators always need an auxilary power variable (X) similar to delta loads. Wye generators however, don't need any variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"create variables for generators, delegate to PowerModels\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{SDPUBFKCLMXModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"For the matrix KCL formulation, the generator needs an explicit current and power variable.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{SOCUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"variable_mc_generator_power(pm::SOCUBFModels; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nThe variable creation for generators in SOC branch flow model. Delta generators always need an auxilary power variable (X) and current squared variable (CC) similar to delta loads. Wye generators however, don't need any variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_delta_aux-Tuple{AbstractUBFModels, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_delta_aux","text":"variable_mc_generator_power_delta_aux(pm::AbstractUBFModels, gen_ids::Vector{Int}; nw::Int=nw_id_default, eps::Real=0.1, bounded::Bool=true, report::Bool=true)\n\nCreates power matrix variable X for delta-connected generators similar to delta loads.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_imaginary-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_imaginary","text":"function variable_mc_generator_power_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates generator reactive power variables :qg for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_imaginary_on_off-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_imaginary_on_off","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_imaginary_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_imaginary_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_mx-Tuple{SDPUBFKCLMXModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_mx","text":"For the matrix KCL formulation, the generator needs an explicit power variable.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_real-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_real","text":"function variable_mc_generator_power_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates generator active power variables :pg for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_real_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_real_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current-Tuple{AbstractExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current","text":"function variable_mc_load_current(\n\tpm::AbstractExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates placeholder dictionaries for the load current :crd and :cid, and for the terminal current flows :crd_bus and :cid_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current","text":"function variable_mc_load_current(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, creates load current variables :crd and :cid, and placeholder dictionaries for the terminal current flows :crd_bus and :cid_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current-Tuple{AbstractUBFModels, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current","text":"All loads need a current variable; for wye loads, this variable will be in the wye reference frame whilst for delta currents it will be in the delta reference frame.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current-Tuple{FBSUBFPowerModel, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current","text":"variable_mc_load_current(pm::FBSUBFPowerModel, load_ids::Vector{Int}; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nNo loads require a current variable. Delta loads are zero-order approximations and wye loads are first-order approximations around the initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current_imaginary-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current_imaginary","text":"function variable_mc_load_current_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates load imaginary current variables :cid for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current_real-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current_real","text":"function variable_mc_load_current_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates load real current variables :crd for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_indicator","text":"Create variables for demand status\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractExplicitNeutralACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"function variable_mc_load_power(\n\tpm::AbstractExplicitNeutralACRModel;\n\tnw=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor ACR models with explicit neutrals, creates placeholder dictionaries for load power expressions :pd and :qd\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractNLExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"function variable_mc_load_power(\n\tpm::AbstractNLExplicitNeutralIVRModel;\n\tnw=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor non-linear IVR models with explicit neutrals, creates placeholder dictionaries for the load power :pd and :qd, and for the terminal power flows :pd_bus and :qd_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"function variable_mc_load_power(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, creates load power variables :pd and :qd\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractUBFModels, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"These variables reflect the power consumed by the load, NOT the power injected into the bus nodes; these variables only coincide for wye-connected loads with a grounded neutral.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"The variable creation for the loads is rather complicated because Expressions are used wherever possible instead of explicit variables. Delta loads always need a current variable and auxilary power variable (X), and all other load model variables are then linear transformations of these (linear Expressions). Wye loads however, don't need any variables when the load is modelled as constant power or constant impedance. In all other cases (e.g. when a cone is used to constrain the power), variables need to be created.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"Create a dictionary with values of type Any for the load. Depending on the load model, this can be a parameter or a NLexpression. These will be inserted into KCL.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"Create a dictionary with values of type Any for the load. Depending on the load model, this can be a parameter or a NLexpression. These will be inserted into KCL.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{SDPUBFKCLMXModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"The variable creation for the loads is rather complicated because Expressions are used wherever possible instead of explicit variables. All loads need a current variable; for wye loads, this variable will be in the wye reference frame whilst for delta currents it will be in the delta reference frame. All loads need variables for the off-diagonals of the nodal power variables. In some cases, the diagonals elements can be created as Expressions. Delta loads only need a current variable and auxilary power variable (X), and all other load model variables are then linear transformations of these (linear Expressions).\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power_active-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power_active","text":"function variable_mc_load_power_active(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates load active power variables :pd for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power_bus-Tuple{SDPUBFKCLMXModel, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power_bus","text":"The bus qualifier denotes that this is the power withdrawn at the bus; Only for grounded wye-connected loads, this is the same as the power consumed by the multi-phase load. The off-diagonals only need to be created for the matrix KCL formulation.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power_delta_aux-Tuple{AbstractUBFModels, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power_delta_aux","text":"Creates power matrix variable X for delta windings; this defines both the wye-side power Sy and the delta-side power Sd through the lin. transformations Sy = X.Td, Sd = Td.X with Td=[1 -1 0; 0 1 -1; -1 0 1]\n\nSee the paper by Zhao et al. for the first convex relaxation of delta transformations. @INPROCEEDINGS{zhaooptimal2017, \tauthor={C. Zhao, E. Dall'Anese and S. Low}, \tbooktitle={IREP 2017 Bulk Power Systems Dynamics and Control Symposium}, \ttitle={{Optimal Power Flow in Multiphase Radial Networks with Delta Connections}}, \tyear={2017}, \tmonth={}, url={https://www.nrel.gov/docs/fy18osti/67852.pdf} }\n\nSee upcoming paper for discussion of bounds. [reference added when accepted]\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power_delta_aux-Tuple{FBSUBFPowerModel, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power_delta_aux","text":"variable_mc_load_power_delta_aux(pm::FBSUBFPowerModel, load_ids::Vector{Int}; nw::Int=nw_id_default, eps::Real=0.1, bounded::Bool=true, report::Bool=true)\n\nAuxiliary variables are not required since delta loads are zero-order approximations calculated using the initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power_reactive-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power_reactive","text":"function variable_mc_load_power_reactive(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates load reactive power variables :qd for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_oltc_transformer_tap-Tuple{AbstractUnbalancedNFAModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_oltc_transformer_tap","text":"no voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_oltc_transformer_tap-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_oltc_transformer_tap","text":"Create tap variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_shunt_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_shunt_indicator","text":"Create variables for shunt status\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_slack_bus_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_slack_bus_power","text":"generates variables for both active and reactive slack at each bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_slack_bus_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_slack_bus_power_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_slack_bus_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_slack_bus_power_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_current-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_current","text":"do nothing by default but some formulations require this\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_current-Tuple{AbstractUnbalancedWConvexModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_current","text":"do nothing by default but some formulations require this\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_indicator","text":"Create variables for storage status\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power","text":"variables for modeling storage units, includes grid injection and internal variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_control_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_control_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_control_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_control_imaginary","text":"a reactive power slack variable that enables the storage device to inject or consume reactive power at its connecting bus, subject to the injection limits of the device.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_control_imaginary_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_control_imaginary_on_off","text":"a reactive power slack variable that enables the storage device to inject or consume reactive power at its connecting bus, subject to the injection limits of the device.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_imaginary_on_off-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_imaginary_on_off","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_imaginary_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_imaginary_on_off","text":"Create variables for reactive storage injection\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_mi-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_mi","text":"variable_mc_storage_power_mi(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default, relax::Bool=false, bounded::Bool=true, report::Bool=true)\n\nVariables for storage power (mixed-integer if relax==false)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_mi_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_mi_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_on_off","text":"Create variables for active and reactive storage injection\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_real_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_real_on_off","text":"Create variables for active storage injection\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current-Tuple{AbstractExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current","text":"function variable_mc_switch_current(\n\tpm::AbstractExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor IVR models with explicit neutrals, creates switch current variables :crs and :cis, and placeholder dictionaries for the terminal current flows :crsw_bus and :cisw_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current_imaginary-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current_imaginary","text":"function variable_mc_switch_current_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor models with explicit neutrals, creates switch imaginary current variables :cisw for models with explicit neutrals.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current_real-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current_real","text":"function variable_mc_switch_current_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor models with explicit neutrals, creates switch real current variables :crsw for models with explicit neutrals.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power-Tuple{AbstractExplicitNeutralACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power","text":"function variable_mc_switch_power(\n\tpm::AbstractExplicitNeutralACRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor ACR models with explicit neutrals, creates switch power variables :p and :q and placeholder dictionaries for the terminal power flows :ps_bus and :qs_bus.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power","text":"matrix power variables for switches\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power-Tuple{LPUBFDiagModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power","text":"variable_mc_switch_power(pm::LPUBFDiagModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nSwitch power variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power_imaginary-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power_imaginary","text":"function variable_mc_switch_power_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor models with explicit neutrals, creates switch reactive power variables :qsw for models with explicit neutrals. This is defined per arc, i.e. with a variable for the from-side and to-side power.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power_real-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power_real","text":"function variable_mc_switch_power_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor models with explicit neutrals, creates switch active power variables :psw for models with explicit neutrals. This is defined per arc, i.e. with a variable for the from-side and to-side power.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_state-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_state","text":"switch state (open/close) variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current-Tuple{AbstractExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current","text":"function variable_mc_transformer_current(\n\tpm::AbstractExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor IVR models with explicit neutrals, create transformer current variables :crt and :cit, and placeholder dictionaries for the terminal current flows :crt_bus and :cit_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current_imaginary","text":"variable: ci[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current_imaginary-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current_imaginary","text":"function variable_mc_transformer_current_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates transformer imaginary current variables :cit for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current_real","text":"variable: cr[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current_real-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current_real","text":"function variable_mc_transformer_current_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates transformer real current variables :crt for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{AbstractExplicitNeutralACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"function variable_mc_transformer_power(\n\tpm::AbstractExplicitNeutralACRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor ACR models with explicit neutrals, creates transfomer power variables :pt and :qt, and placeholder dictionaries for transformer terminal power flows :pt_bus and :qt_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{AbstractNLExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"function variable_mc_transformer_power(\n\tpm::AbstractNLExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor non-linear IVR models with explicit neutrals, no power variables are required.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"function variable_mc_transformer_power(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor quadratic IVR models with explicit neutrals, creates transformer power variables :pt and :qt\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"defines matrix transformer power variables for the unbalanced branch flow models\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"Creates variables for both active and reactive power flow at each transformer.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{FBSUBFPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"Creates variables for both active and reactive power flow at each transformer.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{LPUBFDiagModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"Creates variables for both active and reactive power flow at each transformer.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power_imaginary","text":"Create variables for the reactive power flowing into all transformer windings.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power_imaginary-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power_imaginary","text":"function variable_mc_transformer_power_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates transformer reactive power variables :qt for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power_real","text":"Create variables for the active power flowing into all transformer windings.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power_real-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power_real","text":"function variable_mc_transformer_power_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates transformer active power variables :pt for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_complex-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_complex","text":"variable_mx_complex(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}},\n M::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n symm_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n name::Union{String, Tuple{String,String}}=\"\",\n prefix::String=\"\"\n)::Tuple where T\n\nShorthand to create two real matrix variables, where the first is the real part and the second the imaginary part.\n\nIf the name argument is a String, it will be suffixed with 're' and 'im'. It is possible to specify the names of the real and imaginary part directly as a Tuple as well (to achieve P and Q instead of Sre and Sim for example).\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_complex_with_diag-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_complex_with_diag","text":"variable_mx_complex_with_diag(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n symm_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n diag_re::Dict{T,<:Vector{<:Any}}=Dict([(i, zeros(length(N[i]))) for i in indices]),\n diag_im::Dict{T,<:Vector{<:Any}}=Dict([(i, zeros(length(N[i]))) for i in indices]),\n name::Union{String, Tuple{String,String}}=\"\",\n prefix::String=\"\"\n)::Tuple where T\n\nSame as variable_mx_complex, but square and the diagonal of the matrix variables consists of the constants passed as the diagre and diagim argument. The diag argument is a dictionary of (index, 1d-array) pairs.\n\nUseful for power matrices with specified diagonals (constant power wye loads).\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_hermitian-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_hermitian","text":"variable_mx_hermitian(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n symm_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n sqrt_upper_bound::Union{Missing, Dict{T,<:Vector{<:Real}}}=missing,\n sqrt_lower_bound::Union{Missing, Dict{T,<:Vector{<:Real}}}=missing,\n set_lower_bound_diag_to_zero::Bool=false,\n imag_set_diag_to_zero::Bool=true,\n name::Union{String,Tuple{String,String}}=\"\",\n prefix::String=\"\"\n)::Tuple where T\n\nReturns a pair of symmetric and skew-symmetric matrix variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_real-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_real","text":"variable_mx_real(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}},\n M::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n name::String=\"\",\n prefix::String=\"\"\n) where T\n\nThis function creates a set of real matrix variables of size NxM, indexed over the elements of the indices argument. The upper and lower bounds have to be specified, and are dictionaries with the indices as keys and the matrix bounds as values. The name and prefix arguments will be combined into the base_name argument for JuMP; the prefix will typically be the network number nw. Instead of sequentially creating the matrix variables, the elements of the matrices are created sequentially for all matrices at once. I.e., we loop over the elements, and not over the indices. This is needed so that the variable names printed by JuMP are in line with the current design.\n\nReturns a dictionary of (index, matrix variable) pairs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_real_skewsymmetric-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_real_skewsymmetric","text":"variable_mx_real_skewsymmetric(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n set_diag_to_zero::Bool=true,\n name::String=\"\",\n prefix::String=\"\"\n)::Dict where T\n\nSame as variable_mx_real, but adds skew-symmetry structure.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_real_symmetric-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_real_symmetric","text":"variable_mx_real_symmetric(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n name::String=\"\",\n prefix::String=\"\"\n)::Dict where T\n\nSame as variable_mx_real, but adds symmetry structure\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_real_with_diag-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_real_with_diag","text":"variable_mx_real_with_diag(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n diag::Dict{T,<:Vector{<:Any}}=Dict([(i, fill(0, length(N[i]))) for i in indices]),\n name::String=\"\",\n prefix::String=\"\"\n) where T\n\nSame as variable_mx_real, but has to be square and the diagonal of the matrix variables consists of the elements passed as the diag argument. The diag argument is a dictionary of (index, 1d-array) pairs. Useful for power matrices with specified diagonals (constant power wye loads). If not specified, the diagonal elements are set to zero.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_storage_charge-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_storage_charge","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_storage_complementary_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_storage_complementary_indicator","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_storage_discharge-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_storage_discharge","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_storage_energy-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_storage_energy","text":"\n\n\n\n","category":"method"},{"location":"tutorials/The Engineering Model.html#tutorial-eng-model","page":"The Engineering Data Model","title":"Introduction to the Engineering Model","text":"","category":"section"},{"location":"tutorials/The Engineering Model.html","page":"The Engineering Data Model","title":"The Engineering Data Model","text":"Stub for The Engineering Model.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"manual/connections.html#Connecting-Components","page":"Connecting Components","title":"Connecting Components","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"One of the main goals of a network model, is specifying how constituent components are connected together. The patterns explained here, are equally applicable to the engineering and mathematical data model.","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"The available connections of each component connect to bus terminals. Take for example a bus with four terminals, terminals=[\"a\",\"b\",\"c\",\"n\"].","category":"page"},{"location":"manual/connections.html#Node-objects","page":"Connecting Components","title":"Node objects","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"Node objects always connect to a single bus (and perhaps also the universal ground, as can be the case for shunts). Therefore, they always have at least two key fields controlling the connectivity: bus and connections. Most node objects also have a configuration field, which affects the interpretation of the values supplied in connections. We will illustrate this for loads below.","category":"page"},{"location":"manual/connections.html#Loads","page":"Connecting Components","title":"Loads","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"A multi-phase load consists of several individual loads, the number of which is implied by the length of properties such as pd_nom, qd_nom etc. The table below illustrates how the length of the field connections and the value of the field configuration determines the layout of the load.","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"connections configuration==WYE configuration==DELTA\n2 (Image: 2 connections, wye) (Image: 2 connections, delta)\n3 (Image: 3 connections, wye) (Image: 3 connections, delta)\n4 (Image: 4 connections, wye) undefined","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"For example, we wish to connect a wye-connected load consisting of 2 individual loads (|connections|=3 and configuration=WYE) to our example bus with four available terminals. If we specify connections=[\"a\",\"c\",\"n\"], this leads to","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"(Image: loads connection example).","category":"page"},{"location":"manual/connections.html#Edge-objects","page":"Connecting Components","title":"Edge objects","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"Edge objects connect two buses (except for generic transformers, which can connect N buses). Therefore, they have the fields","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"f_bus and f_connections, specifying the from-side bus and how the object connects to it;\nt_bus and t_connections, specifying the same for the to-side.","category":"page"},{"location":"manual/connections.html#Lines","page":"Connecting Components","title":"Lines","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"A line can have a variable number of conductors, which is implied by the size of the fields rs, xs, g_fr, b_fr, g_to and b_to. The fields f_connections and t_connections should specify for each conductor, to which terminals it connects. The figure below illustrates this for a line with 2 conductors,","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"(Image: line connection example).","category":"page"},{"location":"manual/connections.html#Transformers","page":"Connecting Components","title":"Transformers","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"Transformers also have a configuration field. For","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"generic transformers, this is specified per winding, and configuration is therefore a vector of ConnConfig enums (WYE or DELTA);\nAL2W transformers however are always two-winding, and the secondary is always wye-connected. Therefore, configuration is a scalar, specifying the configuration of the from-side winding.","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"Generic transformers have a field buses, a Vector containing the buses to which each winding connects respectively (these do not have to be unique; a split-phase transformer is typically represented by having two windings connect to the same bus). The AL2W transformer however, since it is always two-winding, follows the f_connections/t_connections pattern.","category":"page"},{"location":"reference/constants.html#ConstantsAPI","page":"Constants","title":"Constants","text":"","category":"section"},{"location":"reference/constants.html","page":"Constants","title":"Constants","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:constant]\nFilter = t -> isa(t, Dict) || isa(t, Vector) || isa(t, String)","category":"page"},{"location":"reference/constants.html#PowerModelsDistribution.dimensionalize_math","page":"Constants","title":"PowerModelsDistribution.dimensionalize_math","text":"lists of scaling factors and what they apply to\n\n\n\n\n\n","category":"constant"},{"location":"reference/constants.html#PowerModelsDistribution.pmd_eng_asset_types","page":"Constants","title":"PowerModelsDistribution.pmd_eng_asset_types","text":"list of all eng asset types\n\n\n\n\n\n","category":"constant"},{"location":"reference/constants.html#PowerModelsDistribution.pmd_math_asset_types","page":"Constants","title":"PowerModelsDistribution.pmd_math_asset_types","text":"list of all math asset types\n\n\n\n\n\n","category":"constant"},{"location":"reference/constants.html#PowerModelsDistribution.pmd_math_component_status","page":"Constants","title":"PowerModelsDistribution.pmd_math_component_status","text":"maps component types to status parameters\n\n\n\n\n\n","category":"constant"},{"location":"reference/constants.html#PowerModelsDistribution.pmd_math_component_status_inactive","page":"Constants","title":"PowerModelsDistribution.pmd_math_component_status_inactive","text":"maps component types to inactive status values\n\n\n\n\n\n","category":"constant"},{"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\nparse_dss\nparse_opendss\nparse_json\nprint_file","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.parse_file","page":"Data Models","title":"PowerModelsDistribution.parse_file","text":"parse_file(\n io::IO,\n filetype::Union{AbstractString,Missing}=missing;\n data_model::DataModel=ENGINEERING,\n import_all::Bool=false,\n bank_transformers::Bool=true,\n transformations::Vector{<:Any}=[],\n dss2eng_extensions::Vector{<:Function}=Function[],\n eng2math_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_pu_extensions::Vector{<:Function}=Function[],\n make_pu::Bool=true,\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n kron_reduce::Bool=true,\n phase_project::Bool=false,\n time_series::String=\"daily\"\n)::Dict{String,Any}\n\nParses the IOStream of a file into a PowerModelsDistribution data structure\n\nIf filetype is missing, parse_file will attempt to detect the filetype, but this may fail, and it is advised to pass the filetype if it is known.\n\nIf data_model is MATHEMATICAL, the data model type will be automatically transformed via transform_data_model.\n\nFor explanation of import_all, bank_transformers, and time_series, see parse_opendss\n\nFor explanation of dss2eng_extensions, see parse_opendss\n\nFor explanation of kron_reduce, see apply_kron_reduction!\n\nFor explanation of phase_project, see apply_phase_projection!\n\nFor explanation of multinetwork and global_keys, see make_multinetwork and transform_data_model\n\nFor explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model\n\nFor explanation of make_pu and make_pu_extensions, see make_per_unit!.\n\n\n\n\n\nparse_file(file::String; kwargs...)::Dict{String,Any}\n\nLoads file into IOStream and passes it onto parse_file\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.parse_dss","page":"Data Models","title":"PowerModelsDistribution.parse_dss","text":"\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.parse_opendss","page":"Data Models","title":"PowerModelsDistribution.parse_opendss","text":"parse_opendss(\n io::IO;\n import_all::Bool=false,\n bank_transformers::Bool=true,\n time_series::String=\"daily\",\n dss2eng_extensions::Vector{<:Function}=Function[],\n)::Dict{String,Any}\n\nParses an IO, into raw dss dictionary via parse_dss, into the ENGINEERING DataModel\n\nSee parse_opendss\n\n\n\n\n\nparse_opendss(\n data_dss::OpenDssDataModel;\n import_all::Bool=false,\n bank_transformers::Bool=true,\n time_series::String=\"daily\",\n dss2eng_extensions::Vector{<:Function}=Function[]\n)::Dict{String,Any}\n\nParses a raw dss data structure (dictionary), resulting from the parsing of a DSS file, into the ENGINEERING DataModel\n\nIf import_all is true, all raw dss properties will be included in the final dictionary under \"dss\".\n\nIf bank_transformers is true (default), transformers that are indicated to be part of a bank in dss will be combined into a single multiphase transformer.\n\ntime_series defines which property the time series will be taken from, \"daily\" or \"yearly\". More complex parsing of time series data should be performed with dss2eng_extensions.\n\ndss2eng_extensions\n\nIf a user wishes to parse additional components that are not yet natively supported by PowerModelsDistribution, dss2eng_extensions can be utilized. Custom user functions provided under dss2eng_extensions will be excuted after all built-in dss2eng transformations have been performed and transformers have been banked together (if bank_transformers==true). dss2eng_extension functions should have the following function signature:\n\ndss2eng_func!(data_eng, data_dss)\n\nwhere data_eng is a non-multinetwork ENGINEERING data model (i.e., time series data has not yet been expanded into a multinetwork structure), and data_dss is the raw dss data parsed by parse_dss.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.parse_json","page":"Data Models","title":"PowerModelsDistribution.parse_json","text":"parse_json(file::String)\n\nparses json files that were dumped via JSON.print (or PMD.print_file)\n\n\n\n\n\nparse_json(io::IO)\n\nparses json files that were dumped via JSON.print (or PMD.print_file)\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.print_file","page":"Data Models","title":"PowerModelsDistribution.print_file","text":"print_file(path::String, data::Dict{String,<:Any}; indent::Int=2)\n\nprints a PowerModelsDistribution data structure into a JSON file\n\n\n\n\n\nprint_file(io::IO, data::Dict{String,<:Any}; indent::Int=2)\n\nprints a PowerModelsDistribution data structure into a JSON file\n\n\n\n\n\nprint_file variant for InfrastructureModel that converts to Dict first\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 = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"components.jl\"]","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.Model","page":"Data Models","title":"PowerModelsDistribution.Model","text":"Model(model_type::DataModel)\n\nInstantiates a PowerModelsDistribution data model\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_bus!","page":"Data Models","title":"PowerModelsDistribution.add_bus!","text":"adds a bus to provided ENGINEERING model, see create_bus\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_generator!","page":"Data Models","title":"PowerModelsDistribution.add_generator!","text":"adds a generator to provided ENGINEERING model, see create_generator\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_line!","page":"Data Models","title":"PowerModelsDistribution.add_line!","text":"adds a line to provided ENGINEERING model, see create_line\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_linecode!","page":"Data Models","title":"PowerModelsDistribution.add_linecode!","text":"adds a linecode to provided ENGINEERING model, see create_linecode\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_load!","page":"Data Models","title":"PowerModelsDistribution.add_load!","text":"adds a load to provided ENGINEERING model, see create_load\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_object!-Tuple{Dict{String}, String, String, Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.add_object!","text":"add_object!(data_eng::Dict{String,<:Any}, obj_type::String, obj_id::String, object::Dict{String,<:Any})\n\nGeneric add function to add components to an engineering data model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.add_shunt!","page":"Data Models","title":"PowerModelsDistribution.add_shunt!","text":"adds a shunt to provided ENGINEERING model, see create_shunt\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_solar!","page":"Data Models","title":"PowerModelsDistribution.add_solar!","text":"adds a PV to provided ENGINEERING model, see create_solar\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_storage!","page":"Data Models","title":"PowerModelsDistribution.add_storage!","text":"adds a storage to provided ENGINEERING model, see create_storage\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_switch!","page":"Data Models","title":"PowerModelsDistribution.add_switch!","text":"adds a switch to provided ENGINEERING model, see create_switch\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_transformer!","page":"Data Models","title":"PowerModelsDistribution.add_transformer!","text":"adds a transformer to provided ENGINEERING model, see create_transformer and create_al2w_transformer\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_vbase_default!-Tuple{Dict{String}, String, Real}","page":"Data Models","title":"PowerModelsDistribution.add_vbase_default!","text":"add_vbase_default!(data_eng::Dict{String,<:Any}, bus::String, vbase::Real)\n\nFunction to add default vbase for a bus\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.add_voltage_source!","page":"Data Models","title":"PowerModelsDistribution.add_voltage_source!","text":"adds a voltage source to provided ENGINEERING model, see create_voltage_source\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_xfmrcode!","page":"Data Models","title":"PowerModelsDistribution.add_xfmrcode!","text":"adds a transformer code (xmfrcode) to provided ENGINEERING model, see create_xfmrcode\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.create_al2w_transformer-Tuple{String, String, Vector{Int64}, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_al2w_transformer","text":"create_al2w_transformer(\n f_bus::String,\n t_bus::String,\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n configuration::ConnConfig=WYE,\n tm_nom::Real=1.0,\n tm_lb::Union{Vector{<:Real},Missing}=missing,\n tm_ub::Union{Vector{<:Real},Missing}=missing,\n tm_set::Union{Vector{<:Real},Missing}=missing,\n tm_fix::Union{Vector{Bool},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a aysmmetric lossless 2-winding transformer object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_bus-Tuple{}","page":"Data Models","title":"PowerModelsDistribution.create_bus","text":"create_bus(;\n status::Status=ENABLED,\n terminals::Vector{Int}=Int[],\n grounded::Vector{Int}=Int[],\n rg::Vector{<:Real}=Float64[],\n xg::Vector{<:Real}=Float64[],\n kwargs...\n)::Dict{String,Any}\n\ncreates a bus object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_generator-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_generator","text":"create_generator(\n bus::String,\n connections::Vector{Int};\n configuration::ConnConfig=WYE,\n pg::Union{Vector{<:Real},Missing}=missing,\n qg::Union{Vector{<:Real},Missing}=missing,\n vg::Union{Vector{<:Real},Missing}=missing,\n pg_lb::Union{Vector{<:Real},Missing}=missing,\n pg_ub::Union{Vector{<:Real},Missing}=missing,\n qg_lb::Union{Vector{<:Real},Missing}=missing,\n qg_ub::Union{Vector{<:Real},Missing}=missing,\n control_mode::ControlMode=FREQUENCYDROOP,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a generator object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_line-Tuple{String, String, Vector{Int64}, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_line","text":"create_line(\n f_bus::String,\n t_bus::String,\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n linecode::Union{String,Missing}=missing,\n rs::Union{Matrix{<:Real},Missing}=missing,\n xs::Union{Matrix{<:Real},Missing}=missing,\n g_fr::Union{Matrix{<:Real},Missing}=missing,\n b_fr::Union{Matrix{<:Real},Missing}=missing,\n g_to::Union{Matrix{<:Real},Missing}=missing,\n b_to::Union{Matrix{<:Real},Missing}=missing,\n length::Real=1.0,\n cm_ub::Union{Vector{<:Real},Missing}=missing,\n sm_ub::Union{Vector{<:Real},Missing}=missing,\n vad_lb::Union{Vector{<:Real},Missing}=missing,\n vad_ub::Union{Vector{<:Real},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\nCreate a line with some default values\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_linecode-Tuple{Matrix{<:Real}, Matrix{<:Real}}","page":"Data Models","title":"PowerModelsDistribution.create_linecode","text":"create_linecode(\n rs::Matrix{<:Real},\n xs::Matrix{<:Real};\n g_fr::Union{Matrix{<:Real},Missing}=missing,\n b_fr::Union{Matrix{<:Real},Missing}=missing,\n g_to::Union{Matrix{<:Real},Missing}=missing,\n b_to::Union{Matrix{<:Real},Missing}=missing,\n cm_ub::Union{Vector{<:Real},Missing}=missing,\n kwargs...\n)::Dict{String,Any}\n\ncreates a linecode with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_load-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_load","text":"create_load(\n bus::String,\n connections::Vector{Int};\n configuration::ConnConfig=WYE,\n model::LoadModel=POWER,\n pd_nom::Union{Vector{<:Real},Missing}=missing,\n qd_nom::Union{Vector{<:Real},Missing}=missing,\n vm_nom::Real=1.0,\n dispatchable::Dispatchable=NO,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a load object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_shunt-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_shunt","text":"create_shunt(\n bus::String,\n connections::Vector{Int};\n gs::Union{Matrix{<:Real},Missing}=missing,\n bs::Union{Matrix{<:Real},Missing}=missing,\n model::ShuntModel=GENERIC,\n dispatchable::Dispatchable=NO,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a generic shunt with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_solar-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_solar","text":"create_solar(\n bus::String,\n connections::Vector{Int};\n configuration::ConnConfig=WYE,\n pg_lb::Union{Vector{<:Real},Missing}=missing,\n pg_ub::Union{Vector{<:Real},Missing}=missing,\n qg_lb::Union{Vector{<:Real},Missing}=missing,\n qg_ub::Union{Vector{<:Real},Missing}=missing,\n pg::Union{Vector{<:Real},Missing}=missing,\n qg::Union{Vector{<:Real},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a solar generator with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_storage-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_storage","text":"create_storage(\n configuration::ConnConfig=WYE,\n energy::Real=0.0,\n energy_ub::Real=0.0,\n charge_ub::Real=0.0,\n discharge_ub::Real=0.0,\n sm_ub::Union{Real,Missing}=missing,\n cm_ub::Union{Real,Missing}=missing,\n charge_efficiency::Real=1.0,\n discharge_efficiency::Real=1.0,\n qs_lb::Union{Real,Missing}=missing,\n qs_ub::Union{Real,Missing}=missing,\n rs::Real=0.0,\n xs::Real=0.0,\n pex::Real=0.0,\n qex::Real=0.0,\n ps::Union{Real,Vector{<:Real},Missing}=missing,\n qs::Union{Real,Vector{<:Real},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n )::Dict{String,Any}\n\ncreates energy storage object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_switch-Tuple{String, String, Vector{Int64}, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_switch","text":"create_switch(\n f_bus::String,\n t_bus::String,\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n cm_ub::Union{Vector{<:Real},Missing}=missing,\n sm_ub::Union{Vector{<:Real},Missing}=missing,\n linecode::Union{String,Missing}=missing,\n rs::Union{Matrix{<:Real},Missing}=missing,\n xs::Union{Matrix{<:Real},Missing}=missing,\n dispatchable::Dispatchable=NO,\n state::SwitchState=CLOSED,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a switch object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_transformer-Tuple{Vector{String}, Vector{Vector{Int64}}}","page":"Data Models","title":"PowerModelsDistribution.create_transformer","text":"create_transformer(\n buses::Vector{String},\n connections::Vector{Vector{Int}};\n configurations::Union{Vector{ConnConfig},Missing}=missing,\n xfmrcode::Union{String,Missing}=missing,\n xsc::Union{Vector{<:Real},Missing}=missing,\n rw::Union{Vector{<:Real},Missing}=missing,\n imag::Real=0.0,\n noloadloss::Real=0.0,\n tm_nom::Union{Vector{<:Real},Missing}=missing,\n tm_lb::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_ub::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_set::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_fix::Union{Vector{Vector{Bool}},Missing}=missing,\n polarity::Union{Vector{Int},Missing}=missing,\n vm_nom::Union{Vector{<:Real},Missing}=missing,\n sm_nom::Union{Vector{<:Real},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a n-winding transformer object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_voltage_source-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_voltage_source","text":"create_voltage_source(\n bus::String,\n connections::Vector{Int};\n configuration::ConnConfig=WYE,\n vm::Union{Vector{<:Real},Missing}=missing,\n va::Union{Vector{<:Real},Missing}=missing,\n vm_lb::Union{Vector{<:Real},Missing}=missing,\n vm_ub::Union{Vector{<:Real},Missing}=missing,\n rs::Union{Vector{<:Real},Missing}=missing,\n xs::Union{Vector{<:Real},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a voltage source with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_xfmrcode-Tuple{}","page":"Data Models","title":"PowerModelsDistribution.create_xfmrcode","text":"create_xfmrcode(;\n configurations::Union{Vector{ConnConfig},Missing}=missing,\n xsc::Union{Vector{<:Real},Missing}=missing,\n rw::Union{Vector{<:Real},Missing}=missing,\n tm_nom::Union{Vector{<:Real},Missing}=missing,\n tm_lb::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_ub::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_set::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_fix::Union{Vector{Vector{<:Real}},Missing}=missing,\n kwargs...\n)::Dict{String,Any}\n\ncreates transformer code with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.delete_component!-Tuple{Dict{String}, String, String}","page":"Data Models","title":"PowerModelsDistribution.delete_component!","text":"delete_component!(data_eng::Dict{String,<:Any}, component_type::String, component_id::String)\n\ndeletes a component from the engineering data model\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#PowerModelsDistribution.transform_data_model","page":"Data Models","title":"PowerModelsDistribution.transform_data_model","text":"default transform_data_model ErrorException for unsupported combinations\n\n\n\n\n\n\n\n\n\ntransform_data_model(\n data::Dict{String,<:Any};\n kron_reduce::Bool=true,\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n eng2math_passthrough::Dict{String,<:Vector{<:String}}=Dict{String,Vector{String}}(),\n eng2math_extensions::Vector{<:Function}=Function[],\n make_pu::Bool=true,\n make_pu_extensions::Vector{<:Function}=Function[],\n)::Dict{String,Any}\n\nTransforms a data model model between ENGINEERING (high-level) and MATHEMATICAL (low-level) DataModel.\n\nNotes\n\nKron reduction\n\nIf kron_reduce==true, apply_kron_reduction! and apply_phase_projection_delta! will be applied to the network data.\n\nPhase projection\n\nIf phase_project==true, apply_phase_projection! will be applied to the network data.\n\nMultinetwork transformations\n\nIf multinetwork==true, the data model will be transformed into a multinetwork (e.g., time series) data structure using make_multinetwork before being transformed into a MATHEMATICAL DataModel.\n\nglobal_keys::Set{String} can be used to add custom top-level items to the multinetwork data structure, and will only be used in the context where multinetwork==true, and ignored otherwise.\n\nCustom eng2math transformations\n\nTo add custom transformations between ENGINEERING and MATHEMATICAL data models, eng2math_extensions::Vector{<:Function} can be utilized to pass user-created functions, which are expected to have the signature\n\neng2math_func!(data_math::Dict{String,Any}, data_eng::Dict{String,Any})\n\nwhere datamath and dataeng equivalent to single subnetworks in a multinetwork data structure, or a non-multinetwork data structure.\n\nThese functions are run after all built-in eng2math transformations have been performed.\n\nMapping back to ENGINEERING\n\nSee transform_solution\n\nPassthrough properties\n\nTo more simply pass through some properties in the built-in eng2math transformations, eng2math_passthrough::Dict{String,Vector{String}} can be used. For example, if in the ENGINEERING model, a property called z was added to switch objects, and a property at the root level of the dictionary was added called max_switch_actions, the user could pass the following dictionary to eng2math_passthrough:\n\nDict{String,Vector{String}}(\n \"switch\" => String[\"z\"],\n \"root\" => String[\"max_switch_actions\"],\n)\n\nThis will result in z showing up on the switch object in the MATHEMATICAL model. Passthrough properties will always land on the primary conversion object in the MATHEMATICAL model if that object gets converted to multiple object types, e.g., voltage_source with internal impedance will result in gen, bus, and branch objects in the MATHEMATICAL model, but passthrough properties will only land on gen.\n\nCustom per-unit transformations\n\nTo add additional per-unit transformations, a user can supply custom functions to make_pu_extensions::Vector{<:Function}, which will only be used if make_pu==true.\n\nSee make_per_unit! for further explanation.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.transform_solution","page":"Data Models","title":"PowerModelsDistribution.transform_solution","text":"transform_solution(\n solution_math::Dict{String,<:Any},\n data_math::Dict{String,<:Any};\n map::Union{Vector{<:Dict{String,<:Any}},Missing}=missing,\n make_si::Bool=true,\n convert_rad2deg::Bool=true,\n map_math2eng_extensions::Dict{String,<:Function}=Dict{String,Function}(),\n make_si_extensions::Vector{<:Function}=Function[],\n dimensionalize_math_extensions::Dict{String,<:Dict{String,<:Vector{<:String}}}=Dict{String,Dict{String,Vector{String}}}(),\n )::Dict{String,Any}\n\nTransforms solutions from MATHEMATICAL data structures, back to an ENGINEERING data structure, given a map::Vector{Dict{String,Any}}, typically which was produced automatically by transform_data_model.\n\nNotes\n\nIf make_si==false, the solution will remain in per-unit, rather than being converted back to SI units (default). Angles will still be converted to degrees unless convert_rad2deg is utilized.\n\nIf convert_rad2deg==false, angles will remain in radians, instead of getting converted to degrees (default).\n\nCustom SI unit conversions\n\nSee solution_make_si\n\nCustom math2eng transformations\n\nTo enable automatically mapping back custom components solutions' to the ENGINEERING structure, eng2math_extensions added in transform_data_model should include a push of an item to the map dictionary in the data_math structure. These items should have the structure:\n\nDict{String,Any}(\n \"from\" => String,\n \"to\" => Union{String,Vector{String}},\n \"unmap_function\" => PowerModelsDistribution.function!,\n \"apply_to_subnetworks\" => Bool\n)\n\nImportant things to note are that\n\nThe function must be included in map_math2eng_extensions, which has the form:\njulia Dict{String,Function}( \"_map_math2eng_func!\" => _map_math2eng_func!, )\n\"apply_to_subnetworks\" is optional, and is true by default.\n\"from\" needs to be a single object\n\"to\" can be multiple objects or a single object\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Data-Transformations","page":"Data Models","title":"Data Transformations","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"transformations.jl\"]","category":"page"},{"location":"reference/data_models.html#Multinetworks","page":"Data Models","title":"Multinetworks","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"multinetwork.jl\"]","category":"page"},{"location":"reference/data_models.html#InfrastructureModels.ismultinetwork-Tuple{AbstractUnbalancedPowerModel}","page":"Data Models","title":"InfrastructureModels.ismultinetwork","text":"ismultinetwork(pm::AbstractUnbalancedPowerModel)\n\nChecks if power model struct is multinetwork\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.make_multinetwork-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.make_multinetwork","text":"make_multinetwork(\n data::Dict{String,<:Any};\n sparse::Bool=false,\n time_elapsed::Union{Missing,Real,Vector{<:Real}}=missing,\n global_keys::Set{String}=Set{String}(),\n)::Dict{String,Any}\n\nExpands a data structure into a multinetwork assuming there are time_series objects defined and assigned to some components.\n\nIf global_keys::Set{String} is defined, the global keys that will appear at the top-level of the data structure will include both the default global keys for that data model type, and additionally the keys defined in global_keys.\n\ntime_elapsed defines the time elapsed between subnetworkin hours, and can either be a single Real value, and thus a constant time between each time step, or a Vector with the same length as the number of time steps, or can be left missing, in which case time elapsed will attempt to be discovered, with a fallback on 1 hour default. Time elapsed can be adjusted later using set_time_elapsed!\n\nmake_multinetwork assumes all \"time\" values in \"timeseries\" objects to be in the same units, and will attempt to automatically sort multinetworks in the correct order. [`sortmultinetwork!`](@ref sort_multinetwork!) can be used after the fact to re-sort the subnetworks.\n\nsparse is currently unsupported, and is only included for future compatibility\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.set_time_elapsed!-Tuple{Dict{String}, Union{Real, Vector{<:Real}}}","page":"Data Models","title":"PowerModelsDistribution.set_time_elapsed!","text":"set_time_elapsed!(data::Dict{String,<:Any}, time_elapsed::Union{Real,Vector{<:Real}})\n\nHelper function to set time_elapsed in multinetwork data, given either some constant value of time elapsed or a Vector of time elapsed values of the same length as the number of subnetworks.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.sort_multinetwork!-Tuple{Dict{String}, Vector}","page":"Data Models","title":"PowerModelsDistribution.sort_multinetwork!","text":"sort_multinetwork!(mn_data::Dict{String,<:Any}, times::Vector{<:Any})\n\nHelper function to manually sort your multinetwork frames, given some pre-sorted vector of time values times\n\n\n\n\n\n","category":"method"},{"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 = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"units.jl\"]","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.calc_eng_voltage_bases-Tuple{Dict{String}, Dict{String, <:Real}}","page":"Data Models","title":"PowerModelsDistribution.calc_eng_voltage_bases","text":"calc_eng_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}\n\nCalculates voltage bases for each voltage zone for buses and branches for a ENGINEERING data_model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.calc_math_voltage_bases-Tuple{Dict{String}, Dict{String, <:Real}}","page":"Data Models","title":"PowerModelsDistribution.calc_math_voltage_bases","text":"calc_math_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}\n\nCalculates voltage bases for each voltage zone for buses and branches for a MATHEMATICAL data_model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.calc_voltage_bases-Tuple{Dict{String}, Dict{String, <:Real}}","page":"Data Models","title":"PowerModelsDistribution.calc_voltage_bases","text":"calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}\n\nCalculates voltage bases for each voltage zone for buses and branches, attempting to automatically decern the data_model type\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.discover_eng_voltage_zones-Tuple{Dict{String, Any}}","page":"Data Models","title":"PowerModelsDistribution.discover_eng_voltage_zones","text":"discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}\n\nfinds voltage zones by walking through the network and analyzing the transformers for a ENGINEERING data_model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.discover_math_voltage_zones-Tuple{Dict{String, Any}}","page":"Data Models","title":"PowerModelsDistribution.discover_math_voltage_zones","text":"discover_math_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}\n\nfinds voltage zones by walking through the network and analyzing the transformers for a MATHEMATICAL data_model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.discover_voltage_zones-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.discover_voltage_zones","text":"discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}\n\nfinds voltage zones by walking through the network and analyzing the transformers, attempting to decern the type of data_model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.make_per_unit!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.make_per_unit!","text":"make_per_unit!(\n data::Dict{String,Any};\n vbases::Union{Missing,Dict{String,Real}}=missing,\n sbase::Union{Missing,Real}=missing,\n make_pu_extensions::Vector{<:Function}=Function[],\n)\n\nConverts units of properties to per-unit from SI units\n\nmake_pu_extensions\n\nTo add additional per-unit transformations, a user can supply custom functions to make_pu_extensions::Vector{<:Function}, which will only be used if make_pu==true.\n\nFor example, if custom properties are added to the MATHEMATICAL model via eng2math_passthrough or eng2math_extensions, those properties will not be converted to per-unit by default, and custom rules will need to be added with functions with the signature:\n\nrebase_pu_func!(\n nw::Dict{String,Any},\n data_math::Dict{String,Any},\n bus_vbase::Dict{String,Real},\n line_vbase::Dict{String,Real},\n sbase::Real,\n sbase_old::Real,\n voltage_scale_factor::Real\n)\n\nwhere,\n\nnw is equivalent to the a single subnetwork in a multinetwork data structure (which may be the same as data_math, in the case of a single network),\ndata_math is the complete data structure with the global keys,\nbus_vbase is a dictionary of the voltage bases of each bus indexed by their MATHEMATICAL model indices,\nline_vbase is a dictionary of the voltage bases of each branch indexed by their MATHEMATICAL model indices,\nsbase is the new power base,\nsbase_old is the power base the data structure started with, and\nvoltage_scale_factor is the scaling factor for voltage.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.solution_make_si-Tuple{Dict{String}, Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.solution_make_si","text":"solution_make_si(\n solution::Dict{String,<:Any},\n math_model::Dict{String,<:Any};\n mult_sbase::Bool=true,\n mult_vbase::Bool=true,\n mult_ibase::Bool=true,\n convert_rad2deg::Bool=true,\n make_si_extensions::Vector{<:Function}=Function[],\n dimensionalize_math_extensions::Dict{String,<:Dict{String,<:Vector{<:String}}}=Dict{String,Dict{String,Vector{String}}}()\n)::Dict{String,Any}\n\nTransforms solution dictionaries solution from per-unit back to SI units, requiring the original MATHEMATICAL model math_model to perform the transformation.\n\nIf mult_sbase is false, sbase variables will not be multiplied, thus remaining in per-unit\n\nIf mult_vbase is false, vbase variables will not be multiplied, thus remaining in per-unit\n\nIf mult_ibase is false, ibase variables will not be multiplied, thus remaining in per-unit\n\nIf convert_rad2deg is false, angle variables will not be multiplied, thus remaining in radians\n\nCustom SI unit conversions\n\nTo convert custom properties not part of formulations already included within PowerModelsDistribution, users will need to either specify multiplicative factors via dimensionalize_math_extensions, or pass user functions via make_si_extensions.\n\nThe latter case requires functions with the signature\n\nmake_si_func!(nw_solution, nw_data, solution, data)\n\nwhere nw_solution and nw_data are equivalent to a single subnetwork of a multinetwork structure of the solution and the data in the MATHEMATICAL format, respectively, and solution and data are the full data structures, which may be equivalent to nw_solution and nw_data, if the data is not multinetwork. Changes should be applied to nw_solution in the user functions.\n\nFor dimensionalize_math_extensions, it is possible to easily extended the SI conversions if they are straightforward conversions using vbase, sbase, ibase, or rad2deg. For example, if a custom variable cfr is added to branches, and is scaled by ibase, the following dictionary would be passed:\n\nDict{String,Dict{String,Vector{String}}}(\n \"branch\" => Dict{String,Vector{String}}(\n \"ibase\" => String[\"cfr\"]\n )\n)\n\nwhich would ensure that this variable gets converted back to SI units upon transformation.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#Data-Checking-and-Correction","page":"Data Models","title":"Data Checking and Correction","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"correct\") || startswith(string(t), \"check\")","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.check_branch_loops-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.check_branch_loops","text":"check_branch_loops(data::Dict{String,<:Any})\n\nchecks that all branches connect two distinct buses\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.check_connectivity-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.check_connectivity","text":"check_connectivity(data::Dict{String,<:Any})\n\nchecks that all buses are unique and other components link to valid buses\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.check_cost_models-Tuple{AbstractUnbalancedPowerModel}","page":"Data Models","title":"PowerModelsDistribution.check_cost_models","text":"check_cost_models(pm::AbstractUnbalancedPowerModel)\n\nChecks that all cost models are of the same type\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.check_eng_data_model-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.check_eng_data_model","text":"check_eng_data_model(data_eng::Dict{String,<:Any})\n\nchecks the engineering data model for correct data types, required fields and applies default checks\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.check_gen_cost_models-Tuple{AbstractUnbalancedPowerModel}","page":"Data Models","title":"PowerModelsDistribution.check_gen_cost_models","text":"check_gen_cost_models(pm::AbstractUnbalancedPowerModel)\n\nChecks that all generator cost models are of the same type\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_branch_directions!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.correct_branch_directions!","text":"correct_branch_directions!(data::Dict{String,<:Any})\n\nchecks that all parallel branches have the same orientation\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_bus_types!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.correct_bus_types!","text":"checks bus types are suitable for a power flow study, if not, fixes them. the primary checks are that all type 2 buses (i.e., PV) have a connected and active generator and there is a single type 3 bus (i.e., slack bus) with an active connected generator. assumes that the network is a single connected component\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_cost_functions!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.correct_cost_functions!","text":"correct_cost_functions!(data::Dict{String,<:Any})\n\nthrows warnings if cost functions are malformed\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_json_import!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.correct_json_import!","text":"correct_json_import!(data::Dict{String,<:Any})\n\nhelper function to correct data imported from json\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_mc_thermal_limits!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.correct_mc_thermal_limits!","text":"correct_mc_thermal_limits!(data::Dict{String,<:Any})\n\nchecks that each branch has non-negative thermal ratings and removes zero thermal ratings\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_mc_voltage_angle_differences!","page":"Data Models","title":"PowerModelsDistribution.correct_mc_voltage_angle_differences!","text":"correct_mc_voltage_angle_differences!(data::Dict{String,<:Any}, default_pad::Real=deg2rad(10.0))\n\nchecks that voltage angle differences are within 90 deg., if not tightens to a default of 10deg (adjustable)\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_network_data!-Tuple{Dict{String, Any}}","page":"Data Models","title":"PowerModelsDistribution.correct_network_data!","text":"correct_network_data!(data::Dict{String,Any}; make_pu::Bool=true, make_pu_extensions::Vector{<:Function}=Function[])\n\nMakes corrections and performs checks on network data structure in either ENGINEERING or MATHEMATICAL formats, and converts to per-unit if data a is MATHEMATICAL data model.\n\nIf make_pu is false, converting to per-unit will be skipped.\n\nCustom per-unit transformations\n\nSee make_per_unit!\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#Statistics-and-Analysis","page":"Data Models","title":"Statistics and Analysis","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"count_nodes\ncount_active_connections\ncount_active_terminals\nidentify_load_blocks\nidentify_blocks\nidentify_islands\ncalc_connected_components","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.count_nodes","page":"Data Models","title":"PowerModelsDistribution.count_nodes","text":"count_nodes(data::Dict{String,<:Any})::Int\n\nCounts number of nodes in network\n\n\n\n\n\ncount_nodes(data::Dict{String,<:Any})::Int\n\nCounts number of nodes in network\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.count_active_connections","page":"Data Models","title":"PowerModelsDistribution.count_active_connections","text":"count_active_connections(data::Dict{String,<:Any})\n\nCounts active ungrounded connections on edge components\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.count_active_terminals","page":"Data Models","title":"PowerModelsDistribution.count_active_terminals","text":"count_active_terminals(data::Dict{String,<:Any}; count_grounded::Bool=false)\n\nCounts active ungrounded terminals on buses\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.identify_load_blocks","page":"Data Models","title":"PowerModelsDistribution.identify_load_blocks","text":"identify_load_blocks(data::Dict{String,<:Any})\n\ncomputes load blocks based on switch locations\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.identify_blocks","page":"Data Models","title":"PowerModelsDistribution.identify_blocks","text":"identify_blocks(data::Dict{String,<:Any})\n\ncomputes connected blocks currently in the model based on switch states\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.identify_islands","page":"Data Models","title":"PowerModelsDistribution.identify_islands","text":"identify_islands(data::Dict{String,<:Any})\n\ncomputes component islands base only on edge and bus status\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.calc_connected_components","page":"Data Models","title":"PowerModelsDistribution.calc_connected_components","text":"calc_connected_components(data::Dict{String,<:Any}; edges::Union{Missing, Vector{<:String}}=missing, type::Union{Missing,String}=missing, check_enabled::Bool=true)::Set\n\ncomputes the connected components of the network graph returns a set of sets of bus ids, each set is a connected component\n\n\n\n\n\n","category":"function"},{"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":"iseng\nismath\nfind_conductor_ids!\nmake_multiconductor!\ndiscover_voltage_zones\ncalc_voltage_bases\napply_pmd!\nget_pmd_data","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.iseng","page":"Data Models","title":"PowerModelsDistribution.iseng","text":"iseng(data::Dict{String,Any})\n\nHelper function to check is data is ENGINEERING model\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.ismath","page":"Data Models","title":"PowerModelsDistribution.ismath","text":"ismath(data::Dict{String,Any})\n\nHelper function to check if data is MATHEMATICAL model\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.find_conductor_ids!","page":"Data Models","title":"PowerModelsDistribution.find_conductor_ids!","text":"find_conductor_ids!(data::Dict{String,Any})\n\nFinds all conductor ids and puts a list of them under \"conductor_ids\" at the root level\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.make_multiconductor!","page":"Data Models","title":"PowerModelsDistribution.make_multiconductor!","text":"make_multiconductor!(data::Dict{String,<:Any}, conductors::Int)\n\nThis function is not meant to be an officially supported method for creating reasonable multiconductor data sets.\n\nHacky helper function to transform single-conductor network data, from, e.g., matpower/psse, into multi-conductor data.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.discover_voltage_zones","page":"Data Models","title":"PowerModelsDistribution.discover_voltage_zones","text":"discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}\n\nfinds voltage zones by walking through the network and analyzing the transformers, attempting to decern the type of data_model\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.calc_voltage_bases","page":"Data Models","title":"PowerModelsDistribution.calc_voltage_bases","text":"calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}\n\nCalculates voltage bases for each voltage zone for buses and branches, attempting to automatically decern the data_model type\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.apply_pmd!","page":"Data Models","title":"PowerModelsDistribution.apply_pmd!","text":"apply_pmd!(func!::Function, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true, kwargs...)\n\nVersion of apply_pmd! that supports kwargs\n\n\n\n\n\napply_pmd!(func!::Function, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true, kwargs...)\n\nVersion of apply_pmd! that supports kwargs\n\n\n\n\n\napply_pmd!(func!::Function, data::Dict{String,<:Any}, args...; apply_to_subnetworks::Bool=true, kwargs...)\n\nVersion of apply_pmd! that supports args and kwargs\n\n\n\n\n\napply_pmd!(func!::Function, ref::Dict{Symbol,<:Any}, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true)\n\nPowerModelsDistribution wrapper for the InfrastructureModels apply! function\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.get_pmd_data","page":"Data Models","title":"PowerModelsDistribution.get_pmd_data","text":"get_pmd_data(data::Dict{String, <:Any})\n\nConvenience function for retrieving the power-distribution-only portion of network data\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#ObjectiveAPI","page":"Objectives","title":"Objectives","text":"","category":"section"},{"location":"reference/objectives.html","page":"Objectives","title":"Objectives","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"objective\")","category":"page"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_max_load_setpoint-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_max_load_setpoint","text":"objective_mc_max_load_setpoint(pm::AbstractUnbalancedPowerModel)\n\nmaximum loadability objective (continuous load shed) with storage\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost","text":"objective_mc_min_fuel_cost(pm::AbstractUnbalancedPowerModel)\n\nStandard fuel cost minimization objective\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost_polynomial-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost_polynomial","text":"objective_mc_min_fuel_cost_polynomial(pm::AbstractUnbalancedPowerModel)\n\nFuel cost minimization objective for polynomial terms\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost_polynomial_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost_polynomial_switch","text":"objective_mc_min_fuel_cost_polynomial_switch(pm::AbstractUnbalancedPowerModel)\n\nFuel cost minimization objective for polynomial terms including switches\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost_pwl-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost_pwl","text":"objective_mc_min_fuel_cost_pwl(pm::AbstractUnbalancedPowerModel)\n\nFuel cost minimization objective with piecewise linear terms\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost_pwl_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost_pwl_switch","text":"objective_mc_min_fuel_cost_pwl_switch(pm::AbstractUnbalancedPowerModel)\n\nFuel cost minimization objective with piecewise linear terms including switches\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost_switch","text":"objective_mc_min_fuel_cost_switch(pm::AbstractUnbalancedPowerModel)\n\nStandard fuel cost minimization objective including switches\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_load_setpoint_delta-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_load_setpoint_delta","text":"objective_mc_min_load_setpoint_delta(pm::AbstractUnbalancedPowerModel)\n\nminimum load delta objective with storage\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_load_setpoint_delta_simple-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_load_setpoint_delta_simple","text":"objective_mc_min_load_setpoint_delta_simple(pm::AbstractUnbalancedPowerModel)\n\nsimplified minimum load delta objective (continuous load shed)\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_load_setpoint_delta_simple_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_load_setpoint_delta_simple_switch","text":"objective_mc_min_load_setpoint_delta_simple_switch(pm::AbstractUnbalancedPowerModel)\n\nsimplified minimum load delta objective (continuous load shed) including a switch state term\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_slack_bus_power-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_slack_bus_power","text":"objective_mc_min_slack_bus_power(pm::AbstractUnbalancedPowerModel)\n\na quadratic penalty for bus power slack variables\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_variable_pg_cost-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_variable_pg_cost","text":"objective_mc_variable_pg_cost(pm::AbstractUnbalancedPowerModel)\n\nadds pg_cost variables and constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_variable_pg_cost-Tuple{AbstractUnbalancedIVRModel}","page":"Objectives","title":"PowerModelsDistribution.objective_variable_pg_cost","text":"objective_variable_pg_cost(pm::AbstractUnbalancedIVRModel)\n\nadds pg_cost variables and constraints for the IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#Helpers","page":"Objectives","title":"Helpers","text":"","category":"section"},{"location":"reference/objectives.html","page":"Objectives","title":"Objectives","text":"calc_max_cost_index\nsimplify_cost_terms!\ncalc_pwl_points\ncalc_cost_pwl_lines\nstandardize_cost_terms!","category":"page"},{"location":"reference/objectives.html#PowerModelsDistribution.calc_max_cost_index","page":"Objectives","title":"PowerModelsDistribution.calc_max_cost_index","text":"calc_max_cost_index(data::Dict{String,<:Any})\n\nComputes maximum cost index\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#PowerModelsDistribution.simplify_cost_terms!","page":"Objectives","title":"PowerModelsDistribution.simplify_cost_terms!","text":"simplify_cost_terms!(data::Dict{String,<:Any})\n\ntrims zeros from higher order cost terms\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#PowerModelsDistribution.calc_pwl_points","page":"Objectives","title":"PowerModelsDistribution.calc_pwl_points","text":"calc_pwl_points(ncost::Int, cost::Vector{<:Real}, pmin::Real, pmax::Real; tolerance=1e-2)\n\ncleans up raw pwl cost points in preparation for building a mathamatical model. The key mathematical properties,\n\nthe first and last points are strickly outside of the pmin-to-pmax range\npmin and pmax occur in the first and last line segments.\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#PowerModelsDistribution.calc_cost_pwl_lines","page":"Objectives","title":"PowerModelsDistribution.calc_cost_pwl_lines","text":"calc_cost_pwl_lines(comp_dict::Dict)\n\ncompute lines in m and b from from pwl cost models data is a list of components. Can be run on data or ref data structures\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#PowerModelsDistribution.standardize_cost_terms!","page":"Objectives","title":"PowerModelsDistribution.standardize_cost_terms!","text":"standardize_cost_terms!(data::Dict{String,<:Any}; order=-1)\n\nensures all polynomial costs functions have the same number of terms\n\n\n\n\n\n","category":"function"},{"location":"tutorials/basic.html#Using-PowerModelsDistribution","page":"Basics","title":"Using PowerModelsDistribution","text":"","category":"section"},{"location":"tutorials/basic.html","page":"Basics","title":"Basics","text":"Stub for basic.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","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 PowerModelsDistribution is installed, Ipopt is installed, and a network data file (e.g., \"case3_unbalanced.dss\" in the package folder under ./test/data) has been acquired, an unbalanced AC Optimal Power Flow can be executed with,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsDistribution\nusing Ipopt\n\nsolve_mc_opf(\"case3_unbalanced.dss\", ACPUPowerModel, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Parsing-files","page":"Getting Started","title":"Parsing files","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To parse an OpenDSS file into PowerModelsDistribution's default ENGINEERING format, use the parse_file command","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"eng = parse_file(\"case3_unbalanced.dss\")","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To examine the MATHEMATICAL model it is possible to transform the data model using the transform_data_model command, but this step is not necessary to run a problem.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"math = transform_data_model(eng)","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":"The run commands in PowerModelsDistribution return detailed results data in the form of a dictionary. This dictionary can be saved for further processing as follows,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_mc_opf(eng, ACPUPowerModel, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Alternatively, you can pass the file path string directly:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_mc_opf(\"case3_unbalanced.dss\", ACPUPowerModel, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Accessing-Different-Formulations","page":"Getting Started","title":"Accessing Different Formulations","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"ACPUPowerModel indicates an unbalanced (i.e., multiconductor) AC formulation in polar coordinates. This more generic solve_mc_opf allows one to solve an OPF problem with any power network formulation in PowerModelsDistribution. For example, the SDPUBFPowerModel relaxation of unbalanced Optimal Power Flow (branch flow model) can be run with,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using SCS\nsolve_mc_opf(eng, SDPUBFPowerModel, with_optimizer(SCS.Optimizer))","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Note that you have to use a SDP-capable solver, e.g., the open-source solver SCS, to solve SDP models.","category":"page"},{"location":"manual/quickguide.html#Inspecting-the-Formulation","page":"Getting Started","title":"Inspecting the Formulation","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The following example demonstrates how to break a solve_mc_opf call into separate model building and solving steps. This allows inspection of the JuMP model created by PowerModelsDistribution for the AC-OPF problem. Note that the MATHEMATICAL model must be passed to instantiate_mc_model, so the data model must either be transformed with transform_data_model or parsed directly to a MATHEMATICAL model using the data_model keyword argument:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"math = parse_file(\"case3_unbalanced.dss\"; data_model=MATHEMATICAL)\npm = instantiate_model(math, ACPUPowerModel, build_mc_opf; ref_extensions=[ref_add_arcs_trans!])\nprint(pm.model)\noptimize_model!(pm, optimizer=Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Providing-a-Warm-Start","page":"Getting Started","title":"Providing a Warm Start","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To reduce the number of solver iterations, it might be useful to provide a (good) initial value to some or all optimization variables. To do so, it is sufficient to assign a value or vector (depending on the dimensions of the variable) in the data dictionary, under the key $(variablename)_start. The example below shows how to do it for the vm and va variables.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"math = parse_file(\"case3_unbalanced.dss\"; data_model=MATHEMATICAL)\nmath[\"bus\"][\"2\"][\"vm_start\"] = [0.9959, 0.9959, 0.9959]\nmath[\"bus\"][\"2\"][\"va_start\"] = [0.00, -2.0944, 2.0944]","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Providing a bad initial value might result in the opposite effect: longer calculation times or convergence issues, so the start value assignment should be done attentively. If no initial value is provided, a flat start is assigned by default. The default initial value of each variable is indicated in the function where the variable is defined, as the last argument of the comp_start_value function. In the case of vm, this is 1.0, as shown below:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"vm = var(pm, nw)[:vm] = Dict(i => JuMP.@variable(pm.model,\n [c in 1:ncnds], base_name=\"$(nw)_vm_$(i)\",\n start = comp_start_value(ref(pm, nw, :bus, i), \"vm_start\", c, 1.0)\n ) for i in ids(pm, nw, :bus)\n)","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Finally, it should be noted that if va_start and vm_start are present in a data dictionary which is passed to the ACR or IVR formulation, these are converted to their rectangular equivalents and used as vr_start and vi_start.","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 PowerModelsDistribution.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation.","category":"page"},{"location":"reference/formulations.html#FormulationAPI","page":"Formulations","title":"Formulations","text":"","category":"section"},{"location":"reference/formulations.html#Abstract-Models","page":"Formulations","title":"Abstract Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"AbstractUnbalancedPowerModel\nAbstractUnbalancedActivePowerModel\nAbstractUnbalancedConicModel\nAbstractUBFModel\nAbstractUBFAModel\nAbstractUBFQPModel\nAbstractUBFConicModel\nAbstractUnbalancedACPModel\nAbstractUnbalancedACRModel\nAbstractUnbalancedIVRModel\nAbstractUnbalancedDCPModel\nAbstractUnbalancedNFAModel\nAbstractNLPUBFModel\nAbstractConicUBFModel\nSDPUBFModel\nSDPUBFKCLMXModel\nSOCNLPUBFModel\nSOCConicUBFModel\nAbstractLPUBFModel\nLPUBFDiagModel\nLinDist3FlowModel","category":"page"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedPowerModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedPowerModel","text":"root of the power formulation type hierarchy\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedActivePowerModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedActivePowerModel","text":"active power only models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedConicModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedConicModel","text":"variants that target conic solvers\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUBFModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUBFModel","text":"for branch flow models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUBFAModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUBFAModel","text":"for variants of branch flow models that target LP solvers\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUBFQPModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUBFQPModel","text":"for variants of branch flow models that target QP or NLP solvers\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUBFConicModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUBFConicModel","text":"for variants of branch flow models that target conic solvers\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedACPModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedACPModel","text":"Abstract Power-Voltage (Polar) formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedACRModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedACRModel","text":"Abstract Power-Voltage (Rectangular) formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedIVRModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedIVRModel","text":"Abstract Current-Voltage (Rectangular) formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedDCPModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedDCPModel","text":"\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedNFAModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedNFAModel","text":"\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractNLPUBFModel","page":"Formulations","title":"PowerModelsDistribution.AbstractNLPUBFModel","text":"Base Abstract NLP Unbalanced Branch Flow Model\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractConicUBFModel","page":"Formulations","title":"PowerModelsDistribution.AbstractConicUBFModel","text":"Base Abstract Conic Unbalanced Branch Flow Model\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SDPUBFModel","page":"Formulations","title":"PowerModelsDistribution.SDPUBFModel","text":"SDP BFM per Gan and Low 2014, PSCC\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SDPUBFKCLMXModel","page":"Formulations","title":"PowerModelsDistribution.SDPUBFKCLMXModel","text":"SDP BFM with KCL as matrix equation, Geth 2020 (under review)\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SOCNLPUBFModel","page":"Formulations","title":"PowerModelsDistribution.SOCNLPUBFModel","text":"SOC relaxation of SDPUBFModel per Kim, Kojima, & Yamashita 2003, cast as an QCP\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SOCConicUBFModel","page":"Formulations","title":"PowerModelsDistribution.SOCConicUBFModel","text":"SOC relaxation of SDPUBFModel per Kim, Kojima, & Yamashita 2003, cast as a SOC\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractLPUBFModel","page":"Formulations","title":"PowerModelsDistribution.AbstractLPUBFModel","text":"Abstract form for linear unbalanced power flow models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.LPUBFDiagModel","page":"Formulations","title":"PowerModelsDistribution.LPUBFDiagModel","text":"LinDist3Flow per Arnold et al. (2016), using vector variables for power, voltage and current\n\nD. B. Arnold, M. Sankur, R. Dobbe, K. Brady, D. S. Callaway and A. Von Meier, \"Optimal dispatch of reactive power for voltage regulation and balancing in unbalanced distribution systems,\" 2016 IEEE Power and Energy Society General Meeting (PESGM), Boston, MA, 2016, pp. 1-5, doi: 10.1109/PESGM.2016.7741261.\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.LinDist3FlowModel","page":"Formulations","title":"PowerModelsDistribution.LinDist3FlowModel","text":"More popular name for the LPUBFDiagModel\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Abstract-Union-Models","page":"Formulations","title":"Abstract Union Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"AbstractUBFModels\nKCLMXModels\nSOCUBFModels\nAbstractUnbalancedWModels\nAbstractUnbalancedWConvexModels\nAbstractUnbalancedAPLossLessModels\nAbstractUnbalancedPolarModels","category":"page"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUBFModels","page":"Formulations","title":"PowerModelsDistribution.AbstractUBFModels","text":"Collection of Unbalanced Branch Flow Models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.KCLMXModels","page":"Formulations","title":"PowerModelsDistribution.KCLMXModels","text":"Collection of Semidefinite Models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SOCUBFModels","page":"Formulations","title":"PowerModelsDistribution.SOCUBFModels","text":"Collection of Second Order Cone Models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedWModels","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedWModels","text":"Collection of AbstractUnbalancedPowerModels that include W relaxations\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedWConvexModels","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedWConvexModels","text":"Collection of convex AbstractUnbalancedPowerModels that include W relaxations\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedAPLossLessModels","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedAPLossLessModels","text":"Collection of AbstractUnbalancedPowerModels that are Active Power only and Lossless\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedPolarModels","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedPolarModels","text":"Collection of AbstractUnbalancedPowerModels that have a Polar representation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Power-Models","page":"Formulations","title":"Power Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"ACPUPowerModel\nACRUPowerModel\nIVRUPowerModel\nDCPUPowerModel\nNFAUPowerModel\nLPUBFDiagPowerModel\nLinDist3FlowPowerModel\nSDPUBFPowerModel\nSDPUBFKCLMXPowerModel\nSOCNLPUBFPowerModel\nSOCConicUBFPowerModel","category":"page"},{"location":"reference/formulations.html#PowerModelsDistribution.ACPUPowerModel","page":"Formulations","title":"PowerModelsDistribution.ACPUPowerModel","text":"AC power flow Model with polar bus voltage variables. The seminal reference of AC OPF:\n\n@article{carpentier1962contribution,\n title={Contribution to the economic dispatch problem},\n author={Carpentier, J},\n journal={Bulletin de la Societe Francoise des Electriciens},\n volume={3},\n number={8},\n pages={431--447},\n year={1962}\n}\n\nHistory and discussion:\n\n@techreport{Cain2012,\n author = {Cain, Mary B and {O' Neill}, Richard P and Castillo, Anya},\n title = {{History of optimal power flow and Models}},\n year = {2012}\n pages = {1--36},\n url = {https://www.ferc.gov/industries/electric/indus-act/market-planning/opf-papers/acopf-1-history-Model-testing.pdf}\n}\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.ACRUPowerModel","page":"Formulations","title":"PowerModelsDistribution.ACRUPowerModel","text":"AC power flow Model with rectangular bus voltage variables.\n\n@techreport{Cain2012,\n author = {Cain, Mary B and {O' Neill}, Richard P and Castillo, Anya},\n pages = {1--36},\n title = {{History of optimal power flow and Models}},\n url = {https://www.ferc.gov/industries/electric/indus-act/market-planning/opf-papers/acopf-1-history-Model-testing.pdf}\n year = {2012}\n}\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.IVRUPowerModel","page":"Formulations","title":"PowerModelsDistribution.IVRUPowerModel","text":"Current voltage formulation of AC OPF. The formulation uses rectangular coordinates for both current and voltage. Note that, even though Kirchhoff's circuit laws are linear in current and voltage, this formulation is nonconvex due to constants power loads/generators and apparent power limits.\n\n@techreport{ONeill2012,\n author = {{O' Neill}, Richard P and Castillo, Anya and Cain, Mary B},\n pages = {1--18},\n title = {{The IV formulation and linear approximations of the ac optimal power flow problem}},\n year = {2012}\n}\n\nApplicable to problem formulations with _iv in the name.\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.DCPUPowerModel","page":"Formulations","title":"PowerModelsDistribution.DCPUPowerModel","text":"Linearized 'DC' power flow Model with polar voltage variables. This model is a basic linear active-power-only approximation, which uses branch susceptance values br_b = -br_x / (br_x^2 + br_x^2) for determining the network phase angles. Furthermore, transformer parameters such as tap ratios and phase shifts are not considered as part of this model. It is important to note that it is also common for active-power-only approximations to use 1/br_x for determining the network phase angles, instead of the br_b value that is used here. Small discrepancies in solutions should be expected when comparing active-power-only approximations across multiple tools.\n\n@ARTICLE{4956966,\n author={B. Stott and J. Jardim and O. Alsac},\n journal={IEEE Transactions on Power Systems},\n title={DC Power Flow Revisited},\n year={2009},\n month={Aug},\n volume={24},\n number={3},\n pages={1290-1300},\n doi={10.1109/TPWRS.2009.2021235},\n ISSN={0885-8950}\n}\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.NFAUPowerModel","page":"Formulations","title":"PowerModelsDistribution.NFAUPowerModel","text":"The an active power only network flow approximation, also known as the transportation model.\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.LPUBFDiagPowerModel","page":"Formulations","title":"PowerModelsDistribution.LPUBFDiagPowerModel","text":"default LP unbalanced DistFlow constructor\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.LinDist3FlowPowerModel","page":"Formulations","title":"PowerModelsDistribution.LinDist3FlowPowerModel","text":"More popular name for the LPUBFDiagPowerModel\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SDPUBFPowerModel","page":"Formulations","title":"PowerModelsDistribution.SDPUBFPowerModel","text":"default SDP unbalanced DistFlow constructor\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SDPUBFKCLMXPowerModel","page":"Formulations","title":"PowerModelsDistribution.SDPUBFKCLMXPowerModel","text":"default SDP unbalanced DistFlow with matrix KCL constructor\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SOCNLPUBFPowerModel","page":"Formulations","title":"PowerModelsDistribution.SOCNLPUBFPowerModel","text":"default SOC unbalanced DistFlow constructor\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SOCConicUBFPowerModel","page":"Formulations","title":"PowerModelsDistribution.SOCConicUBFPowerModel","text":"default SOC unbalanced DistFlow constructor\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Mutable-Stuct-creator","page":"Formulations","title":"Mutable Stuct creator","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"@pmd_fields","category":"page"},{"location":"reference/formulations.html#PowerModelsDistribution.@pmd_fields","page":"Formulations","title":"PowerModelsDistribution.@pmd_fields","text":"a macro for adding the base PowerModels fields to a type definition\n\n\n\n\n\n","category":"macro"},{"location":"manual/eng2math.html#Engineering-to-Mathematical-Data-Model-Mapping","page":"Conversion to Mathematical Model","title":"Engineering to Mathematical Data Model Mapping","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"In this document we define the mapping from the engineering data model down to the mathematical data model for each physical component.","category":"page"},{"location":"manual/eng2math.html#bus-objects","page":"Conversion to Mathematical Model","title":"bus objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Buses are parsed into bus and potentially shunt objects.","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"The mathematical bus model contains only lossless connections to ground. All other connections to grounds are converted to equivalent shunts at that bus. For example, take a bus defined as","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"bus_eng = Dict(\"grounded\"=>[4, 5], \"rg\"=>[1.0, 0.0], \"xg\"=>[2.0, 0.0],...).","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"This is equivalent to a shunt g+im*b = 1/(1.0+im*2.0) connected to terminal 4, and a lossless grounding at terminal 5 (since rg[2]==xg[2]==0.0). This is mapped to","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"bus_math = Dict(\"grounded\"=>[5], ...),","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"shunt_math = Dict(\"connections\"=>[4], \"b\"=>[b], \"g\"=>[g]...).","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"This simplifies the mathematical model, as the modeller does no longer have to consider lossy groundings explicitly.","category":"page"},{"location":"manual/eng2math.html#line-objects","page":"Conversion to Mathematical Model","title":"line objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Lines are parsed into branch objects with transformer=false","category":"page"},{"location":"manual/eng2math.html#switch-objects","page":"Conversion to Mathematical Model","title":"switch objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Switches are parsed into switch. If there are loss parameters provided (i.e. rs and/or xs) then a virtual branch and virtual bus are created to model the impedance","category":"page"},{"location":"manual/eng2math.html#transformer-objects","page":"Conversion to Mathematical Model","title":"transformer objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"A transformer can have N windings, each with its own configuration (delta or wye are supported). This is decomposed to a network of N lossless, two-winding transformers which connect to an internal loss model. The to-winding is always wye-connected, hence we refer to these transformers as 'asymmetric'.","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"The internal loss model is a function of","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"the winding resistance rw,\nthe short-circuit reactance xsc,\nthe no-load loss properties noloadloss (resistive) and magnetizing current imag (reactive).","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"If all of these are non-zero, this leads to an internal loss model consisting of N virtual buses, (N^2+N)/2 virtual branches, and 1 shunt. These virtual buses and branches are automatically merged and simplified whenever possible; e.g., when all these loss parameters are zero, this simplifies to a single virtual bus, to which all two-winding transformers connect.","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"For more detail, please refer to [upcoming technical paper]. #TODO add link to paper","category":"page"},{"location":"manual/eng2math.html#shunt-objects","page":"Conversion to Mathematical Model","title":"shunt objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Shunts are parsed directly into shunt objects.","category":"page"},{"location":"manual/eng2math.html#load-objects","page":"Conversion to Mathematical Model","title":"load objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Loads are parsed into load objects. See the discussion under the Load Model documentation on the sidebar, for a detailed discussion of the various load models.","category":"page"},{"location":"manual/eng2math.html#generator-objects","page":"Conversion to Mathematical Model","title":"generator objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Generators are parsed into gen objects.","category":"page"},{"location":"manual/eng2math.html#solar-objects","page":"Conversion to Mathematical Model","title":"solar objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Solar objects (photovoltaic systems) are parsed into gen objects.","category":"page"},{"location":"manual/eng2math.html#voltage_source-objects","page":"Conversion to Mathematical Model","title":"voltage_source objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Voltage sources are parsed into gen objects. If loss parameters are specified (i.e. rs and/or xs) then a virtual bus and branch are created to model the internal impedance.","category":"page"},{"location":"manual/eng-data-model.html#Engineering-Data-Model","page":"Engineering Data Model","title":"Engineering Data Model","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"This document describes the ENGINEERING data model type in PowerModelsDistribution, which is transformed at runtime, or at the user's direction into a MATHEMATICAL data model for optimization.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"In this document,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"nphases refers to the number of non-neutral, non-ground active phases connected to a component,\nnconductors refers to all active conductors connected to a component, i.e. length(connections), and\nnwindings refers to the number of windings of a transformer.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The data structure is in the following format","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Dict{String,Any}(\n \"data_model\" => ENGINEERING,\n \"component_type\" => Dict{String,Dict{String,Any}}(\n id => Dict{String,Any}(\n \"parameter\" => value,\n ...\n ),\n ...\n ),\n ...\n)","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Valid component types are those that are documented in the sections below. Each component object is identified by an id, which must be a string (id <: String), but id does not appear inside of the component dictionary, and only appears as keys to the component dictionaries under each component type. Note that this requirement is so that data structures will be JSON serializable.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Each edge or node component (i.e. all those that are not data objects or buses), is expected to have status fields to specify whether the component is active or disabled, bus or f_bus and t_bus, to specify the buses that are connected to the component, and connections or f_connections and t_connections, to specify the terminals of the buses that are actively connected in an ordered list. NOTE: terminals, connections, f_connections, and t_connections, must be type Vector{Int}.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Parameter values on components are expected to be specified in SI units by default (where applicable) in the engineering data model. Relevant expected units are noted in the sections below. It is possible for the user to select universal scalar factors for power and voltages. For example, if power_scalar_factor and voltage_scalar_factor are their default values given below, where units is listed as watt or var, real units will be kW and kvar. Where units are listed as volt, real units will be kV (multiplied by vm_nom, where that value exists).","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The Used column describes the situations where certain parameters are used. \"always\" indicates those values are used in all contexts, opf, mld, or any other problem name abbreviation indicate they are used in particular for those problems. \"solution\" indicates that those parameters are outputs from the solvers. \"multinetwork\" indicates these values are only used to build multinetwork problems.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Those parameters that have a default may be omitted by the user from the data model, they will be populated by the specified default values.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Components that support \"codes\", such as lines, switches, and transformers, behave such that any property on said object that conflicts with a value in the code will override the value given in the code object. This is noted on each object where this is relevant.","category":"page"},{"location":"manual/eng-data-model.html#Root-Level-Properties","page":"Engineering Data Model","title":"Root-Level Properties","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"At the root level of the data structure, the following fields can be found.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Used Description\nname String Case name\ndata_model ENGINEERING DataModel always ENGINEERING, MATHEMATICAL, or DSS. Type of the data model (this document describes data_model==ENGINEERING)\nsettings Dict() Dict{String,<:Any} always Base settings for the data model, see Settings section below for details","category":"page"},{"location":"manual/eng-data-model.html#Settings-(settings)","page":"Engineering Data Model","title":"Settings (settings)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"At the root-level of the data model a settings dictionary object is expected, containing the following fields.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nvoltage_scale_factor 1e3 Real always Scalar multiplier for voltage values\npower_scale_factor 1e3 Real always Scalar multiplier for power values\nvbases_default Dict{String,Real} always Instruction to set the vbase at a number of buses for non-dimensionalization\nsbase_default Real always Instruction to set the power base for non-dimensionalization\nbase_frequency 60.0 Real Hz always Frequency base, i.e. the base frequency of the whole circuit","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The parameters voltage_scale_factor and power_scale_factordetermine the base for all voltage and power parameters in this data model. For example,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"voltage_scale_factor=1E3 and vm_nom=4.0: vm_nom is 4.0 kV/4.0E3 V,\npower_scale_factor=1E6 and pd_nom=2.0: pd_nom is 2.0 MW/2.0E6 W,\npower_scale_factor=1E6 and qd_nom=5.0: qd_nom is 5.0 MVAr/5.0E6 VAr,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"where the mentioned fields vm_nom, pd_nom and qd_nom are sample voltage and power variables which are defined later.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"On the other hand,vbase_default and sbase_default provide default values for a 'per unit' conversion; these do not affect the interpretation of the parameters in this model, like the scale factors do. Note that vbase_default is a Dict{Any,Real}, with pairs of bus ids and voltage magnitude levels, since in per unit conversion, the voltage base can change from bus to bus. The power base is the same everywhere, and therefore sbase_default has a single value.","category":"page"},{"location":"manual/eng-data-model.html#Buses-(bus)","page":"Engineering Data Model","title":"Buses (bus)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The data model below allows us to include buses of arbitrary many terminals (i.e., more than the usual four). This would be useful for","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"underground lines with multiple neutrals which are not joined at every bus;\ndistribution lines that carry several conventional lines in parallel (see for example the quad circuits in NEVTestCase).","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nterminals [1,2,3,4] Vector{Int} always Terminals for which the bus has active connections\nvm_lb Vector{Real} volt opf Minimum conductor-to-ground voltage magnitude, size=nphases\nvm_ub Vector{Real} volt opf Maximum conductor-to-ground voltage magnitude, size=nphases\nvm_pair_ub Vector{Tuple} opf e.g. [(1,2,210)] means |U1-U2|>210\nvm_pair_lb Vector{Tuple} opf e.g. [(1,2,230)] means |U1-U2|<230\ngrounded [] Vector{Int} always List of terminals which are grounded\nrg [] Vector{Real} always Resistance of each defined grounding, size=length(grounded)\nxg [] Vector{Real} always Reactance of each defined grounding, size=length(grounded)\nvm Vector{Real} volt always Voltage magnitude at bus. If set, voltage magnitude at bus is fixed\nva Vector{Real} degree always Voltage angle at bus. If set, voltage angle at bus is fixed\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Each terminal c of the bus has an associated complex voltage phasor v[c]. There are two types of voltage magnitude bounds. The first type bounds the voltage magnitude of each v[c] individually,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"lb <= |v[c]| <= ub","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"However, especially in four-wire networks, bounds are more naturally imposed on the difference of two terminal voltages instead, e.g. for terminals c and d,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"lb <= |v[c]-v[d]| <= ub","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"This is why we introduce the fields vm_pair_lb and vm_pair_ub, which define bounds for pairs of terminals,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"forall\n(c,d,lb) in vm_pair_lb: |v[c]-v[d]| >= lb\nforall\n(c,d,ub) in vm_pair_ub: |v[c]-v[d]| <= ub","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Finally, we give an example of how grounding impedances should be entered. If terminal 4 is grounded through an impedance Z=1+j2, we write","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"grounded=[4], rg=[1], xg=[2]","category":"page"},{"location":"manual/eng-data-model.html#Special-Case:-three-phase-bus","page":"Engineering Data Model","title":"Special Case: three-phase bus","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"For three-phase buses, instead of specifying bounds explicitly for each pair of windings, often we want to specify 'phase-to-phase', 'phase-to-neutral' and 'neutral-to-ground' bounds. This can be done conveniently with a number of additional fields. First, phases is a list of the phase terminals, and neutral designates a single terminal to be the neutral.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The bounds vm_pn_lb and vm_pn_ub specify the same lower and upper bound for the magnitude of the difference of each phase terminal and the neutral.\nThe bounds vm_pp_lb and vm_pp_ub specify the same lower and upper bound for the magnitude of the difference of all phase terminals.\nvm_ng_ub specifies an upper bound for the neutral terminal, the lower bound is typically zero.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"If all of these are specified, these bounds also imply valid bounds for the individual voltage magnitudes,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"forall\nc in phases: vm_pn_lb - vm_ng_ub <= |v[c]| <= vm_pn_ub + vm_ng_ub\n0 <= |v[neutral]|<= vm_ng_ub","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Instead of defining the bounds directly, they can be specified through an associated voltage zone.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nphases Vector{Int} always Identifies the terminal that represents the neutral conductor\nneutral Int always Identifies the terminal that represents the neutral conductor\nvm_pn_lb Real opf Minimum phase-to-neutral voltage magnitude for all phases\nvm_pn_ub Real opf Maximum phase-to-neutral voltage magnitude for all phases\nvm_pp_lb Real opf Minimum phase-to-phase voltage magnitude for all phases\nvm_pp_ub Real opf Maximum phase-to-phase voltage magnitude for all phases\nvm_ng_ub Real opf Maximum neutral-to-ground voltage magnitude","category":"page"},{"location":"manual/eng-data-model.html#Edge-Objects","page":"Engineering Data Model","title":"Edge Objects","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"These objects represent edges on the power grid and therefore require f_bus and t_bus (or buses in the case of transformers), and f_connections and t_connections (or connections in the case of transformers).","category":"page"},{"location":"manual/eng-data-model.html#Lines-(line)","page":"Engineering Data Model","title":"Lines (line)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"This is a pi-model branch. When a linecode is given, and any of rs, xs, b_fr, b_to, g_fr or g_to are specified, any of those overwrite the values on the linecode.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nf_bus String always id of from-side bus connection\nt_bus String always id of to-side bus connection\nf_connections Vector{Int} always Indicates for each conductor, to which terminal of the f_bus it connects\nt_connections Vector{Int} always Indicates for each conductor, to which terminal of the t_bus it connects\nlinecode String always id of an associated linecode\nrs Matrix{Real} ohm/meter always Series resistance matrix, size=(nconductors,nconductors)\nxs Matrix{Real} ohm/meter always Series reactance matrix, size=(nconductors,nconductors)\ng_fr zeros(nconductors, nconductors) Matrix{Real} siemens/meter/Hz always From-side conductance, size=(nconductors,nconductors)\nb_fr zeros(nconductors, nconductors) Matrix{Real} siemens/meter/Hz always From-side susceptance, size=(nconductors,nconductors)\ng_to zeros(nconductors, nconductors) Matrix{Real} siemens/meter/Hz always To-side conductance, size=(nconductors,nconductors)\nb_to zeros(nconductors, nconductors) Matrix{Real} siemens/meter/Hz always To-side susceptance, size=(nconductors,nconductors)\nlength 1.0 Real meter always Length of the line\ncm_ub Vector{Real} amp opf Symmetrically applicable current rating, size=nconductors\nsm_ub Vector{Real} watt opf Symmetrically applicable power rating, size=nconductors\nvad_lb Vector{Real} degree opf Voltage angle difference lower bound\nvad_ub Vector{Real} degree opf Voltage angle difference upper bound\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively","category":"page"},{"location":"manual/eng-data-model.html#Transformers-(transformer)","page":"Engineering Data Model","title":"Transformers (transformer)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"These are n-winding (nwinding), n-phase (nphase), lossy transformers. Note that most properties are now Vectors (or Vectors of Vectors), indexed over the windings.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nbus Vector{String} always List of bus for each winding, size=nwindings\nconnections Vector{Vector{Int}} always List of connection for each winding, size=((nconductors),nwindings)\nconfigurations fill(WYE, nwindings) Vector{ConnConfig} always WYE or DELTA. List of configuration for each winding, size=nwindings\nxfmrcode String always id of\nxsc zeros(nwindings*(nwindings-1)/2) Vector{Real} sm_nom[1] always List of short-circuit reactances between each pair of windings, relative to the VA rating of the first winding; enter as a list of the upper-triangle elements\nrw zeros(nwindings) Vector{Real} sm_nom[1] always Active power lost due to resistance of each winding, relative to the VA rating of each winding winding\ncmag 0.0 Real sm_nom[1] always Total no-load reactive power drawn by the transformer, relative to VA rating of the first winding (magnetizing current)\nnoloadloss 0.0 Real sm_nom[1] always Total no-load active power drawn by the transformer, relative to VA rating of the first winding\ntm_nom ones(nwindings) Vector{Real} always Nominal tap ratio for the transformer, size=nwindings (multiplier)\ntm_ub Vector{Vector{Real}} opf Maximum tap ratio for each winding and phase, size=((nphases),nwindings) (base=tm_nom)\ntm_lb Vector{Vector{Real}} opf Minimum tap ratio for for each winding and phase, size=((nphases),nwindings) (base=tm_nom)\ntm_set fill(fill(1.0,nphases),nwindings) Vector{Vector{Real}} always Set tap ratio for each winding and phase, size=((nphases),nwindings) (base=tm_nom)\ntm_fix fill(fill(true,nphases),nwindings) Vector{Vector{Bool}} oltc Indicates for each winding and phase whether the tap ratio is fixed, size=((nphases),nwindings)\npolarity fill(1,nwindings) Vector{Int} always \nvm_nom Vector{Real} volt always \nsm_nom Vector{Real} watt always \nsm_ub Real watt opf Rating for the total apparent power magnitude at each winding\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively","category":"page"},{"location":"manual/eng-data-model.html#Asymmetric,-Lossless,-Two-Winding-(AL2W)-Transformers-(transformer)","page":"Engineering Data Model","title":"Asymmetric, Lossless, Two-Winding (AL2W) Transformers (transformer)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Special case of the Generic transformer, which is still a transformer object, but has a simplified method for its definition. These are transformers are asymmetric (A), lossless (L) and two-winding (2W). Asymmetric refers to the fact that the secondary is always has a WYE configuration, whilst the primary can be DELTA. The table below indicates alternate, more simple ways to specify the special case of an AL2W Transformer. xsc and rw cannot be specified for an AL2W transformer, because it is lossless. To use this definition format, all of f_bus, t_bus, f_connections, t_connections, and configuration must be used, and none of buses, connections, configurations may be used. xfmrcode is ignored for this component.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nf_bus String always Alternative way to specify buses, requires both f_bus and t_bus\nt_bus String always Alternative way to specify buses, requires both f_bus and t_bus\nf_connections Vector{Int} always Alternative way to specify connections, requires both f_connections and t_connections, size=nphases\nt_connections Vector{Int} always Alternative way to specify connections, requires both f_connections and t_connections, size=nphases\nconfiguration WYE ConnConfig always WYE or DELTA. Alternative way to specify the from-side configuration, to-side is always WYE\ntm_nom 1.0 Real always Nominal tap ratio for the transformer (multiplier)\ntm_ub Vector{Real} opf Maximum tap ratio for each phase (base=tm_nom), size=nphases\ntm_lb Vector{Real} opf Minimum tap ratio for each phase (base=tm_nom), size=nphases\ntm_set fill(1.0,nphases) Vector{Real} always Set tap ratio for each phase (base=tm_nom), size=nphases\ntm_fix fill(true,nphases) Vector{Bool} oltc Indicates for each phase whether the tap ratio is fixed, size=nphases\nsm_ub Real opf Rating for the total apparent power magnitude at each winding","category":"page"},{"location":"manual/eng-data-model.html#Transformers-with-voltage-regulator-control-(controls)","page":"Engineering Data Model","title":"Transformers with voltage regulator control (controls)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Special case of the Generic transformer, which is part of the transformer object, and emulates a standard utility voltage regulator. The taps of these transformers can be controlled by modelling a line drop compensator.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nvreg Vector{Vector{Real}} volt oltc Voltage regulator reference, default value is 120.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)\nband Vector{Vector{Real}} volt oltc Voltage bandwidth, default value is 3.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)\nptratio Vector{Vector{Real}} oltc Voltage ratio of the potential transformer, default value is 60.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)\nctprim Vector{Vector{Real}} amp oltc Current transformer rating on primary side, default value is 300.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)\nr Vector{Vector{Real}} volt oltc Resistance setting on line drop compensator, default value is 0.0 for both controlled winding and winding without regulator control, size=((nphases),nwindings)\nx Vector{Vector{Real}} volt oltc Reactance setting on line drop compensator, default value is 0.0 for both controlled winding and winding without regulator control, size=((nphases),nwindings)","category":"page"},{"location":"manual/eng-data-model.html#Switches-(switch)","page":"Engineering Data Model","title":"Switches (switch)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Switches without rs, xs or a linecode (conductance/susceptance not considered), defined the switch will be treated as lossless. If lossy parameters are defined, switch objects will be decomposed into virtual branch & bus, and an ideal switch.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nf_bus String always id of from-side bus connection\nt_bus String always id of to-side bus connection\nf_connections Vector{Int} always Indicates for each conductor, to which terminal of the f_bus it connects\nt_connections Vector{Int} always Indicates for each conductor, to which terminal of the t_bus it connects\ncm_ub Vector{Real} amp opf Symmetrically applicable current rating\nsm_ub Vector{Real} watt opf Symmetrically applicable power rating\nlinecode String always id of an associated linecode, does not take into account conductance/susceptance\nrs zeros(nphases,nphases) Matrix{Real} ohm always Series resistance matrix, size=(nphases,nphases)\nxs zeros(nphases,nphases) Matrix{Real} ohm always Series reactance matrix, size=(nphases,nphases)\ndispatchable NO Dispatchable NO or YES, indicates whether switch state can be changed in a switching optimization problem\nstate CLOSED SwitchState always CLOSED: closed or OPEN: open, to indicate state of switch\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively","category":"page"},{"location":"manual/eng-data-model.html#Node-Objects","page":"Engineering Data Model","title":"Node Objects","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"These are objects that have single bus connections. Every object will have at least bus, connections, and status.","category":"page"},{"location":"manual/eng-data-model.html#Shunts-(shunt)","page":"Engineering Data Model","title":"Shunts (shunt)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\ngs Matrix{Real} siemens always Conductance, size=(nconductors,nconductors)\nbs Matrix{Real} siemens always Susceptance, size=(nconductors,nconductors)\nmodel GENERIC ShuntModel GENERIC, CAPACITOR, or REACTOR. Indicates the type of shunt which may be necessary for transient stability analysis\ndispatchable NO Dispatchable mld NO or YES, indicates whether a shunt can be shed\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,Any} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html#Shunts-with-capacitor-control-(controls)","page":"Engineering Data Model","title":"Shunts with capacitor control (controls)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Special case of the shunt capacitors, which is part of the shunt object, and emulates a typical utility capacitor control (CapControl) by sending switching messages.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\ntype Vector{String} capc Control type, default is current for controlled phase, `for uncontrolled phase,size=1forkvartype, otherwisesize=(nphases)`\nelement String capc source_id of element (typically line or transformer) to which CapControl is connected\nterminal Vector{Int} capc Number of the terminal of circuit element to which CapControl is connected, default is 1 for controlled phase, 0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)\nonsetting Vector{Real} capc Value at which the CapControl switches the capacitor on, default is 300.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)\noffsetting Vector{Real} capc Value at which the CapControl switches the capacitor off, default is 200.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)\nvoltoverride Vector{Bool} capc Indicate whether voltage over ride is enabled, default is false for both controlled and uncontrolled phases, size=1 for kvar type, otherwise size=(nphases)\nptratio Vector{Real} capc Ratio of potential transformer, default is 60.0 for controlled phase, 0.0 for uncontrolled phase, size=(nphases)\nctratio Vector{Real} capc Ratio of current transformer, default is 60.0 for controlled phase, 0.0 for uncontrolled phase, size=(nphases)\nvmin Vector{Real} volt capc Minimum voltage below which CapControl switches the capacitor on, default is 115.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)\nvmax Vector{Real} volt capc Maximum voltage above which CapControl switches the capacitor off, default is 126.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)","category":"page"},{"location":"manual/eng-data-model.html#Loads-(load)","page":"Engineering Data Model","title":"Loads (load)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\nconfiguration WYE ConnConfig always WYE or DELTA. If WYE, connections[end]=neutral\nmodel POWER LoadModel always POWER, IMPEDANCE, CURRENT, EXPONENTIAL, or ZIP. Indicates the type of voltage-dependency\npd_nom Vector{Real} watt always Nominal active load, with respect to vm_nom, size=nphases\nqd_nom Vector{Real} var always Nominal reactive load, with respect to vm_nom, size=nphases\nvm_nom Real volt model!=POWER Nominal voltage (multiplier)\ndispatchable NO Dispatchable mld NO or YES, indicates whether a load can be shed\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Multi-phase loads define a number of individual loads connected between two terminals each. How they are connected, is defined both by configuration and connections. The table below indicates the value of configuration and lengths of the other properties for a consistent definition,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"configuration connections pd_nom | qd_nom | pd_exp\nDELTA 2 1\nDELTA 3 3\nWYE 2 1\nWYE 3 2\nWYE N N-1","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Note that for delta loads, only 2 and 3 connections are allowed. Each individual load i is connected between two terminals, exposed to a voltage magnitude v[i], which leads to a consumption pd[i]+j*qd[i]. The model then defines the relationship between these quantities,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"model pd[i]/pd_nom[i]= qd[i]/qd_nom[i]=\nPOWER 1 1\nCURRENT (v[i]/vm_nom) (v[i]/vm_nom)\nIMPEDANCE (v[i]/vm_nom)^2 (v[i]/vm_nom)^2","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Two more model types are supported, which need additional fields and are defined below.","category":"page"},{"location":"manual/eng-data-model.html#model-EXPONENTIAL","page":"Engineering Data Model","title":"model == EXPONENTIAL","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"(pd[i]/pd_nom[i]) = (v[i]/vm_nom)^pd_exp[i]\n(qd[i]/qd_nom[i]) = (v[i]/vm_nom)^qd_exp[i]","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\npd_exp Real model==EXPONENTIAL \nqd_exp Real model==EXPONENTIAL ","category":"page"},{"location":"manual/eng-data-model.html#model-ZIP","page":"Engineering Data Model","title":"model == ZIP","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"ZIP load models are split into IMPEDANCE, CURRENT, POWER models.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"(pd[i]/pd_nom) = pd_cz[i]*(v[i]/vm_nom)^2 + pd_ci[i]*(v[i]/vm_nom) + pd_cp[i]\n(qd[i]/qd_nom) = qd_cz[i]*(v[i]/vm_nom)^2 + qd_ci[i]*(v[i]/vm_nom) + qd_cp[i]","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nzipv Vector{Real} model==ZIP First 3 are ZIP weighting factors for active power (pd_cz,pd_ci,pd_cp), next 3 are ZIP weighting factors for reactive power (qd_cz,qd_ci,qd_cp), last 1 is cut-off voltage in p.u. of base kV; load is 0 below this cut-off","category":"page"},{"location":"manual/eng-data-model.html#Generators-(generator)","page":"Engineering Data Model","title":"Generators (generator)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\nconfiguration WYE ConnConfig always WYE or DELTA. If WYE, connections[end]=neutral\nvg Vector{Real} volt control_mode==ISOCHRONOUS Voltage magnitude setpoint\npg_lb zeros(nphases) Vector{Real} watt opf Lower bound on active power generation per phase, size=nphases\npg_ub fill(Inf, nphases) Vector{Real} watt opf Upper bound on active power generation per phase, size=nphases\nqg_lb -pg_ub Vector{Real} var opf Lower bound on reactive power generation per phase, size=nphases\nqg_ub pg_ub Vector{Real} var opf Upper bound on reactive power generation per phase, size=nphases\npg Vector{Real} watt solution Present active power generation per phase, size=nphases\nqg Vector{Real} var solution Present reactive power generation per phase, size=nphases\ncontrol_mode FREQUENCYDROOP ControlMode FREQUENCYDROOP or ISOCHRONOUS\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html#generator-Cost-Model","page":"Engineering Data Model","title":"generator Cost Model","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The generator cost model is currently specified by the following fields.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\ncost_pg_model 2 Int opf Cost model type, 1 = piecewise-linear, 2 = polynomial\ncost_pg_parameters [0.0, 1.0, 0.0] Vector{Real} /MVA opf Cost model polynomial","category":"page"},{"location":"manual/eng-data-model.html#Photovoltaic-Systems-(solar)","page":"Engineering Data Model","title":"Photovoltaic Systems (solar)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\nconfiguration WYE ConnConfig always WYE or DELTA. If WYE, connections[end]=neutral\npg_lb Vector{Real} watt opf Lower bound on active power generation per phase, size=nphases\npg_ub Vector{Real} watt opf Upper bound on active power generation per phase, size=nphases\nqg_lb Vector{Real} var opf Lower bound on reactive power generation per phase, size=nphases\nqg_ub Vector{Real} var opf Upper bound on reactive power generation per phase, size=nphases\npg Vector{Real} watt solution Present active power generation per phase, size=nphases\nqg Vector{Real} var solution Present reactive power generation per phase, size=nphases\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html#solar-Cost-Model","page":"Engineering Data Model","title":"solar Cost Model","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The cost model for a photovoltaic system currently matches that of generators.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\ncost_pg_model 2 Int opf Cost model type, 1 = piecewise-linear, 2 = polynomial\ncost_pg_parameters [0.0, 1.0, 0.0] Vector{Real} /MVA opf Cost model polynomial","category":"page"},{"location":"manual/eng-data-model.html#Wind-Turbine-Systems-(wind)","page":"Engineering Data Model","title":"Wind Turbine Systems (wind)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Wind turbine systems are most closely approximated by induction machines, also known as asynchronous machines. These are not currently supported, but there is plans to support them in the future.","category":"page"},{"location":"manual/eng-data-model.html#Storage-(storage)","page":"Engineering Data Model","title":"Storage (storage)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"A storage object is a flexible component that can represent a variety of energy storage objects, like Li-ion batteries, hydrogen fuel cells, flywheels, etc.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"How to include the inverter model for this? Similar issue as for a PV generator","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\nconfiguration WYE ConnConfig always WYE or DELTA. If WYE, connections[end]=neutral\nenergy Real watt-hr always Stored energy\nenergy_ub Real opf maximum energy rating\ncharge_ub Real opf maximum charge rating\ndischarge_ub Real opf maximum discharge rating\nsm_ub Real watt opf Power rating,\ncm_ub Real amp opf Current rating,\ncharge_efficiency Real percent always charging efficiency (losses)\ndischarge_efficiency Real percent always discharging efficiency (losses)\nqs_ub Real opf Maximum reactive power injection,\nqs_lb Real opf Minimum reactive power injection,\nrs Real ohm always converter resistance\nxs Real ohm always converter reactance\npex Real always Total active power standby exogenous flow (loss)\nqex Real always Total reactive power standby exogenous flow (loss)\nps Vector{Real} watt solution Present active power injection\nqs Vector{Real} var solution Present reactive power injection\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html#Voltage-Sources-(voltage_source)","page":"Engineering Data Model","title":"Voltage Sources (voltage_source)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"A voltage source is a source of power at a set voltage magnitude and angle connected to a slack bus. If rs or xs are not specified, the voltage source is assumed to be lossless, otherwise virtual branch and bus will be created in the mathematical model to represent the internal losses of the voltage source.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\nconfiguration WYE ConnConfig always WYE or DELTA. If WYE, connections[end]=neutral\nvm ones(nphases) Vector{Real} volt always Voltage magnitude set at slack bus, size=nphases\nva zeros(nphases) Real degree always Voltage angle offsets at slack bus, applies symmetrically to each phase angle\nrs zeros(nconductors,nconductors) Matrix{Real} ohm always Internal series resistance of voltage source, size=(nconductors,nconductors)\nxs zeros(nconductors,nconductors) Matrix{Real} ohm always Internal series reactance of voltage soure, size=(nconductors,nconductors)\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html#Data-Objects-(codes,-time-series,-etc.)","page":"Engineering Data Model","title":"Data Objects (codes, time series, etc.)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"These objects are referenced by node and edge objects, but are not part of the network themselves, only containing data.","category":"page"},{"location":"manual/eng-data-model.html#Linecodes-(linecode)","page":"Engineering Data Model","title":"Linecodes (linecode)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Linecodes are easy ways to specify properties common to multiple lines.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nrs Matrix{Real} ohm/meter always Series resistance, size=(nconductors,nconductors)\nxs Matrix{Real} ohm/meter always Series reactance, size=(nconductors,nconductors)\ng_fr zeros(nconductors,nconductors) Matrix{Real} siemens/meter/Hz always From-side conductance, size=(nconductors,nconductors)\nb_fr zeros(nconductors,nconductors) Matrix{Real} siemens/meter/Hz always From-side susceptance, size=(nconductors,nconductors)\ng_to zeros(nconductors,nconductors) Matrix{Real} siemens/meter/Hz always To-side conductance, size=(nconductors,nconductors)\nb_to zeros(nconductors,nconductors) Matrix{Real} siemens/meter/Hz always To-side susceptance, size=(nconductors,nconductors)\ncm_ub fill(Inf,nconductors) Vector{Real} ampere opf maximum current per conductor, symmetrically applicable\nsm_ub fill(Inf,nconductors) Vector{Real} watt opf maximum power per conductor, symmetrically applicable","category":"page"},{"location":"manual/eng-data-model.html#Transformer-Codes-(xfmrcode)","page":"Engineering Data Model","title":"Transformer Codes (xfmrcode)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Transformer codes are easy ways to specify properties common to multiple transformers","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nconfigurations fill(WYE, nwindings) Vector{ConnConfig} always WYE or DELTA. List of configuration for each winding, size=nwindings\nxsc [0.0] Vector{Real} ohm always List of short-circuit reactances between each pair of windings; enter as a list of the upper-triangle elements, size=(nwindings == 2 ? 1 : 3)\nrw zeros(nwindings) Vector{Real} ohm always List of the winding resistance for each winding, size=nwindings\ntm_nom ones(nwindings) Vector{Real} always Nominal tap ratio for the transformer, size=nwindings (multiplier)\ntm_ub Vector{Vector{Real}} opf Maximum tap ratio for each winding and phase, size=((nphases), nwindings) (base=tm_nom)\ntm_lb Vector{Vector{Real}} opf Minimum tap ratio for for each winding and phase, size=((nphases), nwindings) (base=tm_nom)\ntm_set fill(fill(1.0, nphases), nwindings) Vector{Vector{Real}} always Set tap ratio for each winding and phase, size=((nphases), nwindings) (base=tm_nom)\ntm_fix fill(fill(true, nphases), nwindings) Vector{Vector{Bool}} always Indicates for each winding and phase whether the tap ratio is fixed, size=((nphases), nwindings)","category":"page"},{"location":"manual/eng-data-model.html#Time-Series-(time_series)","page":"Engineering Data Model","title":"Time Series (time_series)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Time series objects are used to specify time series for e.g. load or generation forecasts.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Some parameters for components specified in this document can support a time series by inserting a reference to a time_series object into the time_series dictionary inside a component under the relevant parameter name. For example, for a load, if pd_nom is supposed to be a time series, the user would specify \"time_series\" => Dict(\"pd_nom\" => time_series_id) where time_series_id is the id of an object in time_series, and has type Any.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\ntime Union{Vector{Real},Vector{String}} hour always Time points at which values are specified. If time is specified in String, units not required to be in hours.\nvalues Vector{Real} always Multipers at each time step given in time\noffset 0 Real hour always Start time offset\nreplace true Bool always Indicates to replace with data, instead of multiply. Will only work on non-Array data","category":"page"},{"location":"manual/eng-data-model.html#Fuses-(fuse)","page":"Engineering Data Model","title":"Fuses (fuse)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Fuses can be defined on any terminal of any physical component","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\ncomponent_type String \ncomponent_id String \nterminals Vector{Int} \nfuse_curve Array{Vector{Real},2} specifies the fuse blowing condition\nminimum_melting_curve Array{Vector{Real},2} specifies the minimum melting conditions of the fuse","category":"page"},{"location":"developer/contributing.html#Pull-Requests","page":"Contributing","title":"Pull Requests","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"All pull requests should be reviewed by a core developer, and may include a review by a subject matter expert if the area of the PR is outside that of one of the core developers. In that case, the core developers will primarily review style and design, rather than substance.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Every PR to PowerModelsDistribution should strive to meet the following guidelines.","category":"page"},{"location":"developer/contributing.html#PR-Title","page":"Contributing","title":"PR Title","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Should be concise and clear, describing in a phrase the content of the PR\nShould include a prefix that describes the primary type of the PR\nADD: feature addition\nFIX: bugfix\nREF: refactor\nUPD: updates to code for e.g. version bumps of dependencies\nSTY: style changes, no changes to function names, added features, etc.\nDOC: documentation-only additions/changes\nRM: dead code removal","category":"page"},{"location":"developer/contributing.html#PR-Body","page":"Contributing","title":"PR Body","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"If the change is breaking, it should be clearly stated up front\nThe purpose of this PR should be clearly stated right away\nMajor changes / additions to the code should be summarized. In the case where a refactor was performed, the name changes of public functions should be documented in the body of the PR\nAny associated Issues should be referenced in the body of the PR, and it is accepted/encouraged to use Closes #XX to automatically close Issues after the PR is merged","category":"page"},{"location":"developer/contributing.html#PR-Code","page":"Contributing","title":"PR Code","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"An entry should be added to CHANGELOG.md for every PR\nDocumentation should be updated (See Documentation section above for guidelines)\nUnit tests should be added. In the case where existing unit tests were altered, an explanation for the change must be included\nCode should be rebased to the latest version of whatever branch the PR is aimed at (no merge conflicts!)","category":"page"},{"location":"developer/contributing.html#Versions","page":"Contributing","title":"Versions","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"PowerModelsDistribution follows the Semantic Versioning (SemVer) convention of Major.minor.patch, where Major indicates breaking changes, minor indicates non-breaking feature additions, and patch indicates non-breaking bugfixes.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Currently, because Major==0, minor indicates breaking changes and patch indicates any non-breaking change, including both feature additions and bugfixes. Once PowerModelsDistribution reaches v1.0.0, we will adhere strictly to the SemVer convention.","category":"page"},{"location":"developer/contributing.html#Branch-Management","page":"Contributing","title":"Branch Management","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"The main branch is a protected branch, meaning that its history will always be contiguous and can never be overwritten.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Release candidate branches of the format vM.m.0-rc are also protected branches. These branches will contain only breaking changes and will not be merged into main until a new version is ready to be tagged. Pull requests including breaking changes should be directed into the next release candidate branch available, e.g. if the current version of the package is v0.9.0, the next release candidate branch will be v0.10.0-rc.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Pull requests that include only non-breaking changes can be merged directly into main once approved, and in the case of merge conflicts arising for release candidate branches, the -rc branch will need to be updated to include the latest main.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Pull requests will generally be merged using squash and merge into the branch they are aimed at, with the exception of release candidate branches, which generally be merged using rebase and merge into main.","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 = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"solve\")","category":"page"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_mld-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_mld","text":"Solve load shedding problem with storage\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_mld_uc-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_mld_uc","text":"Solve unit commitment load shedding problem (!relaxed)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_model-Tuple{Dict{String}, Type, Any, Function}","page":"Problems","title":"PowerModelsDistribution.solve_mc_model","text":"solve_mc_model(\n data::Dict{String,<:Any},\n model_type::Type,\n optimizer,\n build_mc::Function;\n ref_extensions::Vector{<:Function}=Function[],\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n eng2math_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,<:Vector{<:String}}=Dict{String,Vector{String}}(),\n make_si::Bool=!get(data, \"per_unit\", false),\n make_si_extensions::Vector{<:Function}=Function[],\n dimensionalize_math_extensions::Dict{String,Dict{String,Vector{String}}}=Dict{String,Dict{String,Vector{String}}}(),\n kwargs...\n)::Dict{String,Any}\n\nTakes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns a solution in the original data model defined by data.\n\nIf make_si is false, data will remain in per-unit.\n\nFor an explanation of multinetwork and global_keys, see make_multinetwork\n\nFor an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model\n\nFor an explanation of make_pu_extensions, see make_per_unit!\n\nFor an explanation of ref_extensions, see instantiate_mc_model\n\nFor an explanation of map_math2eng_extensions, make_si, make_si_extensions, and dimensionalize_math_extensions, see solution_make_si\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_model-Tuple{String, Type, Any, Function}","page":"Problems","title":"PowerModelsDistribution.solve_mc_model","text":"solve_mc_model(\n file::String,\n model_type::Type,\n optimizer,\n build_mc::Function;\n dss2eng_extensions::Vector{<:Function}=Function[],\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n kwargs...\n)::Dict{String,Any}\n\nGiven a file::String, data will be parsed automatically from the file.\n\nSee solve_mc_model for detailed explanation of function arguments.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_opf-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_opf","text":"function solve_mc_opf(\n\tdata::Union{Dict{String,<:Any},String},\n\tmodel_type::Type,\n\tsolver;\n\tkwargs...\n)\n\nSolve Optimal Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_opf_capc-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_opf_capc","text":"solve_mc_opf_capc(data::Union{Dict{String,<:Any},String}, model_type::Type, solver; kwargs...)\n\nSolve OPF with capacitor control\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_opf_oltc-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_opf_oltc","text":"Solve on-load tap-changer OPF\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_opf_oltc_capc-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_opf_oltc_capc","text":"solve_mc_opf_capc(data::Union{Dict{String,<:Any},String}, model_type::Type, solver; kwargs...)\n\nSolve OPF with capacitor control\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_opf_pbs-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_opf_pbs","text":"Solve OPF problem with slack power at every bus\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_pf-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_pf","text":"Power Flow Problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_pf_pbs-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_pf_pbs","text":"Solve PF problem with slack power at every bus\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mn_mc_mld_simple-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mn_mc_mld_simple","text":"Solve multinetwork load shedding problem with storage\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mn_mc_opf-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mn_mc_opf","text":"function solve_mn_mc_opf(\n\tdata::Union{Dict{String,<:Any},String},\n\tmodel_type::Type,\n\tsolver;\n\tkwargs...\n)\n\nSolve multinetwork optimal power flow problem\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 = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"build\")","category":"page"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_mld-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_mld","text":"Load shedding problem for Branch Flow model\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_mld-Tuple{AbstractUnbalancedIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_mld","text":"\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_mld-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_mld","text":"Load shedding problem including storage (snap-shot)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_mld_bf-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_mld_bf","text":"Load shedding problem for Branch Flow model\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_mld_uc-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_mld_uc","text":"Standard unit commitment (!relaxed) load shedding problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf-Tuple{AbstractExplicitNeutralACRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf","text":"function build_mc_opf(\n\tpm::AbstractExplicitNeutralACRModel\n)\n\nconstructor for OPF in power-voltage variable space with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf-Tuple{AbstractExplicitNeutralIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf","text":"function build_mc_opf(\n\tpm::AbstractExplicitNeutralIVRModel\n)\n\nconstructor for OPF in current-voltage variable space with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf","text":"function build_mc_opf(\n\tpm::AbstractUBFModels\n)\n\nconstructor for branch flow opf\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf-Tuple{AbstractUnbalancedIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf","text":"function build_mc_opf(\n\tpm::AbstractUnbalancedIVRModel\n)\n\nconstructor for OPF in current-voltage variable space\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf","text":"function build_mc_opf(\n\tpm::AbstractUnbalancedPowerModel\n)\n\nConstructor for Optimal Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_capc-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_capc","text":"constructor for branch flow opf with capcontrol\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_capc-Tuple{AbstractUnbalancedIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_capc","text":"constructor for capcontrol OPF in current-voltage variable space\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_capc-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_capc","text":"build_mc_opf_capc(pm::AbstractUnbalancedPowerModel)\n\nConstructor for capcontrol OPF\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_oltc-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_oltc","text":"constructor for branch flow on-load tap-changer OPF\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_oltc-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_oltc","text":"constructor for on-load tap-changer OPF\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_oltc_capc-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_oltc_capc","text":"constructor for branch flow opf\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_oltc_capc-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_oltc_capc","text":"build_mc_opf_capc(pm::AbstractUnbalancedPowerModel)\n\nConstructor for capcontrol OPF\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_pbs-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_pbs","text":"OPF problem with slack power at every bus\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_pf-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_pf","text":"Constructor for Branch Flow Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_pf-Tuple{AbstractUnbalancedIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_pf","text":"Constructor for Power Flow in current-voltage variable space\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_pf-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_pf","text":"Constructor for Power Flow Problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_pf_pbs-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_pf_pbs","text":"PF problem with slack power at every bus\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_mld_simple-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_mld_simple","text":"Multinetwork load shedding problem for Branch Flow model\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_mld_simple-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_mld_simple","text":"Multinetwork load shedding problem including storage\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_opf-Tuple{AbstractExplicitNeutralIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_opf","text":"function buildmcopf( pm::AbstractExplicitNeutralIVRModel )\n\nconstructor for multinetwork OPF in current-voltage variable space with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_opf-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_opf","text":"function build_mn_mc_opf(\n\tpm::AbstractUBFModels\n)\n\nMultinetwork branch flow optimal power flow problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_opf-Tuple{AbstractUnbalancedIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_opf","text":"function build_mn_mc_opf(\n\tpm::AbstractUnbalancedIVRModel\n)\n\nMultinetwork current-voltage optimal power flow problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_opf-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_opf","text":"function build_mn_mc_opf(\n\tpm::AbstractUnbalancedPowerModel\n)\n\nMultinetwork optimal power flow problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_pf_result-Tuple{PowerFlowData, Vector{ComplexF64}, PFTerminationStatus, Int64, Real, Real}","page":"Problems","title":"PowerModelsDistribution.build_pf_result","text":"build_pf_result(\n pfd::PowerFlowData,\n Uv::Vector,\n status::PFTerminationStatus,\n its::Int,\n time::Real,\n stationarity::Real,\n verbose::Bool\n)\n\nBuilds the result dict from the solution dict.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_pf_solution-Tuple{PowerFlowData, Vector{ComplexF64}}","page":"Problems","title":"PowerModelsDistribution.build_pf_solution","text":"build_pf_solution(\n pfd::PowerFlowData,\n Uv::Vector\n)\n\nBuilds the solution dict.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Model-Instantiation","page":"Problems","title":"Model Instantiation","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"instantiate_mc_model","category":"page"},{"location":"reference/problems.html#PowerModelsDistribution.instantiate_mc_model","page":"Problems","title":"PowerModelsDistribution.instantiate_mc_model","text":"instantiate_mc_model(\n data::Dict{String,<:Any},\n model_type::Type,\n build_method::Function;\n ref_extensions::Vector{<:Function}=Function[],\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n eng2math_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,<:Vector{<:String}}=Dict{String,Vector{String}}(),\n make_pu_extensions::Vector{<:Function}=Function[],\n kwargs...\n)\n\nTakes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns an AbstractUnbalancedPowerModel structure.\n\nFor an explanation of multinetwork and global_keys, see make_multinetwork\n\nFor an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model\n\nFor an explanation of make_pu_extensions, see make_per_unit!\n\nref_extensions\n\nInside of the model structures, data can be quickly accessed via the ref function. By default, the only ref objects available are created by ref_add_core!, but users can add their own custom ref objects by passing functions via ref_extensions that have the signature:\n\nref_add!(ref::Dict{Symbol,Any}, data::Dict{String,Any})\n\nSee the Beginners Guide for an example.\n\n\n\n\n\n","category":"function"},{"location":"reference/problems.html#Solution-Helpers","page":"Problems","title":"Solution Helpers","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"sol_\")","category":"page"},{"location":"reference/problems.html#PowerModelsDistribution.sol_data_model!-Tuple{AbstractUnbalancedACRModel, Dict{String}}","page":"Problems","title":"PowerModelsDistribution.sol_data_model!","text":"sol_data_model!(pm::AbstractUnbalancedACRModel, solution::Dict{String,<:Any})\n\nsolutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert ACR variables back into polar representation (default data model voltage form)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.sol_data_model!-Tuple{AbstractUnbalancedPowerModel, Dict{String}}","page":"Problems","title":"PowerModelsDistribution.sol_data_model!","text":"sol_data_model!(pm::AbstractUnbalancedPowerModel, solution::Dict{String,<:Any})\n\ndoes nothing (no sol_data_model! exists for the formulation attempting to be converted)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.sol_data_model!-Tuple{AbstractUnbalancedWModels, Dict{String}}","page":"Problems","title":"PowerModelsDistribution.sol_data_model!","text":"sol_data_model!(pm::AbstractUnbalancedWModels, solution::Dict{String,<:Any})\n\nsolutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert W variables back into polar representation (default data model voltage form)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.sol_data_model!-Tuple{FBSUBFPowerModel, Dict{String}}","page":"Problems","title":"PowerModelsDistribution.sol_data_model!","text":"sol_data_model!(pm::FBSUBFPowerModel, solution::Dict{String,<:Any})\n\nsolution_processor, to convert FBS variables back into polar representation (default data model voltage form)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.sol_data_model!-Tuple{FOTRUPowerModel, Dict{String}}","page":"Problems","title":"PowerModelsDistribution.sol_data_model!","text":"sol_data_model!(pm::FOTRUPowerModel, solution::Dict{String,<:Any})\n\nsolution_processor, to convert FOT rectangular variables back into polar representation (default data model voltage form)\n\n\n\n\n\n","category":"method"},{"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 = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"run\")","category":"page"},{"location":"manual/load-model.html#Load-Models","page":"Load Models","title":"Load Models","text":"","category":"section"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^d=S^d_1S^d_n^T","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"is a column vector ntimes 1, specifying for each individual load how much power is consumed. By definition, this is","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^d=U^dodot left(I^dright)^*","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"where U^d is the voltage applied across each individual load and I^d is the current drawn by each load. At the same time, the composed load is connected to a bus with voltage U^textbus, and draws a current I^textbus and power S^textbus.","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"How these quantities relate to each other, depends on how the load is connected.","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"(S^d U^d I^d) (S^textbus U^textbus I^textbus)","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"In the implementations, these variables are referred to as","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"beginalign\nS^d=textpd+jtextqd S^textbus=textpd_bus+jtextqd_bus\nI^d=textcrd+jtextcid I^textbus=textcrd_bus+jtextcid_bus\nU^d=textvrd+jtextvid U^textbus=textvr+jtextvi\nendalign","category":"page"},{"location":"manual/load-model.html#Voltage-dependency","page":"Load Models","title":"Voltage dependency","text":"","category":"section"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"The general, exponential load model is defined as","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"P^d_i = P^d0_i left(fracV^d_iV^d0_iright)^alpha_i = a_i left(V^d_iright)^alpha_i","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"Q^d_i = Q^d0_i left(fracV^d_iV^d0_iright)^beta_i = b_i left(V^d_iright)^beta_i","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"There are a few cases which get a special name: constant power (alpha=beta=0), constant current (alpha=beta=1), and constant impedance (alpha=beta=2).","category":"page"},{"location":"manual/load-model.html#Wye-connected-Loads","page":"Load Models","title":"Wye-connected Loads","text":"","category":"section"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"A wye-connected load connects between a set of phases mathcalP and a neutral conductor n. The voltage as seen by each individual load is then","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"U^d = U^textbus_mathcalP-U^textbus_n","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"whilst the current","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"I^textbus_mathcalP = I^textdI^textbus_n=-1^TI^d","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"We now develop the expression for the power drawn at the bus for the phase conductors","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^textbus_mathcalP = (U^d+U^textbus_n)odot(I^d)^* = S^d+U^textbus_n S^doslash U^d","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"From conservation of power or simply the formulas above,","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^textbus_n = -1^TS^textbus_mathcalP+1^TS^d","category":"page"},{"location":"manual/load-model.html#Grounded-neutral","page":"Load Models","title":"Grounded neutral","text":"","category":"section"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"Note that when the neutral is grounded, i.e. U^textbus_n=0, these formulas simplify to","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^textbus_mathcalP=S^dS^textbus_n=0","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"which is why in Kron-reduced unbalanced networks, you can directly insert the power consumed by the loads, in the nodal power balance equations.","category":"page"},{"location":"manual/load-model.html#Delta-connected-Loads","page":"Load Models","title":"Delta-connected Loads","text":"","category":"section"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"Firstly, define the three-phase delta transformation matrix","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"M^Delta_3 = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"which can be extended to more phases in a straight-forward manner. For loads connected between split-phase terminals of triplex nodes (usually located on the secondary side of center-tapped transformers), we define a single-phase delta transformation matrix","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"M^Delta_1 = beginbmatrix 1 -1 endbmatrix","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"Now,","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"U^d = M^Delta U^textbus I^textbus = left(M^Deltaright)^T I^d","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"We can related S^textbus to U^textbus and I^d","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^textbus = U^textbusodot left(I^textbusright)^* = U^textbusodot left(M^Deltaright)^Tleft(I^dright)^*","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"and using the fact that left(I^dright)^*=S^d oslash U^d, and the expression above for U^d,","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^textbus = U^textbusleft(M^Deltaright)^T S^d oslash M^Delta U^textbus","category":"page"},{"location":"index.html#![PowerModelsDistribution-Logo](assets/logo.svg)","page":"Introduction","title":"(Image: PowerModelsDistribution Logo)","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"CurrentModule = PowerModelsDistribution","category":"page"},{"location":"index.html#What-is-PowerModelsDistribution?","page":"Introduction","title":"What is PowerModelsDistribution?","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"PowerModelsDistribution.jl is a Julia/JuMP-based package for modeling unbalanced (i.e., multiconductor) power networks.","category":"page"},{"location":"index.html#Resources-for-Getting-Started","page":"Introduction","title":"Resources for Getting Started","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the Installation Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the Quickstart Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the introductory tutorial Introduction to PowerModelsDistribution.","category":"page"},{"location":"index.html#How-the-documentation-is-structured","page":"Introduction","title":"How the documentation is structured","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The following is a high-level overview of how our documentation is structured. There are three primary sections:","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The Manual contains detailed documentation for certain aspects of PowerModelsDistribution, such as the data model specification, the Unbalanced Network Formulations, or the Optimization Problem Specifications.\nTutorials contains working examples of how to use PowerModelsDistribution. Start here if you are new to PowerModelsDistribution.\nThe API Reference contains a complete list of the functions you can use in PowerModelsDistribution. Look here if you want to know how to use a particular function.","category":"page"},{"location":"index.html#Citing-PowerModelsDistribution","page":"Introduction","title":"Citing PowerModelsDistribution","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"If you find PowerModelsDistribution useful for your work, we kindly request that you cite the following publication:","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"@article{FOBES2020106664,\ntitle = \"PowerModelsDistribution.jl: An open-source framework for exploring distribution power flow formulations\",\njournal = \"Electric Power Systems Research\",\nvolume = \"189\",\npages = \"106664\",\nyear = \"2020\",\nissn = \"0378-7796\",\ndoi = \"https://doi.org/10.1016/j.epsr.2020.106664\",\nurl = \"http://www.sciencedirect.com/science/article/pii/S0378779620304673\",\nauthor = \"David M. Fobes and Sander Claeys and Frederik Geth and Carleton Coffrin\",\nkeywords = \"Nonlinear optimization, Convex optimization, AC optimal power flow, Julia language, Open-source\",\nabstract = \"In this work we introduce PowerModelsDistribution, a free, open-source toolkit for distribution power network optimization, whose primary focus is establishing a baseline implementation of steady-state multi-conductor unbalanced distribution network optimization problems, which includes implementations of Power Flow and Optimal Power Flow problem types. Currently implemented power flow formulations for these problem types include AC (polar and rectangular), a second-order conic relaxation of the Branch Flow Model (BFM) and Bus Injection Model (BIM), a semi-definite relaxation of BFM, and several linear approximations, such as the simplified unbalanced BFM. The results of AC power flow have been validated against OpenDSS, an open-source “electric power distribution system simulator”, using IEEE distribution test feeders (13, 34, 123 bus and LVTestCase), all parsed using a built-in OpenDSS parser. This includes support for standard distribution system components as well as novel resource models such as generic energy storage (multi-period) and photovoltaic systems, with the intention to add support for additional components in the future.\"\n}","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The associated Power Systems Computation Conference talk can be found on YouTube.","category":"page"},{"location":"index.html#License","page":"Introduction","title":"License","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"This code is provided under a BSD license as part of the Multi-Infrastructure Control and Optimization Toolkit (MICOT) project, LA-CC-13-108.","category":"page"},{"location":"reference/enums.html#EnumAPI","page":"Enums","title":"Enums","text":"","category":"section"},{"location":"reference/enums.html","page":"Enums","title":"Enums","text":"PowerModelsDistributionEnums\nDataModel\nENGINEERING\nMATHEMATICAL\nDSS\nMATPOWER\nLoadModel\nPOWER\nCURRENT\nIMPEDANCE\nEXPONENTIAL\nZIP\nShuntModel\nGENERIC\nCAPACITOR\nREACTOR\nSwitchState\nOPEN\nCLOSED\nControlMode\nFREQUENCYDROOP\nISOCHRONOUS\nConnConfig\nWYE\nDELTA\nDispatchable\nNO\nYES\nStatus\nDISABLED\nENABLED","category":"page"},{"location":"reference/enums.html#PowerModelsDistribution.PowerModelsDistributionEnums","page":"Enums","title":"PowerModelsDistribution.PowerModelsDistributionEnums","text":"Collection of the built-in Enums for PowerModelsDistribution\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.DataModel","page":"Enums","title":"PowerModelsDistribution.DataModel","text":"DataModel\n\nAn Enum to descibe the current data model contained in the structure\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.ENGINEERING","page":"Enums","title":"PowerModelsDistribution.ENGINEERING","text":"Model type for models that are in the PowerModelsDistribution engineering representation\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.MATHEMATICAL","page":"Enums","title":"PowerModelsDistribution.MATHEMATICAL","text":"Model type for models that are in the mathematical representation\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.DSS","page":"Enums","title":"PowerModelsDistribution.DSS","text":"Model type for raw dss imports\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.MATPOWER","page":"Enums","title":"PowerModelsDistribution.MATPOWER","text":"Model type for models imported via parse_file from PowerModels\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.LoadModel","page":"Enums","title":"PowerModelsDistribution.LoadModel","text":"LoadModel\n\nAn Enum to describe the type of load, e.g., constant power, constant current, etc.\n\nInformation about load models can be found under Load Models\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.POWER","page":"Enums","title":"PowerModelsDistribution.POWER","text":"Constant Power load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.CURRENT","page":"Enums","title":"PowerModelsDistribution.CURRENT","text":"Constant Current load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.IMPEDANCE","page":"Enums","title":"PowerModelsDistribution.IMPEDANCE","text":"Constant Impedance load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.EXPONENTIAL","page":"Enums","title":"PowerModelsDistribution.EXPONENTIAL","text":"Exponential load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ZIP","page":"Enums","title":"PowerModelsDistribution.ZIP","text":"ZIP load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ShuntModel","page":"Enums","title":"PowerModelsDistribution.ShuntModel","text":"ShuntModel\n\nAn Enum to describe the type of shunt, e.g., generic, capcitor or reactor type.\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.GENERIC","page":"Enums","title":"PowerModelsDistribution.GENERIC","text":"Generic shunt model, usually indicates user-created\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.CAPACITOR","page":"Enums","title":"PowerModelsDistribution.CAPACITOR","text":"Capacitor shunt model, usually indicates parsed from capacitor dss object\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.REACTOR","page":"Enums","title":"PowerModelsDistribution.REACTOR","text":"Reactor shunt model, usually indicates parsed from reactor dss object\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.SwitchState","page":"Enums","title":"PowerModelsDistribution.SwitchState","text":"SwitchState\n\nAn Enum to descibe whether a switch is open or closed\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.OPEN","page":"Enums","title":"PowerModelsDistribution.OPEN","text":"Switch state is open\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.CLOSED","page":"Enums","title":"PowerModelsDistribution.CLOSED","text":"Switch state is closed\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ControlMode","page":"Enums","title":"PowerModelsDistribution.ControlMode","text":"ControlMode\n\nAn Enum to descibe the current control mode of the generation object\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.FREQUENCYDROOP","page":"Enums","title":"PowerModelsDistribution.FREQUENCYDROOP","text":"Generation resource is in frequency droop mode (following)\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ISOCHRONOUS","page":"Enums","title":"PowerModelsDistribution.ISOCHRONOUS","text":"Generation resource is in isochronous mode (forming)\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ConnConfig","page":"Enums","title":"PowerModelsDistribution.ConnConfig","text":"ConnConfig\n\nAn Enum to describe the connection configuration, e.g., wye or delta\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.WYE","page":"Enums","title":"PowerModelsDistribution.WYE","text":"Wye connection configuration\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.DELTA","page":"Enums","title":"PowerModelsDistribution.DELTA","text":"Delta connection configuration\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.Dispatchable","page":"Enums","title":"PowerModelsDistribution.Dispatchable","text":"Dispatchable\n\nAn Enum to describe whether an object is dispatchable, e.g., can a switch state be controled, or can a load or shunt be shed individually.\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.NO","page":"Enums","title":"PowerModelsDistribution.NO","text":"The object is not dispatchable / controllable\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.YES","page":"Enums","title":"PowerModelsDistribution.YES","text":"The object is dispatchable / controllable\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.Status","page":"Enums","title":"PowerModelsDistribution.Status","text":"Status\n\nAn Enum to describe whether an object is enabled or disabled\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.DISABLED","page":"Enums","title":"PowerModelsDistribution.DISABLED","text":"The object is disabled\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ENABLED","page":"Enums","title":"PowerModelsDistribution.ENABLED","text":"The object is enabled\n\n\n\n\n\n","category":"constant"},{"location":"reference/constraints.html#ConstraintAPI","page":"Constraints","title":"Constraints","text":"","category":"section"},{"location":"reference/constraints.html","page":"Constraints","title":"Constraints","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"constraint\")","category":"page"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_M_psd-Tuple{JuMP.Model, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_M_psd","text":"For rectangular coordinates of a complex matrix M=Mre+im*Mim, this function applies constraints equivalent to requiring that M itself is PSD.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_SWL_psd-Tuple{JuMP.Model, Vararg{Any, 6}}","page":"Constraints","title":"PowerModelsDistribution.constraint_SWL_psd","text":"Take a multi-conductor voltage variable V and a current variable I. The associated power is then defined as S = VI^H Define the lifted variables as W and L as W = VV^H, L = I*I^H Then, it is equally valid that [W S; S^H L] ∈ PSDCone, rank([W S; S^H L])=1 This function adds this PSD constraint for the rectangular coordinates of S, W and L.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::AbstractUnbalancedACPModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching\n\nbeginalign\ntextkvar control (ON) q-q_texton M_q z - ϵ (1-z) \ntextkvar control (OFF) q-q_textoff -M_q (1-z) - ϵ z \ntextvoltage control (ON) v-v_textmin -M_v z + ϵ (1-z) \ntextvoltage control (OFF) v-v_textmax M_v (1-z) - ϵ z\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::AbstractUnbalancedACRModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching\n\nbeginalign\ntextkvar control (ON) q-q_texton M_q z - ϵ (1-z) \ntextkvar control (OFF) q-q_textoff -M_q (1-z) - ϵ z \ntextvoltage control (ON) v_r^2 + v_i^2 - v_textmin^2 -M_v z + ϵ (1-z) \ntextvoltage control (OFF) v_r^2 + v_i^2 - v_textmax^2 M_v (1-z) - ϵ z\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::AbstractUnbalancedIVRModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching\n\nbeginalign\ntextkvar control s = (vr_fr+im*vi_fr)*(cr_fr-im*ci_fr)\ntextkvar control (ON) Ims-q_texton M_q z - ϵ (1-z) \ntextkvar control (OFF) Ims-q_textoff -M_q (1-z) - ϵ z \ntextvoltage control (ON) v_r^2 + v_i^2 - v_textmin^2 -M_v z + ϵ (1-z) \ntextvoltage control (OFF) v_r^2 + v_i^2 - v_textmax^2 M_v (1-z) - ϵ z\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{FBSUBFPowerModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::FBSUBFPowerModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching\n\nbeginalign\ntextkvar control (ON) q-q_texton M_q z - ϵ (1-z) \ntextkvar control (OFF) q-q_textoff -M_q (1-z) - ϵ z \ntextvoltage control (ON) 2 v_r0 v_r + 2 v_i0 v_i - v_r0^2 - v_i0^2 - v_textmin^2 -M_v z + ϵ (1-z) \ntextvoltage control (OFF) 2 v_r0 v_r + 2 v_i0 v_i - v_r0^2 - v_i0^2 - v_textmax^2 M_v (1-z) - ϵ z\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{FOTRUPowerModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::FOTRUPowerModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching similar to FBSUBFPowerModel\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{LPUBFDiagModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::LPUBFDiagModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching\n\nbeginalign\ntextkvar control (ON) q-q_texton M_q z - ϵ (1-z) \ntextkvar control (OFF) q-q_textoff -M_q (1-z) - ϵ z \ntextvoltage control (ON) w - v_textmin^2 -M_v z + ϵ (1-z) \ntextvoltage control (OFF) w - v_textmax^2 M_v (1-z) - ϵ z\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{AbstractUnbalancedACPModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"constraint_mc_ampacity_from(pm::AbstractUnbalancedACPModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq vm_{fr}^2 i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Float64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"nothing to do, no voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"constraint_mc_ampacity_from(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for branch current limit constraint from-side\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{AbstractUnbalancedRectangularModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"constraint_mc_ampacity_from(pm::AbstractUnbalancedRectangularModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq (vr_{fr}^2 + vi_{fr}^2) i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{AbstractUnbalancedWModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"constraint_mc_ampacity_from(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq w_{fr} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{LPUBFDiagModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"constraint_mc_ampacity_from(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})\n\nACP current limit constraint on branches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq w_{fr} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{AbstractUnbalancedACPModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"constraint_mc_ampacity_to(pm::AbstractUnbalancedACPModel, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches to-side\n\nmathp_{to}^2 + q_{to}^2 \\leq vm_{to}^2 i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Float64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"nothing to do, no voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"constraint_mc_ampacity_to(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothin\n\nTemplate function for branch current limit constraint to-side\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{AbstractUnbalancedRectangularModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"constraint_mc_ampacity_to(pm::AbstractUnbalancedRectangularModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches to-side\n\nmathp_{to}^2 + q_{to}^2 \\leq (vr_{to}^2 + vi_{to}^2) i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{AbstractUnbalancedWModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"constraint_mc_ampacity_to(pm::AbstractUnbalancedWModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches to-side\n\nmathp_{to}^2 + q_{to}^2 \\leq w_{to} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{LPUBFDiagModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"constraint_mc_ampacity_to(pm::AbstractUnbalancedWModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})\n\nACP current limit constraint on branches to-side\n\nmathp_{to}^2 + q_{to}^2 \\leq w_{to} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_current_limit-Tuple{AbstractExplicitNeutralACRModel, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector, Vector, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_current_limit","text":"function constraint_mc_branch_current_limit(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector,\n\tt_connections::Vector,\n\tc_rating::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the total current magnitude per conductor.\n\np_fr^2 + q_fr^2 <= r^2 * (vr_fr^2 + vi_fr^2)\np_to^2 + q_to^2 <= r^2 * (vr_to^2 + vi_to^2)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_current_limit-Tuple{AbstractExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector, Vector, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_current_limit","text":"function constraint_mc_branch_current_limit(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector,\n\tt_connections::Vector,\n\tc_rating::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, imposes a bound on the current magnitude per conductor at both ends of the branch (total current, i.e. including shunt contributions).\n\ncr_fr^2 + ci_fr^2 <= c_rating^2\ncr_to^2 + ci_to^2 <= c_rating^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_current_limit-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_current_limit","text":"function constraint_mc_branch_current_limit(\n\tpm::ExplicitNeutralModels,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor models with explicit neutrals, imposes a bound on the current magnitude per conductor at both ends of the branch (total current, i.e. including shunt contributions)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_current_series_product_hermitian-Tuple{AbstractUBFModels}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_current_series_product_hermitian","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_flow-Tuple{AbstractUnbalancedAPLossLessModels, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_flow","text":"Already handled by variablemcbranchpowerreal\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_flow-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_flow","text":"constraint_mc_branch_flow(pm::AbstractUnbalancedPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int})\n\nFor superconducting branch flow (brr and brx all zeros)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_balance-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_balance","text":"constraint_mc_bus_voltage_balance(pm::AbstractUnbalancedPowerModel, bus_id::Int; nw=nw_id_default)::Nothing\n\nTemplate function for bus voltage balance constraints.\n\nImpose all balance related constraints for which key present in data model of bus. For a discussion of sequence components and voltage unbalance factor (VUF), see @INPROCEEDINGS{girigoudarmolzahnroald-2019, \tauthor={K. Girigoudar and D. K. Molzahn and L. A. Roald}, \tbooktitle={submitted}, \ttitle={{Analytical and Empirical Comparisons of Voltage Unbalance Definitions}}, \tyear={2019}, \tmonth={}, url={https://molzahn.github.io/pubs/girigoudarmolzahnroald-2019.pdf} }\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_drop-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_drop","text":"function constraint_mc_bus_voltage_drop(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\ti::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tr::Matrix{<:Real},\n\tx::Matrix{<:Real}\n)\n\nFor IVR models with explicit neutrals, defines voltage drop over a branch, linking from and to side complex voltage.\n\nvr_to == vr_fr - r*csr_fr + x*csi_fr\nvi_to == vi_fr - r*csi_fr - x*csr_fr\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_drop-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_drop","text":"Defines voltage drop over a branch, linking from and to side complex voltage\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_drop-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_drop","text":"constraint_mc_bus_voltage_drop(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for bus voltage drop constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_ll-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Vector, Vector}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_ll","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_negative_sequence-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_negative_sequence","text":"a = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off","text":"on/off bus voltage magnitude constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off","text":"constraint_mc_bus_voltage_magnitude_on_off(pm::AbstractUnbalancedPowerModel, nw::Int, i::Int, vmin::Vector{<:Real}, vmax::Vector{<:Real})::Nothing\n\nGeneric on/off bus voltage magnitude constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off","text":"constraint_mc_bus_voltage_magnitude_on_off(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for on/off voltage magnitude constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_positive_sequence-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_positive_sequence","text":"a = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_sqr_on_off-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_sqr_on_off","text":"on/off bus voltage magnitude squared constraint for relaxed formulations\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_sqr_on_off-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_sqr_on_off","text":"constraint_mc_bus_voltage_magnitude_sqr_on_off(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for on/off voltage magnitude squared constraint for relaxed formulations\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_vuf-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_vuf","text":"a = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_zero_sequence-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_zero_sequence","text":"a = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedACPModel}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_on_off","text":"bus voltage on/off constraint for load shed problem\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedACRModel}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_on_off","text":"bus voltage on/off constraint for load shed problem\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedDCPModel}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_on_off","text":"on/off bus voltage constraint for DCP formulation, nothing to do\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_on_off","text":"constraint_mc_bus_voltage_on_off(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default)::Nothing\n\nTemplate function for on/off constraint for bus voltages\"\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedWModels}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_on_off","text":"on/off bus voltage constraint for relaxed forms\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_balance-Tuple{AbstractUnbalancedIVRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_balance","text":"Kirchhoff's current law applied to buses sum(cr + im*ci) = 0\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_balance-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_balance","text":"constraint_mc_current_balance(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints in current-voltage variable space\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_balance-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_balance","text":"function constraint_mc_current_balance(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool},\n\tbus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_gens::Vector{Tuple{Int,Vector{Int}}},\n\tbus_storage::Vector{Tuple{Int,Vector{Int}}},\n\tbus_loads::Vector{Tuple{Int,Vector{Int}}},\n\tbus_shunts::Vector{Tuple{Int,Vector{Int}}}\n)\n\nKirchhoff's current law applied to buses sum(cr + im*ci) = 0\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_balance_capc-Tuple{AbstractUnbalancedIVRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_balance_capc","text":"constraint_mc_current_balance_capc(pm::AbstractUnbalancedIVRModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nCurrent balance constraints with capacitor control.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_balance_capc-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_balance_capc","text":"constraint_mc_current_balance_capc(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints in current-voltage variable space with capacitor control variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_from-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_from","text":"function constraint_mc_current_from(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tg_sh_fr::Matrix{<:Real},\n\tb_sh_fr::Matrix{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.\n\ncr_fr == csr_fr + g_sh_fr*vr_fr - b_sh_fr*vi_fr\nci_fr == csi_fr + g_sh_fr*vi_fr + b_sh_fr*vr_fr\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_from-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_from","text":"Defines how current distributes over series and shunt impedances of a pi-model branch\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_from-Tuple{AbstractUnbalancedIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_from","text":"constraint_mc_current_from(pm::AbstractUnbalancedIVRModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for current constraints on branches (from-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_from-Tuple{ReducedExplicitNeutralIVRModels, Int64, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_from","text":"function constraint_mc_current_from(\n\tpm::ReducedExplicitNeutralIVRModels,\n\tnw::Int,\n\tf_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tg_sh_fr::Matrix{<:Real},\n\tb_sh_fr::Matrix{<:Real};\n\treport::Bool=true\n)\n\nFor branch-reduced IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.\n\ncr_fr = csr_fr + g_sh_fr*vr_fr - b_sh_fr*vi_fr\nci_fr = csi_fr + g_sh_fr*vi_fr + b_sh_fr*vr_fr\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_limit-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_limit","text":"Bounds the current magnitude at both from and to side of a branch cr[f_idx]^2 + ci[f_idx]^2 <= c_rating_a^2 cr[t_idx]^2 + ci[t_idx]^2 <= c_rating_a^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_to-Tuple{AbstractExplicitNeutralIVRModel, Int64, Any, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_to","text":"function constraint_mc_current_to(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tt_bus,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tg_sh_to::Matrix{<:Real},\n\tb_sh_to::Matrix{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.\n\ncr_to == csr_to + g_sh_to*vr_to - b_sh_to*vi_to\nci_to == csi_to + g_sh_to*vi_to + b_sh_to*vr_to\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_to-Tuple{AbstractUnbalancedIVRModel, Int64, Any, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_to","text":"Defines how current distributes over series and shunt impedances of a pi-model branch\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_to-Tuple{AbstractUnbalancedIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_to","text":"constraint_mc_current_to(pm::AbstractUnbalancedIVRModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for current constraints on branches (to-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_to-Tuple{ReducedExplicitNeutralIVRModels, Int64, Any, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_to","text":"function constraint_mc_current_to(\n\tpm::ReducedExplicitNeutralIVRModels,\n\tnw::Int,\n\tt_bus,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tg_sh_to::Matrix{<:Real},\n\tb_sh_to::Matrix{<:Real};\n\treport::Bool=true\n)\n\nFor branch-reduced IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.\n\ncr_to = csr_to + g_sh_to*vr_to - b_sh_to*vi_to\nci_to = csi_to + g_sh_to*vi_to + b_sh_to*vr_to\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_active_bounds-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_active_bounds","text":"pmin <= Re(v*cg') <= pmax\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_active_bounds-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_active_bounds","text":"constraint_mc_gen_active_bounds(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for defining limits on active power output of a generator where bounds can't be used.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_on_off-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_on_off","text":"on/off constraint for generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_on_off-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{<:Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_on_off","text":"on/off constraint for generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_on_off-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_on_off","text":"constraint_mc_gen_power_on_off(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for generator power on/off constraints (MLD problems)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_setpoint_real-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_setpoint_real","text":"pg[i] == pg\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_setpoint_real-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_setpoint_real","text":"constraint_mc_gen_power_setpoint_real(pm::AbstractUnbalancedPowerModel, nw::Int, i::Int, pg::Vector{<:Real})::Nothing\n\nGeneric generator real power setpoint constraint\n\nP_g == P_g^setpoint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_setpoint_real-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_setpoint_real","text":"constraint_mc_gen_power_setpoint_real(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for generator active power setpoint constraint, for power flow problems\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_reactive_bounds-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_reactive_bounds","text":"qmin <= Im(v*cg') <= qmax\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_reactive_bounds-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_reactive_bounds","text":"constraint_mc_gen_reactive_bounds(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for defines limits on reactive power output of a generator where bounds can't be used.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_current-Tuple{AbstractExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_current","text":"function constraint_mc_generator_current(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates expressions for the terminal current flows :crg_bus and :cig_bus.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_current_delta-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_current_delta","text":"function constraint_mc_generator_current_delta(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tconnections::Vector{Int};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates expressions for the terminal current flows :crg_bus and :cig_bus of delta-connected generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_current_wye-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_current_wye","text":"function constraint_mc_generator_current_wye(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tconnections::Vector{Int};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates expressions for the terminal current flows :crg_bus and :cig_bus of wye-connected generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power-Tuple{AbstractUnbalancedActivePowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power","text":"Only support wye-connected generators.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power","text":"constraint_mc_generator_power(pm::AbstractUnbalancedPowerModel, id::Int; nw::Int=nw_id_default, report::Bool=true, bounded::Bool=true)::Nothing\n\nTemplate function for generator power constraints\n\nDELTA\n\nWhen connected in delta, the load power gives the reference in the delta reference frame. This means\n\nsd_1 = v_abconj(i_ab) = (v_a-v_b)conj(i_ab)\n\nWe can relate this to the per-phase power by\n\nsn_a = v_aconj(i_a)\n = v_aconj(i_ab-i_ca)\n = v_aconj(conj(s_abv_ab) - conj(s_cav_ca))\n = v_a(s_ab(v_a-v_b) - s_ca(v_c-v_a))\n\nSo for delta, sn is constrained indirectly.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power-Tuple{SDPUBFKCLMXModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power","text":"Link the current and power withdrawn by a generator at the bus through a PSD constraint. The rank-1 constraint is dropped in this formulation.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power","text":"function constraint_mc_generator_power(\n pm::ExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n report::Bool=true\n)\n\nConstrains generator power variables for models with explicit neutrals.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"function constraint_mc_generator_power_delta(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor ACR models with explicit neutrals, links the terminal power flows :pg_bus and :qg_bus to the power variables :pg and :qg for delta-connected generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{AbstractNLExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"function constraint_mc_generator_power_delta(\n\tpm::AbstractNLExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates non-linear expressions for the generator power :pd and :qd of delta-connected generators as a function of voltage and current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"function constraint_mc_generator_power_delta(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, links the generator power variables :pd and :qd of delta-connected generators to the voltage and current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"constraint_mc_generator_power_delta(pm::FBSUBFPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)\n\nAdds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).\n\nbeginalign\ntextInitial line-neutral voltage V_0 = V_r0 +j V_i0\ntextThree-phase delta transformation matrix M^Delta = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix \ntextSingle-phase delta transformation matrix (triple nodes) M^Delta = beginbmatrix1 -1 endbmatrix \ntextInitial line-line voltage V_0^Delta = M^Delta V_0 \ntextLine-line current (I^Delta)^* = S^Delta oslash V_0^Delta \ntextLine-neutral current I_bus = (M^Delta)^T I^Delta \ntextBus generation power S_bus = V_0 oslash I_bus^*\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"constraint_mc_generator_power_delta(pm::FOTPUPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)\n\nAdds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).\n\nbeginalign\ntextInitial line-neutral voltage V_0 = V_m0 angle V_a0\ntextThree-phase delta transformation matrix M^Delta = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix \ntextSingle-phase delta transformation matrix (triple nodes) M^Delta = beginbmatrix1 -1 endbmatrix \ntextInitial line-line voltage V_0^Delta = M^Delta V_0 \ntextLine-line current (I^Delta)^* = S^Delta oslash V_0^Delta \ntextLine-neutral current I_bus = (M^Delta)^T I^Delta \ntextLine-neutral generation power S_bus = V_0 oslash I_bus^*\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{FOTRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"constraint_mc_generator_power_delta(pm::FOTRUPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)\n\nAdds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).\n\nbeginalign\ntextInitial line-neutral voltage V_0 = V_r0 +j V_i0\ntextThree-phase delta transformation matrix M^Delta = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix \ntextSingle-phase delta transformation matrix (triple nodes) M^Delta = beginbmatrix1 -1 endbmatrix \ntextInitial line-line voltage V_0^Delta = M^Delta V_0 \ntextLine-line current (I^Delta)^* = S^Delta oslash V_0^Delta \ntextLine-neutral current I_bus = (M^Delta)^T I^Delta \ntextLine-neutral generation power S_bus = V_0 oslash I_bus^*\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{IVRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"delta connected generator setpoint constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{LPUBFDiagModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"constraint_mc_generator_power_delta(pm::LPUBFDiagModel, nw::Int, gen_id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)\n\nAdds constraints for delta-connected generators similar to delta-connected loads (using auxilary variable X).\n\nbeginalign\ntextThree-phase delta transformation matrix T^Delta = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix \ntextSingle-phase delta transformation matrix (triple nodes) T^Delta = beginbmatrix1 -1 endbmatrix \ntextLine-neutral generation power S_bus = diag(T^Delta X_g) \ntextLine-line generation power S^Delta = diag(X_g T^Delta)\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{SOCUBFModels, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"constraint_mc_generator_power_delta(pm::SOCUBFModels, nw::Int, gen_id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)\n\nAdds constraints for delta-connected generators similar to delta-connected loads (using auxilary variable X).\n\nbeginalign\ntextThree-phase delta transformation matrix T^Delta = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix \ntextSingle-phase delta transformation matrix (triple nodes) T^Delta = beginbmatrix1 -1 endbmatrix \ntextLine-neutral generation power S_bus = diag(T^Delta X_g) \ntextLine-line generation power S^Delta = diag(X_g T^Delta)\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_wye-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_wye","text":"function constraint_mc_generator_power_wye(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor ACR models with explicit neutrals, links the terminal power flows :pg_bus and :qg_bus to the power variables :pg and :qg for wye-connected generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_wye-Tuple{AbstractNLExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_wye","text":"function constraint_mc_generator_power_wye(\n\tpm::AbstractNLExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates non-linear expressions for the generator power :pd and :qd of wye-connected generators as a function of voltage and current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_wye-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_wye","text":"function constraint_mc_generator_power_wye(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, links the generator power variables :pd and :qd of wye-connected generators to the voltage and current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_wye-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_wye","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_wye-Tuple{IVRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_wye","text":"wye connected generator setpoint constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current-Tuple{AbstractExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current","text":"function constraint_mc_load_current(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, create non-linear expressions for the terminal current flows :crd_bus and :cid_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current","text":"function constraint_mc_load_current(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, create expressions for the terminal current flows :crd_bus and :cid_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_delta-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_delta","text":"function constraint_mc_load_current_delta(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\ta::Vector{<:Real},\n\talpha::Vector{<:Real},\n\tb::Vector{<:Real},\n\tbeta::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, create non-linear expressions for the terminal current flows :crd_bus and :cid_bus of delta-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_delta-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_delta","text":"function constraint_mc_load_current_delta(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tconnections::Vector{Int};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, create expressions for the terminal current flows :crd_bus and :cid_bus for delta-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_delta-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector, Vector}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_delta","text":"We want to express sab = cp.|vab|+im.cq.|vab| iab = conj(sab/vab) = |vab|.(cq-im.cq)/conj(vab) = (1/|vab|).(cp-im.cq)*vab idem for ibc and ica And then sa = va.conj(ia) = va.conj(iab-ica) idem for sb and sc\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_delta-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Vector, Vector}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_delta","text":"constraint_mc_load_current_delta(pm::FOTPUPowerModel, nw::Int, load_id::Int, load_bus_id::Int, cp::Vector, cq::Vector)\n\nNo loads require a current variable. Delta loads are zero-order approximations and wye loads are first-order approximations around the initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_wye-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_wye","text":"function constraint_mc_load_current_wye(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\ta::Vector{<:Real},\n\talpha::Vector{<:Real},\n\tb::Vector{<:Real},\n\tbeta::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, create non-linear expressions for the terminal current flows :crd_bus and :cid_bus of wye-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_wye-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_wye","text":"function constraint_mc_load_current_wye(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tconnections::Vector{Int};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, create expressions for the terminal current flows :crd_bus and :cid_bus for wye-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{AbstractExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"function constraint_mc_load_power(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, the load power does not require any constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"function constraint_mc_load_power(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{AbstractUBFModels, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"Creates the constraints modelling the (relaxed) voltage-dependent loads.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{AbstractUnbalancedActivePowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"Only support wye-connected, constant-power loads.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"constraint_mc_load_power(pm::AbstractUnbalancedPowerModel, id::Int; nw::Int=nw_id_default, report::Bool=true)::Nothing\n\nTemplate function for load constraints.\n\nCONSTANT POWER\n\nFixes the load power sd.\n\nsd = sd_1 sd_2 sd_3\n\nWhat is actually fixed, depends on whether the load is connected in delta or wye. When connected in wye, the load power equals the per-phase power sn drawn at the bus to which the load is connected.\n\nsd_1 = v_aconj(i_a) = sn_a\n\nCONSTANT CURRENT\n\nSets the active and reactive load power sd to be proportional to the the voltage magnitude.\n\npd = cpvm\nqd = cqvm\nsd = cpvm + jcqvm\n\nCONSTANT IMPEDANCE\n\nSets the active and reactive power drawn by the load to be proportional to the square of the voltage magnitude.\n\npd = cpvm^2\nqd = cqvm^2\nsd = cpvm^2 + jcqvm^2\n\nDELTA\n\nWhen connected in delta, the load power gives the reference in the delta reference frame. This means\n\nsd_1 = v_abconj(i_ab) = (v_a-v_b)conj(i_ab)\n\nWe can relate this to the per-phase power by\n\nsn_a = v_aconj(i_a)\n = v_aconj(i_ab-i_ca)\n = v_aconj(conj(s_abv_ab) - conj(s_cav_ca))\n = v_a(s_ab(v_a-v_b) - s_ca(v_c-v_a))\n\nSo for delta, sn is constrained indirectly.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{FBSUBFPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"constraint_mc_load_power(pm::FBSUBFPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)\n\nLoad model is linearized around initial operating point. Wye loads are first-order and delta loads are zero-order approximations.\n\nbeginalign\ntextInitial operating point v_rd^0 + j v_id^0textwhere(v_m^0)^2 = (v_rd^0)^2 + (v_id^0)^2\ntextConstant power P^d = P^d0Q^d = Q^d0 \ntextConstant impedance P^d = a left(2cdot v_rd v_rd^0+2 v_id*v_id^0-(v_m^0)^2right)\n Q^d = b left(2cdot v_rd v_rd^0+2 v_id*v_id^0-(v_m^0)^2right) \ntextConstant current P^d = a left(v_m^0 + fracv_rd v_rd^0+ v_id*v_id^0-(v_m^0)^2v_m^0 right)\n Q^d = b left(v_m^0 + fracv_rd v_rd^0+ v_id*v_id^0-(v_m^0)^2v_m^0 right)\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{FOTPUPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"constraint_mc_load_power(pm::FOTPUPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)\n\nLoad model is linearized around initial operating point. Wye loads are first-order and delta loads are zero-order approximations.\n\nbeginalign\ntextInitial operating point v_m0 angle v_a0\ntextConstant power P^d = P^d0Q^d = Q^d0 \ntextConstant impedance P^d = a cdot left(v_m0^2+2 cdot v_m0 cdot (v_m-v_m0)right)\n Q^d = b cdot left(v_m0^2+2 cdot v_m0 cdot (v_m-v_m0)right) \ntextConstant current P^d = a cdot v_m\n Q^d = b cdot v_m\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{FOTRUPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"constraint_mc_load_power(pm::FOTRUPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)\n\nLoad model is linearized around initial operating point similar to FBSUBFPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{LPUBFDiagModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"constraint_mc_load_power(pm::LPUBFDiagModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)\n\nDelta/voltage-dependent load models for LPUBFDiagModel. Delta loads use the auxilary power variable (X). The constant current load model is derived by linearizing around the flat-start voltage solution.\n\nbeginalign\ntextConstant power Rightarrow P_i^d = P_i^d0Q_i^d = Q_i^d0 forall i in L \ntextConstant impedance (Wye) Rightarrow P_i^d = a_i cdot w_iQ_i^d = b_i cdot w_i forall i in L \ntextConstant impedance (Delta) Rightarrow P_i^d = 3cdot a_i cdot w_iQ_i^d = 3cdot b_i cdot w_i forall i in L \ntextConstant current (Wye) Rightarrow P_i^d = fraca_i2cdot left( 1+w_i right)Q_i^d = fracb_i2cdot left( 1+w_i right) forall i in L \ntextConstant current (Delta) Rightarrow P_i^d = fracsqrt3 cdot a_i2cdot left( 1+w_i right)Q_i^d = fracsqrt3 cdot b_i2cdot left( 1+w_i right) forall i in L\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{SDPUBFKCLMXModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"Creates the constraints modelling the (relaxed) voltage-dependent loads for the matrix KCL formulation.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"function constraint_mc_load_power(\n\tpm::ExplicitNeutralModels,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true\n)\n\nConstrains load power variables for models with explicit neutrals.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_delta-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_delta","text":"function constraint_mc_load_power_delta(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\ta::Vector{<:Real},\n\talpha::Vector{<:Real},\n\tb::Vector{<:Real},\n\tbeta::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor ACR models with explicit neutrals, creates non-linear expressions for terminal power flows ':pdbus' and ':qdbus' of delta-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_delta-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, LoadModel, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_delta","text":"function constraint_mc_load_power_delta(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tmodel::LoadModel,\n\ta::Vector{<:Real},\n\tb::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables for delta-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_delta-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_delta","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_delta-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_delta","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_delta-Tuple{IVRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_delta","text":"delta connected load setpoint constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_wye-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_wye","text":"function constraint_mc_load_power_wye(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\ta::Vector{<:Real},\n\talpha::Vector{<:Real},\n\tb::Vector{<:Real},\n\tbeta::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor ACR models with explicit neutrals, creates non-linear expressions for terminal power flows ':pdbus' and ':qdbus' of wye-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_wye-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, LoadModel, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_wye","text":"function constraint_mc_load_power_wye(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tmodel::LoadModel,\n\ta::Vector{<:Real},\n\tb::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables for wye-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_wye-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_wye","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_wye-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_wye","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_wye-Tuple{IVRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_wye","text":"wye connected load setpoint constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_current-Tuple{AbstractLPUBFModel, Int64, Vararg{Any, 5}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_current","text":"Defines relationship between branch (series) power flow, branch (series) current and node voltage magnitude\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_current-Tuple{AbstractUBFModels}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_current","text":"constraint_mc_model_current(pm::AbstractUBFModels; nw::Int=nw_id_default)::Nothing\n\nTemplate function for constraints for model current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_current-Tuple{SDPUBFModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_current","text":"Defines relationship between branch (series) power flow, branch (series) current and node voltage magnitude\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_current-Tuple{SOCConicUBFModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_current","text":"Defines relationship between branch (series) power flow, branch (series) current and node voltage magnitude\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_current-Tuple{SOCUBFModels, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_current","text":"Defines relationship between branch (series) power flow, branch (series) current and node voltage magnitude\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage-Tuple{AbstractUnbalancedDCPModel, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage","text":"nothing to do, these models do not have complex voltage constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage","text":"do nothing by default\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage-Tuple{AbstractUnbalancedPowerModel}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage","text":"constraint_mc_model_voltage(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default)::Nothing\n\nTemplate function for model voltage constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference-Tuple{AbstractUBFModels, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference","text":"Defines voltage drop over a branch, linking from and to side voltage\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference","text":"constraint_mc_model_voltage_magnitude_difference(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for constraints for modeling voltage magnitude difference across branches\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference","text":"constraint_mc_model_voltage_magnitude_difference(pm::FBSUBFPowerModel, nw::Int, i::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, r::Matrix{<:Real}, x::Matrix{<:Real}, g_sh_fr::Matrix{<:Real}, b_sh_fr::Matrix{<:Real})\n\nVoltage drop over a branch linearized around initial operating point (forward sweep)\n\nbeginalign\ntextInitial operating points (v_r0^fr + j v_i0^fr) (v_r0^to + j v_i0^to)\ntextSeries active power flow p_s^fr = p^fr - g_sh^fr (v_m0^fr)^2\ntextSeries reactive power flow q_s^fr = q^fr + b_sh^fr (v_m0^fr)^2\ntextSeries real current flow cr_s^fr = frac(p_s^fr v_r0^fr + q_s^fr v_i0^fr)(v_m0^fr)^2\ntextSeries imaginary current flow ci_s^fr = frac(-q_s^fr v_r0^fr + p_s^fr v_i0^fr)(v_m0^fr)^2\ntextSeries real voltage drop v_r^to = v_r^fr - r cr_s^fr + x ci_s^fr \ntextSeries imaginary voltage drop v_i^to = v_i^fr - x cr_s^fr - r ci_s^fr\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference-Tuple{LPUBFDiagModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference","text":"Defines voltage drop over a branch, linking from and to side voltage\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_network_power_balance-Tuple{AbstractUnbalancedAPLossLessModels, Int64, Vararg{Any, 8}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_network_power_balance","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_network_power_balance-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_network_power_balance","text":"constraint_mc_network_power_balance(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for constraints that ensures that power generation and demand are balanced in OBF problem\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"function constraint_mc_ohms_yt_from(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tG::Matrix{<:Real},\n\tB::Matrix{<:Real},\n\tG_fr::Matrix{<:Real},\n\tB_fr::Matrix{<:Real}\n)\n\nFor ACR models with explicit neutrals, creates Ohms constraints for ACR models with explicit neutrals.\n\ns_fr = v_fr.*conj(Y*(v_fr-v_to))\ns_fr = (vr_fr+im*vi_fr).*(G-im*B)*([vr_fr-vr_to]-im*[vi_fr-vi_to])\ns_fr = (vr_fr+im*vi_fr).*([G*vr_fr-G*vr_to-B*vi_fr+B*vi_to]-im*[G*vi_fr-G*vi_to+B*vr_fr-B*vr_to])\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\np_fr == g[c,c] * vm_fr[c]^2 +\n sum( g[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) +\n b[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c) +\n sum(-g[c,d]*vm_fr[c]*vm_to[d]*cos(va_fr[c]-va_to[d]) +\n -b[c,d]*vm_fr[c]*vm_to[d]*sin(va_fr[c]-va_to[d]) for d in conductor_ids(pm))\n + g_fr[c,c] * vm_fr[c]^2 +\n sum( g_fr[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) +\n b_fr[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c)\n )\nq_fr == -b[c,c] *vm_fr[c]^2 -\n sum( b[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) -\n g[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c) -\n sum(-b[c,d]*vm_fr[c]*vm_to[d]*cos(va_fr[c]-va_to[d]) +\n g[c,d]*vm_fr[c]*vm_to[d]*sin(va_fr[c]-va_to[d]) for d in conductor_ids(pm))\n -b_fr[c,c] *vm_fr[c]^2 -\n sum( b_fr[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) -\n g_fr[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c)\n )\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"Creates Ohms constraints\n\nsfr = vfr.conj(Y(vfr-vto)) sfr = (vrfr+imvi_fr).(G-imB)([vrfr-vrto]-im[vifr-vito]) sfr = (vrfr+imvifr).([Gvrfr-Gvr_to-Bvifr+B*vito]-im[Gvifr-G*vito+Bvr_fr-Bvr_to])\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractUnbalancedDCPModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\np[f_idx] == -b*(t[f_bus] - t[t_bus])\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractUnbalancedNFAModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"nothing to do, no voltage angle variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"constraint_mc_ohms_yt_from(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nTemplate function for ohms constraint for branches on the from-side\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"constraint_mc_ohms_yt_from(pm::FOTPUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_fr::Matrix{<:Real}, B_fr::Matrix{<:Real})\n\nOhm constraints similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating points.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{FOTRUPowerModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"constraint_mc_ohms_yt_from(pm::FOTRUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_fr::Matrix{<:Real}, B_fr::Matrix{<:Real})\n\nCreates Ohms constraints by linearizing (similar to power balance constraints) around initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vararg{Matrix, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"function constraint_mc_ohms_yt_to(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tG::Matrix,\n\tB::Matrix,\n\tG_to::Matrix,\n\tB_to::Matrix\n)\n\nFor ACR models with explicit neutrals, creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form).\n\np[t_idx] == (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\nq[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\np[t_idx] == (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\nq[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vararg{Matrix, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\np[t_idx] == (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\nq[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractUnbalancedAPLossLessModels, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"Do nothing, this model is symmetric\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"constraint_mc_ohms_yt_to(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nTemplate function for ohms constraint for branches on the to-side\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractUnbalancedWModels, Int64, Int64, Vararg{Any, 11}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"constraint_mc_ohms_yt_to(pm::FOTPUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_to::Matrix{<:Real}, B_to::Matrix{<:Real})\n\nOhm constraints similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating points.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{FOTRUPowerModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vararg{Matrix, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"constraint_mc_ohms_yt_to(pm::FOTRUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix, B::Matrix, G_to::Matrix, B_to::Matrix)\n\nCreates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{NFAUPowerModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"nothing to do, this model is symmetric\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_oltc_tap_fix-Tuple{AbstractUnbalancedPowerModel, Int64, Vector, Vector}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_oltc_tap_fix","text":"For a variable tap transformer, fix the tap variables which are fixed. For example, an OLTC where the third phase is fixed, will have tap variables for all phases, but the third tap variable should be fixed.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{AbstractUnbalancedACPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{AbstractUnbalancedACRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{AbstractUnbalancedActivePowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"constraint_mc_power_balance(pm::AbstractUnbalancedActivePowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\npower balanace constraint with line shunts and transformers, active power only\n\np_br + p_tr + p_sw == p_g - p_s - p_d - G\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"constraint_mc_power_balance(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{AbstractUnbalancedWModels, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{FBSUBFPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"constraint_mc_power_balance(pm::FBSUBFPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints similar to ACRUPowerModel with shunt current calculated using initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{FOTPUPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"constraint_mc_power_balance(pm::FOTPUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance equations similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating point.\n\nbeginalign\ntextInitial operating points v_m0^t angle v_a0^tv_m0^u angle v_a0^u\n v_m^t^2 Rightarrow v_m0^t^2+2 cdot v_m0^t cdot (v_m^t-v_m0^t)\n v_m^t cdot v_m^u cdot cos(v_a^t-v_a^u) Rightarrow v_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u) +\nbeginbmatrix\nv_m0^u cdot cos(v_a0^t-v_a0^u) \nv_m0^t cdot cos(v_a0^t-v_a0^u) \n-v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u) \nv_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u)\nendbmatrix^top\nbeginbmatrix\nv_m^t-v_m0^t \nv_m^u-v_m0^u \nv_a^t-v_a0^t \nv_a^u-v_a0^u\nendbmatrix \n v_m^t cdot v_m^u cdot sin(v_a^t-v_a^u) Rightarrow v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u) +\nbeginbmatrix\nv_m0^u cdot sin(v_a0^t-v_a0^u) \nv_m0^t cdot sin(v_a0^t-v_a0^u) \nv_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u) \n-v_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u)\nendbmatrix^top\nbeginbmatrix\nv_m^t-v_m0^t \nv_m^u-v_m0^u \nv_a^t-v_a0^t \nv_a^u-v_a0^u\nendbmatrix\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{FOTRUPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"constraint_mc_power_balance(pm::FOTRUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints similar to ACRUPowerModel with shunt current linearized around initial operating point.\n\nbeginalign\ntextInitial operating point (v_r0 + j v_i0)\n v_r v_i = v_r0 v_i0 + v_r v_i0 + v_r0 v_i - 2 v_r0 v_i0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{LPUBFDiagModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{SDPUBFKCLMXModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"Shunt handling in matrix form: I = Y.U S = U.I' = U.(Y.U)' = U.U'.Y' = W.Y' = (Wr+j.Wi)(G+jB)' = (Wr+j.Wi)(G'-j.B') = (Wr.G'+Wi.B')+j(-Wr.B'+Wi.G') P = Wr.G'+Wi.B' Q = -Wr.B'+Wi.G'\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"function constraint_mc_power_balance(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool},\n\tbus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_gens::Vector{Tuple{Int,Vector{Int}}},\n\tbus_storage::Vector{Tuple{Int,Vector{Int}}},\n\tbus_loads::Vector{Tuple{Int,Vector{Int}}},\n\tbus_shunts::Vector{Tuple{Int,Vector{Int}}}\n)\n\nImposes power balance constraints at each ungrounded terminal of bus i for rectangular voltage models with explicit neutrals. sum(p + im*q) = 0\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{AbstractUnbalancedACPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::AbstractUnbalancedACPModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control.\n\nbeginalign\n Bs = z bs \n textcapacitor ON z = 1 \n textcapacitor OFF z = 0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{AbstractUnbalancedACRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::AbstractUnbalancedACRModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control.\n\nbeginalign\n Bt = z bs \n textcapacitor ON z = 1 \n textcapacitor OFF z = 0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{AbstractUnbalancedActivePowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"nothing to do in capc, no complex voltage variables in these models\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nTemplate function for KCL constraints with capacitor control variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{FBSUBFPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::FBSUBFPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control similar to ACRUPowerModel with shunt current calculated using initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{FOTPUPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::FOTPUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control with shunt current calculated using initial operating point.\n\nbeginalign\n B_s = b_s z cq_sh = B_s v \n B_s cdot v_m^t cdot v_m^u cdot cos(v_a^t-v_a^u) Rightarrow B_s0 cdot v_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u) +\nbeginbmatrix\nB_s0 cdot v_m0^u cdot cos(v_a0^t-v_a0^u) \nB_s0 cdot v_m0^t cdot cos(v_a0^t-v_a0^u) \n-B_s0 cdot v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u) \nB_s0 cdot v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u) \nv_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u)\nendbmatrix^top\nbeginbmatrix\nv_m^t-v_m0^t \nv_m^u-v_m0^u \nv_a^t-v_a0^t \nv_a^u-v_a0^u \nB_s -B_s0\nendbmatrix \n B_s cdot v_m^t cdot v_m^u cdot sin(v_a^t-v_a^u) Rightarrow B_s0 cdot v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u) +\nbeginbmatrix\n B_s0 cdot v_m0^u cdot sin(v_a0^t-v_a0^u) \n B_s0 cdot v_m0^t cdot sin(v_a0^t-v_a0^u) \n B_s0 cdot v_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u) \n -B_s0 cdot v_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u) \n v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u)\nendbmatrix^top\nbeginbmatrix\nv_m^t-v_m0^t \nv_m^u-v_m0^u \nv_a^t-v_a0^t \nv_a^u-v_a0^u \nB_s -B_s0\nendbmatrix\n\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{FOTRUPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::FOTRUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control with shunt current calculated using initial operating point.\n\nbeginalign\n B_t = b_s z cq_sh = B_t v \n textFOT approximation B_t v_r v_i = B_t0 v_r0 v_i0 + B_t v_r0 v_i0 + B_t0 v_r v_i0 + B_t0 v_r0 v_i - 3 B_t0 v_r0 v_i0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{LPUBFDiagModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::LPUBFDiagModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control linearized using McCormick envelopes\n\nbeginalign\n B_s = b_s z cq_sh = B_s w \n textUnderestimator cq_sh B_s w_textmin cq_sh b_s w + B_s w_textmax - b_s w_textmax\n textOverestimator cq_sh B_s w_textmax cq_sh b_s w + B_s w_textmin - b_s w_textmin\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed-Tuple{AbstractUnbalancedACPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed-Tuple{AbstractUnbalancedACRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed-Tuple{AbstractUnbalancedDCPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed","text":"power balance constraint with line shunts and transformers for load shed problem, DCP formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed","text":"constraint_mc_power_balance_shed(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints for load shed problem\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed-Tuple{AbstractUnbalancedWModels, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed","text":"KCL for load shed problem with transformers (AbstractWForms)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed_simple-Tuple{AbstractUnbalancedDCPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed_simple","text":"power balance constraint with line shunts and transformers for load shed problem, DCP formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_simple-Tuple{AbstractUnbalancedACPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_simple","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_simple-Tuple{AbstractUnbalancedACRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_simple","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_simple-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_simple","text":"constraint_mc_power_balance_simple(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints for simple load shedding\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_slack-Tuple{AbstractUnbalancedACPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_slack","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_slack-Tuple{AbstractUnbalancedACRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_slack","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_slack-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_slack","text":"constraint_mc_power_balance_slack(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints which include a slack power at every bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_slack-Tuple{AbstractUnbalancedWModels, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{<:Tuple{Tuple{Int64, Int64, Int64}, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Tuple{Int64, Int64, Int64}, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Tuple{Int64, Int64, Int64}, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Int64, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Int64, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Int64, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Int64, Vector{Union{Int64, String}}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_slack","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_losses-Tuple{AbstractUBFModels, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_losses","text":"Defines branch flow model power flow equations\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_losses-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_losses","text":"constraint_mc_power_losses(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for constraints for modeling power losses across branches\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_losses-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_losses","text":"constraint_mc_power_losses(pm::FBSUBFPowerModel, nw::Int, i::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, r::Matrix{<:Real}, x::Matrix{<:Real}, g_sh_fr::Matrix{<:Real}, g_sh_to::Matrix{<:Real}, b_sh_fr::Matrix{<:Real}, b_sh_to::Matrix{<:Real})\n\nBranch flow model power flow equation linearized around initial operating point (backward sweep)\n\nbeginalign\ntextInitial operating points (v_r0^fr + j v_i0^fr) (v_r0^to + j v_i0^to)\ntextVoltage drop v_drop = (v_r0^fr + j v_i0^fr) - (v_r0^to + j v_i0^to)\ntextLine series admittance y = (r+j x)^-1\ntextPower loss s_loss = v_drop (y v_drop)^*\ntextActive power flow p^fr + p^to = g_sh^fr (v_m0^fr)^2 + g_sh^to (v_m0^to)^2 + Re(s_loss)\ntextReactive power flow q^fr + q^to = -b_sh^fr (v_m0^fr)^2 - b_sh^to (v_m0^to)^2 + Im(s_loss)\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_losses-Tuple{LPUBFDiagModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_losses","text":"Defines branch flow model power flow equations\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_regen_setpoint_active-Tuple{AbstractUnbalancedIVRModel, Int64, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_regen_setpoint_active","text":"qq[i] == qq\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_current_limit-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_current_limit","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_current_limit-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Int64, Vector{Int64}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_current_limit","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_current_limit-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_current_limit","text":"constraint_mc_storage_current_limit(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for storage current limit constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUBFAModel, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"Neglects the active and reactive loss terms associated with the squared current magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUBFModels, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"Neglects the active and reactive loss terms associated with the squared current magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedACRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedAPLossLessModels, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"active power only, lossless model\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedAPLossLessModels, Int64, Vararg{Any, 6}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"active power only\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"constraint_mc_storage_losses(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for storage loss constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedWConvexModels, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_on_off-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_on_off-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_on_off-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_on_off","text":"constraint_mc_storage_on_off(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTempate function for storage on/off constraints for MLD problems\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_power_setpoint_real-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_power_setpoint_real","text":"constraint_mc_storage_power_setpoint_real(pm::AbstractUnbalancedPowerModel, nw::Int, i::Int, ps::Real)::Nothing\n\nGeneric storage real power setpoint constraint\n\nP_s == P_s^setpoint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_power_setpoint_real-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_power_setpoint_real","text":"constraint_mc_storage_power_setpoint_real(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for storage active power setpoint constraint, for power flow problems\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_thermal_limit-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Vector{Int64}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_thermal_limit","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_thermal_limit-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{Int64}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_thermal_limit","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_thermal_limit-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_thermal_limit","text":"constraint_mc_storage_thermal_limit(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for storage thermal limit constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_thermal_limit-Tuple{LPUBFDiagModel, Int64, Int64, Vector{Int64}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_thermal_limit","text":"constraintmcstoragethermallimit(pm::AbstractUnbalancedPowerModel, nw::Int, i::Int, connections::Vector{Int}, rating::Real)\n\nLinear version of storage thermal limit constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{AbstractUnbalancedACPModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"constraint_mc_switch_ampacity(pm::AbstractUnbalancedACPModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on switches\n\nmathp_{fr}^2 + q_{fr}^2 \\leq vm_{fr}^2 i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Float64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"nothing to do, no voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"constraint_mc_switch_ampacity(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for switch current limit constraint from-side\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{AbstractUnbalancedRectangularModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"constraint_mc_switch_ampacity(pm::AbstractUnbalancedRectangularModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on switches\n\nmathp_{fr}^2 + q_{fr}^2 \\leq (vr_{fr}^2 + vi_{fr}^2) i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{AbstractUnbalancedWModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"constraint_mc_switch_ampacity(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on switches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq w_{fr} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{LPUBFDiagModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"constraint_mc_switch_ampacity(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})\n\nACP current limit constraint on switches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq w_{fr} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current","text":"function constraint_mc_switch_current(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, create expressions for the terminal current flows :crsw_bus and cisw_bus, and link the from-side to the to-side switch current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current","text":"function constraint_mc_switch_current(\n pm::ExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n report::Bool=true\n)\n\nFor models with explicit neutrals, link the switch currents or create appropiate expressions for them.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current_limit-Tuple{AbstractExplicitNeutralACRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current_limit","text":"function constraint_mc_switch_current_limit(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the switch current magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side current, so it suffices to apply this only explicitly at the from-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current_limit-Tuple{AbstractExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current_limit","text":"function constraint_mc_switch_current_limit(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tconnections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nFor IVR models with explicit neutrals, imposes a bound on the switch current magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side current, so it suffices to apply this only explicitly at the from-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current_limit-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current_limit","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current_limit-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current_limit","text":"constraint_mc_switch_current_limit(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for switch current limit constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_power-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_power","text":"function constraint_mc_switch_power(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int};\n\treport::Bool=true\n)\n\nconstraintmcswitchpower( pm::ReducedExplicitNeutralIVRModels, nw::Int, id::Int, fidx::Tuple{Int,Int,Int}, tidx::Tuple{Int,Int,Int}, fconnections::Vector{Int}, t_connections::Vector{Int}; report::Bool=true )\n\nFor IVR models with explicit neutrals, create expressions for the terminal power flows :psw_bus and qsw_bus, and link the from-side to the to-side switch power\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_power-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_power","text":"function constraint_mc_switch_power(\n pm::ExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n report::Bool=true\n)\n\nFor IVR models with explicit neutrals, link the switch power or create appropiate expressions for them\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_power_on_off-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_power_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_power_on_off-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_power_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state","text":"constraint_mc_switch_state(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for switch state constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedDCPModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedNFAModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"nothing to do\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedWModels, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"constraint_mc_switch_state_closed(pm::FBSUBFPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_connections::Vector{Int}, t_connections::Vector{Int})\n\nVoltage constraints for closed switches similar to ACRUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_on_off-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_on_off-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_on_off-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_on_off-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_on_off","text":"constraint_mc_switch_state_on_off(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default, relax::Bool=false)::Nothing\n\nTemplate function for switch state on/off constraints (MLD problems)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_on_off-Tuple{AbstractUnbalancedWModels, Int64, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_open-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_open","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_open-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_open","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_open-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_open","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractExplicitNeutralACRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"function constraint_mc_switch_thermal_limit(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the switch power magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side power when the switch is closed (equal voltages), and also when it is open since the power then equals zero on both ends.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractLPUBFModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Float64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"function constraint_mc_switch_thermal_limit(\n\tpm::AbstractNLExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nThis method is not yet implemented for AbstractLPUBFModel. If the limit is finite, a warning is thrown.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractNLExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"function constraint_mc_switch_thermal_limit(\n\tpm::AbstractNLExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nFor IVR models with explicit neutrals, imposes a bound on the switch power magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side power when the switch is closed (equal voltages), and also when it is open since the power then equals zero on both ends.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"function constraint_mc_switch_thermal_limit(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nFor quadratic IVR models with explicit neutrals, throw an error because this cannot be represented quadratically without introducing explicit power variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"constraint_mc_switch_thermal_limit(pm::AbstractUnbalancedActivePowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, rating::Vector{<:Real})::Nothing\n\nActive power only switch thermal limit constraint\n\nmath-S_{max} \\leq p_{fr} \\leq S_{max}\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"constraint_mc_switch_thermal_limit(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for switch thermal limit constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractExplicitNeutralACRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"function constraint_mc_thermal_limit_from(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the from-side line power magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"function constraint_mc_thermal_limit_from(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor IVR models with explicit neutrals, imposes a bound on the from-side line power magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"function constraint_mc_thermal_limit_from(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor quadratic IVR models with explicit neutrals, throw an error because this cannot be represented quadratically without introducing explicit power variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"-rate_a <= p[f_idx] <= rate_a\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"p[f_idx]^2 + q[f_idx]^2 <= rate_a^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"constraint_mc_thermal_limit_from(pm::AbstractUnbalancedPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, rate_a::Vector{<:Real})::Nothing\n\nGeneric thermal limit constraint for branches (from-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"constraint_mc_thermal_limit_from(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for branch thermal constraints (from-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractExplicitNeutralACRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"function constraint_mc_thermal_limit_to(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tt_idx::Tuple{Int,Int,Int},\n\tt_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the from-side line power magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"function constraint_mc_thermal_limit_to(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tt_idx::Tuple{Int,Int,Int},\n\tt_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor IVR models with explicit neutrals, imposes a bound on the to-side line power magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"function constraint_mc_thermal_limit_to(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tt_idx::Tuple{Int,Int,Int},\n\tt_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor quadratic IVR models with explicit neutrals, throw an error because this cannot be represented quadratically without introducing explicit power variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"p[t_idx]^2 + q[t_idx]^2 <= rate_a^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"constraint_mc_thermal_limit_to(pm::AbstractUnbalancedPowerModel, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, rate_a::Vector{<:Real})::Nothing\n\nGeneric thermal limit constraint for branches (to-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"constraint_mc_thermal_limit_to(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for branch thermal constraints (to-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"Creates phase angle constraints at reference buses\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedNFAModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"nothing to do, no voltage angle variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedPolarModels, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"Creates phase angle constraints at reference buses\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"constraint_mc_theta_ref(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for reference angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedWModels, Int64, Int64, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"do nothing, no way to represent this in these variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedWModels, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{FBSUBFPowerModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"constraint_mc_theta_ref(pm::FBSUBFPowerModel, nw::Int, i::Int, va_ref::Vector{<:Real})\n\nCreates phase angle constraints at reference buses similar to ACRUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{LPUBFDiagModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"balanced three-phase phasor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64, Int64, Vector{<:Real}, Vector{Int64}, Vector{Bool}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"function constraint_mc_theta_ref(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tva::Vector{<:Real},\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool}\n)\n\nCreates phase angle constraints at bus i\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_current-Tuple{AbstractExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_current","text":"function constraint_mc_transformer_current(\n\tpm::AbstractExplicitNeutralIVRModel,\n\ti::Int;\n\tnw::Int=nw_id_default,\n\tfix_taps::Bool=true\n)\n\nFor IVR models with explicit neutrals, links the current variables of the from-side and to-side transformer windings, and creates expressions for the terminal current flows\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_current_dy-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_current_dy","text":"function constraint_mc_transformer_current_dy(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor IVR models with explicit neutrals, links the current variables of the from-side and to-side transformer windings, and creates expressions for the terminal current flows for delta-wye connected transformers\n\nscale*cr_fr_P + cr_to_P == 0\nscale*ci_fr_P + ci_to_P == 0\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_current_yy-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_current_yy","text":"function constraint_mc_transformer_current_yy(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor IVR models with explicit neutrals, links the current variables of the from-side and to-side transformer windings, and creates expressions for the terminal current flows for wye-wye connected transformers\n\nscale*cr_fr_P + cr_to_P == 0\nscale*ci_fr_P + ci_to_P == 0\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power","text":"constraint_mc_transformer_power(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default, fix_taps::Bool=true)::Nothing\n\nTemplate function for Transformer constraints in Power-voltage space, considering winding type, conductor order, polarity and tap settings.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power-Tuple{NFAUPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power","text":"constraint_mc_transformer_power(pm::NFAUPowerModel, i::Int; nw::Int=nw_id_default)\n\ntransformer active power only constraint pf=-pt\n\np_ffc == -pttc\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"function constraint_mc_transformer_power_dy(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor ACR models with explicit neutrals, links the from-side and to-side power variables of delta-wye connected transformers. Expressions for the terminal power flow variables are also added.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"This function adds all constraints required to model a two-winding, delta-wye connected transformer.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"delta-wye transformer power constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"constraint_mc_transformer_power_dy(pm::FBSUBFPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, delta-wye connected transformer similar to ACRUPowerModel with power constraints using initial operating point voltage instead of actual voltage variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"constraint_mc_transformer_power_dy(pm::FOTPUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, delta-wye connected transformer similar to ACPUPowerModel with voltage constraints linearized using first-order Taylor approximation and power constraints simplified using initial operating point voltage instead of actual voltage variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{FOTRUPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"constraint_mc_transformer_power_dy(pm::FOTRUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, delta-wye connected transformer similar to ACRUPowerModel with power constraints using initial operating point voltage instead of actual voltage variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{SOCUBFModels, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"constraint_mc_transformer_power_dy(pm::SOCUBFModels, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nConstraints to model a two-winding, delta-wye connected transformer.\n\nbeginalign\n W_fr^ij-W_fr^ik-W_fr^lj+W_fr^lk = t_m^2W_to^ij forall ij in 123 textand kl in 231 \n S_fr = X_tT_t \n S_fr^Delta = T_tX_t \n s_fr^Delta + s_to = 0\n M_Delta =\n beginbmatrix\n W_fr X_t \n X_t^textH L_Delta\n endbmatrix succeq 0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"function constraint_mc_transformer_power_yy(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor ACR models with explicit neutrals, links the from-side and to-side power variables of wye-wye connected transformers. Expressions for the terminal power flow variables are also added.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"This function adds all constraints required to model a two-winding, wye-wye connected transformer.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"wye-wye transformer power constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"constraint_mc_transformer_power_yy(pm::FBSUBFPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, wye-wye connected transformer similar to ACRUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"constraint_mc_transformer_power_yy(pm::FOTPUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, wye-wye connected transformer similar to ACPUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{FOTRUPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"constraint_mc_transformer_power_yy(pm::FOTRUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, wye-wye connected transformer similar to ACRUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{LPUBFDiagModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"Links to and from power and voltages in a wye-wye transformer, assumes tm_fixed is true\n\nw_fr_i=(pol_i*tm_scale*tm_i)^2w_to_i\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{SOCUBFModels, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"constraint_mc_transformer_power_yy(pm::SOCUBFModels, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nConstraints to model a two-winding, wye-wye connected transformer.\n\nbeginalign\n W_fr = T_mT_m^H W_to \n s_fr + s_to = 0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_thermal_limit-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Tuple, Tuple, Int64, Int64, Vector, Vector, ConnConfig, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_thermal_limit","text":"function constraint_mc_transformer_thermal_limit(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tf_idx::Tuple,\n\tt_idx::Tuple,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_connections::Vector,\n\tt_connections::Vector,\n\tconfig::ConnConfig,\n\tsm_ub::Real;\n\treport::Bool=true\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the magnitude of the total apparent power at each winding of the transformer.\n\nsum(pt_fr)^2 + sum(qt_fr)^2 <= sm_ub^2\nsum(pt_to)^2 + sum(qt_to)^2 <= sm_ub^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_thermal_limit-Tuple{AbstractNLExplicitNeutralIVRModel, Int64, Int64, Tuple, Tuple, Int64, Int64, Vector, Vector, ConnConfig, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_thermal_limit","text":"function constraint_mc_transformer_thermal_limit(\n\tpm::AbstractNLExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tf_idx::Tuple,\n\tt_idx::Tuple,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_connections::Vector,\n\tt_connections::Vector,\n\tconfig::ConnConfig,\n\tsm_ub::Real;\n\treport::Bool=true\n)\n\nFor non-linear IVR models with explicit neutrals, imposes a bound on the magnitude of the total apparent power at both windings. Expressions are created for the transformer power variables.\n\nsum(pt_fr)^2 + sum(qt_fr)^2 <= sm_ub^2\nsum(pt_to)^2 + sum(qt_to)^2 <= sm_ub^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_thermal_limit-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Tuple, Tuple, Int64, Int64, Vector, Vector, ConnConfig, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_thermal_limit","text":"function constraint_mc_transformer_thermal_limit(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tf_idx::Tuple,\n\tt_idx::Tuple,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_connections::Vector,\n\tt_connections::Vector,\n\tconfig::ConnConfig,\n\tsm_ub::Real;\n\treport::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, imposes a bound on the magnitude of the total apparent power at both windings.\n\nsum(pt_fr)^2 + sum(qt_fr)^2 <= sm_ub^2\nsum(pt_to)^2 + sum(qt_to)^2 <= sm_ub^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_thermal_limit-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_thermal_limit","text":"function constraint_mc_transformer_thermal_limit(\n\tpm::ExplicitNeutralModels,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nImposes a bound on the total apparent at each transformer winding\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_voltage-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_voltage","text":"function constraint_mc_transformer_voltage(\n pm::ExplicitNeutralModels,\n i::Int;\n nw::Int=nw_id_default,\n fix_taps::Bool=true\n)\n\nFor models with explicit neutrals, links the voltage of the from-side and to-side transformer windings\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_voltage_dy-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_voltage_dy","text":"function constraint_mc_transformer_voltage_dy(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor rectangular voltage models with explicit neutrals, links the voltage of the from-side and to-side transformer windings for delta-wye connected transformers\n\nMd*vr_fr_P == scale * (vr_to_P - vr_to_n)\nMd*vi_fr_P == scale * (vi_to_P - vi_to_n)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_voltage_yy-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_voltage_yy","text":"function constraint_mc_transformer_voltage_yy(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor rectangular voltage models with explicit neutrals, links the voltage of the from-side and to-side transformer windings for wye-wye connected transformers\n\n(vr_fr_P-vr_fr_n) == scale * (vr_to_P.-vr_to_n)\n(vi_fr_P-vi_fr_n) == scale * (vi_to_P.-vi_to_n)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_absolute-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_absolute","text":"function constraint_mc_voltage_absolute(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool},\n\tvmin::Vector{<:Real},\n\tvmax::Vector{<:Real};\n\treport::Bool=true\n)\n\nImposes absolute voltage magnitude bounds for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_absolute-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_absolute","text":"function constraint_mc_voltage_absolute(\n pm::RectangularVoltageExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n bounded::Bool=true,\n report::Bool=true,\n)\n\nImposes absolute voltage magnitude bounds for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUBFModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"This is duplicated at PowerModelsDistribution level to correctly handle the indexing of the shunts.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUnbalancedACRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUnbalancedIVRModel, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"Bounds the voltage angle difference between bus pairs\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUnbalancedNFAModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"nothing to do, these models do not have angle difference constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUnbalancedPolarModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"constraint_mc_voltage_angle_difference(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for constraints of the voltage angle difference across branches\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{FBSUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"constraint_mc_voltage_angle_difference(pm::FBSUBFPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, angmin::Vector{<:Real}, angmax::Vector{<:Real})\n\nNothing to do, this model ignores angle difference constraints\"\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{FOTRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"constraint_mc_voltage_angle_difference(pm::FOTRUPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, angmin::Vector{<:Real}, angmax::Vector{<:Real})\n\nNothing to do, this model ignores angle difference constraints\"\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_fixed-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64, Int64, Vector{<:Real}, Vector{<:Real}, Vector{Int64}, Vector{Bool}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_fixed","text":"function constraint_mc_voltage_fixed(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tvm::Vector{<:Real},\n\tva::Vector{<:Real},\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool}\n)\n\nFixes the voltage variables at bus i to vm.*exp.(im*va)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds","text":"vmin <= vm[i] <= vmax\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds","text":"constraint_mc_voltage_magnitude_bounds(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for voltage magnitude bounds constraints.\n\nThis constraint captures problem agnostic constraints that define limits for voltage magnitudes (where variable bounds cannot be used). Notable examples include IVRUPowerModel and ACRUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds-Tuple{FBSUBFPowerModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds","text":"constraint_mc_voltage_magnitude_bounds(pm::FBSUBFPowerModel, nw::Int, i::Int, vmin::Vector{<:Real}, vmax::Vector{<:Real})\n\nUpper voltage magnitude limits are linearized using outer approximation. Lower voltage magnitude limits are linearized around initial operating point.\n\nbeginalign\ntextInitial operating point v_r^0 + j v_i^0textwhere(v_m^0)^2 = (v_r^0)^2 + (v_i^0)^2\ntextLower limits 2 v_r v_r^0 + 2 v_i v_i^0 - (v_m^0)^2 v_min^2\ntextUpper limits -v_max v_r v_max\n -v_max v_i v_max\n-sqrt2 v_max v_r + v_i sqrt2 v_max\n -sqrt2 v_max v_r - v_i sqrt2 v_max\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds-Tuple{FOTRUPowerModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds","text":"constraint_mc_voltage_magnitude_bounds(pm::FOTRUPowerModel, nw::Int, i::Int, vmin::Vector{<:Real}, vmax::Vector{<:Real})\n\nLinearized voltage magnitude limits similar to FBSUBFPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_fixed-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64, Int64, Vector{<:Real}, Vector{Int64}, Vector{Bool}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_fixed","text":"function constraint_mc_voltage_magnitude_fixed(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tvm::Vector{<:Real},\n\tva::Vector{<:Real},\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool}\n)\n\nFixes the voltage variables at bus i to vm.*exp.(im*va)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_only-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_only","text":"vm[i] == vmref\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_only-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_only","text":"vm[i] == vmref\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_only-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_only","text":"nothing to do\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_only-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_only","text":"constraint_mc_voltage_magnitude_only(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for voltage magnitude setpoint constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_only-Tuple{AbstractUnbalancedWModels, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_only","text":"vm[i] == vmref\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_pairwise-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{<:Tuple{Any, Any, Real}}, Vector{<:Tuple{Any, Any, Real}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_pairwise","text":"function constraint_mc_voltage_pairwise(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool},\n\tvm_pair_lb::Vector,\n\tvm_pair_ub::Vector;\n\treport::Bool=true\n)\n\nImposes pairwise voltage magnitude bounds, i.e. magnitude bounds on the voltage between to terminals, for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_pairwise-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_pairwise","text":"function constraint_mc_voltage_pairwise(\n pm::RectangularVoltageExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n bounded::Bool=true,\n report::Bool=true,\n)\n\nImposes pairwise voltage magnitude bounds, i.e. magnitude bounds on the voltage between to terminals, for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_psd-Tuple{SDPUBFModel, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_psd","text":"Add explicit PSD-ness of W for nodes where it is not implied\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_psd-Tuple{SOCConicUBFModel, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_psd","text":"Add explicit PSD-ness of W for nodes where it is not implied\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_psd-Tuple{SOCUBFModels, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_psd","text":"Add explicit PSD-ness of W for nodes where it is not implied\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_reference-Tuple{Union{ExplicitNeutralModels, RectangularVoltageExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_reference","text":"function constraint_mc_voltage_reference(\n pm::ExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n bounded::Bool=true,\n report::Bool=true,\n)\n\nImposes suitable constraints for the voltage at the reference bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_pqw-Tuple{JuMP.Model, JuMP.VariableRef, JuMP.VariableRef, Vararg{Real, 6}}","page":"Constraints","title":"PowerModelsDistribution.constraint_pqw","text":"Creates the constraints modelling the (relaxed) voltage-dependency of the power consumed in each phase, s=p+jq. This is completely symmetrical for p and q, with appropriate substitutions of the variables and parameters: p->q, a->b, alpha->beta, pmin->qmin, pmax->qmax\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_complementarity_mi-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Real, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_complementarity_mi","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_complementarity_mi-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_complementarity_mi","text":"constraint_storage_complementarity_mi(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nTemplate function for mixed-integer storage complementarity constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_complementarity_nl-Tuple{AbstractUnbalancedPowerModel, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_complementarity_nl","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_complementarity_nl-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_complementarity_nl","text":"constraint_storage_complementarity_nl(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nTemplate function for nonlinear storage complementarity constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_complementarity_nl-Tuple{LPUBFDiagModel, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_complementarity_nl","text":"constraint_storage_complementarity_nl(pm::LPUBFDiagModel, n::Int, i::Int)\n\nLinear version of storage complementarity constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_state-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Int64, Real, Real, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_state","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_state-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_state","text":"constraint_storage_state(pm::AbstractUnbalancedPowerModel, i::Int, nw_1::Int, nw_2::Int)::Nothing\n\nTemplate function for storage state constraints for multinetwork problems\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_state-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_state","text":"constraint_storage_state(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for storage state constraints (non multinetwork)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_state_initial-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_state_initial","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_switch_thermal_limit-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_switch_thermal_limit","text":"constraint_switch_thermal_limit(pm::AbstractUnbalancedPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, rating::Vector{<:Real})::Nothing\n\nGeneric thermal limit constraint for switches (from-side)\n\nmathp_{fr}^2 + q_{fr}^2 \\leq S_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#Relaxation-Helpers","page":"Constraints","title":"Relaxation Helpers","text":"","category":"section"},{"location":"reference/constraints.html","page":"Constraints","title":"Constraints","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"relaxation_scheme.jl\"]","category":"page"},{"location":"reference/constraints.html#PowerModelsDistribution.cut_complex_product_and_angle_difference-NTuple{7, Any}","page":"Constraints","title":"PowerModelsDistribution.cut_complex_product_and_angle_difference","text":"cut_complex_product_and_angle_difference(m, wf, wt, wr, wi, angmin, angmax)\n\nA valid inequality for the product of two complex variables with magnitude and angle difference bounds. In the literature this constraints are called the Lifted Nonlinear Cuts (LNCs). @misc{1512.04644, Author = {Carleton Coffrin and Hassan Hijazi and Pascal Van Hentenryck}, Title = {Strengthening the SDP Relaxation of AC Power Flows with Convex Envelopes, Bound Tightening, and Lifted Nonlinear Cuts}, Year = {2015}, Eprint = {arXiv:1512.04644}, }\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_psd_real-Tuple{Any, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_psd_real","text":"relaxation_psd_to_psd_real(m, mxreal, mximag; ndim=3)\n\nFor debugging / exploration: real-valued SDP to SDP relaxation based on PSDness of principal minors, default is 3x3 SDP relaxation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc-Tuple{JuMP.Model, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc","text":"relaxation_psd_to_soc(m::JuMP.Model, mxreal, mximag; complex::Bool=true)\n\nSee section 4.3 for complex to real PSD constraint transformation: @article{Fazel2001, author = {Fazel, M. and Hindi, H. and Boyd, S.P.}, title = {{A rank minimization heuristic with application to minimum order system approximation}}, doi = {10.1109/ACC.2001.945730}, journal = {Proc. American Control Conf.}, number = {2}, pages = {4734–4739}, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=945730}, volume = {6}, year = {2001} }\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc_complex-Tuple{Any, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc_complex","text":"relaxation_psd_to_soc_complex(m, mxreal, mximag)\n\nSDP to SOC relaxation of type 2, applied to complex-value matrix, as described in:\n\n@article{Kim2003,\nauthor = {Kim, S and Kojima, M and Yamashita, M},\ntitle = {{Second order cone programming relaxation of a positive semidefinite constraint}},\ndoi = {10.1080/1055678031000148696},\njournal = {Optimization Methods and Software},\nnumber = {5},\npages = {535--541},\nvolume = {18},\nyear = {2003}\n}\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc_complex_conic-Tuple{Any, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc_complex_conic","text":"relaxation_psd_to_soc_complex_conic(m, mxreal, mximag)\n\nSDP to SOC relaxation of type 2, applied to complex-value matrix, as described in:\n\n@article{Kim2003,\nauthor = {Kim, S and Kojima, M and Yamashita, M},\ntitle = {{Second order cone programming relaxation of a positive semidefinite constraint}},\ndoi = {10.1080/1055678031000148696},\njournal = {Optimization Methods and Software},\nnumber = {5},\npages = {535--541},\nvolume = {18},\nyear = {2003}\n}\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc_conic-Tuple{Any, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc_conic","text":"relaxation_psd_to_soc_conic(m, mxreal, mximag; complex=true)\n\nSee section 4.3 for complex to real PSD constraint transformation: @article{Fazel2001, author = {Fazel, M. and Hindi, H. and Boyd, S.P.}, title = {{A rank minimization heuristic with application to minimum order system approximation}}, doi = {10.1109/ACC.2001.945730}, journal = {Proc. American Control Conf.}, number = {2}, pages = {4734–4739}, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=945730}, volume = {6}, year = {2001} }\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc_real-Tuple{Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc_real","text":"relaxation_psd_to_soc_real(m, mx)\n\nSDP to SOC relaxation of type 2, applied to real-value matrix, as described in:\n\n@article{Kim2003,\nauthor = {Kim, S and Kojima, M and Yamashita, M},\ntitle = {{Second order cone programming relaxation of a positive semidefinite constraint}},\ndoi = {10.1080/1055678031000148696},\njournal = {Optimization Methods and Software},\nnumber = {5},\npages = {535--541},\nvolume = {18},\nyear = {2003}\n}\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc_real_conic-Tuple{Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc_real_conic","text":"relaxation_psd_to_soc_real_conic(m, mx)\n\nSDP to SOC relaxation of type 2, applied to real-value matrix, as described in:\n\n@article{Kim2003,\nauthor = {Kim, S and Kojima, M and Yamashita, M},\ntitle = {{Second order cone programming relaxation of a positive semidefinite constraint}},\ndoi = {10.1080/1055678031000148696},\njournal = {Optimization Methods and Software},\nnumber = {5},\npages = {535--541},\nvolume = {18},\nyear = {2003}\n}\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#Miscellaneous-Helpers","page":"Constraints","title":"Miscellaneous Helpers","text":"","category":"section"},{"location":"reference/constraints.html","page":"Constraints","title":"Constraints","text":"calculate_tm_scale\ncalc_branch_y\ncalc_buspair_parameters","category":"page"},{"location":"reference/constraints.html#PowerModelsDistribution.calculate_tm_scale","page":"Constraints","title":"PowerModelsDistribution.calculate_tm_scale","text":"Calculates the tap scale factor for the non-dimensionalized equations.\n\n\n\n\n\n","category":"function"},{"location":"reference/constraints.html#PowerModelsDistribution.calc_branch_y","page":"Constraints","title":"PowerModelsDistribution.calc_branch_y","text":"calc_branch_y(branch::Dict{String,<:Any})\n\ncomputes branch admittance matrices\n\n\n\n\n\n","category":"function"},{"location":"reference/constraints.html#PowerModelsDistribution.calc_buspair_parameters","page":"Constraints","title":"PowerModelsDistribution.calc_buspair_parameters","text":"calc_buspair_parameters(buses, branches)\n\nComputes the buspair parameters for the network\n\n\n\n\n\n","category":"function"}] +[{"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 = [PowerModelsDistribution]\nPublic = false","category":"page"},{"location":"reference/internal.html#PowerModelsDistribution._1to1_maps","page":"Internal Functions","title":"PowerModelsDistribution._1to1_maps","text":"items that are mapped one-to-one from engineering to math models\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._CPF_COMPONENT_INTERFACES","page":"Internal Functions","title":"PowerModelsDistribution._CPF_COMPONENT_INTERFACES","text":"A mapping of supported component types to their functional interfaces.\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._array_delimiters","page":"Internal Functions","title":"PowerModelsDistribution._array_delimiters","text":"different acceptable delimiters for arrays\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._conductor_matrix","page":"Internal Functions","title":"PowerModelsDistribution._conductor_matrix","text":"field names that should become multi-conductor matrix not arrays\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._conductorless","page":"Internal Functions","title":"PowerModelsDistribution._conductorless","text":"field names that should not be multi-conductor values\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._convert_to_meters","page":"Internal Functions","title":"PowerModelsDistribution._convert_to_meters","text":"conversion factors for units to meters\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._double_operators","page":"Internal Functions","title":"PowerModelsDistribution._double_operators","text":"two number operators for reverse polish notation\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss2pmd_capcontrol_type","page":"Internal Functions","title":"PowerModelsDistribution._dss2pmd_capcontrol_type","text":"dss to pmd capcontrol type\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss2pmd_load_model","page":"Internal Functions","title":"PowerModelsDistribution._dss2pmd_load_model","text":"dss to pmd load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_array_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_array_regex","text":"regex for dss arrays\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_cmd_buscoords_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_cmd_buscoords_regex","text":"regex for dss 'buscoords' command\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_cmd_more_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_cmd_more_regex","text":"regex for dss 'more' command\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_cmd_new_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_cmd_new_regex","text":"regex for dss 'new' command\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_cmd_set_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_cmd_set_regex","text":"regex for dss 'set' command\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_control_objects","page":"Internal Functions","title":"PowerModelsDistribution._dss_control_objects","text":"all objects that define controls\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_data_objects","page":"Internal Functions","title":"PowerModelsDistribution._dss_data_objects","text":"all data holding objects\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_edge_objects","page":"Internal Functions","title":"PowerModelsDistribution._dss_edge_objects","text":"all edge types that can help define buses\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_matrix_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_matrix_regex","text":"regex for dss matrices\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_monitor_objects","page":"Internal Functions","title":"PowerModelsDistribution._dss_monitor_objects","text":"all objects that provide montoring\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_node_objects","page":"Internal Functions","title":"PowerModelsDistribution._dss_node_objects","text":"all node types that can help define buses\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_property_renames","page":"Internal Functions","title":"PowerModelsDistribution._dss_property_renames","text":"collection of dss properties that have been renamed (i.e., deprecated)\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_rpn_array_sep_regex","page":"Internal Functions","title":"PowerModelsDistribution._dss_rpn_array_sep_regex","text":"regex for dss rpn arrays\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_short_prop_names_map","page":"Internal Functions","title":"PowerModelsDistribution._dss_short_prop_names_map","text":"const built at import of short property names\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_supported_commands","page":"Internal Functions","title":"PowerModelsDistribution._dss_supported_commands","text":"supported dss commands\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_supported_components","page":"Internal Functions","title":"PowerModelsDistribution._dss_supported_components","text":"components currently supported for automatic data type parsing\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._dss_unsupported_commands","page":"Internal Functions","title":"PowerModelsDistribution._dss_unsupported_commands","text":"unsupported dss commands\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._eng_edge_elements","page":"Internal Functions","title":"PowerModelsDistribution._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#PowerModelsDistribution._eng_model_checks","page":"Internal Functions","title":"PowerModelsDistribution._eng_model_checks","text":"data check functions for the engineering data model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._eng_model_dtypes","page":"Internal Functions","title":"PowerModelsDistribution._eng_model_dtypes","text":"Data types of accepted fields in the engineering data model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._eng_model_req_fields","page":"Internal Functions","title":"PowerModelsDistribution._eng_model_req_fields","text":"required fields in the engineering data model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._eng_node_elements","page":"Internal Functions","title":"PowerModelsDistribution._eng_node_elements","text":"list of nodal type elements in the engineering model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._like_exclusions","page":"Internal Functions","title":"PowerModelsDistribution._like_exclusions","text":"properties that should be excluded from being overwritten during the application of like\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._loss_model_objects","page":"Internal Functions","title":"PowerModelsDistribution._loss_model_objects","text":"collect of components and their properties that define loss models when transforming to the MATHEMATICAL model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._math_dispatchable_elements","page":"Internal Functions","title":"PowerModelsDistribution._math_dispatchable_elements","text":"list of math asset types that are dispatchable\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._math_edge_elements","page":"Internal Functions","title":"PowerModelsDistribution._math_edge_elements","text":"list of edge type elements in the engineering model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._math_node_elements","page":"Internal Functions","title":"PowerModelsDistribution._math_node_elements","text":"list of nodal type elements in the engineering model\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._pmd_math_global_keys","page":"Internal Functions","title":"PowerModelsDistribution._pmd_math_global_keys","text":"list of multinetwork keys that belong at the root level\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#PowerModelsDistribution._single_operators","page":"Internal Functions","title":"PowerModelsDistribution._single_operators","text":"single number operators in reverse polish notation\n\n\n\n\n\n","category":"constant"},{"location":"reference/internal.html#Base.delete!-Union{Tuple{T}, Tuple{T, String}} where T<:InfrastructureObject","page":"Internal Functions","title":"Base.delete!","text":"Base.delete! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.delete!-Union{Tuple{T}, Tuple{T, Symbol}} where T<:InfrastructureObject","page":"Internal Functions","title":"Base.delete!","text":"Base.delete! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.eltype-Tuple{T} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.eltype","text":"Base.eltype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.get-Union{Tuple{T}, Tuple{T, String, Any}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.get","text":"Base.get for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.getindex-Union{Tuple{T}, Tuple{T, String}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.getindex","text":"Base.getindex for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.getproperty-Tuple{Any, String}","page":"Internal Functions","title":"Base.getproperty","text":"Base.getproperty for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.haskey-Union{Tuple{T}, Tuple{T, String}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.haskey","text":"Base.haskey for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.isempty-Tuple{T} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.isempty","text":"Base.isempty for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.iterate-Union{Tuple{T}, Tuple{T, Int64}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.iterate","text":"Base.iterate for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.keys-Tuple{T} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.keys","text":"Base.keys for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.keytype-Tuple{InfrastructureModel}","page":"Internal Functions","title":"Base.keytype","text":"Base.keytype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.length-Tuple{T} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.length","text":"Base.length for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.merge!-Union{Tuple{T}, Tuple{T, T}} where T<:DssObject","page":"Internal Functions","title":"Base.merge!","text":"Base.merge! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:CapControlType","page":"Internal Functions","title":"Base.parse","text":"Parses dss capacitor control type into CapControlType enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:ConnConfig","page":"Internal Functions","title":"Base.parse","text":"Parses dss conn properties into ConnConfig enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:LoadModel","page":"Internal Functions","title":"Base.parse","text":"Parses dss load model into LoadModel enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:Status","page":"Internal Functions","title":"Base.parse","text":"Parses dss enabled property into Status enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:String","page":"Internal Functions","title":"Base.parse","text":"parser to pass through String\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{subtype}, Tuple{Type{T}, String}} where {subtype, T<:Matrix{subtype}}","page":"Internal Functions","title":"Base.parse","text":"parses a dss type matrix into Matrix{T}\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.parse-Union{Tuple{T}, Tuple{subtype}, Tuple{Type{T}, String}} where {subtype, T<:Vector{subtype}}","page":"Internal Functions","title":"Base.parse","text":"parses a dss type vector into Vector{T}\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.setindex!-Union{Tuple{T}, Tuple{U}, Tuple{T, U, String}} where {U, T<:Union{InfrastructureObject, InfrastructureModel}}","page":"Internal Functions","title":"Base.setindex!","text":"Base.setindex! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.setproperty!-Tuple{Any, String, Any}","page":"Internal Functions","title":"Base.setproperty!","text":"Base.setproperty! for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.setproperty!-Tuple{DssObject, String, String, Type}","page":"Internal Functions","title":"Base.setproperty!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.show-Union{Tuple{T}, Tuple{IO, MIME{Symbol(\"text/plain\")}, T}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.show","text":"Base.show variant for InfrastructureModel,InfrastructureObject to make them Dict-like\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.show-Union{Tuple{T}, Tuple{IO, T}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.show","text":"Base.show variant for InfrastructureModel,InfrastructureObject to make them Dict-like\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.summary-Union{Tuple{T}, Tuple{IO, T}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.summary","text":"Base.summary for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.valtype-Tuple{T} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"Base.valtype","text":"Base.valtype for InfrastructureModel,InfrastructureObject to give them Dict-like behavior\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{Char}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for Char\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{ConnConfig}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for ConnConfig enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{Dispatchable}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for Dispatchable enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{LoadModel}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for LoadModel enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{ShuntModel}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for ShuntModel enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{Status}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for Status enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{String}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for String\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#Base.zero-Tuple{Type{SwitchState}}","page":"Internal Functions","title":"Base.zero","text":"Base.zero for SwitchState enum\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{JuMP.Containers.DenseAxisArray{var\"#s1566\", 1, Ax, L} where {var\"#s1566\", Ax, L<:Tuple{JuMP.Containers._AxisLookup}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for generic dense axis arrays\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{JuMP.Containers.DenseAxisArray{var\"#s1566\", 1, Ax, L} where {var\"#s1566\"<:JuMP.GenericAffExpr, Ax, L<:Tuple{JuMP.Containers._AxisLookup}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) generic affine expressions\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{JuMP.Containers.DenseAxisArray{var\"#s1566\", 1, Ax, L} where {var\"#s1566\"<:JuMP.NonlinearExpression, Ax, L<:Tuple{JuMP.Containers._AxisLookup}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) nonlinear expressions\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{JuMP.Containers.DenseAxisArray{var\"#s1566\", 1, Ax, L} where {var\"#s1566\"<:JuMP.VariableRef, Ax, L<:Tuple{JuMP.Containers._AxisLookup}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) variables\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{JuMP.Containers.DenseAxisArray{var\"#s1566\", 1, Ax, L} where {var\"#s1566\"<:Number, Ax, L<:Tuple{JuMP.Containers._AxisLookup}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) constants\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.build_solution_values-Tuple{LinearAlgebra.Symmetric{JuMP.VariableRef, Matrix{JuMP.VariableRef}}}","page":"Internal Functions","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) constants\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#InfrastructureModels.solution_preprocessor-Tuple{AbstractUnbalancedPowerModel, Dict}","page":"Internal Functions","title":"InfrastructureModels.solution_preprocessor","text":"Definition of the default solution preprocessor for PowerModelsDistribution\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._add_eng_obj!-Tuple{Dict{String}, String, Any, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._add_eng_obj!","text":"add engineering data object to engineering data model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._add_gen_cost_model!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._add_gen_cost_model!","text":"convert cost model names\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._add_implicit_absolute_bounds!-Tuple{Any, Vector}","page":"Internal Functions","title":"PowerModelsDistribution._add_implicit_absolute_bounds!","text":"When a terminal is grounded, any pairwise bounds it occurs in imply an absolute bound for the other terminal in the pair. This method converts such pairwise bounds to absolute ones.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._add_unused_kwargs!-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._add_unused_kwargs!","text":"adds kwargs that were specified but unused by the required defaults to the component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._adjust_line_limits!-Tuple{Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._adjust_line_limits!","text":"_adjust_line_limits!(data_eng::Dict{String,<:Any}, mult::Real)\n\nMultiplies limits (sm_ub and/or cm_ub) on line objects (line, linecode, switch) by a multiplier mult\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._adjust_small_line_admittances!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._adjust_small_line_admittances!","text":"_adjust_small_line_admittances!(data_eng::Dict{String,<:Any}; min_admittance_val::Real=1e-2, replace_admittance_val::Real=0.0)\n\nReplaces admittances (gfr, gto, bfr, bto) on lines, linecodes, and switches lower than min_admittance_val with replace_admittance_val.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._adjust_small_line_impedances!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._adjust_small_line_impedances!","text":"_adjust_small_line_impedances!(data_eng::Dict{String,<:Any}; min_impedance_val::Real=1e-2, replace_impedance_val::Real=0.0)\n\nReplaces impedances (rs, xs) on lines, linecodes, and switches lower than min_impedance_val with replace_impedance_val.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._adjust_small_line_lengths!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._adjust_small_line_lengths!","text":"_adjust_small_line_lengths!(data_eng::Dict{String,<:Any}; min_length_val::Real=25.0, replace_length_val::Real=0.0)\n\nReplaces length on lines, switches lower than min_length_val with replace_length_val.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._adjust_transformer_limits!-Tuple{Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._adjust_transformer_limits!","text":"_adjust_transformer_limits!(data_eng::Dict{String,<:Any}, mult::Real)\n\nMultiplies limits (sm_ub and/or cm_ub) on transformer objects by a multiplier mult\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._admittance_conversion-Tuple{Dict{String}, Dict{String}, String}","page":"Internal Functions","title":"PowerModelsDistribution._admittance_conversion","text":"converts admittance by multiplying by 2πωl\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_filter!-Tuple{Dict{String}, Vector{String}, Int64, Union{BitArray, Array}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_filter!","text":"Filters out values of a vector or matrix for certain properties (transformer winding variant)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_filter!-Tuple{Dict{String}, Vector{String}, Union{BitArray, Array}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_filter!","text":"Filters out values of a vector or matrix for certain properties\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_func_vals-Tuple{Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._apply_func_vals","text":"helper to apply function values\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_kron_reduction!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_kron_reduction!","text":"_apply_kron_reduction!(data_eng::Dict{String,<:Any}; kr_phases::Union{Vector{Int},Vector{String}}=[1,2,3], kr_neutral::Union{Int,String}=4)\n\nApplies a Kron Reduction to the network, reducing out the kr_neutral, leaving only the kr_phases\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_linecode!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_linecode!","text":"applies a linecode to a line in preparation for converting to mathematical model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_phase_projection!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_phase_projection!","text":"_apply_phase_projection!(data_eng::Dict{String,<:Any})\n\npad matrices and vectors to max number of conductors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_phase_projection_delta!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_phase_projection_delta!","text":"_apply_phase_projection_delta!(data_eng::Dict{String,<:Any})\n\nphase projection for components where unprojected states are not yet supported (delta configurations).\n\nSee apply_phase_projection!\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:DssLinegeometry","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:DssObject","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:DssRegcontrol","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:Union{DssGenerator, DssLoad, DssPvsystem, DssStorage}","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:Union{DssGrowthshape, DssLoadshape, DssSpectrum, DssXycurve}","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}, OpenDssDataModel, OpenDssRawDataModel}} where T<:Union{DssTransformer, DssXfmrcode}","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_property_pairs-Union{Tuple{T}, Tuple{T, Vector{Pair{String, String}}}} where T<:DssOptions","page":"Internal Functions","title":"PowerModelsDistribution._apply_property_pairs","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_voltage_angle_difference_bounds!","page":"Internal Functions","title":"PowerModelsDistribution._apply_voltage_angle_difference_bounds!","text":"_apply_voltage_angle_difference_bounds!(eng::Dict{String,<:Any}, vad::Real=5.0)\n\nApplies voltage angle difference bound given by vad::Real in degrees (i.e., the allowed drift of angle from one end of a line to another) to all lines. By default, vad=5.0.\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._apply_voltage_bounds!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_voltage_bounds!","text":"_apply_voltage_bounds!(data_eng::Dict{String,<:Any}; vm_lb::Union{Real,Missing}=0.9, vm_ub::Union{Real,Missing}=1.1)\n\nadd voltage bounds to all buses based on per-unit upper (vm_ub) and lower (vm_lb), scaled by the bus's voltage based\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._apply_xfmrcode!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._apply_xfmrcode!","text":"applies a xfmrcode to a transformer in preparation for converting to mathematical model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._bank_transformers!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._bank_transformers!","text":"Combines transformers with 'bank' keyword into a single transformer\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._barrel_roll-Union{Tuple{T}, Tuple{Vector{T}, Int64}} where T","page":"Internal Functions","title":"PowerModelsDistribution._barrel_roll","text":"shifts a vector by shift spots to the left\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._biggest_der-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._biggest_der","text":"finds the largest active generation asset (gen, storage) in an island\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._biggest_generator-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._biggest_generator","text":"find the largest active generator in a collection of generators\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._bts_to_start_voltage-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._bts_to_start_voltage","text":"_bts_to_start_voltage(\n dm::Dict\n)\n\nAssigns the initialisation voltages to appropriate bus terminals.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_bus_shunt_matrices-Tuple{AbstractUnbalancedPowerModel, Int64, Vector{Int64}, Vector{<:Tuple{Int64, Vector{Int64}}}}","page":"Internal Functions","title":"PowerModelsDistribution._build_bus_shunt_matrices","text":"helper function to build bus shunt matrices for power balance constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_loss_model!-Tuple{Dict{String}, String, Vector{String}, Vector{Float64}, Dict{Tuple{Int64, Int64}, ComplexF64}, ComplexF64, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._build_loss_model!","text":"loss model builder for transformer decomposition\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_mn_opb-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_mn_opb","text":"_build_mc_mn_opb(pm::AbstractUnbalancedPowerModel)\n\nConstructor for Optimal Power Balance\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_osw-Tuple{AbstractUBFModels}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_osw","text":"constructor for branch flow osw\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_osw-Tuple{AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_osw","text":"constructor for OSW in current-voltage variable space\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_osw-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_osw","text":"Constructor for Optimal Switching\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_osw_mi-Tuple{AbstractUBFModels}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_osw_mi","text":"_build_mc_osw_mi(pm::AbstractUBFModels)\n\nconstructor for mixed-integer branch flow osw\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_mc_osw_mi-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._build_mc_osw_mi","text":"Constructor for Optimal Switching\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._build_time_series_reference!-Tuple{Dict{String}, Union{DssGenerator, DssLoad, DssPvsystem, DssStorage}, OpenDssDataModel, String, String, String}","page":"Internal Functions","title":"PowerModelsDistribution._build_time_series_reference!","text":"helper function to properly reference time series variables from opendss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_branch_current_max-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_branch_current_max","text":"Returns a total (shunt+series) current magnitude bound for the from and to side of a branch. The total power rating also implies a current bound through the lower bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_branch_current_max_frto-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_branch_current_max_frto","text":"Returns a total (shunt+series) current magnitude bound for the from and to side of a branch. The total power rating also implies a current bound through the lower bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_branch_power_max-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_branch_power_max","text":"Returns a total (shunt+series) power magnitude bound for the from and to side of a branch. The total current rating also implies a current bound through the upper bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_branch_power_max_frto-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_branch_power_max_frto","text":"Returns a total (shunt+series) power magnitude bound for the from and to side of a branch. The total current rating also implies a current bound through the upper bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_branch_series_current_max-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_branch_series_current_max","text":"Returns a valid series current magnitude bound for a branch.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_bus_vm_ll_bounds-Tuple{Dict}","page":"Internal Functions","title":"PowerModelsDistribution._calc_bus_vm_ll_bounds","text":"Returns bounds in line-to-line bounds on the voltage magnitude. If these are not part of the problem specification, then a valid upper bound is implied by the line-to-neutral bounds, but a lower bound (greater than zero) is not. Therefore, a default lower bound is then used, specified by the keyword argument vdmin_eps. The returned bounds are for the pairs 1->2, 2->3, 3->1\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_comp_lines-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_comp_lines","text":"_calc_comp_lines(component::Dict{String,<:Any})\n\ncompute lines in m and b from from pwl cost models\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_connected_components_eng-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._calc_connected_components_eng","text":"computes the connected components of the network graph returns a set of sets of bus ids, each set is a connected component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_connected_components_math-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_connected_components_math","text":"computes the connected components of the network graph returns a set of sets of bus ids, each set is a connected component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_gen_current_max-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_gen_current_max","text":"Returns a current magnitude bound for the generators.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_ground_shunt_admittance_matrix-Union{Tuple{T}, Tuple{Vector{Int64}, Matrix{T}, Int64}} where T<:Number","page":"Internal Functions","title":"PowerModelsDistribution._calc_ground_shunt_admittance_matrix","text":"Given a set of terminals 'cnds' with associated shunt admittance 'Y', this method will calculate the reduced admittance matrix if terminal 'ground' is grounded.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_load_current_magnitude_bounds-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_load_current_magnitude_bounds","text":"Returns magnitude bounds for the current going through the load.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_load_current_max-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_load_current_max","text":"Returns a magnitude bound for the current going through the load.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_load_pq_bounds-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_load_pq_bounds","text":"Calculates lower and upper bounds for the loads themselves (not the power withdrawn at the bus).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_load_vbounds-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_load_vbounds","text":"Returns the voltage magnitude bounds for the individual load elements in a multiphase load. These are inferred from vmin/vmax for wye loads and from calcbusvmll_bounds for delta loads.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_max_cost_index-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_max_cost_index","text":"_calc_max_cost_index(data::Dict{String,<:Any})\n\nComputes maximum cost index of subnetworks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_shunt-Tuple{Vector{Int64}, Vector{Int64}, Vector{<:Union{Real, Vector{<:Real}}}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_shunt","text":"Given a set of addmittances 'y' connected from the conductors 'fcnds' to the conductors 'tcnds', this method will return a list of conductors 'cnd' and a matrix 'Y', which will satisfy I[cnds] = Y*V[cnds].\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_transformer_current_max_frto-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_transformer_current_max_frto","text":"Returns a current magnitude bound for the from and to side of a transformer. The total power rating also implies a current bound through the lower bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_transformer_power_ub_frto-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_transformer_power_ub_frto","text":"Returns a power magnitude bound for the from and to side of a transformer. The total current rating also implies a current bound through the upper bound on the voltage magnitude of the connected buses.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._calc_voltage_bases-Tuple{Dict{String}, Dict{String, <:Real}, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._calc_voltage_bases","text":"_calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real}, edge_elements::Vector{String})::Tuple{Dict,Dict}\n\nCalculates voltage bases for each voltage zone for buses and branches given a list of edge_elements\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cc_dfs-Union{Tuple{T}, Tuple{T, Dict{T, Vector{T}}, Dict{T, Set{T}}, Set{T}}} where T<:Union{Int64, String}","page":"Internal Functions","title":"PowerModelsDistribution._cc_dfs","text":"DFS on a graph\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_branch_loops-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_branch_loops","text":"checks that all branches connect two distinct buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_bus-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_bus","text":"bus data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_bus_and_terminals","page":"Internal Functions","title":"PowerModelsDistribution._check_bus_and_terminals","text":"checks bus_name exists and has terminals\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._check_configuration_infer_dim-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_configuration_infer_dim","text":"checks the connection configuration and infers the dimensions of the connection (number of connected terminals)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_connectivity-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_connectivity","text":"checks connectivity of object\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_connectivity-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_connectivity","text":"checks that all buses are unique and other components link to valid buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_eng_component_dtypes-Tuple{Dict{String}, String, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_eng_component_dtypes","text":"checks that an engineering model component has the correct data types\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_equal-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_equal","text":"checks if data structures are equivalent, and if not, will enumerate the differences\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_generator-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_generator","text":"generator data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_has_keys-Tuple{Dict{String}, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_has_keys","text":"checks that a component has fields\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_has_size-Tuple{Dict{String}, Vector{String}, Union{Int64, Tuple}}","page":"Internal Functions","title":"PowerModelsDistribution._check_has_size","text":"check that fields has size data_size\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_line-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_line","text":"line data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_linecode-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_linecode","text":"linecode data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_load-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_load","text":"load data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_load_needs_cone-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_load_needs_cone","text":"Returns a Bool, indicating whether the convex hull of the voltage-dependent relationship needs a cone inclusion constraint.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_same_size-Tuple{Dict{String}, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._check_same_size","text":"check that all data in fields have the same size\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_shunt-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_shunt","text":"shunt data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_shunt_capacitor-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_shunt_capacitor","text":"shunt capacitor data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_transformer-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_transformer","text":"Transformer, n-windings three-phase lossy data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_var_keys-NTuple{4, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_var_keys","text":"checks if a sufficient number of variables exist for the given keys collection\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._check_voltage_source-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._check_voltage_source","text":"voltage source data checks\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._collect_nw_bus_lookups!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._collect_nw_bus_lookups!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._collect_nw_maps!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._collect_nw_maps!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Dyg-Tuple{Vector{<:Real}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Dyg","text":"composeyprimbankedidealtransformersDyg( ts::Vector, npairsfr::Tuple, npairsto::Tuple, ppm::Float )\n\nModifies ideal delta-wye_grounded transformers to avoid singularity error, through the ppm value, inspired by OpenDSS.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Ygyg-Tuple{Vector{<:Real}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Ygyg","text":"composeyprimbankedidealtransformersYgyg( ts::Vector, npairsfr::Tuple, npairsto::Tuple, ppm::Float )\n\nModifies ideal wyegrounded-wyegrounded transformers to avoid singularity error, through the ppm value, inspired by OpenDSS.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Yy-Tuple{Vector{<:Real}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Vector{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._compose_yprim_banked_ideal_transformers_Yy","text":"_compose_yprim_banked_ideal_transformers_Yy(\n ts::Vector,\n npairs_fr::Tuple,\n npairs_to::Tuple,\n ppm::Float\n)\n\nModifies ideal wye-wye transformers to avoid singularity error, through the ppm value, inspired by OpenDSS.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compute_Uv-Tuple{PowerFlowData}","page":"Internal Functions","title":"PowerModelsDistribution._compute_Uv","text":"_compute_Uv(\n pfd::PowerFlowData,\n max_iter::Int,\n stat_tol::Float,\n verbose::Bool\n)\n\nComputes a nonlinear AC power flow in rectangular coordinates based on the admittance matrix of the network data using the fixed-point current injection method (See https://arxiv.org/abs/2305.04405). Returns a solution data structure in PowerModelsDistribution Dict format.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compute_bus_type-Tuple{Int64, Int64, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._compute_bus_type","text":"computes the bus type based on existing bustype, the status of the generation object, and the controlmode\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._compute_mc_pf-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._compute_mc_pf","text":"_compute_mc_pf(\n data_math::Dict{String,<:Any};\n v_start::Union{Dict{<:Any,<:Any},Missing}=missing,\n explicit_neutral::Bool=false,\n max_iter::Int=100,\n stat_tol::Real=1E-8,\n verbose::Bool=false\n)::Dict{String,Any}\n\nComputes native power flow and outputs the result dict (See https://arxiv.org/abs/2305.04405).\n\nAbbreviations:\n\nntype: node type (variable, fixed, grounded, virtual)\nbts: bus-terminals for the component\nns: nodes\nvns: virtual nodes\nnr_vns: number of virtual nodes\ny_prim: primitive admittance matrix for the component\ncnlfunc: nonlinear compensation current function handle for the component\nctotsfunc: total current function handle for the component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._convert_grounding-NTuple{4, Any}","page":"Internal Functions","title":"PowerModelsDistribution._convert_grounding","text":"lossy grounding to perfect grounding and shunts\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._convert_model_to_dict-Tuple{Union{InfrastructureObject, InfrastructureModel}}","page":"Internal Functions","title":"PowerModelsDistribution._convert_model_to_dict","text":"Helper function to convert InfrastructureModel,InfrastructureObject into Dict{String,Any}\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_branch_directions!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._correct_branch_directions!","text":"checks that all parallel branches have the same orientation\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_bus_types!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._correct_bus_types!","text":"checks bus types are suitable for a power flow study, if not, fixes them. the primary checks are that all type 2 buses (i.e., PV) have a connected and active generator and there is a single type 3 bus (i.e., slack bus) with an active connected generator. Assumes that the network is a single connected component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_cost_function!-NTuple{5, Any}","page":"Internal Functions","title":"PowerModelsDistribution._correct_cost_function!","text":"throws warnings if cost functions are malformed\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_cost_functions!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._correct_cost_functions!","text":"throws warnings if cost functions are malformed\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_mc_thermal_limits!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._correct_mc_thermal_limits!","text":"_correct_mc_thermal_limits!(data::Dict{String,<:Any})\n\nchecks that each branch has non-negative thermal ratings and removes zero thermal ratings\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._correct_mc_voltage_angle_differences!","page":"Internal Functions","title":"PowerModelsDistribution._correct_mc_voltage_angle_differences!","text":"_correct_mc_voltage_angle_differences!(data::Dict{String,<:Any}, default_pad::Real=deg2rad(10.0))\n\nchecks that voltage angle differences are within 90 deg., if not tightens to a default of 10deg (adjustable)\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_branch_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_branch_interface","text":"_cpf_branch_interface(\n branch::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nBranch component interface outputs branch primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.1).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_generator_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_generator_interface","text":"_cpf_generator_interface(\n gen::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nGenerator component interface outputs generator primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.4 and 4.5).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_load_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_load_interface","text":"_cpf_load_interface(\n load::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nLoad component interface outputs load primitive Y matrix (See https://arxiv.org/abs/2305.04405 Sections 4.4 and 4.5).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_shunt_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_shunt_interface","text":"_cpf_shunt_interface(\n shunt::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nShunt component interface outputs shunt primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.2).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_storage_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_storage_interface","text":"_cpf_storage_interface(\n storage::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nStorage component interface outputs storage primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.4 and 4.5).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_switch_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_switch_interface","text":"_cpf_switch_interface(\n switch::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nBranch component interface outputs branch primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.2).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._cpf_transformer_interface-Tuple{Dict{String}, Dict, Bool, Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._cpf_transformer_interface","text":"_cpf_transformer_interface(\n tr::Dict,\n v_start::Dict,\n explicit_neutral::Bool,\n line_vbase::Dict,\n sbase::Float\n)\n\nTransformer component interface outputs transformer primitive Y matrix (See https://arxiv.org/abs/2305.04405 Section 4.3).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._discover_buses-Tuple{OpenDssDataModel}","page":"Internal Functions","title":"PowerModelsDistribution._discover_buses","text":"Discovers all of the buses (not separately defined in OpenDSS), from 'lines'\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._discover_terminals!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._discover_terminals!","text":"discovers all terminals in the network\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._discover_voltage_zones-Tuple{Dict{String}, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._discover_voltage_zones","text":"discover_voltage_zones(data_model::Dict{String,<:Any}, edge_elements::Vector{String})::Dict{Int,Set{Any}}\n\nfinds voltage zones by walking through the network and analyzing the transformers\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_bus!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_bus!","text":"Adds nodes as buses to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_buscoords!-Tuple{Dict{String}, OpenDssDataModel}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_buscoords!","text":"Parses buscoords lon,lat (if present) into their respective buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_capacitor!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_capacitor!","text":"Adds capacitors to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_capcontrol!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_capcontrol!","text":"Adds capcontrol to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_generator!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_generator!","text":"Adds generators to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_line!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_line!","text":"Adds lines to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_linecode!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_linecode!","text":"Adds lines to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_load!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_load!","text":"Adds loads to data_eng from data_dss\n\nConstant can still be scaled by other settings, fixed cannot Note that in the current feature set, fixed therefore equals constant\n\n1: Constant P and Q, default 2: Constant Z 3: Constant P and quadratic Q 4: Exponential 5: Constant I 6: Constant P and fixed Q\n\n7: Constant P and quadratic Q (i.e., fixed reactance)\n\n8: ZIP\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_loadshape!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_loadshape!","text":"Adds loadshapes to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_pvsystem!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_pvsystem!","text":"Adds pvsystems to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_reactor!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_reactor!","text":"Adds shunt reactors to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_regcontrol!-Tuple{Dict{String}, OpenDssDataModel, Bool}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_regcontrol!","text":"Adds regcontrol to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_storage!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_storage!","text":"Adds storage to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_transformer!-Tuple{Dict{String}, OpenDssDataModel, Bool, String}","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_transformer!","text":"Adds transformers to data_eng from data_dss\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_vsource!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_vsource!","text":"Adds vsources to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._dss2eng_xfmrcode!","page":"Internal Functions","title":"PowerModelsDistribution._dss2eng_xfmrcode!","text":"Adds transformers to data_eng from data_dss\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsDistribution._fill_matrix!-Union{Tuple{T}, Tuple{Matrix{T}, Vector{Vector{String}}}} where T","page":"Internal Functions","title":"PowerModelsDistribution._fill_matrix!","text":"Helper function for Base.parse for dss matrices\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._fill_vector!-Union{Tuple{T}, Tuple{Vector{T}, Vector{String}}} where T","page":"Internal Functions","title":"PowerModelsDistribution._fill_vector!","text":"Helper function for Base.parse for dss vectors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._fix_arrays!-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._fix_arrays!","text":"helper function to fix matrices (from vector of vectors) and vector dtypes\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._fix_dtypes!-Tuple{Dict}","page":"Internal Functions","title":"PowerModelsDistribution._fix_dtypes!","text":"recursive function to fix data types from data imported from json\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._fix_enums!-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._fix_enums!","text":"helper function to convert stringified enums\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._fix_nulls!-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._fix_nulls!","text":"helper function to fix null values from json (usually Inf or NaN)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._generate_short_property_names-Tuple{}","page":"Internal Functions","title":"PowerModelsDistribution._generate_short_property_names","text":"Helper function to generate 'short' property names\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._generate_vm_pairs-Tuple{Vector, ConnConfig, Real, Real}","page":"Internal Functions","title":"PowerModelsDistribution._generate_vm_pairs","text":"Generates pairwise bounds for oneport components.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_cncable_data-Tuple{OpenDssDataModel, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._get_cncable_data","text":"gets concentric neutral cable data for line geometry\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_complete_conductor_set-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._get_complete_conductor_set","text":"finds maximal set of ungrounded phases\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_conductor_indicator-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._get_conductor_indicator","text":"returns the conductor indicator for a ENGINEERING component\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_conductors_ordered-Tuple{AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._get_conductors_ordered","text":"Returns an ordered list of defined conductors. If ground=false, will omit any 0\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_delta_transformation_matrix-Tuple{Int64}","page":"Internal Functions","title":"PowerModelsDistribution._get_delta_transformation_matrix","text":"creates a delta transformation matrix\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_geometry_data-Tuple{OpenDssDataModel, String}","page":"Internal Functions","title":"PowerModelsDistribution._get_geometry_data","text":"gets line geometry data for line, including applying line spacing if specified\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_idxs-Tuple{Vector, Vector}","page":"Internal Functions","title":"PowerModelsDistribution._get_idxs","text":"Given a vector and a list of elements to find, this method will return a list of the positions of the elements in that vector.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_ilocs-Tuple{Vector, Any}","page":"Internal Functions","title":"PowerModelsDistribution._get_ilocs","text":"get locations of terminal in connections list\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssEdgeObject}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssGictransformer}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssLinecode}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssNodeObject}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssTransformer}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{DssXfmrcode}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases!-Tuple{Union{DssControlObject, DssDataObject}}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases-Tuple{AbstractString, AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases","text":"returns number of phases implied by a two-bus (edge) object\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases-Tuple{AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases","text":"returns number of phases implied by a single-bus (node) object\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_implied_nphases-Tuple{Vector{<:AbstractString}}","page":"Internal Functions","title":"PowerModelsDistribution._get_implied_nphases","text":"returns number of phases implied by a transformer object\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_line_impedance_parameters-Tuple{Dict{String, Any}, Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._get_line_impedance_parameters","text":"Obtain impedance parameters, directly or from linecode.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_math_obj-Tuple{Dict{String}, String}","page":"Internal Functions","title":"PowerModelsDistribution._get_math_obj","text":"returns component from the mathematical data model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_raw_fields-Tuple{Vector{Pair{String, String}}}","page":"Internal Functions","title":"PowerModelsDistribution._get_raw_fields","text":"Helper function to pull the specified properties from dss property pairs\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_spacing_data-Tuple{OpenDssDataModel, String}","page":"Internal Functions","title":"PowerModelsDistribution._get_spacing_data","text":"get line spacing data for line or line geometry\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_tight_absolute_voltage_magnitude_bounds-Tuple{Dict}","page":"Internal Functions","title":"PowerModelsDistribution._get_tight_absolute_voltage_magnitude_bounds","text":"Returns the tightest set of absolute voltage magnitude bounds, removing looser bounds which are implied by the tighter ones.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_tight_pairwise_voltage_magnitude_bounds-Tuple{Dict}","page":"Internal Functions","title":"PowerModelsDistribution._get_tight_pairwise_voltage_magnitude_bounds","text":"Returns the tightest set of pairwise voltage magnitude bounds, removing looser bounds which are implied by the tighter ones.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_tscable_data-Tuple{OpenDssDataModel, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._get_tscable_data","text":"gets tape shielded cable data for line geometry\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_v-Tuple{PowerFlowData, Vector{ComplexF64}, Union{Int64, Tuple{Int64, Int64}}}","page":"Internal Functions","title":"PowerModelsDistribution._get_v","text":"_get_v(\n pfd::struct,\n Vp::Vector,\n n::Union{Tuple, Int}\n)\n\nCalculates the voltage from PowerFlowData struct.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._get_wire_data-Tuple{OpenDssDataModel, Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._get_wire_data","text":"gets overhead wire data for line geometry\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._has_nl_expression-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._has_nl_expression","text":"helper to determine if expession has any Nonlinear terms\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._impedance_conversion-Tuple{Dict{String}, Dict{String}, String}","page":"Internal Functions","title":"PowerModelsDistribution._impedance_conversion","text":"converts impendance in Ohm/m by multiplying by length\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._import_all!-Tuple{Dict{String}, DssObject}","page":"Internal Functions","title":"PowerModelsDistribution._import_all!","text":"creates a dss dict inside object that imports all items in prop_order from dss_obj\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._infer_int_dim-Tuple{Vector, ConnConfig, Any}","page":"Internal Functions","title":"PowerModelsDistribution._infer_int_dim","text":"infer the internal dimension of a winding, load or generator based on the connections and the configuration\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._infer_int_dim_transformer-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._infer_int_dim_transformer","text":"infer the internal dimension for a transformer (only in the MATHEMATICAL data model format)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._infer_int_dim_unit-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsDistribution._infer_int_dim_unit","text":"infer the internal dimension for a unit, i.e. any one-port component with connections and configuration properties\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._infer_neutral_terminals-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._infer_neutral_terminals","text":"Return a list of all implicit neutrals as a list of bus-terminal pairs. This is done by starting from a list of all terminals which are either a.connected to the neutral of wye-connected components; b. or are grounded. This initial list is then expanded to all terminals which are galvanically connected to terminals in the initial list.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._infer_partial_property_name-Union{Tuple{T}, Tuple{AbstractString, T}} where T<:DssObject","page":"Internal Functions","title":"PowerModelsDistribution._infer_partial_property_name","text":"Helper function to infer a full property name from a partial one\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._init_base_components!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._init_base_components!","text":"initializes the base components that are expected by powermodelsdistribution in the mathematical model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._init_dss_data-Tuple{}","page":"Internal Functions","title":"PowerModelsDistribution._init_dss_data","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._init_math_obj-Tuple{String, Any, Dict{String}, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._init_math_obj","text":"initializes the base math object of any type, and copies any one-to-one mappings\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._init_unmap_eng_obj!-Tuple{Dict{String}, String, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._init_unmap_eng_obj!","text":"initialization actions for unmapping\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_after-Tuple{Vector{Pair{String, String}}, String, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._is_after","text":"helper function to determine if property1 appears after property2 in the property pair list for objects that have windings\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_after-Tuple{Vector{Pair{String, String}}, String, String}","page":"Internal Functions","title":"PowerModelsDistribution._is_after","text":"helper function to determine if property1 appears after property2 in the property pair list\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_loadshape_split-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._is_loadshape_split","text":"checks if loadshape has both pmult and qmult\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_loadshape_split-Tuple{DssLoadshape}","page":"Internal Functions","title":"PowerModelsDistribution._is_loadshape_split","text":"checks if loadshape has both pmult and qmult\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_multiport_component-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._is_multiport_component","text":"Indicates whether the passed component has a multiport structure (e.g. transformers).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_oneport_component-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._is_oneport_component","text":"Indicates whether the passed component has a oneport structure (e.g. loads and generators).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._is_twoport_component-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._is_twoport_component","text":"Indicates whether the passed component has a twoport structure (e.g. lines and switches).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._isa_dss_array-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._isa_dss_array","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._isa_rpn-Tuple{AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._isa_rpn","text":"detects if expr is Reverse Polish Notation expression\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron-Union{Tuple{T}, Tuple{Matrix{T}, Int64}} where T<:Complex","page":"Internal Functions","title":"PowerModelsDistribution._kron","text":"_kron(Z::Matrix{T}, nconds::Int)::Matrix{T} where T <: Complex\n\nKron reduces impedance matrix down to size (nconds, nconds)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron-Union{Tuple{T}, Tuple{Matrix{T}, Matrix{T}, Int64}} where T<:Complex","page":"Internal Functions","title":"PowerModelsDistribution._kron","text":"_kron(Z::Matrix{T}, Y::Matrix{T}, nconds::Int)::Tuple{Matrix{T}, Matrix{T}} where T <: Complex\n\nKron reduces impedance and shunt admittance matrices down to size (nconds, nconds)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_branch!-Tuple{Dict{String}, Vector{String}, Vector{String}, Vector{Int64}, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_branch!","text":"performs kron reduction on branch\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_branch-Tuple{Vector{Matrix}, Vector{Matrix}, Vector{Int64}, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_branch","text":"performs kron reduction on branch - helper function\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_implicit_neutrals!-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_implicit_neutrals!","text":"_kron_reduce_implicit_neutrals!(data_eng::Dict{String,Any})::Dict{String,Any}\n\nKron-reduce all (implied) neutral conductors of lines, switches and shunts, and remove any terminals which become unconnected. A line or switch conductor is considered as a neutral conductor if it is connected between two neutral terminals. A terminal is a neutral terminals if it is galvanically connected (i.e. through a line or switch) to a grounded terminal, or the neutral conductor of a wye-connected component.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_linecode!-Tuple{Any, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_linecode!","text":"Kron-reduce specified neutral conductors of a linecode.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_series_impedance-Tuple{Matrix, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_series_impedance","text":"Return the Kron-reduction of the specified neutral conductors of a series impedance matrix.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._kron_reduce_shunt_addmittance-Tuple{Matrix, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._kron_reduce_shunt_addmittance","text":"Return the Kron-reduction of the specified neutral conductors of a shunt addmittance matrix.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._line_reverse!-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._line_reverse!","text":"Reverse the direction of a line.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._load_expmodel_params-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._load_expmodel_params","text":"_load_expmodel_params(load::Dict{String,<:Any}, bus::Dict{String,<:Any})\n\nReturns the exponential load model parameters for a load. For an exponential load it simply returns certain data model properties, whilst for constantpower, constantcurrent and constant_impedance it returns the equivalent exponential model parameters.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._loop_line_to_shunt-Tuple{Dict{String, Any}, AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._loop_line_to_shunt","text":"Create an equivalent shunt for a line which connects to a single bus.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_filtered_logger-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._make_filtered_logger","text":"_make_filtered_logger(level::Logging.LogLevel)\n\nHelper function to create the filtered logger for PMD\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_full_matrix_variable-Union{Tuple{T}, Tuple{Vector{T}, Vector{T}, Vector{T}}} where T","page":"Internal Functions","title":"PowerModelsDistribution._make_full_matrix_variable","text":"makes a full matrix variable from a diagonal, and lower and upper triangular vectors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_hermitian_matrix_variable-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._make_hermitian_matrix_variable","text":"makes a hermitian matrix variable from diagonal, and lower and upper triangular vectors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_lossless!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._make_lossless!","text":"_make_lossless!(data_eng::Dict{String,<:Any})\n\nRemove parameters from objects with loss models to make them lossless. This includes linecodes, lines, switches, xfmrcodes, transformers, voltage sources, generators, solar, and storage, which all have (or will have in the future), loss model parameters that can be omitted.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_math_per_unit!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._make_math_per_unit!","text":"converts the MATHEMATICAL model to per unit from SI\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_matrix_variable_element-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Int64, Int64}} where T","page":"Internal Functions","title":"PowerModelsDistribution._make_matrix_variable_element","text":"_make_matrix_variable_element(\n model::JuMP.Model,\n indices::Array{T,1},\n n::Int,\n m::Int;\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n varname::String=\"\"\n) where T\n\nSometimes we want to bound only a subset of the elements of a matrix variable. For example, an unbounded Hermitian variable usually still has a lower bound of zero on the real diagonal elements. When there is a mix of bounded and unbounded elements, the unboundedness is encoded as 'Inf' and '-Inf' in the bound parameters. This cannot be passed directlty to JuMP, because it would lead to an error in Mosek for example. Instead, this method checks whether all bounds for an element (n,m) are Inf, and if so, does not pass a bound to JuMP.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_multiconductor!-Tuple{Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._make_multiconductor!","text":"Hacky helper function to transform single-conductor network data, from, e.g., matpower/psse, into multi-conductor data\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_multinetwork_eng-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._make_multinetwork_eng","text":"Expands an ENGINEERING data structure into a multinetwork, see make_multinetwork\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._make_multinetwork_math-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._make_multinetwork_math","text":"Expands an MATHEMATICAL data structure into a multinetwork, see make_multinetwork\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_conductor_ids!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_conductor_ids!","text":"helper function to map non integer conductor ids into integers\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math","text":"base function for converting engineering model to mathematical model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_bus!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_bus!","text":"converts engineering bus components into mathematical bus components\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_generator!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_generator!","text":"converts engineering generators into mathematical generators\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_line!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_line!","text":"converts engineering lines into mathematical branches\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_load!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_load!","text":"converts engineering load components into mathematical load components\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_nw!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_nw!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_shunt!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_shunt!","text":"converts engineering generic shunt components into mathematical shunt components\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_solar!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_solar!","text":"converts engineering solar components into mathematical generators\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_storage!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_storage!","text":"converts engineering storage into mathematical storage\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_switch!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._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#PowerModelsDistribution._map_eng2math_transformer!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_eng2math_transformer!","text":"converts engineering n-winding transformers into mathematical ideal 2-winding lossless transformer branches and impedance branches to represent the loss model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_eng2math_voltage_source!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._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#PowerModelsDistribution._map_math2eng_bus!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_bus!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_generator!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_generator!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_line!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_line!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_load!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_load!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_root!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_root!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_shunt!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_shunt!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_solar!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_solar!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_storage!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_storage!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_switch!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_switch!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_transformer!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_transformer!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._map_math2eng_voltage_source!-Tuple{Dict{String}, Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._map_math2eng_voltage_source!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._mat2ltrivec!-Union{Tuple{Union{Matrix{T}, LinearAlgebra.Symmetric{T, S} where S<:(AbstractMatrix{<:T})}}, Tuple{T}} where T","page":"Internal Functions","title":"PowerModelsDistribution._mat2ltrivec!","text":"matrix to lower triangular vector\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._mat2utrivec!-Union{Tuple{Union{Matrix{T}, LinearAlgebra.Symmetric{T, S} where S<:(AbstractMatrix{<:T})}}, Tuple{T}} where T","page":"Internal Functions","title":"PowerModelsDistribution._mat2utrivec!","text":"matrix to upper triangular vector\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._mat_mult_rm_nan-Tuple{Matrix, Union{LinearAlgebra.Adjoint, Matrix}}","page":"Internal Functions","title":"PowerModelsDistribution._mat_mult_rm_nan","text":"matrix multiplication removing NaN values\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._merge_bus_flows-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Vector, Vector}","page":"Internal Functions","title":"PowerModelsDistribution._merge_bus_flows","text":"Merges flow variables that enter the same terminals, i.e. multiple neutrals of an underground cable connected to same neutral terminal\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._merge_terminals!-Tuple{Dict{String, Any}, String, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._merge_terminals!","text":"Merge a terminal into another for a specified bus, i.e. as if they are short-ciruited.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._missing2false-Tuple{Union{Missing, Bool}}","page":"Internal Functions","title":"PowerModelsDistribution._missing2false","text":"Helper to convert \n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._nan2zero-Tuple{Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._nan2zero","text":"Replaces NaN values with zeros\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad","text":"gen connections adaptation of min fuel cost polynomial linquad objective\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad_switch-Tuple{AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad_switch","text":"Multiconductor adaptation of min fuel cost polynomial linquad objective\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_linquad_switch","text":"gen connections adaptation of min fuel cost polynomial linquad objective\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_nl-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_nl","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_nl_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsDistribution._objective_mc_min_fuel_cost_polynomial_nl_switch","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_connections!-Tuple{Dict{String}, String, Int64, Union{Vector{Int64}, Vector{String}}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_connections!","text":"adds conductors to connections during padding process, transformer winding variant\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_connections!-Tuple{Dict{String}, String, Union{Vector{Int64}, Vector{String}}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_connections!","text":"adds conductors to connections during padding process\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_properties!-Tuple{Dict{String}, Vector{String}, Int64, Vector{Int64}, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_properties!","text":"pads properties to have the total number of conductors for the whole system (transformer winding variant)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_properties!-Tuple{Dict{String}, Vector{String}, Vector{Int64}, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_properties!","text":"pads properties to have the total number of conductors for the whole system\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_properties_delta!-Tuple{Dict{String}, Vector{String}, Vector{Int64}, Int64, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_properties_delta!","text":"pads properties to have the total number of conductors for the whole system - delta connection variant\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pad_properties_delta!-Tuple{Dict{String}, Vector{String}, Vector{Int64}, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._pad_properties_delta!","text":"pads properties to have the total number of conductors for the whole system - delta connection variant\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_array-Union{Tuple{T}, Tuple{Type{T}, AbstractString}} where T","page":"Internal Functions","title":"PowerModelsDistribution._parse_array","text":"helper function to parse reverse polish notation arrays\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_bus_id-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_bus_id","text":"Parses busnames as defined in OpenDSS, e.g. 'primary.1.2.3.0'\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_command_from_line-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_command_from_line","text":"_parse_command_from_line(line::String)::Tuple{String,String}\n\nParses the dss command from the line (if present), optionnally making the command set if implicitly used.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_csvfile-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_csvfile","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dblfile-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dblfile","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_buscoords!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_buscoords!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_buscoords-Tuple{IO}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_buscoords","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_clear!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_clear!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_compile!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_compile!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_disable!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_disable!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_edit!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_edit!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_enable!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_enable!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_latloncoords!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_latloncoords!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_more!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_more!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_new!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_new!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_redirect!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_redirect!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_set!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_set!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_cmd_setbusxy!-Tuple{DssRawModel, String, Int64}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_cmd_setbusxy!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_matrix-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_matrix","text":"Helper function for Base.parse for dss matrices\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_obj_type_name-Tuple{AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_obj_type_name","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_dss_vector-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_dss_vector","text":"Helper function for Base.parse for dss vectors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_file_inside_mult!-Tuple{DssObject, String, String, String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_file_inside_mult!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_file_inside_shape_ref!-Tuple{DssObject, OpenDssDataModel, OpenDssRawDataModel, String, String, String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_file_inside_shape_ref!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_match_element-Tuple{RegexMatch, String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_match_element","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_pqcsvfile-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_pqcsvfile","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_rpn-Tuple{AbstractString}","page":"Internal Functions","title":"PowerModelsDistribution._parse_rpn","text":"helper function to parse reverse polish notation\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_rpn-Union{Tuple{T}, Tuple{Type{T}, AbstractString}} where T","page":"Internal Functions","title":"PowerModelsDistribution._parse_rpn","text":"parses Reverse Polish Notation expr\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_rpn-Union{Tuple{T}, Tuple{Type{T}, AbstractString}} where T<:(Vector)","page":"Internal Functions","title":"PowerModelsDistribution._parse_rpn","text":"helper function to parse reverse polish notation vectors\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._parse_sngfile-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._parse_sngfile","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._pmd_metafmt-Tuple{Base.CoreLogging.LogLevel, Vararg{Any, 5}}","page":"Internal Functions","title":"PowerModelsDistribution._pmd_metafmt","text":"_pmd_metafmt(level::Logging.LogLevel, _module, group, id, file, line)\n\nMetaFormatter for ConsoleLogger for PMD to adjust log message format\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._propagate_network_topology!-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._propagate_network_topology!","text":"_propagate_network_topology!(data::Dict{String,Any})\n\nhelper function to propagate bus status to any connected components\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_branch!-Tuple{Dict{String}, Vararg{Real, 4}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_branch!","text":"per-unit conversion for branches\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_bus!-Tuple{Dict{String}, Vararg{Real, 4}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_bus!","text":"per-unit conversion for buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_generator!-Tuple{Dict{String}, Real, Real, Real, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_generator!","text":"per-unit conversion for generators\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_load!-Tuple{Dict{String}, Vararg{Real, 4}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_load!","text":"per-unit conversion for loads\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_shunt!-Tuple{Dict{String}, Vararg{Real, 4}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_shunt!","text":"per-unit conversion for shunts\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_storage!-Tuple{Dict{String}, Real, Real, Real}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_storage!","text":"per-unit conversion for storage\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_switch!-Tuple{Dict{String}, Vararg{Real, 4}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_switch!","text":"per-unit conversion for switches\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rebase_pu_transformer_2w_ideal!-Tuple{Dict{String}, Vararg{Real, 5}}","page":"Internal Functions","title":"PowerModelsDistribution._rebase_pu_transformer_2w_ideal!","text":"per-unit conversion for ideal 2-winding transformers\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._ref_add_connected_components!-Tuple{Dict{Symbol}, Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._ref_add_connected_components!","text":"adds connected components for opb problem type\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._register_awaiting_ground!-Tuple{Dict{String}, Vector{Int64}}","page":"Internal Functions","title":"PowerModelsDistribution._register_awaiting_ground!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._remove_all_bounds!-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._remove_all_bounds!","text":"_remove_all_bounds!(data_eng; exclude::Vector{<:String}=String[\"energy_ub\"], exclude_asset_type::Vector{String}=String[])\n\nRemoves all fields ending in 'ub' or 'lb' that aren't required by the math model. Properties can be excluded from this removal with exclude::Vector{String}\n\nWhole asset types (e.g., \"line\") can be excluded using the keyword argument exclude_asset_type::Vector{String}\n\nBy default, \"energy_ub\" is excluded from this removal, since it is a required properly on storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._remove_line_limits!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._remove_line_limits!","text":"_remove_line_limits!(data_eng::Dict{String,<:Any})\n\nRemoves fields cm_ub and sm_ub from lines, switches, and linecodes\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._remove_pwl_cost_duplicates!-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._remove_pwl_cost_duplicates!","text":"checks that each point in the a pwl function is unqiue, simplifies the function if duplicates appear\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._remove_transformer_limits!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._remove_transformer_limits!","text":"_remove_transformer_limits!(data_eng::Dict{String,<:Any})\n\nRemoves field sm_ub from transformers, xfmrcodes\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._remove_unconnected_terminals!-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._remove_unconnected_terminals!","text":"_remove_unconnected_terminals!(data_eng::Dict{String,Any})::Dict{String,Any}\n\nRemove all terminals which are unconnected (not considering a grounding as a connection).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._rescale_cost_model!-Tuple{Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._rescale_cost_model!","text":"rescales the cost model terms\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sanatize_line-Tuple{String}","page":"Internal Functions","title":"PowerModelsDistribution._sanatize_line","text":"_sanatize_line(line::String)::String\n\nSanitizes lines by stripping them clean of extra space and the beginnging and end, making everything lowercase, changing ~ or m to more, and stripping comments\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sanitize_property_name-Tuple{String, String}","page":"Internal Functions","title":"PowerModelsDistribution._sanitize_property_name","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sc2br_impedance-Tuple{Dict{Tuple{Int64, Int64}, ComplexF64}}","page":"Internal Functions","title":"PowerModelsDistribution._sc2br_impedance","text":"Converts a set of short-circuit tests to an equivalent reactance network. Reference: R. C. Dugan, “A perspective on transformer modeling for distribution system analysis,” in 2003 IEEE Power Engineering Society General Meeting (IEEE Cat. No.03CH37491), 2003, vol. 1, pp. 114-119 Vol. 1.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._scale-Tuple{Dict{String}, String, Real}","page":"Internal Functions","title":"PowerModelsDistribution._scale","text":"function for applying a scale to a paramter\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._scale_props!-Tuple{Dict{String}, Vector{String}, Real}","page":"Internal Functions","title":"PowerModelsDistribution._scale_props!","text":"helper function to apply a scale factor to given properties\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._show-Union{Tuple{T}, Tuple{IO, T}} where T<:Union{InfrastructureObject, InfrastructureModel}","page":"Internal Functions","title":"PowerModelsDistribution._show","text":"Helper functions for Base.show for InfrastructureModel,InfrastructureObject\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._simplify_cost_terms!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._simplify_cost_terms!","text":"\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._simplify_pwl_cost!-Tuple{Any, Any, Any}","page":"Internal Functions","title":"PowerModelsDistribution._simplify_pwl_cost!","text":"checks the slope of each segment in a pwl function, simplifies the function if the slope changes is below a tolerance\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._slice_branches!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._slice_branches!","text":"slices branches based on connected terminals\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sol_data_model_acr!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._sol_data_model_acr!","text":"_sol_data_model_acr!(solution::Dict{String,<:Any})\n\nsolutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert ACR variables back into polar representation (default data model voltage form)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sol_data_model_w!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsDistribution._sol_data_model_w!","text":"converts w models voltages to standard voltage magnitude (sqrt)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._solve_mc_model-Tuple{Dict{String}, Type, Any, Function}","page":"Internal Functions","title":"PowerModelsDistribution._solve_mc_model","text":"_solve_mc_model(\n data::Dict{String,<:Any},\n model_type::Type,\n optimizer,\n build_method::Function;\n multinetwork::Bool=false,\n ref_extensions::Vector{<:Function}=Function[],\n solution_processors::Vector{<:Function}=Function[],\n relax_integrality::Bool=false,\n kwargs...\n)::Dict{String,Any}\n\nInternal solver interface that uses instantiate_mc_model directly and runs optimize_model!, returning a result\n\nSee solve_mc_model\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._solve_mc_osw-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Internal Functions","title":"PowerModelsDistribution._solve_mc_osw","text":"Solve optimal switching problem\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._solve_mc_osw_mi-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Internal Functions","title":"PowerModelsDistribution._solve_mc_osw_mi","text":"Solve mixed-integer optimal switching problem\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._solve_mn_mc_opb-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Internal Functions","title":"PowerModelsDistribution._solve_mn_mc_opb","text":"_solve_mn_mc_opb(data::Union{Dict{String,<:Any},String}, model_type::Type, solver; kwargs...)\n\nsolve test mn mc problem\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._standardize_cost_terms!-Tuple{Dict{String}, Int64, String}","page":"Internal Functions","title":"PowerModelsDistribution._standardize_cost_terms!","text":"ensures all polynomial costs functions have at exactly comp_order terms\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._strip_lines!-Tuple{Vector{String}}","page":"Internal Functions","title":"PowerModelsDistribution._strip_lines!","text":"strips lines that are either commented (block or single) or empty\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._sum_rm_nan-Tuple{Vector}","page":"Internal Functions","title":"PowerModelsDistribution._sum_rm_nan","text":"BOUND manipulation methods (0*Inf->0 is often desired)\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._transform_loops!-Tuple{Dict{String, Any}}","page":"Internal Functions","title":"PowerModelsDistribution._transform_loops!","text":"_transform_loops!(\n data_eng::Dict{String,Any};\n zero_series_impedance_threshold::Real=1E-8,\n shunt_id_prefix::AbstractString=\"line_loop\"\n)::Dict{String,Any}\n\nTransform line loops (connected to a single bus), which are not allowed in the mathematical model. Lossy line loops are converted to equivalent shunts, and lossless ones (i.e. short-circuits) are represented by merging the short-circuited terminals. The argument 'zeroseriesimpedance_threshold' controls the threshold below which the series impedance is considered to be a short-ciruit. This is useful because OpenDSS modelers have to insert tiny impedances to represent short-circuit reactors. The addmittance to ground should be zero to trigger the short-circuit handling.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._update_bus_terminal_projections!-Tuple{Dict{String}, Dict{String, <:Vector{Int64}}}","page":"Internal Functions","title":"PowerModelsDistribution._update_bus_terminal_projections!","text":"helper function to update the terminals on projected buses\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._vec2ltri!-Union{Tuple{Vector{T}}, Tuple{T}} where T","page":"Internal Functions","title":"PowerModelsDistribution._vec2ltri!","text":"vector to lower triangular\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._vec2utri!-Union{Tuple{Vector{T}}, Tuple{T}} where T","page":"Internal Functions","title":"PowerModelsDistribution._vec2utri!","text":"https://stackoverflow.com/questions/39039553/lower-triangular-matrix-in-julia\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._wrap_to_180-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._wrap_to_180","text":"wraps angles in degrees to 180\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsDistribution._wrap_to_pi-Tuple{Any}","page":"Internal Functions","title":"PowerModelsDistribution._wrap_to_pi","text":"wraps angles in radians to pi\n\n\n\n\n\n","category":"method"},{"location":"tutorials/Extension Tutorial.html#Extending-PowerModelsDistribution.jl","page":"Extending PowerModelsDistribution","title":"Extending PowerModelsDistribution.jl","text":"","category":"section"},{"location":"tutorials/Extension Tutorial.html","page":"Extending PowerModelsDistribution","title":"Extending PowerModelsDistribution","text":"Stub for Extension Tutorial.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"manual/math-model.html#The-PowerModelsDistribution-Mathematical-Model","page":"Mathematical Model","title":"The PowerModelsDistribution Mathematical Model","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"As PowerModelsDistribution implements a variety of power network optimization problems, the implementation is the best reference for precise mathematical formulations. This section provides a complex number based mathematical specification for a prototypical unbalanced AC Optimal Power Flow problem, to provide an overview of the typical mathematical models in PowerModelsDistribution.","category":"page"},{"location":"manual/math-model.html#Unbalanced-AC-Optimal-Power-Flow","page":"Mathematical Model","title":"Unbalanced AC Optimal Power Flow","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"PowerModelsDistribution implements a generalized version of the AC Optimal Power Flow problem, taking into account phase unbalance. [1] These generalizations make it possible for PowerModelsDistribution to more accurately capture real-world distribution network datasets. The core generalizations are,","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"Support for multiple load and shunt components on each bus\nLine charging (shunt) that supports a conductance and asymmetrical values","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"In the mathematical description below,","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"Bold typeface indicates a vector (in mathbbC^c) or matrix (in mathbbC^ctimes c)\nOperator diag takes the diagonal (vector) from a square matrix\nThe set of complex numbers is mathbbC and real numbers is mathbbR\nSuperscript H indicates complex conjugate transpose (Hermitian adjoint)\nNote that complex power is defined as mathbfS_ij = mathbfV_i mathbfI_ij^H and is therefore a complex matrix of dimension c times c\nThe line mathbfY^c_ij mathbfY^c_ji and bus mathbfY^s_k shunt matrices do not need to be diagonal","category":"page"},{"location":"manual/math-model.html#Sets","page":"Mathematical Model","title":"Sets","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"The definitions of the sets involved remain unchanged w.r.t. the balanced OPF problem definition, except for the addition of the conductor set:","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"beginalign\n\nmboxsets nonumber \n N mbox - busesnonumber \n R mbox - references busesnonumber \n E E^R mbox - branches forward and reverse orientation nonumber \n G G_i mbox - generators and generators at bus i nonumber \n L L_i mbox - loads and loads at bus i nonumber \n S S_i mbox - shunts and shunts at bus i nonumber \n C mbox - conductors nonumber \n\nendalign","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"where the set of conductors C typically equals abc.","category":"page"},{"location":"manual/math-model.html#Data","page":"Mathematical Model","title":"Data","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"beginalign\nmboxdata nonumber \n S^gl_kc S^gu_kc in mathbbC forall k in G forall c in C nonumber mathbfS^gl_k= S^gl_kc_c in C mathbfS^gu_k = S^gu_kc_c in C \n c_2k c_1k c_0k in mathbbR forall k in G nonumber \n v^l_ic v^u_ic in mathbbR forall i in N forall c in C nonumber mathbfv^l_i = v^l_ic_c in C mathbfv^u_i = v^u_ic_c in C \n S^d_kcin mathbbC forall k in L forall c in C nonumber mathbfS^d_k = S^d_kc_c in C \n mathbfY^s_kin mathbbC^ctimes c forall k in S nonumber \n mathbfY_ij mathbfY^c_ij mathbfY^c_jiin mathbbC^ctimes c forall (ij) in E nonumber \n s^u_ijc theta^Delta l_ijc theta^Delta u_ijc in mathbbR forall (ij) in E forall c in C nonumber mathbfs^u_ij = s^u_ijc_c in C \n V^textref_ic in mathbbC forall r in R mathbfV^textref_i = V^textref_ic_c in C \n\nendalign","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"where the notation mathbfv^l_i = v^l_ic_c in C reflects that the vector mathbfv^l_i is constructed by putting the individual phase values v^l_ic in a vector (in order abc).","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"Alternatively, the series impedance of a line can be written in impedance form:","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"mathbfZ_ij in mathbbC^ctimes c forall (ij) in E nonumber mathbfY_ij = ( mathbfZ_ij)^-1","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"where superscript -1 indicates the matrix inverse. Note that mathbfY_ij or mathbfZ_ij may not be invertible, e.g. in case of single-phase branches in a three-phase grid. In this case the pseudo-inverse can be used.","category":"page"},{"location":"manual/math-model.html#Variables-for-a-Bus-Injection-Model","page":"Mathematical Model","title":"Variables for a Bus Injection Model","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"beginalign\n S^g_kc in mathbbC forall kin G forall c in C nonumber mathbfS^g_k = S^g_kc_c in C \n V_ic in mathbbC forall iin N forall c in C nonumber mathbfV_i = V_ic_c in C \n mathbfS_ij in mathbbC^ctimes c forall (ij) in E cup E^R \n\nendalign","category":"page"},{"location":"manual/math-model.html#Mathematical-Formulation-of-a-Bus-Injection-Model","page":"Mathematical Model","title":"Mathematical Formulation of a Bus Injection Model","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"A complete mathematical model is as follows,","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"\nbeginalign\nmboxminimize sum_k in G c_2k left( sum_c in C Re(S^g_kc) right)^2 + c_1k sum_c in C Re(S^g_kc) + c_0k \n\nmboxsubject to nonumber \n mathbfV_i = mathbfV^textref_i forall r in R \n S^gl_kc leq S^g_kc leq S^gu_kc forall k in G forall c in C \n v^l_ic leq V_ic leq v^u_ic forall i in N forall c in C \n sum_substackk in G_i mathbfS^g_k - sum_substackk in L_i mathbfS^d_k - sum_substackk in S_i mathbfV_i mathbfV^H_i (mathbfY^s_k)^H = sum_substack(ij)in E_i cup E_i^R diag(mathbfS_ij) forall iin N \n mathbfS_ij = mathbfV_i mathbfV_i^H left( mathbfY_ij + mathbfY^c_ijright)^H - mathbfV_i mathbfV^H_j mathbfY^H_ij forall (ij)in E \n mathbfS_ji = mathbfV_j mathbfV_j^H left( mathbfY_ij + mathbfY^c_ji right)^H - mathbfV^H_i mathbfV_j mathbfY^H_ij forall (ij)in E \n diag(mathbfS_ij) leq mathbfs^u_ij forall (ij) in E cup E^R \n theta^Delta l_ijc leq angle (V_ic V^*_jc) leq theta^Delta u_ijc forall (ij) in E forall c in C\n\nendalign","category":"page"},{"location":"manual/math-model.html#Variables-for-a-Branch-Flow-Model","page":"Mathematical Model","title":"Variables for a Branch Flow Model","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"beginalign\n S^g_kc in mathbbC forall kin G forall c in C nonumber mathbfS^g_k = S^g_kc_c in C \n V_ic in mathbbC forall iin N forall c in C nonumber mathbfV_i = V_ic_c in C \n I^s_ijc in mathbbC forall e in E forall c in C nonumber mathbfI^s_ij = I^s_ijc_c in C \n mathbfS_ij in mathbbC^ctimes c forall (ij) in E cup E^R \n\nendalign","category":"page"},{"location":"manual/math-model.html#Mathematical-Formulation-of-a-Branch-Flow-Model","page":"Mathematical Model","title":"Mathematical Formulation of a Branch Flow Model","text":"","category":"section"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"A complete mathematical model is as follows,","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"beginalign\nmboxminimize sum_k in G c_2k left( sum_c in C Re(S^g_kc) right)^2 + c_1k sum_c in C Re(S^g_kc) + c_0k \n\nmboxsubject to nonumber \n mathbfV_i = mathbfV^textref_i forall r in R \n S^gl_kc leq S^g_kc leq S^gu_kc forall k in G forall c in C \n v^l_ic leq V_ic leq v^u_ic forall i in N forall c in C \n sum_substackk in G_i mathbfS^g_k - sum_substackk in L_i mathbfS^d_k - sum_substackk in S_i mathbfV_i mathbfV^H_i (mathbfY^s_k)^H = sum_substack(ij)in E_i cup E_i^R diag(mathbfS_ij) forall iin N \n mathbfS_ij + mathbfS_ji = mathbfV_i mathbfV_i^H (mathbfY^c_ij)^H + mathbfZ_ij mathbfI^s_ij(mathbfI^s_ij)^H + mathbfV_j mathbfV_j^H (mathbfY^c_ji)^H forall (ij)in E \n mathbfS^s_ij = mathbfS_ij + mathbfV_i mathbfV_i^H (mathbfY^c_ij)^H forall (ij) in E cup E^R \n mathbfS^s_ij = mathbfV_i (mathbfI^s_ij)^H forall (ij) in E cup E^R\n mathbfV_i = mathbfV_j - mathbfZ_ij mathbfI^s_ij forall (ij)in E \n diag(mathbfS_ij) leq mathbfs^u_ij forall (ij) in E cup E^R \n theta^Delta l_ijc leq angle (V_ic V^*_jc) leq theta^Delta u_ijc forall (ij) in E forall c in C\n\nendalign","category":"page"},{"location":"manual/math-model.html","page":"Mathematical Model","title":"Mathematical Model","text":"[1]: Gan, L., & Low, S. H. (2014). Convex relaxations and linear approximation for optimal power flow in multiphase radial networks. In PSSC (pp. 1–9). Wroclaw, Poland. https://doi.org/10.1109/PSCC.2014.7038399","category":"page"},{"location":"tutorials/Native Power Flow.html#Native-Power-Flow-Solver","page":"Native Power Flow Solver","title":"Native Power Flow Solver","text":"","category":"section"},{"location":"tutorials/Native Power Flow.html","page":"Native Power Flow Solver","title":"Native Power Flow Solver","text":"Stub for Native Power Flow.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"installation.html#Installation-Guide","page":"Installation Guide","title":"Installation Guide","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"From Julia, PowerModelsDistribution is installed using the built-in package manager:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"import Pkg\nPkg.add(\"PowerModelsDistribution\")","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Or, within the Julia REPL:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"]add PowerModelsDistribution","category":"page"},{"location":"installation.html#Installing-an-Optimizer","page":"Installation Guide","title":"Installing an Optimizer","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"PowerModelsDistribution depends on optimizers to solve Optimization problems, e.g., solve_mc_opf. The table below lists the optimizer packages that have been tested with PowerModelsDistribution, and have been found to work by the team; this list is not exhaustive, there are probably more optimizers that will work.","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Install an optimizer using the Julia Package Manager, e.g.,","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"import Pkg\nPkg.add(\"Ipopt\")","category":"page"},{"location":"installation.html#Known-Working-Optimizers","page":"Installation Guide","title":"Known Working Optimizers","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"The table below contains a truncated list of optimizers from the JuMP documentation that have been used by the development team and are confirmed to work with our package. There may be other Optimizers that work, and the Optimizers listed below are not guaranteed to work with all problems; they must be selected for the appropriate problems.","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Solver Julia Package Installation License Supports\nArtelys Knitro KNITRO.jl Manual Comm. (MI)LP, (MI)SOCP, (MI)NLP\nCbc Cbc.jl EPL (MI)LP\nCPLEX CPLEX.jl Manual Comm. (MI)LP, (MI)SOCP\nGurobi Gurobi.jl Manual Comm. (MI)LP, (MI)SOCP\nIpopt Ipopt.jl EPL LP, QP, NLP\nJuniper.jl Juniper.jl MIT (MI)SOCP, (MI)NLP\nSCS SCS.jl MIT LP, SOCP, SDP","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Where:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"LP = Linear programming\nQP = Quadratic programming\nSOCP = Second-order conic programming (including problems with convex quadratic constraints and/or objective)\nNLP = Nonlinear programming\nSDP = Semidefinite programming\n(MI)XXX = Mixed-integer equivalent of problem type XXX","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"For a complete list of JuMP supported optimizers, see JuMP Documentation.","category":"page"},{"location":"installation.html#Unsatisfiable-requirements-detected","page":"Installation Guide","title":"Unsatisfiable requirements detected","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Did you get an error like Unsatisfiable requirements detected for package D [756980fe]:?","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"The Pkg documentation has a section on how to understand and manage these conflicts.","category":"page"},{"location":"manual/external-data-formats.html#External-Data-Formats","page":"External Data Formats","title":"External Data Formats","text":"","category":"section"},{"location":"manual/external-data-formats.html#OpenDSS","page":"External Data Formats","title":"OpenDSS","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"PowerModelsDistribution supports parsing OpenDSS format files. In particular, we support a raw parsing of all OpenDSS specified components into a dictionary (serializable) structure, and support converting the data values of a smaller subsection of components into their expected types. Those include","category":"page"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Line\nLoad\nGenerator\nCapactior (shunt capacitors only)\nReactor\nTransformer\nLinecode\nXfmrcode\nLoadshape\nXYCurve\nCircuit\nVSource\nPVSystem\nStorage","category":"page"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Of those, a subset of configurations are converted into a PowerModelsDistribution internal data model, namely:","category":"page"},{"location":"manual/external-data-formats.html#Edge-Elements","page":"External Data Formats","title":"Edge Elements","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"line (from lines and line reactors)\ntransformer (arbitrary winding, all connections except zig-zag)\nswitch (from lines w/ switch=y)","category":"page"},{"location":"manual/external-data-formats.html#Node-Elements","page":"External Data Formats","title":"Node Elements","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"generator\nvoltage_source\nsolar (from PVSystem)\nload (incl. support for constant POWER, constant IMPEDANCE, constant CURRENT, and EXPONENTIAL models)\nshunt (from shunt capacitors and shunt reactors)\nstorage","category":"page"},{"location":"manual/external-data-formats.html#Data-Elements","page":"External Data Formats","title":"Data Elements","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"linecode\nxfmrcode\ntime_series (from loadshapes)","category":"page"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Several notes about the specific design choices w.r.t. OpenDSS are explained below.","category":"page"},{"location":"manual/external-data-formats.html#Circuit","page":"External Data Formats","title":"Circuit","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"The default connection to the transmission system is modeled as an ideal voltage source named \"source\" in OpenDSS, which is connected by default to a node named \"sourcebus\", but this can be changed.","category":"page"},{"location":"manual/external-data-formats.html#Lines","page":"External Data Formats","title":"Lines","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Although Lines and Linecodes are supported, the more generic LineGeometry is not yet supported.","category":"page"},{"location":"manual/external-data-formats.html#Transformers","page":"External Data Formats","title":"Transformers","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Unfortunately, in the OpenDSS format, multi-phase transformers with different taps for each phase are not explicitly supported, so to work around this limitation multiple single phase transformers should be defined, which are then \"banked\" together using the bank property.","category":"page"},{"location":"manual/external-data-formats.html#Capacitors-and-Reactors","page":"External Data Formats","title":"Capacitors and Reactors","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"Capacitors and reactors are supported as shunts, although shunts to ground via delta connections are not yet supported. Furthermore, generic reactors are not supported, only those whose second terminal is connected to ground (default for unspecified second terminal). Reactors are also supported as a resistanceless line if their second terminal is connected, but only for topological continuity of the network.","category":"page"},{"location":"manual/external-data-formats.html#PowerModelsDistribution-JSON","page":"External Data Formats","title":"PowerModelsDistribution JSON","text":"","category":"section"},{"location":"manual/external-data-formats.html","page":"External Data Formats","title":"External Data Formats","text":"You can export a PowerModelsDistribution data structure to a JSON file using the print_file command and parse one in using the parse_file command","category":"page"},{"location":"tutorials/Explicit Neutral Models.html#Explicit-Neutral-Models","page":"Explicit Neutral Models","title":"Explicit Neutral Models","text":"","category":"section"},{"location":"tutorials/Explicit Neutral Models.html","page":"Explicit Neutral Models","title":"Explicit Neutral Models","text":"Stub for Explicit Neutral Models.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"developer/style.html#Style-Conventions","page":"Style Guide","title":"Style Conventions","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In general, the following conventions should be adhered to when making changes or additions to the code base. These conventions should include any conventions applied across the InfrastructureModels ecosystem specific to power engineering (i.e conventions from InfrastructureModels, PowerModels, PowerModelsRestoration, etc.) with some additions specific to PowerModelsDistribution.","category":"page"},{"location":"developer/style.html#Functions","page":"Style Guide","title":"Functions","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Function additions should meeting the following criteria:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All functions should be clearly named, without abbreviations, and with underscores between words, e.g. parse_file or constraint_bus_voltage_magnitude; in Python this is known as lower_case_with_underscores. The exception to the abbreviate rule is cases where abbreviations would be expected in the modeling of power systems.\nAll functions that are not prepended by an underscore _ will be exported by default (i.e. when a user uses using PowerModelsDistribution). Public functions should have a detailed docstring instructing on usage\nAll functions that modify data in place should end with an exclamation point ! and the function input that is being modified should be the first argument (or first arguments in the case where multiple inputs are being modified in place). The exceptions to this rule are constraint and variable creation functions (i.e. those functions related to JuMP model creation), which do not include the exclamation point\nAll function arguments, including keyword arguments, should have their types specified.\nPrivate functions, i.e. those intended to be for internal use only, should follow the same descriptive naming conventions as functions exported by default, and should always include docstrings to describe their purpose.\nFunctions should be separated by two blank lines","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"\"this function demonstrates how an internal, in-place data altering function should be defined\"\nfunction _concise_descriptive_name!(data::Dict{String,<:Any}, a::Real, b::Vector{<:Real}, c::Matrix{<:Complex}; d::Bool=false, e::Vector{Function}=Function[])\nend","category":"page"},{"location":"developer/style.html#Types-and-Enums","page":"Style Guide","title":"Types & Enums","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"When specifying types, i.e. when specifying the type of a function argument, or creating enums, these guidelines are recommended:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Prefer to use Vector{T} instead of Array{T,1}\nPrefer to use Matrix{T} instead of Array{T,2}\nEnums should only be used in the ENGINEERING data model, never the MATHEMATICAL data model\nEnums must be added to the JSON parser when introduced","category":"page"},{"location":"developer/style.html#Constants","page":"Style Guide","title":"Constants","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Whenever possible, const should be used to eliminate unnecessary re-evaluations of code, and every const should have a docstring, whether internal or public.","category":"page"},{"location":"developer/style.html#JuMP-Variables-and-Constraints","page":"Style Guide","title":"JuMP Variables and Constraints","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"For functions that create JuMP variables and constraints in particular, we follow the following naming convention as originally adopted by PowerModels:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"(_)__(_real|_imaginary|_magnitude|_angle|_factor)(_fr|_to)(_sqr)(_on_off)","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"in the interest of intuitive names for users, the following special cases are also acceptable,","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"_power_real -(can be replaced with)-> _active\n_power_imaginary -(can be replaced with)-> _reactive","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In the case of PowerModelsDistribution, there are additional tags indicating that a function is a multiconductor variant, three-phase specific, etc.:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"mc multi-conductor, with an explicit neutral (which is the last conductor by convention?)\nmp multi-phase, for constraints that have no (explicit) neutral and multiple phases\n3p three-phase, when a constraint is hard-coded for three phases","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Currently, all phase-aware functions use mc, but this is subject to change in the future as we refactor. If the function is not multiphase specific, these are not needed in the function name.","category":"page"},{"location":"developer/style.html#Formulation-Styles","page":"Style Guide","title":"Formulation Styles","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new formulations should have clear error messages when they do not support existing components. For example, if a formulation addition which is intended to work with OPF does not support delta-wye transformers, the constraint_mc_transformer_power_dy\nFormulation abstract type and mutable struct must be specified in CapitalizedWords, which is a subtype of camelCase with the first word also capitalized.","category":"page"},{"location":"developer/style.html#Problem-Specification-Styles","page":"Style Guide","title":"Problem Specification Styles","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"If a new problem specification is only needed due to the requirements of a new formulation, and is not a new type of problem, e.g. another OPF formulation, a build_ function with the same name as the existing formulation should be created that accepts a specific PowerModel (multiple dispatch)\nIf a new problem specification is a new type of problem that will e.g. accept multiple formulations, new build_ and run_ functions should be created that do not collide with existing problem specification functions","category":"page"},{"location":"developer/style.html#Metaprogramming","page":"Style Guide","title":"Metaprogramming","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In general, it is better to avoid metaprogramming patterns, like creating functions algorithmically, in order to aid in the debugging of code. Metaprogramming can create significant challenges in interpreting stacktraces upon errors.","category":"page"},{"location":"developer/style.html#Markdown","page":"Style Guide","title":"Markdown","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Markdown files should be properly formatted, particularly when including tables. Developers are encouraged to use markdownlint and a markdown formatter (such as in VSCode).","category":"page"},{"location":"developer/style.html#File-Structure","page":"Style Guide","title":"File Structure","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"It is important that new functions, variables, constraints, etc. all go into appropriate places in the code base so that future maintenance and debugging is easier. Pay attention to the current file structure and attempt to conform as best as possible to it. In general","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"/src/core contains the core logic of the package, including variable creation and constraint templates, i.e. things that are agnostic to the formulation\n/src/data_model contains all of the logic to transform between the ENGINEERING and MATHEMATICAL data models and model creation helper tools\nsrc/form contains formulation specific variable and constraint functions, organized under separate files for different formulations\nsrc/io contains all of the tools to parse and save files, in particular all of the logic necessary to parse dss files and output json files\nsrc/prob contains all problem specifications\ndocs/src contains all source markdown files for the documentation\nexamples contains Jupyter notebooks with walkthroughs of PowerModelsDistribution for new users","category":"page"},{"location":"developer/style.html#Dependencies-(Project.toml)","page":"Style Guide","title":"Dependencies (Project.toml)","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new dependencies should be carefully considered before being added. It is important to keep the number of external dependencies low to avoid reliance on features that may not be maintained in the future. If possible, Julia Standard Library should be used, particularly in the case where reproducing the desired feature is trivial. There will be cases where it is not simple to duplicate a feature and subsequently maintain it within the package, so adding a dependency would be appropriate in such cases.","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new dependencies are are ultimately approved should also include an entry under [compat] indicating the acceptable versions (Julia automerge requirement). This includes test-only dependencies that appear under [extras]","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"The Manifest.toml should not be included in the repo.","category":"page"},{"location":"tutorials/Beginners Guide.html#Introduction-to-PowerModelsDistribution","page":"Beginners Guide","title":"Introduction to PowerModelsDistribution","text":"","category":"section"},{"location":"tutorials/Beginners Guide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Stub for Beginners Guide.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"tutorials/Engineering Model - Helper Functions.html#tutorial-eng-model-helpers","page":"Engineering Model: Helper Functions","title":"The Engineering Model: Helper Functions","text":"","category":"section"},{"location":"tutorials/Engineering Model - Helper Functions.html","page":"Engineering Model: Helper Functions","title":"Engineering Model: Helper Functions","text":"Stub for Engineering Model - Helper Functions.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"manual/power-flow.html#Power-Flow-Computations","page":"Power Flow Computations","title":"Power Flow Computations","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The typical goal of PowerModelsDistribution is to build a JuMP model that is used to solve distribution power network optimization problems. The JuMP model abstraction enables PowerModelsDistribution to have state-of-the-art performance on a wide range of problem formulations. That said, for the specific case of power flow computations, in some specific applications performance gains can be had by avoiding the JuMP model abstraction and solving the problem more directly. To that end, PowerModelsDistribution includes Julia-native solvers for AC power flow in rectangular voltage coordinates. This section provides an overview of the different power flow options that are available in PowerModelsDistribution and under what circumstances they may be beneficial.","category":"page"},{"location":"manual/power-flow.html#Generic-Power-Flow","page":"Power Flow Computations","title":"Generic Power Flow","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The general purpose power flow solver in PowerModelsDistribution is,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"solve_mc_pf","category":"page"},{"location":"manual/power-flow.html#PowerModelsDistribution.solve_mc_pf","page":"Power Flow Computations","title":"PowerModelsDistribution.solve_mc_pf","text":"Power Flow Problem\n\n\n\n\n\n","category":"function"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"This function builds a JuMP model for a wide variety of unbalanced power flow formulations supported by PowerModelsDistribution. For example it supports,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"ACPUPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in polar coordinates\nACRPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in rectangular coordinates\nACRENPowerModel - a non-convex nonlinear AC unbalanced power flow using complex voltages in rectangular coordinates with explicit neutral conductor\nIVRUPowerModel - a non-convex nonlinear AC power unbalanced flow using current voltage variables in rectangular coordinates\nIVRENPowerModel - a non-convex nonlinear AC unbalanced power flow using current voltage variables in rectangular coordinates with explicit neutral conductor","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The solve_mc_pf solution method is both formulation and solver agnostic and can leverage the wide range of solvers that are available in the JuMP ecosystem. Many of these solvers are commercial-grade, which in turn makes solve_mc_pf the most reliable power flow solution method in PowerModelsDistribution.","category":"page"},{"location":"manual/power-flow.html#Warm-Starting","page":"Power Flow Computations","title":"Warm Starting","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"In some applications an initial guess of the power flow solution may be available. In such a case, this information may be able to decrease a solver's time to convergence, especially when solving systems of nonlinear equations. The _start postfix can be used in the network data to initialize the solver's variables and provide a suitable solution guess. The most common values are as follows,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"For each generator,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"pg_start - active power injection starting point\nqg_start - reactive power injection starting point","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"For each bus,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"vm_start - voltage magnitude starting point for the ACPUPowerModel model\nva_start - voltage angle starting point for the ACPUPowerModel model\nvr_start - real voltage starting point for the IVRUPowerModel model\nvi_start - imaginary voltage starting point for the IVRUPowerModel model","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The following helper function can be used to use the solution point in the network data as the starting point for solve_mc_pf.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"add_start_voltage!","category":"page"},{"location":"manual/power-flow.html#PowerModelsDistribution.add_start_voltage!","page":"Power Flow Computations","title":"PowerModelsDistribution.add_start_voltage!","text":"add_start_voltage!(\n data_math::Dict{String,Any};\n coordinates=:rectangular,\n uniform_v_start=missing,\n vr_default=0.0,\n vi_default=0.0,\n vm_default=0.0,\n va_default=0.0,\n epsilon::Number=1E-3,\n)::Dict{String,Any}\n\nAdds start values for the voltage to the buses. For a multinetwork data model, you can calculate the start voltages for a representative network through 'calcstartvoltage', and pass the result as 'uniformvstart' to use the same values for all networks and avoid recalculating it for each network. The argument 'epsilon' controls the offset added to ungrounded terminals which would otherwise be set to zero.\n\n\n\n\n\n","category":"function"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"warning: Warning\n","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"Warm starting a solver is a very delicate task and can easily result in degraded performance. Using PowerModelsDistribution' default flat-start values is recommended before experimenting with warm starting a solver.","category":"page"},{"location":"manual/power-flow.html#Native-Power-Flow","page":"Power Flow Computations","title":"Native Power Flow","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The AC Unbalanced Power Flow problem is ubiquitous in power system analysis. The problem requires solving a system of nonlinear equations, usually via a Newton-Raphson type of algorithm. In PowerModelsDistribution, the standard Julia library is used for solving this system of nonlinear equations. The following function is used to solve Unbalanced Power Flow problem with voltages in rectangular coordinates.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"compute_mc_pf","category":"page"},{"location":"manual/power-flow.html#PowerModelsDistribution.compute_mc_pf","page":"Power Flow Computations","title":"PowerModelsDistribution.compute_mc_pf","text":"compute_mc_pf(\n data::Dict{String,<:Any};\n explicit_neutral::Bool=false,\n max_iter::Int=100,\n v_start::Union{Dict{<:Any,<:Any},Missing}=missing,\n stat_tol::Real=1e-8,\n verbose::Bool=false,\n kron_reduce::Bool=true,\n phase_project::Bool=false,\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n eng2math_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,<:Vector{<:String}}=Dict{String,Vector{String}}(),\n make_pu_extensions::Vector{<:Function}=Function[],\n map_math2eng_extensions::Dict{String,<:Function}=Dict{String,Function}(),\n make_si::Bool=!get(data, \"per_unit\", false),\n make_si_extensions::Vector{<:Function}=Function[],\n dimensionalize_math_extensions::Dict{String,Dict{String,Vector{String}}}=Dict{String,Dict{String,Vector{String}}}(),\n)::Dict{String,Any}\n\nTakes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns a solution in the original data model defined by data.\n\nTechnical description of the native power flow can be found at https://arxiv.org/abs/2305.04405 where implementation fo the fixed-point current injection algorithm, inspired by the existing open-source implementation in OpenDSS. The current injection method is commonly conceived as a system of nonlinear equalities solved by Newton’s method. However, the fixed point iteration variant commonly outperforms most methods, while supporting meshed topologies from the ground up\n\nIf make_si is false, data will remain in per-unit.\n\nFor an explanation of multinetwork and global_keys, see make_multinetwork\n\nFor an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model\n\nFor an explanation of make_pu_extensions, see make_per_unit!\n\nFor an explanation of ref_extensions, see instantiate_mc_model\n\nFor an explanation of map_math2eng_extensions, make_si, make_si_extensions, and dimensionalize_math_extensions, see solution_make_si\n\n\n\n\n\ncompute_mc_pf(\n pdf::PowerFlowData,\n max_iter::Int,\n stat_tol::Float,\n verbose::Bool\n)\n\nComputes native power flow and requires PowerFlowData (See https://arxiv.org/abs/2305.04405).\n\n\n\n\n\n","category":"function"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"compute_mc_pf is based on the current injection method and is inspired by OpenDSS's algorithm. compute_mc_pf will typically provide an identical result to solve_mc_pf. However, the existence of solution degeneracy around generator injection assignments and multiple power flow solutions can yield different results. The primary advantage of compute_mc_pf over solve_mc_pf is that it does not require building a JuMP model. If the initial point for the Unbalanced Power Flow solution is near-feasible then compute_mc_pf can result in a significant runtime saving by converging quickly and reducing data-wrangling and memory allocation overheads. This initial guess is provided using the standard _start values. The add_start_voltage! function provides a convenient way of setting a suitable starting point.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"tip: Tip\n","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"If compute_mc_pf fails to converge try solve_mc_pf instead.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The table below reports the accuracy of the native power flow with respect to OpenDSS native solver tested on three IEEE testcases: | IEEE testcases | maximum voltage p.u difference with OpenDSS power flow solver | | –––––––-| ––––––––––––––––––––––––––––––- | | IEEE13 | 3.765096388188572e-6 | | IEEE34 | 6.805369850332029e-8 | | IEEE123 | 4.021326251365659e-8 |","category":"page"},{"location":"manual/power-flow.html#Input-arguments","page":"Power Flow Computations","title":"Input arguments","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"compute_mc_pf receives input arguments as follows,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"data_math - network data in MATHEMATICAL format\nexplicit_neutral - a boolean input indication wether or not the neutral is explicitly modelled\nv_start - warm start if different from in-built initialization algorithm\nmax_iter - maximum iterations\nstat_tol - statistical tolerance","category":"page"},{"location":"manual/power-flow.html#Outputs","page":"Power Flow Computations","title":"Outputs","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"compute_mc_pf provides the following outputs,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"solution - solution dictionary\niterations - number of iterations\ntime_build - time spent on building the power flow data\ntime_solve - time spent on solving the native power flow\ntime_post - time spent to generate solutions\ntime_total - total time\ntermination_status - termination status","category":"page"},{"location":"manual/power-flow.html#Limitations","page":"Power Flow Computations","title":"Limitations","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"compute_mc_pf has the following limitations,","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"starting from the math dictionary means that transformer decomposition is already done, which is different from what OpenDSS does\nwe calculate the primitive admittance matrix in p.u. whereas OpenDSS algorithm works with actual units\nno load model relaxation is performed\ninspired by OpenDSS, we add small ppm values to certain component primitive admittance values to avoid singularity issues\ninspired by OpenDSS, switch primitive admittance has specific values","category":"page"},{"location":"manual/power-flow.html#Network-Admittance-Matrix","page":"Power Flow Computations","title":"Network Admittance Matrix","text":"","category":"section"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"Internally compute_mc_pf utilizes an admittance matrix representation of the network data, which may be useful in other contexts. The foundational type for the admittance matrix representations is SparseMatrixCSC.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"The following function can be used to compute the admittance matrix from PowerModelsDistribution network data.","category":"page"},{"location":"manual/power-flow.html","page":"Power Flow Computations","title":"Power Flow Computations","text":"calc_admittance_matrix","category":"page"},{"location":"manual/power-flow.html#PowerModelsDistribution.calc_admittance_matrix","page":"Power Flow Computations","title":"PowerModelsDistribution.calc_admittance_matrix","text":"calc_admittance_matrix(\n data_math::Dict,\n v_start::Dict,\n explicit_neutral::Bool\n)\n\nCalculates the admittance matrix from PowerFlowData struct.\n\n\n\n\n\n","category":"function"},{"location":"manual/formulations.html#Unbalanced-Network-Formulations","page":"Unbalanced Formulations","title":"Unbalanced Network Formulations","text":"","category":"section"},{"location":"manual/formulations.html#[AbstractUnbalancedACPModel](@ref-AbstractUnbalancedACPModel)","page":"Unbalanced Formulations","title":"AbstractUnbalancedACPModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Real-valued formulation from:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Formulation without shunts: Mahdad, B., Bouktir, T., & Srairi, K. (2006). A three-phase power flow modelization: a tool for optimal location and control of FACTS devices in unbalanced power systems. In IEEE Industrial Electronics IECON (pp. 2238–2243).","category":"page"},{"location":"manual/formulations.html#[AbstractUnbalancedDCPModel](@ref-AbstractUnbalancedDCPModel)","page":"Unbalanced Formulations","title":"AbstractUnbalancedDCPModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Applying all of the standard DC linearization tricks to the AbstractUnbalancedACPModel","category":"page"},{"location":"manual/formulations.html#[SDPUBFModel](@ref-SDPUBFModel)","page":"Unbalanced Formulations","title":"SDPUBFModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"The BFM SDP relaxation as described in:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Gan, L., & Low, S. H. (2014). Convex relaxations and linear approximation for optimal power flow in multiphase radial networks. In PSSC (pp. 1–9). Wroclaw, Poland. doi:10.1109/PSCC.2014.7038399","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Note that this formulation is complex-valued and additional steps are needed to implement this in JuMP.","category":"page"},{"location":"manual/formulations.html#[SOCNLPUBFModel](@ref-SOCNLPUBFModel)","page":"Unbalanced Formulations","title":"SOCNLPUBFModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"The starting point is SDPUBFModel. The SDP constraint can be relaxed to a set of SOC constraints, starting from either the real or complex form of the matrix on which the PSD-ness constraint is applied.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Kim, S., Kojima, M., & Yamashita, M. (2003). Second order cone programming relaxation of a positive semidefinite constraint. Optimization Methods and Software, 18(5), 535–541. doi:10.1080/1055678031000148696\nAndersen, M. S., Hansson, A., & Vandenberghe, L. (2014). Reduced-complexity semidefinite relaxations of optimal power flow problems. IEEE Trans. Power Syst., 29(4), 1855–1863.","category":"page"},{"location":"manual/formulations.html#[SOCConicUBFModel](@ref-SOCConicUBFModel)","page":"Unbalanced Formulations","title":"SOCConicUBFModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"See SOCNLPUBFModel","category":"page"},{"location":"manual/formulations.html#[LPUBFDiagModel](@ref-LPUBFDiagModel)","page":"Unbalanced Formulations","title":"LPUBFDiagModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This formulation has originally been developed by Sankur et al.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Sankur, M. D., Dobbe, R., Stewart, E., Callaway, D. S., & Arnold, D. B. (2016). A linearized power flow model for optimization in unbalanced distribution systems. arXiv:1606.04492v2","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"and is here cast as only considering the diagonal elements of the linear formulation by Gan and Low:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Gan, L., & Low, S. H. (2014). Convex relaxations and linear approximation for optimal power flow in multiphase radial networks. In PSSC (pp. 1–9). Wroclaw, Poland. doi:10.1109/PSCC.2014.7038399","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This furthermore leads to the imaginary part of the lifted node voltage variable W in Gan and Low being redundant, so it is substituted out in LPUBFDiagModel.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"The full formulation from Gan and Low was supported as LPUBFFullModel in PowerModelsDistribution up to version 0.7. ","category":"page"},{"location":"manual/formulations.html#[FBSUBFPowerModel](@ref-FBSUBFPowerModel),-[FOTPUPowerModel](@ref-FOTPUPowerModel),-[FOTRUPowerModel](@ref-FOTRUPowerModel)","page":"Unbalanced Formulations","title":"FBSUBFPowerModel, FOTPUPowerModel, FOTRUPowerModel","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"The linear FBS and FOT formulations as described in:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Girigoudar, K., & Roald, L.A. (2021). Linearized Three-Phase Optimal Power Flow Models for Distribution Grids with Voltage Unbalance. 2021 IEEE Conference on Decision and Control (CDC).","category":"page"},{"location":"manual/formulations.html#Unbalanced-Network-Formulation-Type-Hierarchy","page":"Unbalanced Formulations","title":"Unbalanced Network Formulation Type Hierarchy","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"PowerModelsDistribution has a rich model type hierarchy similar to PowerModels. At the top of the type hierarchy we can distinguish between conic, active power only, and branch flow models:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"abstract type AbstractUnbalancedConicModel <: AbstractPowerModel end\nabstract type AbstractUnbalancedActivePowerModel <: AbstractPowerModel end\nabstract type AbstractUBFModel <: AbstractPowerModel end\nabstract type AbstractUBFQPModel <: AbstractUBFModel end\nabstract type AbstractUBFConicModel <: AbstractUBFModel end\nconst AbstractUnbalancedConicModels = Union{AbstractUnbalancedConicModel, AbstractUBFConicModel}","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Several nonlinear (non-convex) models are available at the top level:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"abstract type AbstractUnbalancedACPModel <: AbstractPowerModel end\nabstract type AbstractUnbalancedACRModel <: AbstractPowerModel end\nabstract type AbstractUnbalancedIVRModel <: AbstractUnbalancedACRModel end","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"The following relaxations are available under these hierarchies:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"abstract type AbstractNLPUBFModel <: AbstractUBFQPModel end\nabstract type AbstractConicUBFModel <: AbstractUBFConicModel end\nconst AbstractUBFModels = Union{AbstractNLPUBFModel, AbstractConicUBFModel}\n\nabstract type SDPUBFModel <: AbstractConicUBFModel end\nabstract type SDPUBFKCLMXModel <: SDPUBFModel end\nabstract type SOCNLPUBFModel <: AbstractNLPUBFModel end\nabstract type SOCConicUBFModel <: AbstractConicUBFModel end\nconst SOCUBFModels = Union{SOCNLPUBFModel, SOCConicUBFModel}","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"where UBF is an unbalanced variant of the Branch Flow models from PowerModels. Models which do not contain UBF in their name are Bus Injection Models e.g. AbstractUnbalancedACPModel. Finally, some linear unbalanced power flow models are available under the following hierarchy:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"abstract type AbstractUnbalancedDCPModel <: AbstractUnbalancedActivePowerModel end\nabstract type AbstractUnbalancedNFAModel <: AbstractUnbalancedDCPModel end\nabstract type AbstractLPUBFModel <: AbstractNLPUBFModel end\nabstract type LPUBFDiagModel <: AbstractLPUBFModel end\nconst LinDist3FlowModel = LPUBFDiagModel\nabstract type FBSUBFModel <: AbstractLPUBFModel end","category":"page"},{"location":"manual/formulations.html#Unbalanced-Power-Models","page":"Unbalanced Formulations","title":"Unbalanced Power Models","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Each of these Models can be used as the type parameter for an UnbalancedPowerModel:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"mutable struct ACPUPowerModel <: AbstractUnbalancedACPModel @pmd_fields end\nmutable struct ACRUPowerModel <: AbstractUnbalancedACRModel @pmd_fields end\nmutable struct DCPUPowerModel <: AbstractUnbalancedDCPModel @pmd_fields end\nmutable struct NFAUPowerModel <: AbstractUnbalancedNFAModel @pmd_fields end\n\nmutable struct SDPUBFPowerModel <: SDPUBFModel @pmd_fields end\nmutable struct SDPUBFKCLMXPowerModel <: SDPUBFKCLMXModel @pmd_fields end\n\nmutable struct SOCNLPUBFPowerModel <: SOCNLPUBFModel @pmd_fields end\nmutable struct SOCConicUBFPowerModel <: SOCConicUBFModel @pmd_fields end\n\nmutable struct LPUBFDiagPowerModel <: LPUBFDiagModel @pmd_fields end\nconst LinDist3FlowPowerModel = LPUBFDiagPowerModel\nmutable struct FBSUBFPowerModel <: FBSUBFModel @pmd_fields end\nmutable struct FOTPUPowerModel <: AbstractUnbalancedACPModel @pmd_fields end\nmutable struct FOTRUPowerModel <: AbstractUnbalancedACRModel @pmd_fields end","category":"page"},{"location":"manual/formulations.html#Optimization-problem-classes","page":"Unbalanced Formulations","title":"Optimization problem classes","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"NLP (nonconvex): ACPUPowerModel, ACRUPowerModel, IVRUPowerModel\nSDP: SDPUBFPowerModel, SDPUBFKCLMXPowerModel\nSOC(-representable): SOCNLPUBFPowerModel, SOCConicUBFPowerModel\nLinear: LPUBFDiagPowerModel (LinDist3FlowPowerModel), FBSUBFPowerModel, FOTPUPowerModel, FOTRUPowerModel, DCPUPowerModel, NFAUPowerModel ","category":"page"},{"location":"manual/formulations.html#Matrix-equations-versus-scalar-equations","page":"Unbalanced Formulations","title":"Matrix equations versus scalar equations","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"JuMP supports vectorized syntax, but not for nonlinear constraints. Therefore, certain formulations must be implemented in a scalar fashion. Other formulations can be written as matrix (in)equalities. The current implementations are categorized as follows:","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Scalar: ACPUPowerModel, ACRUPowerModel, IVRUPowerModel, DCPUPowerModel, NFAPowerModel, FBSUBFPowerModel, FOTPUPowerModel, FOTRUPowerModel\nMatrix: SDPUBFPowerModel, SDPUBFKCLMXPowerModel, SOCNLPUBFPowerModel, SOCConicUBFPowerModel, LPUBFDiagPowerModel","category":"page"},{"location":"manual/formulations.html#Explicit-Neutral-Models","page":"Unbalanced Formulations","title":"Explicit Neutral Models","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"Explicit neutral (EN) models represent the neutral currents explicitly; unlike all the previous models, which implicitly assume they are grounded immediately where they originate.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"There are two broad classes of formulations: IVR ones an ACR one.","category":"page"},{"location":"manual/formulations.html#IVR","page":"Unbalanced Formulations","title":"IVR","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"AbstractExplicitNeutralIVRModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This abstract type groups all EN IVR formulations, and is a subtype of AbstractUnbalancedIVRModel.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"AbstractNLExplicitNeutralIVRModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This abstract type groups non-linear EN IVR formulations, and is a subtype of AbstractExplicitNeutralIVRModel.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"IVRENPowerModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This concrete type is a non-linear EN IVR formulation.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"IVRReducedENPowerModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This concrete type is a non-linear EN IVR formulation, where the branches only have series current variables (instead of also total current variables).","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"AbstractQuadraticExplicitNeutralIVRModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This abstract type groups quadratic EN IVR formulations, and is a subtype of AbstractExplicitNeutralIVRModel.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"IVRQuadraticENPowerModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This concrete type is a quadratic EN IVR formulation.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"IVRReducedQuadraticENPowerModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This concrete type is a quadratic EN IVR formulation, where the branches only have series current variables (instead of also total current variables).","category":"page"},{"location":"manual/formulations.html#ACR","page":"Unbalanced Formulations","title":"ACR","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"AbstractExplicitNeutralACRModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This abstract type is a subtype of AbstractUnbalancedACRModel, analogous to the IVR structure.","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"ACRENPowerModel","category":"page"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"This is the only concrete ACR type amongst the EN formulations.","category":"page"},{"location":"manual/formulations.html#Overview-of-hierarchy","page":"Unbalanced Formulations","title":"Overview of hierarchy","text":"","category":"section"},{"location":"manual/formulations.html","page":"Unbalanced Formulations","title":"Unbalanced Formulations","text":"EN-IVR (AbstractExplicitNeutralIVRModel)\n|\n|-- NL (AbstractNLExplicitNeutralIVRModel)\n| |\n| |-- IVRENPowerModel\n|\n|-- Quadratic (AbstractQuadraticExplicitNeutralIVRModel)\n |\n |-- IVRENPowerModel\n |\n |-- IVRReducedENPowerModel\n\nEN-ACR (AbstractExplicitNeutralIVRModel)\n|\n|-- ACRENPowerModel","category":"page"},{"location":"manual/enums.html#PowerModelsDistribution-Enum-Types","page":"Enums in Engineering Model","title":"PowerModelsDistribution Enum Types","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"Within the PowerModelsDistribution Engineering Model we have included the use of Enums. Here we document the fields for which Enums are expected and the possible Enums available.","category":"page"},{"location":"manual/enums.html#Data-Model","page":"Enums in Engineering Model","title":"Data Model","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"Any place in PowerModelsDistribution that calls for specifying the data_model, either in function calls or the \"data_model\" field inside the data structure itself, will expect a DataModel type.","category":"page"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"The DSS data model is an output of parse_dss, and is an untranslated raw parse of a DSS file. This Enum exists for use by count_nodes, where the method to count the number of active nodes is different between all three models.","category":"page"},{"location":"manual/enums.html#Component-Status","page":"Enums in Engineering Model","title":"Component Status","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"All \"status\" fields in the ENGINEERING model expect a Status type.","category":"page"},{"location":"manual/enums.html#Connection-Configuration","page":"Enums in Engineering Model","title":"Connection Configuration","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"All \"configuration\" fields in the ENGINEERING model expect a ConnConfig type.","category":"page"},{"location":"manual/enums.html#Load-Model","page":"Enums in Engineering Model","title":"Load Model","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"For load objects, the \"model\" field expects a LoadModel type to specify the type of load model to use, where","category":"page"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"POWER indicates constant power,\nCURRENT indicates constant current,\nIMPEDANCE indicates constant impedance,\nEXPONENTIAL indicates an exponential load model, and\nZIP indicates a ZIP model","category":"page"},{"location":"manual/enums.html#Shunt-Model","page":"Enums in Engineering Model","title":"Shunt Model","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"For shunt objects, the \"model\" field expects a ShuntModel type to specify the origin of the shunt object, which is important for transient analysis.","category":"page"},{"location":"manual/enums.html#Switch-State","page":"Enums in Engineering Model","title":"Switch State","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"For switch objects, the \"state\" field expects a SwitchState type to specify whether the switch is currently open or closed.","category":"page"},{"location":"manual/enums.html#Dispatchable-Component","page":"Enums in Engineering Model","title":"Dispatchable Component","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"Some components can be Dispatchable, e.g. if a switch is dispatchable that means it is free to open or close, but if not then it is fixed in place, or if a load is dispatchable it implies that it can be shed in a run_mc_mld problem.","category":"page"},{"location":"manual/enums.html#Generator-Control-Mode","page":"Enums in Engineering Model","title":"Generator Control Mode","text":"","category":"section"},{"location":"manual/enums.html","page":"Enums in Engineering Model","title":"Enums in Engineering Model","text":"For generator objects, the \"control_mode\" field expects a ControlMode type to specify whether the generator is operating in an isochronous mode (i.e. is frequency forming) or droop mode (i.e. is frequency following).","category":"page"},{"location":"manual/specifications.html#Problem-Specifications","page":"Problem Specifications","title":"Problem Specifications","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"In addition to the standard power flow solve_mc_pf, and optimal power flow solve_mc_opf, there are several notable problem specifications included in PowerModelsDistribution.","category":"page"},{"location":"manual/specifications.html#Optimal-Power-Flow-(OPF)-with-On-Load-Tap-Changers-(OLTC)","page":"Problem Specifications","title":"Optimal Power Flow (OPF) with On-Load Tap Changers (OLTC)","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"This problem is identical to mc_opf, except that all transformers are now modelled as on-load tap changers (OLTCs). Each phase has an individual tap ratio, which can be either variable or fixed, as specified in the data model.","category":"page"},{"location":"manual/specifications.html#OLTC-Objective","page":"Problem Specifications","title":"OLTC Objective","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"objective_mc_min_fuel_cost","category":"page"},{"location":"manual/specifications.html#OLTC-Variables","page":"Problem Specifications","title":"OLTC Variables","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"variable_mc_oltc_transformer_tap","category":"page"},{"location":"manual/specifications.html#OLTC-Constraints","page":"Problem Specifications","title":"OLTC Constraints","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"constraint_mc_transformer_power(pm, i, fix_taps=false)","category":"page"},{"location":"manual/specifications.html#Minimal-Load-Delta-(MLD)-Problem-Specification","page":"Problem Specifications","title":"Minimal Load Delta (MLD) Problem Specification","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"Load shed (continuous) problem. See \"Relaxations of AC Maximal Load Delivery for Severe Contingency Analysis\" by C. Coffrin et al. (DOI: 10.1109/TPWRS.2018.2876507) for single-phase case.","category":"page"},{"location":"manual/specifications.html#MLD-Variables","page":"Problem Specifications","title":"MLD Variables","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"beginalign\nmboxvariables nonumber \n z^v_i in 01 forall i in N mbox - bus voltage onoff variable \n z^g_i in 01 forall i in G mbox - generator onoff variable \n z^b_i in 01 forall i in Bmbox - storage onoff variable \n z^d_i in (01) forall i in L mbox - continuous load shedding variable \n z^s_i in (01) forall i in H mbox - continuous shunt shedding variable\nendalign","category":"page"},{"location":"manual/specifications.html#MLD-Objective","page":"Problem Specifications","title":"MLD Objective","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"beginalign\nmboxminimize left (\nsum_substackiin Ncin C10 left (1-z^v_i right ) + sum_substackiin Lcin C10 omega_icleft Releft (S^d_iright )right left ( 1-z^d_i right ) + sum_substackiin Hcin Cleft Releft (S^s_i right )right left (1-z^s_i right ) + sum_substackiin Gcin CDelta^g_i + sum_substackiin Bcin CDelta^b_i right )\nendalign","category":"page"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"where","category":"page"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"beginalign\nDelta^g_i = left Releft (S^g_i(0) right ) - Releft (S^g_i right ) right \nDelta^g_i = -left Releft (S^g_i(0) right ) - Releft (S^g_i right ) right \nDelta^b_i = left Releft (S^b_i(0) right ) - Releft (S^b_i right ) right \nDelta^b_i = -left Releft (S^b_i(0) right ) - Releft (S^b_i right ) right \nendalign","category":"page"},{"location":"manual/specifications.html#MLD-Constraints","page":"Problem Specifications","title":"MLD Constraints","text":"","category":"section"},{"location":"manual/specifications.html","page":"Problem Specifications","title":"Problem Specifications","text":"beginalign\nmboxsubject to nonumber \n z^v_i v^l_ic leq left V_ic right leq z_i^v v^u_ic forall i in Nforall c in C \n z^g_i S^gl_ic leq S^g_ic leq z^g_i S^gu_ic forall i in Gforall c in C \n sum_substackkin G_icin C S^g_kc - sum_substackkin L_icin C z^d_k S^d_kc- sum_substackkin H_icin C z^s_k Y^s_kcleft V_ic right ^2 nonumber \n = sum_substack(ij)in E_icup E_i^Rcin C S_ijc forall i in N\nendalign","category":"page"},{"location":"reference/logging.html#LoggingAPI","page":"Logging","title":"Logging","text":"","category":"section"},{"location":"reference/logging.html","page":"Logging","title":"Logging","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"logging.jl\"]","category":"page"},{"location":"reference/logging.html#PowerModelsDistribution.reset_logging_level!-Tuple{}","page":"Logging","title":"PowerModelsDistribution.reset_logging_level!","text":"reset_logging_level!()\n\nResets the log level to Info\n\n\n\n\n\n","category":"method"},{"location":"reference/logging.html#PowerModelsDistribution.restore_global_logger!-Tuple{}","page":"Logging","title":"PowerModelsDistribution.restore_global_logger!","text":"restore_global_logger!()\n\nRestores the global logger to its default state (before PMD was loaded)\n\n\n\n\n\n","category":"method"},{"location":"reference/logging.html#PowerModelsDistribution.set_logging_level!-Tuple{Symbol}","page":"Logging","title":"PowerModelsDistribution.set_logging_level!","text":"set_logging_level!(level::Symbol)\n\nSets the logging level for PMD: :Info, :Warn, :Error\n\n\n\n\n\n","category":"method"},{"location":"reference/logging.html#PowerModelsDistribution.silence!-Tuple{}","page":"Logging","title":"PowerModelsDistribution.silence!","text":"silence!()\n\nSets loglevel for PMD to :Error, silencing Info and Warn\n\n\n\n\n\n","category":"method"},{"location":"reference/base.html#Base","page":"Base","title":"Base","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"ref\nvar\nids\ncon\nsol\nnws\nnw_ids","category":"page"},{"location":"reference/base.html#PowerModelsDistribution.ref","page":"Base","title":"PowerModelsDistribution.ref","text":"helper function to access the AbstractUnbalancedPowerModel structs' ref, returns (id,data) pairs\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.var","page":"Base","title":"PowerModelsDistribution.var","text":"helper function to access the AbstractUnbalancedPowerModel structs' var, returns JuMP VariableRef\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.ids","page":"Base","title":"PowerModelsDistribution.ids","text":"helper function to access the ids of AbstractUnbalancedPowerModel structs' ref, returns ints\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.con","page":"Base","title":"PowerModelsDistribution.con","text":"helper function to access the AbstractUnbalancedPowerModel structs' con, returns JuMP Constraint\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.sol","page":"Base","title":"PowerModelsDistribution.sol","text":"helper function to access the AbstractUnbalancedPowerModel structs' sol, returns Dict\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.nws","page":"Base","title":"PowerModelsDistribution.nws","text":"helper function to access multinetwork data from AbstractUnbalancedPowerModel structs, returns (id,data) pairs\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.nw_ids","page":"Base","title":"PowerModelsDistribution.nw_ids","text":"helper function to access the ids of multinetworks from AbstractUnbalancedPowerModel structs, returns ints\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#Helper-functions","page":"Base","title":"Helper functions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"@smart_constraint\nset_lower_bound\nset_upper_bound\ncomp_start_value","category":"page"},{"location":"reference/base.html#PowerModelsDistribution.@smart_constraint","page":"Base","title":"PowerModelsDistribution.@smart_constraint","text":"@smart_constraint model::JuMP.Model vars::Vector expr::JuMP.Expression\n\nDetection of whether a constraint should be NL or not\"\n\n\n\n\n\n","category":"macro"},{"location":"reference/base.html#PowerModelsDistribution.set_lower_bound","page":"Base","title":"PowerModelsDistribution.set_lower_bound","text":"function set_lower_bound(\n\tx::JuMP.VariableRef,\n\tbound::Real\n)\n\nLocal wrapper method for JuMP.setlowerbound, which skips NaN and infinite (-Inf only)\n\n\n\n\n\nfunction set_lower_bound(\n\txs::Vector{JuMP.VariableRef},\n\tbound::Real\n)\n\nLocal wrapper method for JuMP.setlowerbound, which skips NaN and infinite (-Inf only). Note that with this signature, the bound is applied to every variable in the vector.\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.set_upper_bound","page":"Base","title":"PowerModelsDistribution.set_upper_bound","text":"function set_upper_bound(\n\tx::JuMP.VariableRef,\n\tbound\n)\n\nLocal wrapper method for JuMP.setupperbound, which skips NaN and infinite (+Inf only)\n\n\n\n\n\nfunction set_upper_bound(\n\txs::Vector{JuMP.VariableRef},\n\tbound::Real\n)\n\nLocal wrapper method for JuMP.setupperbound, which skips NaN and infinite (+Inf only). Note that with this signature, the bound is applied to every variable in the vector.\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsDistribution.comp_start_value","page":"Base","title":"PowerModelsDistribution.comp_start_value","text":"comp_start_value(\n comp::Dict,\n keys::Vector{String},\n conductor::Int,\n default::Any\n)\n\nSearches for start value for a variable key in order from a list of keys of a component comp for conductor conductor, and if one does not exist, uses default\n\n\n\n\n\nfunction comp_start_value(\n\tcomp::Dict{String,<:Any},\n\tkey::String,\n\tconductor::Int,\n\tdefault::Any\n)\n\nSearches for start value for a variable key of a component comp for conductor conductor, and if one does not exist, uses default\n\n\n\n\n\nfunction comp_start_value(\n\tcomp::Dict{String,<:Any},\n\tkeys::String,\n\tdefault::Any=0.0\n)\n\nSearches for start value for a variable key in order from a list of keys of a component comp, and if one does not exist, uses default. This is the conductor-agnostic version of comp_start_value.\n\n\n\n\n\nfunction comp_start_value(\n comp::Dict,\n key::String,\n default::Any=0.0\n)\n\nSearches for start value for a variable key of a component comp, and if one does not exist, uses default. This is the conductor-agnostic version of comp_start_value.\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#Ref-Creation-Functions","page":"Base","title":"Ref Creation Functions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"ref_\")","category":"page"},{"location":"reference/base.html#PowerModelsDistribution.ref_add_connected_components!-Tuple{Dict{Symbol}, Dict{String}}","page":"Base","title":"PowerModelsDistribution.ref_add_connected_components!","text":"ref_add_connected_components!(ref::Dict{Symbol,<:Any}, data::Dict{String,<:Any})\n\nRef-extension for opb problem type to add connected components ref\n\n\n\n\n\n","category":"method"},{"location":"reference/base.html#PowerModelsDistribution.ref_add_core!-Tuple{Dict{Symbol, Any}}","page":"Base","title":"PowerModelsDistribution.ref_add_core!","text":"ref_add_core!(ref::Dict{Symbol,Any})\n\nReturns a dict that stores commonly used pre-computed data from of the data dictionary, primarily for converting data-types, filtering out deactivated components, and storing system-wide values that need to be computed globally. Some of the common keys include:\n\n:off_angmin and :off_angmax (see calc_theta_delta_bounds(data)),\n:bus – the set {(i, bus) in ref[:bus] : bus[\"bus_type\"] != 4},\n:gen – the set {(i, gen) in ref[:gen] : gen[\"gen_status\"] == 1 && gen[\"gen_bus\"] in keys(ref[:bus])},\n:branch – the set of branches that are active in the network (based on the component status values),\n:arcs_branch_from – the set [(i,b[\"f_bus\"],b[\"t_bus\"]) for (i,b) in ref[:branch]],\n:arcs_branch_to – the set [(i,b[\"t_bus\"],b[\"f_bus\"]) for (i,b) in ref[:branch]],\n:arcs_branch – the set of arcs from both arcs_from and arcs_to,\n:arcs_switch_from – the set [(i,b[\"f_bus\"],b[\"t_bus\"]) for (i,b) in ref[:switch]],\n:arcs_switch_to – the set [(i,b[\"t_bus\"],b[\"f_bus\"]) for (i,b) in ref[:switch]],\n:arcs_switch – the set of arcs from both arcs_switch_from and arcs_switch_to,\n:arcs_transformer_from – the set [(i,b[\"f_bus\"],b[\"t_bus\"]) for (i,b) in ref[:transformer]],\n:arcs_transformer_to – the set [(i,b[\"t_bus\"],b[\"f_bus\"]) for (i,b) in ref[:transformer]],\n:arcs_transformer – the set of arcs from both arcs_transformer_from and arcs_transformer_to,\n:bus_arcs_branch – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_branch]]),\n:bus_arcs_transformer – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_transformer]]),\n:bus_arcs_switch – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_switch]]),\n:buspairs – (see buspair_parameters(ref[:arcs_branch_from], ref[:branch], ref[:bus])),\n:bus_gens – the mapping Dict(i => [gen[\"gen_bus\"] for (i,gen) in ref[:gen]]).\n:bus_loads – the mapping Dict(i => [load[\"load_bus\"] for (i,load) in ref[:load]]).\n:bus_shunts – the mapping Dict(i => [shunt[\"shunt_bus\"] for (i,shunt) in ref[:shunt]]).\n\n\n\n\n\n","category":"method"},{"location":"reference/base.html#PowerModelsDistribution.ref_calc_storage_injection_bounds-Tuple{Any, Any}","page":"Base","title":"PowerModelsDistribution.ref_calc_storage_injection_bounds","text":"ref_calc_storage_injection_bounds(storage, buses)\n\nComputes storage bounds\n\n\n\n\n\n","category":"method"},{"location":"reference/base.html#InfrastructureModels-Extensions","page":"Base","title":"InfrastructureModels Extensions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"PowerModelsDistribution._IM.solution_preprocessor\nPowerModelsDistribution._IM.build_solution_values","category":"page"},{"location":"reference/base.html#InfrastructureModels.solution_preprocessor","page":"Base","title":"InfrastructureModels.solution_preprocessor","text":"Definition of the default solution preprocessor for PowerModelsDistribution\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#InfrastructureModels.build_solution_values","page":"Base","title":"InfrastructureModels.build_solution_values","text":"custom build_solution_values for multiconductor (vector) variables\n\n\n\n\n\ncustom build_solution_values for multiconductor (vector) nonlinear expressions\n\n\n\n\n\ncustom build_solution_values for multiconductor (vector) generic affine expressions\n\n\n\n\n\ncustom build_solution_values for multiconductor (vector) constants\n\n\n\n\n\ncustom build_solution_values for generic dense axis arrays\n\n\n\n\n\ncustom build_solution_values for multiconductor (vector) constants\n\n\n\n\n\n","category":"function"},{"location":"reference/variables.html#VariableAPI","page":"Variables","title":"Variables","text":"","category":"section"},{"location":"reference/variables.html","page":"Variables","title":"Variables","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"variable\")","category":"page"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current-Tuple{AbstractExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current","text":"function variable_mc_branch_current(\n\tpm::AbstractExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates total current variables :cr and :ci, series current variables :csr and :csi, and placeholder dictionaries for the terminal current flows :cr_bus and :ci_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current-Tuple{AbstractLPUBFModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current-Tuple{ReducedExplicitNeutralIVRModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current","text":"function variable_mc_branch_current(\n\tpm::ReducedExplicitNeutralIVRModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor branch-reduced IVR models with explicit neutrals, creates series current variables :csr and :csi, placeholder dictionaries for the total current :cr and :ci, and placeholder dictionaries for the terminal current flows :cr_bus and :ci_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_imaginary","text":"variable: ci[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_imaginary-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_imaginary","text":"function variable_mc_branch_current_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch imaginary current variables :ci for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_real","text":"variable: cr[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_real-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_real","text":"function variable_mc_branch_current_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch real current variables :cr for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_series_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_series_imaginary","text":"variable: csi[l] for l in branch\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_series_imaginary-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_series_imaginary","text":"function variable_mc_branch_current_series_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch imaginary series current variables :csi for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_series_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_series_real","text":"variable: csr[l] for l in branch\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_current_series_real-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_current_series_real","text":"function variable_mc_branch_current_series_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch real series current variables :csr for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_flow_ne_reactive-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_flow_ne_reactive","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power-Tuple{AbstractExplicitNeutralACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power","text":"function variable_mc_branch_power(\n\tpm::AbstractExplicitNeutralACRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor ACR models with explicit neutrals, creates branch power variables :p and :q and placeholder dictionaries for the terminal power flows :p_bus and :q_bus.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power","text":"branch flow variables, delegated back to PowerModels\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power-Tuple{FBSUBFPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power","text":"variable_mc_branch_power(pm::FBSUBFPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nBranch flow variables similar to LPUBFDiagModel\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power-Tuple{LPUBFDiagModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_imaginary","text":"variable: q[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_imaginary-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_imaginary","text":"function variable_mc_branch_power_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch reactive power variables :q for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_real-Tuple{AbstractUnbalancedAPLossLessModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_real","text":"variable: p[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_branch_power_real-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_branch_power_real","text":"function variable_mc_branch_power_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates branch active power variables :p for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUnbalancedACPModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUnbalancedACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUnbalancedDCPModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{AbstractUnbalancedNFAModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"nothing to do, these models do not have complex voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{FBSUBFPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"variable_mc_bus_voltage(pm::FBSUBFPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nVoltage variables are defined in rectangular coordinates similar to ACRUPowerModel. An initial operating point is specified for linearization.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{FOTPUPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"variable_mc_bus_voltage(pm::FOTPUPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nVoltage variables are defined in polar coordinates similar to ACPUPowerModel. An initial operating point is specified for linearization.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{FOTRUPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"variable_mc_bus_voltage(pm::FOTRUPowerModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nVoltage variables are defined in rectangular coordinates similar to ACRUPowerModel. An initial operating point is specified for linearization similar to FBSUBFPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{LPUBFDiagModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage","text":"function variable_mc_bus_voltage(\n\tpm::RectangularVoltageExplicitNeutralModels;\n\tnw=nw_id_default,\n\tbounded::Bool=true,\n)\n\nCreates rectangular voltage variables :vr and :vi for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_angle-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_angle","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_imaginary-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_imaginary","text":"function variable_mc_bus_voltage_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates imaginary voltage variables :vr for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_imaginary_on_off-Tuple{AbstractUnbalancedACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_imaginary_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_indicator","text":"Create variables for bus status\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_magnitude_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_magnitude_on_off","text":"on/off voltage magnitude variable\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_magnitude_only-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_magnitude_only","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqr-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqr","text":"variable: w[i] >= 0 for i in `buses\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqr_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_magnitude_sqr_on_off","text":"voltage variable magnitude squared (relaxed form)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedACPModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedDCPModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_on_off-Tuple{LPUBFDiagModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_on_off","text":"Create voltage variables for branch flow model\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_prod_hermitian-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_prod_hermitian","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_real-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_real","text":"function variable_mc_bus_voltage_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates real voltage variables :vr for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_bus_voltage_real_on_off-Tuple{AbstractUnbalancedACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_bus_voltage_real_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_capacitor_reactive_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_capacitor_reactive_power","text":"variable_mc_capacitor_reactive_power(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default)\n\nCapacitor (with capcontrol) relaxed power variables for AbstractLPUBFModel (using McCormick envelopes)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_capacitor_switch_state-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_capacitor_switch_state","text":"variable_mc_capacitor_switch_state(pm::AbstractUnbalancedPowerModel, relax::Bool; nw::Int=nw_id_default, report::Bool=true)\n\nCapacitor (with capcontrol) switch state (open/close) variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_capcontrol-Tuple{AbstractLPUBFModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_capcontrol","text":"variable_mc_capcontrol(pm::AbstractLPUBFModel; nw::Int=nw_id_default, relax::Bool=false, report::Bool=true)\n\nCapacitor switching and relaxed power variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_capcontrol-Tuple{AbstractUnbalancedNFAModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_capcontrol","text":"nothing to do, these models do not have complex voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_capcontrol-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_capcontrol","text":"variable_mc_capcontrol(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default, relax::Bool=false, report::Bool=true)\n\nCapacitor switching variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_gen_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_gen_indicator","text":"Create variables for generator status\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current","text":"For the matrix KCL formulation, the generator needs an explicit current variable.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current-Tuple{SOCUBFModels, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current","text":"variable_mc_generator_current(pm::SOCUBFModels, gen_ids::Vector{Int}; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nFor the SOC branch-flow formulation, the delta-generator needs an explicit current variable.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current_imaginary","text":"variable: cig[j] for j in gen\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current_imaginary-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current_imaginary","text":"function variable_mc_generator_current_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates generator imaginary current variables :cig for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current_real","text":"variable: crg[j] for j in gen\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_current_real-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_current_real","text":"function variable_mc_generator_current_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates generator real current variables :crg for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{AbstractExplicitNeutralACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"function variable_mc_generator_power(\n\tpm::AbstractExplicitNeutralACRModel;\n\tnw::Int=nw_id_default,\n)\n\nFor ACR models with explicit neutrals, creates generator power variables :pg and :qg, and placeholder dictionaries for terminal power flows :pg_bus and :qg_bus,\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{AbstractNLExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"function variable_mc_generator_power(\n\tpm::AbstractNLExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true\n)\n\nFor IVR models with explicit neutrals, no power variables are required\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"function variable_mc_generator_power(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, creates generator power variables :pg and :qg\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"variable_mc_generator_power(pm::AbstractUBFModels; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nThe variable creation for generators in branch flow model. Delta generators always need an auxilary power variable (X) similar to delta loads. Wye generators however, don't need any variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"create variables for generators, delegate to PowerModels\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{SDPUBFKCLMXModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"For the matrix KCL formulation, the generator needs an explicit current and power variable.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power-Tuple{SOCUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power","text":"variable_mc_generator_power(pm::SOCUBFModels; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nThe variable creation for generators in SOC branch flow model. Delta generators always need an auxilary power variable (X) and current squared variable (CC) similar to delta loads. Wye generators however, don't need any variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_delta_aux-Tuple{AbstractUBFModels, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_delta_aux","text":"variable_mc_generator_power_delta_aux(pm::AbstractUBFModels, gen_ids::Vector{Int}; nw::Int=nw_id_default, eps::Real=0.1, bounded::Bool=true, report::Bool=true)\n\nCreates power matrix variable X for delta-connected generators similar to delta loads.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_imaginary-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_imaginary","text":"function variable_mc_generator_power_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates generator reactive power variables :qg for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_imaginary_on_off-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_imaginary_on_off","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_imaginary_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_imaginary_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_mx-Tuple{SDPUBFKCLMXModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_mx","text":"For the matrix KCL formulation, the generator needs an explicit power variable.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_real-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_real","text":"function variable_mc_generator_power_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates generator active power variables :pg for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_generator_power_real_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_generator_power_real_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current-Tuple{AbstractExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current","text":"function variable_mc_load_current(\n\tpm::AbstractExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates placeholder dictionaries for the load current :crd and :cid, and for the terminal current flows :crd_bus and :cid_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current","text":"function variable_mc_load_current(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, creates load current variables :crd and :cid, and placeholder dictionaries for the terminal current flows :crd_bus and :cid_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current-Tuple{AbstractUBFModels, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current","text":"All loads need a current variable; for wye loads, this variable will be in the wye reference frame whilst for delta currents it will be in the delta reference frame.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current-Tuple{FBSUBFPowerModel, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current","text":"variable_mc_load_current(pm::FBSUBFPowerModel, load_ids::Vector{Int}; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nNo loads require a current variable. Delta loads are zero-order approximations and wye loads are first-order approximations around the initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current_imaginary-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current_imaginary","text":"function variable_mc_load_current_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates load imaginary current variables :cid for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_current_real-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_current_real","text":"function variable_mc_load_current_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates load real current variables :crd for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_indicator","text":"Create variables for demand status\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractExplicitNeutralACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"function variable_mc_load_power(\n\tpm::AbstractExplicitNeutralACRModel;\n\tnw=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor ACR models with explicit neutrals, creates placeholder dictionaries for load power expressions :pd and :qd\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractNLExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"function variable_mc_load_power(\n\tpm::AbstractNLExplicitNeutralIVRModel;\n\tnw=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor non-linear IVR models with explicit neutrals, creates placeholder dictionaries for the load power :pd and :qd, and for the terminal power flows :pd_bus and :qd_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"function variable_mc_load_power(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, creates load power variables :pd and :qd\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractUBFModels, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"These variables reflect the power consumed by the load, NOT the power injected into the bus nodes; these variables only coincide for wye-connected loads with a grounded neutral.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"The variable creation for the loads is rather complicated because Expressions are used wherever possible instead of explicit variables. Delta loads always need a current variable and auxilary power variable (X), and all other load model variables are then linear transformations of these (linear Expressions). Wye loads however, don't need any variables when the load is modelled as constant power or constant impedance. In all other cases (e.g. when a cone is used to constrain the power), variables need to be created.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"Create a dictionary with values of type Any for the load. Depending on the load model, this can be a parameter or a NLexpression. These will be inserted into KCL.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"Create a dictionary with values of type Any for the load. Depending on the load model, this can be a parameter or a NLexpression. These will be inserted into KCL.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power-Tuple{SDPUBFKCLMXModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power","text":"The variable creation for the loads is rather complicated because Expressions are used wherever possible instead of explicit variables. All loads need a current variable; for wye loads, this variable will be in the wye reference frame whilst for delta currents it will be in the delta reference frame. All loads need variables for the off-diagonals of the nodal power variables. In some cases, the diagonals elements can be created as Expressions. Delta loads only need a current variable and auxilary power variable (X), and all other load model variables are then linear transformations of these (linear Expressions).\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power_active-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power_active","text":"function variable_mc_load_power_active(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates load active power variables :pd for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power_bus-Tuple{SDPUBFKCLMXModel, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power_bus","text":"The bus qualifier denotes that this is the power withdrawn at the bus; Only for grounded wye-connected loads, this is the same as the power consumed by the multi-phase load. The off-diagonals only need to be created for the matrix KCL formulation.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power_delta_aux-Tuple{AbstractUBFModels, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power_delta_aux","text":"Creates power matrix variable X for delta windings; this defines both the wye-side power Sy and the delta-side power Sd through the lin. transformations Sy = X.Td, Sd = Td.X with Td=[1 -1 0; 0 1 -1; -1 0 1]\n\nSee the paper by Zhao et al. for the first convex relaxation of delta transformations. @INPROCEEDINGS{zhaooptimal2017, \tauthor={C. Zhao, E. Dall'Anese and S. Low}, \tbooktitle={IREP 2017 Bulk Power Systems Dynamics and Control Symposium}, \ttitle={{Optimal Power Flow in Multiphase Radial Networks with Delta Connections}}, \tyear={2017}, \tmonth={}, url={https://www.nrel.gov/docs/fy18osti/67852.pdf} }\n\nSee upcoming paper for discussion of bounds. [reference added when accepted]\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power_delta_aux-Tuple{FBSUBFPowerModel, Vector{Int64}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power_delta_aux","text":"variable_mc_load_power_delta_aux(pm::FBSUBFPowerModel, load_ids::Vector{Int}; nw::Int=nw_id_default, eps::Real=0.1, bounded::Bool=true, report::Bool=true)\n\nAuxiliary variables are not required since delta loads are zero-order approximations calculated using the initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_load_power_reactive-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_load_power_reactive","text":"function variable_mc_load_power_reactive(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates load reactive power variables :qd for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_oltc_transformer_tap-Tuple{AbstractUnbalancedNFAModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_oltc_transformer_tap","text":"no voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_oltc_transformer_tap-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_oltc_transformer_tap","text":"Create tap variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_shunt_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_shunt_indicator","text":"Create variables for shunt status\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_slack_bus_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_slack_bus_power","text":"generates variables for both active and reactive slack at each bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_slack_bus_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_slack_bus_power_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_slack_bus_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_slack_bus_power_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_current-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_current","text":"do nothing by default but some formulations require this\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_current-Tuple{AbstractUnbalancedWConvexModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_current","text":"do nothing by default but some formulations require this\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_indicator","text":"Create variables for storage status\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power","text":"variables for modeling storage units, includes grid injection and internal variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_control_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_control_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_control_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_control_imaginary","text":"a reactive power slack variable that enables the storage device to inject or consume reactive power at its connecting bus, subject to the injection limits of the device.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_control_imaginary_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_control_imaginary_on_off","text":"a reactive power slack variable that enables the storage device to inject or consume reactive power at its connecting bus, subject to the injection limits of the device.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_imaginary_on_off-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_imaginary_on_off","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_imaginary_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_imaginary_on_off","text":"Create variables for reactive storage injection\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_mi-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_mi","text":"variable_mc_storage_power_mi(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default, relax::Bool=false, bounded::Bool=true, report::Bool=true)\n\nVariables for storage power (mixed-integer if relax==false)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_mi_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_mi_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_on_off","text":"Create variables for active and reactive storage injection\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_storage_power_real_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_storage_power_real_on_off","text":"Create variables for active storage injection\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current-Tuple{AbstractExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current","text":"function variable_mc_switch_current(\n\tpm::AbstractExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor IVR models with explicit neutrals, creates switch current variables :crs and :cis, and placeholder dictionaries for the terminal current flows :crsw_bus and :cisw_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current_imaginary-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current_imaginary","text":"function variable_mc_switch_current_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor models with explicit neutrals, creates switch imaginary current variables :cisw for models with explicit neutrals.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_current_real-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_current_real","text":"function variable_mc_switch_current_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor models with explicit neutrals, creates switch real current variables :crsw for models with explicit neutrals.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power-Tuple{AbstractExplicitNeutralACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power","text":"function variable_mc_switch_power(\n\tpm::AbstractExplicitNeutralACRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor ACR models with explicit neutrals, creates switch power variables :p and :q and placeholder dictionaries for the terminal power flows :ps_bus and :qs_bus.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power","text":"matrix power variables for switches\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power-Tuple{LPUBFDiagModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power","text":"variable_mc_switch_power(pm::LPUBFDiagModel; nw::Int=nw_id_default, bounded::Bool=true, report::Bool=true)\n\nSwitch power variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power_imaginary","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power_imaginary-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power_imaginary","text":"function variable_mc_switch_power_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor models with explicit neutrals, creates switch reactive power variables :qsw for models with explicit neutrals. This is defined per arc, i.e. with a variable for the from-side and to-side power.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power_real","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_power_real-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_power_real","text":"function variable_mc_switch_power_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nFor models with explicit neutrals, creates switch active power variables :psw for models with explicit neutrals. This is defined per arc, i.e. with a variable for the from-side and to-side power.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_switch_state-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_switch_state","text":"switch state (open/close) variables\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current-Tuple{AbstractExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current","text":"function variable_mc_transformer_current(\n\tpm::AbstractExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor IVR models with explicit neutrals, create transformer current variables :crt and :cit, and placeholder dictionaries for the terminal current flows :crt_bus and :cit_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current-Tuple{AbstractUnbalancedIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current_imaginary","text":"variable: ci[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current_imaginary-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current_imaginary","text":"function variable_mc_transformer_current_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates transformer imaginary current variables :cit for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current_real","text":"variable: cr[l,i,j] for (l,i,j) in arcs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_current_real-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_current_real","text":"function variable_mc_transformer_current_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates transformer real current variables :crt for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{AbstractExplicitNeutralACRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"function variable_mc_transformer_power(\n\tpm::AbstractExplicitNeutralACRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor ACR models with explicit neutrals, creates transfomer power variables :pt and :qt, and placeholder dictionaries for transformer terminal power flows :pt_bus and :qt_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{AbstractNLExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"function variable_mc_transformer_power(\n\tpm::AbstractNLExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor non-linear IVR models with explicit neutrals, no power variables are required.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{AbstractQuadraticExplicitNeutralIVRModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"function variable_mc_transformer_power(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor quadratic IVR models with explicit neutrals, creates transformer power variables :pt and :qt\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{AbstractUBFModels}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"defines matrix transformer power variables for the unbalanced branch flow models\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"Creates variables for both active and reactive power flow at each transformer.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{FBSUBFPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"Creates variables for both active and reactive power flow at each transformer.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power-Tuple{LPUBFDiagModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power","text":"Creates variables for both active and reactive power flow at each transformer.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power_imaginary-Tuple{AbstractUnbalancedActivePowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power_imaginary","text":"apo models ignore reactive power flows\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power_imaginary-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power_imaginary","text":"Create variables for the reactive power flowing into all transformer windings.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power_imaginary-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power_imaginary","text":"function variable_mc_transformer_power_imaginary(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates transformer reactive power variables :qt for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power_real-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power_real","text":"Create variables for the active power flowing into all transformer windings.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mc_transformer_power_real-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}}","page":"Variables","title":"PowerModelsDistribution.variable_mc_transformer_power_real","text":"function variable_mc_transformer_power_real(\n\tpm::ExplicitNeutralModels;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true\n)\n\nCreates transformer active power variables :pt for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_complex-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_complex","text":"variable_mx_complex(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}},\n M::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n symm_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n name::Union{String, Tuple{String,String}}=\"\",\n prefix::String=\"\"\n)::Tuple where T\n\nShorthand to create two real matrix variables, where the first is the real part and the second the imaginary part.\n\nIf the name argument is a String, it will be suffixed with 're' and 'im'. It is possible to specify the names of the real and imaginary part directly as a Tuple as well (to achieve P and Q instead of Sre and Sim for example).\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_complex_with_diag-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_complex_with_diag","text":"variable_mx_complex_with_diag(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n symm_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n diag_re::Dict{T,<:Vector{<:Any}}=Dict([(i, zeros(length(N[i]))) for i in indices]),\n diag_im::Dict{T,<:Vector{<:Any}}=Dict([(i, zeros(length(N[i]))) for i in indices]),\n name::Union{String, Tuple{String,String}}=\"\",\n prefix::String=\"\"\n)::Tuple where T\n\nSame as variable_mx_complex, but square and the diagonal of the matrix variables consists of the constants passed as the diagre and diagim argument. The diag argument is a dictionary of (index, 1d-array) pairs.\n\nUseful for power matrices with specified diagonals (constant power wye loads).\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_hermitian-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_hermitian","text":"variable_mx_hermitian(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n symm_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n sqrt_upper_bound::Union{Missing, Dict{T,<:Vector{<:Real}}}=missing,\n sqrt_lower_bound::Union{Missing, Dict{T,<:Vector{<:Real}}}=missing,\n set_lower_bound_diag_to_zero::Bool=false,\n imag_set_diag_to_zero::Bool=true,\n name::Union{String,Tuple{String,String}}=\"\",\n prefix::String=\"\"\n)::Tuple where T\n\nReturns a pair of symmetric and skew-symmetric matrix variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_real-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_real","text":"variable_mx_real(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}},\n M::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n name::String=\"\",\n prefix::String=\"\"\n) where T\n\nThis function creates a set of real matrix variables of size NxM, indexed over the elements of the indices argument. The upper and lower bounds have to be specified, and are dictionaries with the indices as keys and the matrix bounds as values. The name and prefix arguments will be combined into the base_name argument for JuMP; the prefix will typically be the network number nw. Instead of sequentially creating the matrix variables, the elements of the matrices are created sequentially for all matrices at once. I.e., we loop over the elements, and not over the indices. This is needed so that the variable names printed by JuMP are in line with the current design.\n\nReturns a dictionary of (index, matrix variable) pairs\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_real_skewsymmetric-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_real_skewsymmetric","text":"variable_mx_real_skewsymmetric(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n set_diag_to_zero::Bool=true,\n name::String=\"\",\n prefix::String=\"\"\n)::Dict where T\n\nSame as variable_mx_real, but adds skew-symmetry structure.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_real_symmetric-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_real_symmetric","text":"variable_mx_real_symmetric(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n name::String=\"\",\n prefix::String=\"\"\n)::Dict where T\n\nSame as variable_mx_real, but adds symmetry structure\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_mx_real_with_diag-Union{Tuple{T}, Tuple{JuMP.Model, Vector{T}, Dict{T, Vector{Int64}}}} where T","page":"Variables","title":"PowerModelsDistribution.variable_mx_real_with_diag","text":"variable_mx_real_with_diag(\n model::JuMP.Model,\n indices::Array{T,1},\n N::Dict{T,Vector{Int}};\n upper_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n lower_bound::Union{Missing, Dict{T,<:Matrix{<:Real}}}=missing,\n diag::Dict{T,<:Vector{<:Any}}=Dict([(i, fill(0, length(N[i]))) for i in indices]),\n name::String=\"\",\n prefix::String=\"\"\n) where T\n\nSame as variable_mx_real, but has to be square and the diagonal of the matrix variables consists of the elements passed as the diag argument. The diag argument is a dictionary of (index, 1d-array) pairs. Useful for power matrices with specified diagonals (constant power wye loads). If not specified, the diagonal elements are set to zero.\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_storage_charge-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_storage_charge","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_storage_complementary_indicator-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_storage_complementary_indicator","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_storage_discharge-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_storage_discharge","text":"\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsDistribution.variable_storage_energy-Tuple{AbstractUnbalancedPowerModel}","page":"Variables","title":"PowerModelsDistribution.variable_storage_energy","text":"\n\n\n\n","category":"method"},{"location":"tutorials/The Engineering Model.html#tutorial-eng-model","page":"The Engineering Data Model","title":"Introduction to the Engineering Model","text":"","category":"section"},{"location":"tutorials/The Engineering Model.html","page":"The Engineering Data Model","title":"The Engineering Data Model","text":"Stub for The Engineering Model.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","category":"page"},{"location":"manual/connections.html#Connecting-Components","page":"Connecting Components","title":"Connecting Components","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"One of the main goals of a network model, is specifying how constituent components are connected together. The patterns explained here, are equally applicable to the engineering and mathematical data model.","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"The available connections of each component connect to bus terminals. Take for example a bus with four terminals, terminals=[\"a\",\"b\",\"c\",\"n\"].","category":"page"},{"location":"manual/connections.html#Node-objects","page":"Connecting Components","title":"Node objects","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"Node objects always connect to a single bus (and perhaps also the universal ground, as can be the case for shunts). Therefore, they always have at least two key fields controlling the connectivity: bus and connections. Most node objects also have a configuration field, which affects the interpretation of the values supplied in connections. We will illustrate this for loads below.","category":"page"},{"location":"manual/connections.html#Loads","page":"Connecting Components","title":"Loads","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"A multi-phase load consists of several individual loads, the number of which is implied by the length of properties such as pd_nom, qd_nom etc. The table below illustrates how the length of the field connections and the value of the field configuration determines the layout of the load.","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"connections configuration==WYE configuration==DELTA\n2 (Image: 2 connections, wye) (Image: 2 connections, delta)\n3 (Image: 3 connections, wye) (Image: 3 connections, delta)\n4 (Image: 4 connections, wye) undefined","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"For example, we wish to connect a wye-connected load consisting of 2 individual loads (|connections|=3 and configuration=WYE) to our example bus with four available terminals. If we specify connections=[\"a\",\"c\",\"n\"], this leads to","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"(Image: loads connection example).","category":"page"},{"location":"manual/connections.html#Edge-objects","page":"Connecting Components","title":"Edge objects","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"Edge objects connect two buses (except for generic transformers, which can connect N buses). Therefore, they have the fields","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"f_bus and f_connections, specifying the from-side bus and how the object connects to it;\nt_bus and t_connections, specifying the same for the to-side.","category":"page"},{"location":"manual/connections.html#Lines","page":"Connecting Components","title":"Lines","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"A line can have a variable number of conductors, which is implied by the size of the fields rs, xs, g_fr, b_fr, g_to and b_to. The fields f_connections and t_connections should specify for each conductor, to which terminals it connects. The figure below illustrates this for a line with 2 conductors,","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"(Image: line connection example).","category":"page"},{"location":"manual/connections.html#Transformers","page":"Connecting Components","title":"Transformers","text":"","category":"section"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"Transformers also have a configuration field. For","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"generic transformers, this is specified per winding, and configuration is therefore a vector of ConnConfig enums (WYE or DELTA);\nAL2W transformers however are always two-winding, and the secondary is always wye-connected. Therefore, configuration is a scalar, specifying the configuration of the from-side winding.","category":"page"},{"location":"manual/connections.html","page":"Connecting Components","title":"Connecting Components","text":"Generic transformers have a field buses, a Vector containing the buses to which each winding connects respectively (these do not have to be unique; a split-phase transformer is typically represented by having two windings connect to the same bus). The AL2W transformer however, since it is always two-winding, follows the f_connections/t_connections pattern.","category":"page"},{"location":"reference/constants.html#ConstantsAPI","page":"Constants","title":"Constants","text":"","category":"section"},{"location":"reference/constants.html","page":"Constants","title":"Constants","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:constant]\nFilter = t -> isa(t, Dict) || isa(t, Vector) || isa(t, String)","category":"page"},{"location":"reference/constants.html#PowerModelsDistribution.dimensionalize_math","page":"Constants","title":"PowerModelsDistribution.dimensionalize_math","text":"lists of scaling factors and what they apply to\n\n\n\n\n\n","category":"constant"},{"location":"reference/constants.html#PowerModelsDistribution.pmd_eng_asset_types","page":"Constants","title":"PowerModelsDistribution.pmd_eng_asset_types","text":"list of all eng asset types\n\n\n\n\n\n","category":"constant"},{"location":"reference/constants.html#PowerModelsDistribution.pmd_math_asset_types","page":"Constants","title":"PowerModelsDistribution.pmd_math_asset_types","text":"list of all math asset types\n\n\n\n\n\n","category":"constant"},{"location":"reference/constants.html#PowerModelsDistribution.pmd_math_component_status","page":"Constants","title":"PowerModelsDistribution.pmd_math_component_status","text":"maps component types to status parameters\n\n\n\n\n\n","category":"constant"},{"location":"reference/constants.html#PowerModelsDistribution.pmd_math_component_status_inactive","page":"Constants","title":"PowerModelsDistribution.pmd_math_component_status_inactive","text":"maps component types to inactive status values\n\n\n\n\n\n","category":"constant"},{"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\nparse_dss\nparse_opendss\nparse_json\nprint_file","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.parse_file","page":"Data Models","title":"PowerModelsDistribution.parse_file","text":"parse_file(\n io::IO,\n filetype::Union{AbstractString,Missing}=missing;\n data_model::DataModel=ENGINEERING,\n import_all::Bool=false,\n bank_transformers::Bool=true,\n transformations::Vector{<:Any}=[],\n dss2eng_extensions::Vector{<:Function}=Function[],\n eng2math_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_pu_extensions::Vector{<:Function}=Function[],\n make_pu::Bool=true,\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n kron_reduce::Bool=true,\n phase_project::Bool=false,\n time_series::String=\"daily\"\n)::Dict{String,Any}\n\nParses the IOStream of a file into a PowerModelsDistribution data structure\n\nIf filetype is missing, parse_file will attempt to detect the filetype, but this may fail, and it is advised to pass the filetype if it is known.\n\nIf data_model is MATHEMATICAL, the data model type will be automatically transformed via transform_data_model.\n\nFor explanation of import_all, bank_transformers, and time_series, see parse_opendss\n\nFor explanation of dss2eng_extensions, see parse_opendss\n\nFor explanation of kron_reduce, see apply_kron_reduction!\n\nFor explanation of phase_project, see apply_phase_projection!\n\nFor explanation of multinetwork and global_keys, see make_multinetwork and transform_data_model\n\nFor explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model\n\nFor explanation of make_pu and make_pu_extensions, see make_per_unit!.\n\n\n\n\n\nparse_file(file::String; kwargs...)::Dict{String,Any}\n\nLoads file into IOStream and passes it onto parse_file\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.parse_dss","page":"Data Models","title":"PowerModelsDistribution.parse_dss","text":"\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.parse_opendss","page":"Data Models","title":"PowerModelsDistribution.parse_opendss","text":"parse_opendss(\n io::IO;\n import_all::Bool=false,\n bank_transformers::Bool=true,\n time_series::String=\"daily\",\n dss2eng_extensions::Vector{<:Function}=Function[],\n)::Dict{String,Any}\n\nParses an IO, into raw dss dictionary via parse_dss, into the ENGINEERING DataModel\n\nSee parse_opendss\n\n\n\n\n\nparse_opendss(\n data_dss::OpenDssDataModel;\n import_all::Bool=false,\n bank_transformers::Bool=true,\n time_series::String=\"daily\",\n dss2eng_extensions::Vector{<:Function}=Function[]\n)::Dict{String,Any}\n\nParses a raw dss data structure (dictionary), resulting from the parsing of a DSS file, into the ENGINEERING DataModel\n\nIf import_all is true, all raw dss properties will be included in the final dictionary under \"dss\".\n\nIf bank_transformers is true (default), transformers that are indicated to be part of a bank in dss will be combined into a single multiphase transformer.\n\ntime_series defines which property the time series will be taken from, \"daily\" or \"yearly\". More complex parsing of time series data should be performed with dss2eng_extensions.\n\ndss2eng_extensions\n\nIf a user wishes to parse additional components that are not yet natively supported by PowerModelsDistribution, dss2eng_extensions can be utilized. Custom user functions provided under dss2eng_extensions will be excuted after all built-in dss2eng transformations have been performed and transformers have been banked together (if bank_transformers==true). dss2eng_extension functions should have the following function signature:\n\ndss2eng_func!(data_eng, data_dss)\n\nwhere data_eng is a non-multinetwork ENGINEERING data model (i.e., time series data has not yet been expanded into a multinetwork structure), and data_dss is the raw dss data parsed by parse_dss.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.parse_json","page":"Data Models","title":"PowerModelsDistribution.parse_json","text":"parse_json(file::String)\n\nparses json files that were dumped via JSON.print (or PMD.print_file)\n\n\n\n\n\nparse_json(io::IO)\n\nparses json files that were dumped via JSON.print (or PMD.print_file)\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.print_file","page":"Data Models","title":"PowerModelsDistribution.print_file","text":"print_file(path::String, data::Dict{String,<:Any}; indent::Int=2)\n\nprints a PowerModelsDistribution data structure into a JSON file\n\n\n\n\n\nprint_file(io::IO, data::Dict{String,<:Any}; indent::Int=2)\n\nprints a PowerModelsDistribution data structure into a JSON file\n\n\n\n\n\nprint_file variant for InfrastructureModel that converts to Dict first\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 = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"components.jl\"]","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.Model","page":"Data Models","title":"PowerModelsDistribution.Model","text":"Model(model_type::DataModel)\n\nInstantiates a PowerModelsDistribution data model\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_bus!","page":"Data Models","title":"PowerModelsDistribution.add_bus!","text":"adds a bus to provided ENGINEERING model, see create_bus\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_generator!","page":"Data Models","title":"PowerModelsDistribution.add_generator!","text":"adds a generator to provided ENGINEERING model, see create_generator\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_line!","page":"Data Models","title":"PowerModelsDistribution.add_line!","text":"adds a line to provided ENGINEERING model, see create_line\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_linecode!","page":"Data Models","title":"PowerModelsDistribution.add_linecode!","text":"adds a linecode to provided ENGINEERING model, see create_linecode\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_load!","page":"Data Models","title":"PowerModelsDistribution.add_load!","text":"adds a load to provided ENGINEERING model, see create_load\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_object!-Tuple{Dict{String}, String, String, Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.add_object!","text":"add_object!(data_eng::Dict{String,<:Any}, obj_type::String, obj_id::String, object::Dict{String,<:Any})\n\nGeneric add function to add components to an engineering data model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.add_shunt!","page":"Data Models","title":"PowerModelsDistribution.add_shunt!","text":"adds a shunt to provided ENGINEERING model, see create_shunt\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_solar!","page":"Data Models","title":"PowerModelsDistribution.add_solar!","text":"adds a PV to provided ENGINEERING model, see create_solar\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_storage!","page":"Data Models","title":"PowerModelsDistribution.add_storage!","text":"adds a storage to provided ENGINEERING model, see create_storage\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_switch!","page":"Data Models","title":"PowerModelsDistribution.add_switch!","text":"adds a switch to provided ENGINEERING model, see create_switch\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_transformer!","page":"Data Models","title":"PowerModelsDistribution.add_transformer!","text":"adds a transformer to provided ENGINEERING model, see create_transformer and create_al2w_transformer\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_vbase_default!-Tuple{Dict{String}, String, Real}","page":"Data Models","title":"PowerModelsDistribution.add_vbase_default!","text":"add_vbase_default!(data_eng::Dict{String,<:Any}, bus::String, vbase::Real)\n\nFunction to add default vbase for a bus\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.add_voltage_source!","page":"Data Models","title":"PowerModelsDistribution.add_voltage_source!","text":"adds a voltage source to provided ENGINEERING model, see create_voltage_source\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.add_xfmrcode!","page":"Data Models","title":"PowerModelsDistribution.add_xfmrcode!","text":"adds a transformer code (xmfrcode) to provided ENGINEERING model, see create_xfmrcode\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.create_al2w_transformer-Tuple{String, String, Vector{Int64}, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_al2w_transformer","text":"create_al2w_transformer(\n f_bus::String,\n t_bus::String,\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n configuration::ConnConfig=WYE,\n tm_nom::Real=1.0,\n tm_lb::Union{Vector{<:Real},Missing}=missing,\n tm_ub::Union{Vector{<:Real},Missing}=missing,\n tm_set::Union{Vector{<:Real},Missing}=missing,\n tm_fix::Union{Vector{Bool},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a aysmmetric lossless 2-winding transformer object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_bus-Tuple{}","page":"Data Models","title":"PowerModelsDistribution.create_bus","text":"create_bus(;\n status::Status=ENABLED,\n terminals::Vector{Int}=Int[],\n grounded::Vector{Int}=Int[],\n rg::Vector{<:Real}=Float64[],\n xg::Vector{<:Real}=Float64[],\n kwargs...\n)::Dict{String,Any}\n\ncreates a bus object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_generator-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_generator","text":"create_generator(\n bus::String,\n connections::Vector{Int};\n configuration::ConnConfig=WYE,\n pg::Union{Vector{<:Real},Missing}=missing,\n qg::Union{Vector{<:Real},Missing}=missing,\n vg::Union{Vector{<:Real},Missing}=missing,\n pg_lb::Union{Vector{<:Real},Missing}=missing,\n pg_ub::Union{Vector{<:Real},Missing}=missing,\n qg_lb::Union{Vector{<:Real},Missing}=missing,\n qg_ub::Union{Vector{<:Real},Missing}=missing,\n control_mode::ControlMode=FREQUENCYDROOP,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a generator object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_line-Tuple{String, String, Vector{Int64}, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_line","text":"create_line(\n f_bus::String,\n t_bus::String,\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n linecode::Union{String,Missing}=missing,\n rs::Union{Matrix{<:Real},Missing}=missing,\n xs::Union{Matrix{<:Real},Missing}=missing,\n g_fr::Union{Matrix{<:Real},Missing}=missing,\n b_fr::Union{Matrix{<:Real},Missing}=missing,\n g_to::Union{Matrix{<:Real},Missing}=missing,\n b_to::Union{Matrix{<:Real},Missing}=missing,\n length::Real=1.0,\n cm_ub::Union{Vector{<:Real},Missing}=missing,\n sm_ub::Union{Vector{<:Real},Missing}=missing,\n vad_lb::Union{Vector{<:Real},Missing}=missing,\n vad_ub::Union{Vector{<:Real},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\nCreate a line with some default values\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_linecode-Tuple{Matrix{<:Real}, Matrix{<:Real}}","page":"Data Models","title":"PowerModelsDistribution.create_linecode","text":"create_linecode(\n rs::Matrix{<:Real},\n xs::Matrix{<:Real};\n g_fr::Union{Matrix{<:Real},Missing}=missing,\n b_fr::Union{Matrix{<:Real},Missing}=missing,\n g_to::Union{Matrix{<:Real},Missing}=missing,\n b_to::Union{Matrix{<:Real},Missing}=missing,\n cm_ub::Union{Vector{<:Real},Missing}=missing,\n kwargs...\n)::Dict{String,Any}\n\ncreates a linecode with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_load-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_load","text":"create_load(\n bus::String,\n connections::Vector{Int};\n configuration::ConnConfig=WYE,\n model::LoadModel=POWER,\n pd_nom::Union{Vector{<:Real},Missing}=missing,\n qd_nom::Union{Vector{<:Real},Missing}=missing,\n vm_nom::Real=1.0,\n dispatchable::Dispatchable=NO,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a load object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_shunt-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_shunt","text":"create_shunt(\n bus::String,\n connections::Vector{Int};\n gs::Union{Matrix{<:Real},Missing}=missing,\n bs::Union{Matrix{<:Real},Missing}=missing,\n model::ShuntModel=GENERIC,\n dispatchable::Dispatchable=NO,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a generic shunt with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_solar-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_solar","text":"create_solar(\n bus::String,\n connections::Vector{Int};\n configuration::ConnConfig=WYE,\n pg_lb::Union{Vector{<:Real},Missing}=missing,\n pg_ub::Union{Vector{<:Real},Missing}=missing,\n qg_lb::Union{Vector{<:Real},Missing}=missing,\n qg_ub::Union{Vector{<:Real},Missing}=missing,\n pg::Union{Vector{<:Real},Missing}=missing,\n qg::Union{Vector{<:Real},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a solar generator with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_storage-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_storage","text":"create_storage(\n configuration::ConnConfig=WYE,\n energy::Real=0.0,\n energy_ub::Real=0.0,\n charge_ub::Real=0.0,\n discharge_ub::Real=0.0,\n sm_ub::Union{Real,Missing}=missing,\n cm_ub::Union{Real,Missing}=missing,\n charge_efficiency::Real=1.0,\n discharge_efficiency::Real=1.0,\n qs_lb::Union{Real,Missing}=missing,\n qs_ub::Union{Real,Missing}=missing,\n rs::Real=0.0,\n xs::Real=0.0,\n pex::Real=0.0,\n qex::Real=0.0,\n ps::Union{Real,Vector{<:Real},Missing}=missing,\n qs::Union{Real,Vector{<:Real},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n )::Dict{String,Any}\n\ncreates energy storage object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_switch-Tuple{String, String, Vector{Int64}, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_switch","text":"create_switch(\n f_bus::String,\n t_bus::String,\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n cm_ub::Union{Vector{<:Real},Missing}=missing,\n sm_ub::Union{Vector{<:Real},Missing}=missing,\n linecode::Union{String,Missing}=missing,\n rs::Union{Matrix{<:Real},Missing}=missing,\n xs::Union{Matrix{<:Real},Missing}=missing,\n dispatchable::Dispatchable=NO,\n state::SwitchState=CLOSED,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a switch object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_transformer-Tuple{Vector{String}, Vector{Vector{Int64}}}","page":"Data Models","title":"PowerModelsDistribution.create_transformer","text":"create_transformer(\n buses::Vector{String},\n connections::Vector{Vector{Int}};\n configurations::Union{Vector{ConnConfig},Missing}=missing,\n xfmrcode::Union{String,Missing}=missing,\n xsc::Union{Vector{<:Real},Missing}=missing,\n rw::Union{Vector{<:Real},Missing}=missing,\n imag::Real=0.0,\n noloadloss::Real=0.0,\n tm_nom::Union{Vector{<:Real},Missing}=missing,\n tm_lb::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_ub::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_set::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_fix::Union{Vector{Vector{Bool}},Missing}=missing,\n polarity::Union{Vector{Int},Missing}=missing,\n vm_nom::Union{Vector{<:Real},Missing}=missing,\n sm_nom::Union{Vector{<:Real},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a n-winding transformer object with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_voltage_source-Tuple{String, Vector{Int64}}","page":"Data Models","title":"PowerModelsDistribution.create_voltage_source","text":"create_voltage_source(\n bus::String,\n connections::Vector{Int};\n configuration::ConnConfig=WYE,\n vm::Union{Vector{<:Real},Missing}=missing,\n va::Union{Vector{<:Real},Missing}=missing,\n vm_lb::Union{Vector{<:Real},Missing}=missing,\n vm_ub::Union{Vector{<:Real},Missing}=missing,\n rs::Union{Vector{<:Real},Missing}=missing,\n xs::Union{Vector{<:Real},Missing}=missing,\n status::Status=ENABLED,\n kwargs...\n)::Dict{String,Any}\n\ncreates a voltage source with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.create_xfmrcode-Tuple{}","page":"Data Models","title":"PowerModelsDistribution.create_xfmrcode","text":"create_xfmrcode(;\n configurations::Union{Vector{ConnConfig},Missing}=missing,\n xsc::Union{Vector{<:Real},Missing}=missing,\n rw::Union{Vector{<:Real},Missing}=missing,\n tm_nom::Union{Vector{<:Real},Missing}=missing,\n tm_lb::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_ub::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_set::Union{Vector{Vector{<:Real}},Missing}=missing,\n tm_fix::Union{Vector{Vector{<:Real}},Missing}=missing,\n kwargs...\n)::Dict{String,Any}\n\ncreates transformer code with some defaults\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.delete_component!-Tuple{Dict{String}, String, String}","page":"Data Models","title":"PowerModelsDistribution.delete_component!","text":"delete_component!(data_eng::Dict{String,<:Any}, component_type::String, component_id::String)\n\ndeletes a component from the engineering data model\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#PowerModelsDistribution.transform_data_model","page":"Data Models","title":"PowerModelsDistribution.transform_data_model","text":"default transform_data_model ErrorException for unsupported combinations\n\n\n\n\n\n\n\n\n\ntransform_data_model(\n data::Dict{String,<:Any};\n kron_reduce::Bool=true,\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n eng2math_passthrough::Dict{String,<:Vector{<:String}}=Dict{String,Vector{String}}(),\n eng2math_extensions::Vector{<:Function}=Function[],\n make_pu::Bool=true,\n make_pu_extensions::Vector{<:Function}=Function[],\n)::Dict{String,Any}\n\nTransforms a data model model between ENGINEERING (high-level) and MATHEMATICAL (low-level) DataModel.\n\nNotes\n\nKron reduction\n\nIf kron_reduce==true, apply_kron_reduction! and apply_phase_projection_delta! will be applied to the network data.\n\nPhase projection\n\nIf phase_project==true, apply_phase_projection! will be applied to the network data.\n\nMultinetwork transformations\n\nIf multinetwork==true, the data model will be transformed into a multinetwork (e.g., time series) data structure using make_multinetwork before being transformed into a MATHEMATICAL DataModel.\n\nglobal_keys::Set{String} can be used to add custom top-level items to the multinetwork data structure, and will only be used in the context where multinetwork==true, and ignored otherwise.\n\nCustom eng2math transformations\n\nTo add custom transformations between ENGINEERING and MATHEMATICAL data models, eng2math_extensions::Vector{<:Function} can be utilized to pass user-created functions, which are expected to have the signature\n\neng2math_func!(data_math::Dict{String,Any}, data_eng::Dict{String,Any})\n\nwhere datamath and dataeng equivalent to single subnetworks in a multinetwork data structure, or a non-multinetwork data structure.\n\nThese functions are run after all built-in eng2math transformations have been performed.\n\nMapping back to ENGINEERING\n\nSee transform_solution\n\nPassthrough properties\n\nTo more simply pass through some properties in the built-in eng2math transformations, eng2math_passthrough::Dict{String,Vector{String}} can be used. For example, if in the ENGINEERING model, a property called z was added to switch objects, and a property at the root level of the dictionary was added called max_switch_actions, the user could pass the following dictionary to eng2math_passthrough:\n\nDict{String,Vector{String}}(\n \"switch\" => String[\"z\"],\n \"root\" => String[\"max_switch_actions\"],\n)\n\nThis will result in z showing up on the switch object in the MATHEMATICAL model. Passthrough properties will always land on the primary conversion object in the MATHEMATICAL model if that object gets converted to multiple object types, e.g., voltage_source with internal impedance will result in gen, bus, and branch objects in the MATHEMATICAL model, but passthrough properties will only land on gen.\n\nCustom per-unit transformations\n\nTo add additional per-unit transformations, a user can supply custom functions to make_pu_extensions::Vector{<:Function}, which will only be used if make_pu==true.\n\nSee make_per_unit! for further explanation.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.transform_solution","page":"Data Models","title":"PowerModelsDistribution.transform_solution","text":"transform_solution(\n solution_math::Dict{String,<:Any},\n data_math::Dict{String,<:Any};\n map::Union{Vector{<:Dict{String,<:Any}},Missing}=missing,\n make_si::Bool=true,\n convert_rad2deg::Bool=true,\n map_math2eng_extensions::Dict{String,<:Function}=Dict{String,Function}(),\n make_si_extensions::Vector{<:Function}=Function[],\n dimensionalize_math_extensions::Dict{String,<:Dict{String,<:Vector{<:String}}}=Dict{String,Dict{String,Vector{String}}}(),\n )::Dict{String,Any}\n\nTransforms solutions from MATHEMATICAL data structures, back to an ENGINEERING data structure, given a map::Vector{Dict{String,Any}}, typically which was produced automatically by transform_data_model.\n\nNotes\n\nIf make_si==false, the solution will remain in per-unit, rather than being converted back to SI units (default). Angles will still be converted to degrees unless convert_rad2deg is utilized.\n\nIf convert_rad2deg==false, angles will remain in radians, instead of getting converted to degrees (default).\n\nCustom SI unit conversions\n\nSee solution_make_si\n\nCustom math2eng transformations\n\nTo enable automatically mapping back custom components solutions' to the ENGINEERING structure, eng2math_extensions added in transform_data_model should include a push of an item to the map dictionary in the data_math structure. These items should have the structure:\n\nDict{String,Any}(\n \"from\" => String,\n \"to\" => Union{String,Vector{String}},\n \"unmap_function\" => PowerModelsDistribution.function!,\n \"apply_to_subnetworks\" => Bool\n)\n\nImportant things to note are that\n\nThe function must be included in map_math2eng_extensions, which has the form:\njulia Dict{String,Function}( \"_map_math2eng_func!\" => _map_math2eng_func!, )\n\"apply_to_subnetworks\" is optional, and is true by default.\n\"from\" needs to be a single object\n\"to\" can be multiple objects or a single object\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Data-Transformations","page":"Data Models","title":"Data Transformations","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"transformations.jl\"]","category":"page"},{"location":"reference/data_models.html#Multinetworks","page":"Data Models","title":"Multinetworks","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"multinetwork.jl\"]","category":"page"},{"location":"reference/data_models.html#InfrastructureModels.ismultinetwork-Tuple{AbstractUnbalancedPowerModel}","page":"Data Models","title":"InfrastructureModels.ismultinetwork","text":"ismultinetwork(pm::AbstractUnbalancedPowerModel)\n\nChecks if power model struct is multinetwork\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.make_multinetwork-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.make_multinetwork","text":"make_multinetwork(\n data::Dict{String,<:Any};\n sparse::Bool=false,\n time_elapsed::Union{Missing,Real,Vector{<:Real}}=missing,\n global_keys::Set{String}=Set{String}(),\n)::Dict{String,Any}\n\nExpands a data structure into a multinetwork assuming there are time_series objects defined and assigned to some components.\n\nIf global_keys::Set{String} is defined, the global keys that will appear at the top-level of the data structure will include both the default global keys for that data model type, and additionally the keys defined in global_keys.\n\ntime_elapsed defines the time elapsed between subnetworkin hours, and can either be a single Real value, and thus a constant time between each time step, or a Vector with the same length as the number of time steps, or can be left missing, in which case time elapsed will attempt to be discovered, with a fallback on 1 hour default. Time elapsed can be adjusted later using set_time_elapsed!\n\nmake_multinetwork assumes all \"time\" values in \"timeseries\" objects to be in the same units, and will attempt to automatically sort multinetworks in the correct order. [`sortmultinetwork!`](@ref sort_multinetwork!) can be used after the fact to re-sort the subnetworks.\n\nsparse is currently unsupported, and is only included for future compatibility\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.set_time_elapsed!-Tuple{Dict{String}, Union{Real, Vector{<:Real}}}","page":"Data Models","title":"PowerModelsDistribution.set_time_elapsed!","text":"set_time_elapsed!(data::Dict{String,<:Any}, time_elapsed::Union{Real,Vector{<:Real}})\n\nHelper function to set time_elapsed in multinetwork data, given either some constant value of time elapsed or a Vector of time elapsed values of the same length as the number of subnetworks.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.sort_multinetwork!-Tuple{Dict{String}, Vector}","page":"Data Models","title":"PowerModelsDistribution.sort_multinetwork!","text":"sort_multinetwork!(mn_data::Dict{String,<:Any}, times::Vector{<:Any})\n\nHelper function to manually sort your multinetwork frames, given some pre-sorted vector of time values times\n\n\n\n\n\n","category":"method"},{"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 = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"units.jl\"]","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.calc_eng_voltage_bases-Tuple{Dict{String}, Dict{String, <:Real}}","page":"Data Models","title":"PowerModelsDistribution.calc_eng_voltage_bases","text":"calc_eng_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}\n\nCalculates voltage bases for each voltage zone for buses and branches for a ENGINEERING data_model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.calc_math_voltage_bases-Tuple{Dict{String}, Dict{String, <:Real}}","page":"Data Models","title":"PowerModelsDistribution.calc_math_voltage_bases","text":"calc_math_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}\n\nCalculates voltage bases for each voltage zone for buses and branches for a MATHEMATICAL data_model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.calc_voltage_bases-Tuple{Dict{String}, Dict{String, <:Real}}","page":"Data Models","title":"PowerModelsDistribution.calc_voltage_bases","text":"calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}\n\nCalculates voltage bases for each voltage zone for buses and branches, attempting to automatically decern the data_model type\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.discover_eng_voltage_zones-Tuple{Dict{String, Any}}","page":"Data Models","title":"PowerModelsDistribution.discover_eng_voltage_zones","text":"discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}\n\nfinds voltage zones by walking through the network and analyzing the transformers for a ENGINEERING data_model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.discover_math_voltage_zones-Tuple{Dict{String, Any}}","page":"Data Models","title":"PowerModelsDistribution.discover_math_voltage_zones","text":"discover_math_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}\n\nfinds voltage zones by walking through the network and analyzing the transformers for a MATHEMATICAL data_model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.discover_voltage_zones-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.discover_voltage_zones","text":"discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}\n\nfinds voltage zones by walking through the network and analyzing the transformers, attempting to decern the type of data_model\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.make_per_unit!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.make_per_unit!","text":"make_per_unit!(\n data::Dict{String,Any};\n vbases::Union{Missing,Dict{String,Real}}=missing,\n sbase::Union{Missing,Real}=missing,\n make_pu_extensions::Vector{<:Function}=Function[],\n)\n\nConverts units of properties to per-unit from SI units\n\nmake_pu_extensions\n\nTo add additional per-unit transformations, a user can supply custom functions to make_pu_extensions::Vector{<:Function}, which will only be used if make_pu==true.\n\nFor example, if custom properties are added to the MATHEMATICAL model via eng2math_passthrough or eng2math_extensions, those properties will not be converted to per-unit by default, and custom rules will need to be added with functions with the signature:\n\nrebase_pu_func!(\n nw::Dict{String,Any},\n data_math::Dict{String,Any},\n bus_vbase::Dict{String,Real},\n line_vbase::Dict{String,Real},\n sbase::Real,\n sbase_old::Real,\n voltage_scale_factor::Real\n)\n\nwhere,\n\nnw is equivalent to the a single subnetwork in a multinetwork data structure (which may be the same as data_math, in the case of a single network),\ndata_math is the complete data structure with the global keys,\nbus_vbase is a dictionary of the voltage bases of each bus indexed by their MATHEMATICAL model indices,\nline_vbase is a dictionary of the voltage bases of each branch indexed by their MATHEMATICAL model indices,\nsbase is the new power base,\nsbase_old is the power base the data structure started with, and\nvoltage_scale_factor is the scaling factor for voltage.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.solution_make_si-Tuple{Dict{String}, Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.solution_make_si","text":"solution_make_si(\n solution::Dict{String,<:Any},\n math_model::Dict{String,<:Any};\n mult_sbase::Bool=true,\n mult_vbase::Bool=true,\n mult_ibase::Bool=true,\n convert_rad2deg::Bool=true,\n make_si_extensions::Vector{<:Function}=Function[],\n dimensionalize_math_extensions::Dict{String,<:Dict{String,<:Vector{<:String}}}=Dict{String,Dict{String,Vector{String}}}()\n)::Dict{String,Any}\n\nTransforms solution dictionaries solution from per-unit back to SI units, requiring the original MATHEMATICAL model math_model to perform the transformation.\n\nIf mult_sbase is false, sbase variables will not be multiplied, thus remaining in per-unit\n\nIf mult_vbase is false, vbase variables will not be multiplied, thus remaining in per-unit\n\nIf mult_ibase is false, ibase variables will not be multiplied, thus remaining in per-unit\n\nIf convert_rad2deg is false, angle variables will not be multiplied, thus remaining in radians\n\nCustom SI unit conversions\n\nTo convert custom properties not part of formulations already included within PowerModelsDistribution, users will need to either specify multiplicative factors via dimensionalize_math_extensions, or pass user functions via make_si_extensions.\n\nThe latter case requires functions with the signature\n\nmake_si_func!(nw_solution, nw_data, solution, data)\n\nwhere nw_solution and nw_data are equivalent to a single subnetwork of a multinetwork structure of the solution and the data in the MATHEMATICAL format, respectively, and solution and data are the full data structures, which may be equivalent to nw_solution and nw_data, if the data is not multinetwork. Changes should be applied to nw_solution in the user functions.\n\nFor dimensionalize_math_extensions, it is possible to easily extended the SI conversions if they are straightforward conversions using vbase, sbase, ibase, or rad2deg. For example, if a custom variable cfr is added to branches, and is scaled by ibase, the following dictionary would be passed:\n\nDict{String,Dict{String,Vector{String}}}(\n \"branch\" => Dict{String,Vector{String}}(\n \"ibase\" => String[\"cfr\"]\n )\n)\n\nwhich would ensure that this variable gets converted back to SI units upon transformation.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#Data-Checking-and-Correction","page":"Data Models","title":"Data Checking and Correction","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"correct\") || startswith(string(t), \"check\")","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.check_branch_loops-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.check_branch_loops","text":"check_branch_loops(data::Dict{String,<:Any})\n\nchecks that all branches connect two distinct buses\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.check_connectivity-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.check_connectivity","text":"check_connectivity(data::Dict{String,<:Any})\n\nchecks that all buses are unique and other components link to valid buses\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.check_cost_models-Tuple{AbstractUnbalancedPowerModel}","page":"Data Models","title":"PowerModelsDistribution.check_cost_models","text":"check_cost_models(pm::AbstractUnbalancedPowerModel)\n\nChecks that all cost models are of the same type\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.check_eng_data_model-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.check_eng_data_model","text":"check_eng_data_model(data_eng::Dict{String,<:Any})\n\nchecks the engineering data model for correct data types, required fields and applies default checks\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.check_gen_cost_models-Tuple{AbstractUnbalancedPowerModel}","page":"Data Models","title":"PowerModelsDistribution.check_gen_cost_models","text":"check_gen_cost_models(pm::AbstractUnbalancedPowerModel)\n\nChecks that all generator cost models are of the same type\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_branch_directions!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.correct_branch_directions!","text":"correct_branch_directions!(data::Dict{String,<:Any})\n\nchecks that all parallel branches have the same orientation\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_bus_types!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.correct_bus_types!","text":"checks bus types are suitable for a power flow study, if not, fixes them. the primary checks are that all type 2 buses (i.e., PV) have a connected and active generator and there is a single type 3 bus (i.e., slack bus) with an active connected generator. assumes that the network is a single connected component\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_cost_functions!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.correct_cost_functions!","text":"correct_cost_functions!(data::Dict{String,<:Any})\n\nthrows warnings if cost functions are malformed\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_json_import!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.correct_json_import!","text":"correct_json_import!(data::Dict{String,<:Any})\n\nhelper function to correct data imported from json\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_mc_thermal_limits!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsDistribution.correct_mc_thermal_limits!","text":"correct_mc_thermal_limits!(data::Dict{String,<:Any})\n\nchecks that each branch has non-negative thermal ratings and removes zero thermal ratings\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_mc_voltage_angle_differences!","page":"Data Models","title":"PowerModelsDistribution.correct_mc_voltage_angle_differences!","text":"correct_mc_voltage_angle_differences!(data::Dict{String,<:Any}, default_pad::Real=deg2rad(10.0))\n\nchecks that voltage angle differences are within 90 deg., if not tightens to a default of 10deg (adjustable)\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.correct_network_data!-Tuple{Dict{String, Any}}","page":"Data Models","title":"PowerModelsDistribution.correct_network_data!","text":"correct_network_data!(data::Dict{String,Any}; make_pu::Bool=true, make_pu_extensions::Vector{<:Function}=Function[])\n\nMakes corrections and performs checks on network data structure in either ENGINEERING or MATHEMATICAL formats, and converts to per-unit if data a is MATHEMATICAL data model.\n\nIf make_pu is false, converting to per-unit will be skipped.\n\nCustom per-unit transformations\n\nSee make_per_unit!\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#Statistics-and-Analysis","page":"Data Models","title":"Statistics and Analysis","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"count_nodes\ncount_active_connections\ncount_active_terminals\nidentify_load_blocks\nidentify_blocks\nidentify_islands\ncalc_connected_components","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.count_nodes","page":"Data Models","title":"PowerModelsDistribution.count_nodes","text":"count_nodes(data::Dict{String,<:Any})::Int\n\nCounts number of nodes in network\n\n\n\n\n\ncount_nodes(data::Dict{String,<:Any})::Int\n\nCounts number of nodes in network\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.count_active_connections","page":"Data Models","title":"PowerModelsDistribution.count_active_connections","text":"count_active_connections(data::Dict{String,<:Any})\n\nCounts active ungrounded connections on edge components\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.count_active_terminals","page":"Data Models","title":"PowerModelsDistribution.count_active_terminals","text":"count_active_terminals(data::Dict{String,<:Any}; count_grounded::Bool=false)\n\nCounts active ungrounded terminals on buses\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.identify_load_blocks","page":"Data Models","title":"PowerModelsDistribution.identify_load_blocks","text":"identify_load_blocks(data::Dict{String,<:Any})\n\ncomputes load blocks based on switch locations\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.identify_blocks","page":"Data Models","title":"PowerModelsDistribution.identify_blocks","text":"identify_blocks(data::Dict{String,<:Any})\n\ncomputes connected blocks currently in the model based on switch states\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.identify_islands","page":"Data Models","title":"PowerModelsDistribution.identify_islands","text":"identify_islands(data::Dict{String,<:Any})\n\ncomputes component islands base only on edge and bus status\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.calc_connected_components","page":"Data Models","title":"PowerModelsDistribution.calc_connected_components","text":"calc_connected_components(data::Dict{String,<:Any}; edges::Union{Missing, Vector{<:String}}=missing, type::Union{Missing,String}=missing, check_enabled::Bool=true)::Set\n\ncomputes the connected components of the network graph returns a set of sets of bus ids, each set is a connected component\n\n\n\n\n\n","category":"function"},{"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":"iseng\nismath\nfind_conductor_ids!\nmake_multiconductor!\ndiscover_voltage_zones\ncalc_voltage_bases\napply_pmd!\nget_pmd_data","category":"page"},{"location":"reference/data_models.html#PowerModelsDistribution.iseng","page":"Data Models","title":"PowerModelsDistribution.iseng","text":"iseng(data::Dict{String,Any})\n\nHelper function to check is data is ENGINEERING model\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.ismath","page":"Data Models","title":"PowerModelsDistribution.ismath","text":"ismath(data::Dict{String,Any})\n\nHelper function to check if data is MATHEMATICAL model\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.find_conductor_ids!","page":"Data Models","title":"PowerModelsDistribution.find_conductor_ids!","text":"find_conductor_ids!(data::Dict{String,Any})\n\nFinds all conductor ids and puts a list of them under \"conductor_ids\" at the root level\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.make_multiconductor!","page":"Data Models","title":"PowerModelsDistribution.make_multiconductor!","text":"make_multiconductor!(data::Dict{String,<:Any}, conductors::Int)\n\nThis function is not meant to be an officially supported method for creating reasonable multiconductor data sets.\n\nHacky helper function to transform single-conductor network data, from, e.g., matpower/psse, into multi-conductor data.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.discover_voltage_zones","page":"Data Models","title":"PowerModelsDistribution.discover_voltage_zones","text":"discover_voltage_zones(data_model::Dict{String,<:Any})::Dict{Int,Set{Any}}\n\nfinds voltage zones by walking through the network and analyzing the transformers, attempting to decern the type of data_model\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.calc_voltage_bases","page":"Data Models","title":"PowerModelsDistribution.calc_voltage_bases","text":"calc_voltage_bases(data_model::Dict{String,<:Any}, vbase_sources::Dict{String,<:Real})::Tuple{Dict,Dict}\n\nCalculates voltage bases for each voltage zone for buses and branches, attempting to automatically decern the data_model type\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.apply_pmd!","page":"Data Models","title":"PowerModelsDistribution.apply_pmd!","text":"apply_pmd!(func!::Function, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true, kwargs...)\n\nVersion of apply_pmd! that supports kwargs\n\n\n\n\n\napply_pmd!(func!::Function, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true, kwargs...)\n\nVersion of apply_pmd! that supports kwargs\n\n\n\n\n\napply_pmd!(func!::Function, data::Dict{String,<:Any}, args...; apply_to_subnetworks::Bool=true, kwargs...)\n\nVersion of apply_pmd! that supports args and kwargs\n\n\n\n\n\napply_pmd!(func!::Function, ref::Dict{Symbol,<:Any}, data::Dict{String,<:Any}; apply_to_subnetworks::Bool=true)\n\nPowerModelsDistribution wrapper for the InfrastructureModels apply! function\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsDistribution.get_pmd_data","page":"Data Models","title":"PowerModelsDistribution.get_pmd_data","text":"get_pmd_data(data::Dict{String, <:Any})\n\nConvenience function for retrieving the power-distribution-only portion of network data\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#ObjectiveAPI","page":"Objectives","title":"Objectives","text":"","category":"section"},{"location":"reference/objectives.html","page":"Objectives","title":"Objectives","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"objective\")","category":"page"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_max_load_setpoint-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_max_load_setpoint","text":"objective_mc_max_load_setpoint(pm::AbstractUnbalancedPowerModel)\n\nmaximum loadability objective (continuous load shed) with storage\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost","text":"objective_mc_min_fuel_cost(pm::AbstractUnbalancedPowerModel)\n\nStandard fuel cost minimization objective\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost_polynomial-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost_polynomial","text":"objective_mc_min_fuel_cost_polynomial(pm::AbstractUnbalancedPowerModel)\n\nFuel cost minimization objective for polynomial terms\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost_polynomial_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost_polynomial_switch","text":"objective_mc_min_fuel_cost_polynomial_switch(pm::AbstractUnbalancedPowerModel)\n\nFuel cost minimization objective for polynomial terms including switches\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost_pwl-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost_pwl","text":"objective_mc_min_fuel_cost_pwl(pm::AbstractUnbalancedPowerModel)\n\nFuel cost minimization objective with piecewise linear terms\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost_pwl_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost_pwl_switch","text":"objective_mc_min_fuel_cost_pwl_switch(pm::AbstractUnbalancedPowerModel)\n\nFuel cost minimization objective with piecewise linear terms including switches\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_fuel_cost_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_fuel_cost_switch","text":"objective_mc_min_fuel_cost_switch(pm::AbstractUnbalancedPowerModel)\n\nStandard fuel cost minimization objective including switches\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_load_setpoint_delta-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_load_setpoint_delta","text":"objective_mc_min_load_setpoint_delta(pm::AbstractUnbalancedPowerModel)\n\nminimum load delta objective with storage\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_load_setpoint_delta_simple-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_load_setpoint_delta_simple","text":"objective_mc_min_load_setpoint_delta_simple(pm::AbstractUnbalancedPowerModel)\n\nsimplified minimum load delta objective (continuous load shed)\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_load_setpoint_delta_simple_switch-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_load_setpoint_delta_simple_switch","text":"objective_mc_min_load_setpoint_delta_simple_switch(pm::AbstractUnbalancedPowerModel)\n\nsimplified minimum load delta objective (continuous load shed) including a switch state term\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_min_slack_bus_power-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_min_slack_bus_power","text":"objective_mc_min_slack_bus_power(pm::AbstractUnbalancedPowerModel)\n\na quadratic penalty for bus power slack variables\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_mc_variable_pg_cost-Tuple{AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsDistribution.objective_mc_variable_pg_cost","text":"objective_mc_variable_pg_cost(pm::AbstractUnbalancedPowerModel)\n\nadds pg_cost variables and constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsDistribution.objective_variable_pg_cost-Tuple{AbstractUnbalancedIVRModel}","page":"Objectives","title":"PowerModelsDistribution.objective_variable_pg_cost","text":"objective_variable_pg_cost(pm::AbstractUnbalancedIVRModel)\n\nadds pg_cost variables and constraints for the IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#Helpers","page":"Objectives","title":"Helpers","text":"","category":"section"},{"location":"reference/objectives.html","page":"Objectives","title":"Objectives","text":"calc_max_cost_index\nsimplify_cost_terms!\ncalc_pwl_points\ncalc_cost_pwl_lines\nstandardize_cost_terms!","category":"page"},{"location":"reference/objectives.html#PowerModelsDistribution.calc_max_cost_index","page":"Objectives","title":"PowerModelsDistribution.calc_max_cost_index","text":"calc_max_cost_index(data::Dict{String,<:Any})\n\nComputes maximum cost index\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#PowerModelsDistribution.simplify_cost_terms!","page":"Objectives","title":"PowerModelsDistribution.simplify_cost_terms!","text":"simplify_cost_terms!(data::Dict{String,<:Any})\n\ntrims zeros from higher order cost terms\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#PowerModelsDistribution.calc_pwl_points","page":"Objectives","title":"PowerModelsDistribution.calc_pwl_points","text":"calc_pwl_points(ncost::Int, cost::Vector{<:Real}, pmin::Real, pmax::Real; tolerance=1e-2)\n\ncleans up raw pwl cost points in preparation for building a mathamatical model. The key mathematical properties,\n\nthe first and last points are strickly outside of the pmin-to-pmax range\npmin and pmax occur in the first and last line segments.\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#PowerModelsDistribution.calc_cost_pwl_lines","page":"Objectives","title":"PowerModelsDistribution.calc_cost_pwl_lines","text":"calc_cost_pwl_lines(comp_dict::Dict)\n\ncompute lines in m and b from from pwl cost models data is a list of components. Can be run on data or ref data structures\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#PowerModelsDistribution.standardize_cost_terms!","page":"Objectives","title":"PowerModelsDistribution.standardize_cost_terms!","text":"standardize_cost_terms!(data::Dict{String,<:Any}; order=-1)\n\nensures all polynomial costs functions have the same number of terms\n\n\n\n\n\n","category":"function"},{"location":"tutorials/basic.html#Using-PowerModelsDistribution","page":"Basics","title":"Using PowerModelsDistribution","text":"","category":"section"},{"location":"tutorials/basic.html","page":"Basics","title":"Basics","text":"Stub for basic.jl Pluto Notebook in the examples/ folder. The Pluto Notebook will get rendered and inserted as an iframe at documentation build time.","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 PowerModelsDistribution is installed, Ipopt is installed, and a network data file (e.g., \"case3_unbalanced.dss\" in the package folder under ./test/data) has been acquired, an unbalanced AC Optimal Power Flow can be executed with,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsDistribution\nusing Ipopt\n\nsolve_mc_opf(\"case3_unbalanced.dss\", ACPUPowerModel, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Parsing-files","page":"Getting Started","title":"Parsing files","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To parse an OpenDSS file into PowerModelsDistribution's default ENGINEERING format, use the parse_file command","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"eng = parse_file(\"case3_unbalanced.dss\")","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To examine the MATHEMATICAL model it is possible to transform the data model using the transform_data_model command, but this step is not necessary to run a problem.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"math = transform_data_model(eng)","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":"The run commands in PowerModelsDistribution return detailed results data in the form of a dictionary. This dictionary can be saved for further processing as follows,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_mc_opf(eng, ACPUPowerModel, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Alternatively, you can pass the file path string directly:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_mc_opf(\"case3_unbalanced.dss\", ACPUPowerModel, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Accessing-Different-Formulations","page":"Getting Started","title":"Accessing Different Formulations","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"ACPUPowerModel indicates an unbalanced (i.e., multiconductor) AC formulation in polar coordinates. This more generic solve_mc_opf allows one to solve an OPF problem with any power network formulation in PowerModelsDistribution. For example, the SDPUBFPowerModel relaxation of unbalanced Optimal Power Flow (branch flow model) can be run with,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using SCS\nsolve_mc_opf(eng, SDPUBFPowerModel, with_optimizer(SCS.Optimizer))","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Note that you have to use a SDP-capable solver, e.g., the open-source solver SCS, to solve SDP models.","category":"page"},{"location":"manual/quickguide.html#Inspecting-the-Formulation","page":"Getting Started","title":"Inspecting the Formulation","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The following example demonstrates how to break a solve_mc_opf call into separate model building and solving steps. This allows inspection of the JuMP model created by PowerModelsDistribution for the AC-OPF problem. Note that the MATHEMATICAL model must be passed to instantiate_mc_model, so the data model must either be transformed with transform_data_model or parsed directly to a MATHEMATICAL model using the data_model keyword argument:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"math = parse_file(\"case3_unbalanced.dss\"; data_model=MATHEMATICAL)\npm = instantiate_model(math, ACPUPowerModel, build_mc_opf; ref_extensions=[ref_add_arcs_trans!])\nprint(pm.model)\noptimize_model!(pm, optimizer=Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Providing-a-Warm-Start","page":"Getting Started","title":"Providing a Warm Start","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To reduce the number of solver iterations, it might be useful to provide a (good) initial value to some or all optimization variables. To do so, it is sufficient to assign a value or vector (depending on the dimensions of the variable) in the data dictionary, under the key $(variablename)_start. The example below shows how to do it for the vm and va variables.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"math = parse_file(\"case3_unbalanced.dss\"; data_model=MATHEMATICAL)\nmath[\"bus\"][\"2\"][\"vm_start\"] = [0.9959, 0.9959, 0.9959]\nmath[\"bus\"][\"2\"][\"va_start\"] = [0.00, -2.0944, 2.0944]","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Providing a bad initial value might result in the opposite effect: longer calculation times or convergence issues, so the start value assignment should be done attentively. If no initial value is provided, a flat start is assigned by default. The default initial value of each variable is indicated in the function where the variable is defined, as the last argument of the comp_start_value function. In the case of vm, this is 1.0, as shown below:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"vm = var(pm, nw)[:vm] = Dict(i => JuMP.@variable(pm.model,\n [c in 1:ncnds], base_name=\"$(nw)_vm_$(i)\",\n start = comp_start_value(ref(pm, nw, :bus, i), \"vm_start\", c, 1.0)\n ) for i in ids(pm, nw, :bus)\n)","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Finally, it should be noted that if va_start and vm_start are present in a data dictionary which is passed to the ACR or IVR formulation, these are converted to their rectangular equivalents and used as vr_start and vi_start.","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 PowerModelsDistribution.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation.","category":"page"},{"location":"reference/formulations.html#FormulationAPI","page":"Formulations","title":"Formulations","text":"","category":"section"},{"location":"reference/formulations.html#Abstract-Models","page":"Formulations","title":"Abstract Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"AbstractUnbalancedPowerModel\nAbstractUnbalancedActivePowerModel\nAbstractUnbalancedConicModel\nAbstractUBFModel\nAbstractUBFAModel\nAbstractUBFQPModel\nAbstractUBFConicModel\nAbstractUnbalancedACPModel\nAbstractUnbalancedACRModel\nAbstractUnbalancedIVRModel\nAbstractUnbalancedDCPModel\nAbstractUnbalancedNFAModel\nAbstractNLPUBFModel\nAbstractConicUBFModel\nSDPUBFModel\nSDPUBFKCLMXModel\nSOCNLPUBFModel\nSOCConicUBFModel\nAbstractLPUBFModel\nLPUBFDiagModel\nLinDist3FlowModel","category":"page"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedPowerModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedPowerModel","text":"root of the power formulation type hierarchy\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedActivePowerModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedActivePowerModel","text":"active power only models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedConicModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedConicModel","text":"variants that target conic solvers\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUBFModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUBFModel","text":"for branch flow models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUBFAModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUBFAModel","text":"for variants of branch flow models that target LP solvers\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUBFQPModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUBFQPModel","text":"for variants of branch flow models that target QP or NLP solvers\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUBFConicModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUBFConicModel","text":"for variants of branch flow models that target conic solvers\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedACPModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedACPModel","text":"Abstract Power-Voltage (Polar) formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedACRModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedACRModel","text":"Abstract Power-Voltage (Rectangular) formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedIVRModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedIVRModel","text":"Abstract Current-Voltage (Rectangular) formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedDCPModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedDCPModel","text":"\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedNFAModel","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedNFAModel","text":"\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractNLPUBFModel","page":"Formulations","title":"PowerModelsDistribution.AbstractNLPUBFModel","text":"Base Abstract NLP Unbalanced Branch Flow Model\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractConicUBFModel","page":"Formulations","title":"PowerModelsDistribution.AbstractConicUBFModel","text":"Base Abstract Conic Unbalanced Branch Flow Model\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SDPUBFModel","page":"Formulations","title":"PowerModelsDistribution.SDPUBFModel","text":"SDP BFM per Gan and Low 2014, PSCC\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SDPUBFKCLMXModel","page":"Formulations","title":"PowerModelsDistribution.SDPUBFKCLMXModel","text":"SDP BFM with KCL as matrix equation, Geth 2020 (under review)\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SOCNLPUBFModel","page":"Formulations","title":"PowerModelsDistribution.SOCNLPUBFModel","text":"SOC relaxation of SDPUBFModel per Kim, Kojima, & Yamashita 2003, cast as an QCP\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SOCConicUBFModel","page":"Formulations","title":"PowerModelsDistribution.SOCConicUBFModel","text":"SOC relaxation of SDPUBFModel per Kim, Kojima, & Yamashita 2003, cast as a SOC\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractLPUBFModel","page":"Formulations","title":"PowerModelsDistribution.AbstractLPUBFModel","text":"Abstract form for linear unbalanced power flow models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.LPUBFDiagModel","page":"Formulations","title":"PowerModelsDistribution.LPUBFDiagModel","text":"LinDist3Flow per Arnold et al. (2016), using vector variables for power, voltage and current\n\nD. B. Arnold, M. Sankur, R. Dobbe, K. Brady, D. S. Callaway and A. Von Meier, \"Optimal dispatch of reactive power for voltage regulation and balancing in unbalanced distribution systems,\" 2016 IEEE Power and Energy Society General Meeting (PESGM), Boston, MA, 2016, pp. 1-5, doi: 10.1109/PESGM.2016.7741261.\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.LinDist3FlowModel","page":"Formulations","title":"PowerModelsDistribution.LinDist3FlowModel","text":"More popular name for the LPUBFDiagModel\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Abstract-Union-Models","page":"Formulations","title":"Abstract Union Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"AbstractUBFModels\nKCLMXModels\nSOCUBFModels\nAbstractUnbalancedWModels\nAbstractUnbalancedWConvexModels\nAbstractUnbalancedAPLossLessModels\nAbstractUnbalancedPolarModels","category":"page"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUBFModels","page":"Formulations","title":"PowerModelsDistribution.AbstractUBFModels","text":"Collection of Unbalanced Branch Flow Models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.KCLMXModels","page":"Formulations","title":"PowerModelsDistribution.KCLMXModels","text":"Collection of Semidefinite Models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SOCUBFModels","page":"Formulations","title":"PowerModelsDistribution.SOCUBFModels","text":"Collection of Second Order Cone Models\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedWModels","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedWModels","text":"Collection of AbstractUnbalancedPowerModels that include W relaxations\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedWConvexModels","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedWConvexModels","text":"Collection of convex AbstractUnbalancedPowerModels that include W relaxations\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedAPLossLessModels","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedAPLossLessModels","text":"Collection of AbstractUnbalancedPowerModels that are Active Power only and Lossless\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.AbstractUnbalancedPolarModels","page":"Formulations","title":"PowerModelsDistribution.AbstractUnbalancedPolarModels","text":"Collection of AbstractUnbalancedPowerModels that have a Polar representation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Power-Models","page":"Formulations","title":"Power Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"ACPUPowerModel\nACRUPowerModel\nIVRUPowerModel\nDCPUPowerModel\nNFAUPowerModel\nLPUBFDiagPowerModel\nLinDist3FlowPowerModel\nSDPUBFPowerModel\nSDPUBFKCLMXPowerModel\nSOCNLPUBFPowerModel\nSOCConicUBFPowerModel","category":"page"},{"location":"reference/formulations.html#PowerModelsDistribution.ACPUPowerModel","page":"Formulations","title":"PowerModelsDistribution.ACPUPowerModel","text":"AC power flow Model with polar bus voltage variables. The seminal reference of AC OPF:\n\n@article{carpentier1962contribution,\n title={Contribution to the economic dispatch problem},\n author={Carpentier, J},\n journal={Bulletin de la Societe Francoise des Electriciens},\n volume={3},\n number={8},\n pages={431--447},\n year={1962}\n}\n\nHistory and discussion:\n\n@techreport{Cain2012,\n author = {Cain, Mary B and {O' Neill}, Richard P and Castillo, Anya},\n title = {{History of optimal power flow and Models}},\n year = {2012}\n pages = {1--36},\n url = {https://www.ferc.gov/industries/electric/indus-act/market-planning/opf-papers/acopf-1-history-Model-testing.pdf}\n}\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.ACRUPowerModel","page":"Formulations","title":"PowerModelsDistribution.ACRUPowerModel","text":"AC power flow Model with rectangular bus voltage variables.\n\n@techreport{Cain2012,\n author = {Cain, Mary B and {O' Neill}, Richard P and Castillo, Anya},\n pages = {1--36},\n title = {{History of optimal power flow and Models}},\n url = {https://www.ferc.gov/industries/electric/indus-act/market-planning/opf-papers/acopf-1-history-Model-testing.pdf}\n year = {2012}\n}\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.IVRUPowerModel","page":"Formulations","title":"PowerModelsDistribution.IVRUPowerModel","text":"Current voltage formulation of AC OPF. The formulation uses rectangular coordinates for both current and voltage. Note that, even though Kirchhoff's circuit laws are linear in current and voltage, this formulation is nonconvex due to constants power loads/generators and apparent power limits.\n\n@techreport{ONeill2012,\n author = {{O' Neill}, Richard P and Castillo, Anya and Cain, Mary B},\n pages = {1--18},\n title = {{The IV formulation and linear approximations of the ac optimal power flow problem}},\n year = {2012}\n}\n\nApplicable to problem formulations with _iv in the name.\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.DCPUPowerModel","page":"Formulations","title":"PowerModelsDistribution.DCPUPowerModel","text":"Linearized 'DC' power flow Model with polar voltage variables. This model is a basic linear active-power-only approximation, which uses branch susceptance values br_b = -br_x / (br_x^2 + br_x^2) for determining the network phase angles. Furthermore, transformer parameters such as tap ratios and phase shifts are not considered as part of this model. It is important to note that it is also common for active-power-only approximations to use 1/br_x for determining the network phase angles, instead of the br_b value that is used here. Small discrepancies in solutions should be expected when comparing active-power-only approximations across multiple tools.\n\n@ARTICLE{4956966,\n author={B. Stott and J. Jardim and O. Alsac},\n journal={IEEE Transactions on Power Systems},\n title={DC Power Flow Revisited},\n year={2009},\n month={Aug},\n volume={24},\n number={3},\n pages={1290-1300},\n doi={10.1109/TPWRS.2009.2021235},\n ISSN={0885-8950}\n}\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.NFAUPowerModel","page":"Formulations","title":"PowerModelsDistribution.NFAUPowerModel","text":"The an active power only network flow approximation, also known as the transportation model.\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.LPUBFDiagPowerModel","page":"Formulations","title":"PowerModelsDistribution.LPUBFDiagPowerModel","text":"default LP unbalanced DistFlow constructor\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.LinDist3FlowPowerModel","page":"Formulations","title":"PowerModelsDistribution.LinDist3FlowPowerModel","text":"More popular name for the LPUBFDiagPowerModel\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SDPUBFPowerModel","page":"Formulations","title":"PowerModelsDistribution.SDPUBFPowerModel","text":"default SDP unbalanced DistFlow constructor\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SDPUBFKCLMXPowerModel","page":"Formulations","title":"PowerModelsDistribution.SDPUBFKCLMXPowerModel","text":"default SDP unbalanced DistFlow with matrix KCL constructor\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SOCNLPUBFPowerModel","page":"Formulations","title":"PowerModelsDistribution.SOCNLPUBFPowerModel","text":"default SOC unbalanced DistFlow constructor\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsDistribution.SOCConicUBFPowerModel","page":"Formulations","title":"PowerModelsDistribution.SOCConicUBFPowerModel","text":"default SOC unbalanced DistFlow constructor\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Mutable-Stuct-creator","page":"Formulations","title":"Mutable Stuct creator","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"@pmd_fields","category":"page"},{"location":"reference/formulations.html#PowerModelsDistribution.@pmd_fields","page":"Formulations","title":"PowerModelsDistribution.@pmd_fields","text":"a macro for adding the base PowerModels fields to a type definition\n\n\n\n\n\n","category":"macro"},{"location":"manual/eng2math.html#Engineering-to-Mathematical-Data-Model-Mapping","page":"Conversion to Mathematical Model","title":"Engineering to Mathematical Data Model Mapping","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"In this document we define the mapping from the engineering data model down to the mathematical data model for each physical component.","category":"page"},{"location":"manual/eng2math.html#bus-objects","page":"Conversion to Mathematical Model","title":"bus objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Buses are parsed into bus and potentially shunt objects.","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"The mathematical bus model contains only lossless connections to ground. All other connections to grounds are converted to equivalent shunts at that bus. For example, take a bus defined as","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"bus_eng = Dict(\"grounded\"=>[4, 5], \"rg\"=>[1.0, 0.0], \"xg\"=>[2.0, 0.0],...).","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"This is equivalent to a shunt g+im*b = 1/(1.0+im*2.0) connected to terminal 4, and a lossless grounding at terminal 5 (since rg[2]==xg[2]==0.0). This is mapped to","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"bus_math = Dict(\"grounded\"=>[5], ...),","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"shunt_math = Dict(\"connections\"=>[4], \"b\"=>[b], \"g\"=>[g]...).","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"This simplifies the mathematical model, as the modeller does no longer have to consider lossy groundings explicitly.","category":"page"},{"location":"manual/eng2math.html#line-objects","page":"Conversion to Mathematical Model","title":"line objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Lines are parsed into branch objects with transformer=false","category":"page"},{"location":"manual/eng2math.html#switch-objects","page":"Conversion to Mathematical Model","title":"switch objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Switches are parsed into switch. If there are loss parameters provided (i.e. rs and/or xs) then a virtual branch and virtual bus are created to model the impedance","category":"page"},{"location":"manual/eng2math.html#transformer-objects","page":"Conversion to Mathematical Model","title":"transformer objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"A transformer can have N windings, each with its own configuration (delta or wye are supported). This is decomposed to a network of N lossless, two-winding transformers which connect to an internal loss model. The to-winding is always wye-connected, hence we refer to these transformers as 'asymmetric'.","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"The internal loss model is a function of","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"the winding resistance rw,\nthe short-circuit reactance xsc,\nthe no-load loss properties noloadloss (resistive) and magnetizing current imag (reactive).","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"If all of these are non-zero, this leads to an internal loss model consisting of N virtual buses, (N^2+N)/2 virtual branches, and 1 shunt. These virtual buses and branches are automatically merged and simplified whenever possible; e.g., when all these loss parameters are zero, this simplifies to a single virtual bus, to which all two-winding transformers connect.","category":"page"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"For more detail, please refer to [upcoming technical paper]. #TODO add link to paper","category":"page"},{"location":"manual/eng2math.html#shunt-objects","page":"Conversion to Mathematical Model","title":"shunt objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Shunts are parsed directly into shunt objects.","category":"page"},{"location":"manual/eng2math.html#load-objects","page":"Conversion to Mathematical Model","title":"load objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Loads are parsed into load objects. See the discussion under the Load Model documentation on the sidebar, for a detailed discussion of the various load models.","category":"page"},{"location":"manual/eng2math.html#generator-objects","page":"Conversion to Mathematical Model","title":"generator objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Generators are parsed into gen objects.","category":"page"},{"location":"manual/eng2math.html#solar-objects","page":"Conversion to Mathematical Model","title":"solar objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Solar objects (photovoltaic systems) are parsed into gen objects.","category":"page"},{"location":"manual/eng2math.html#voltage_source-objects","page":"Conversion to Mathematical Model","title":"voltage_source objects","text":"","category":"section"},{"location":"manual/eng2math.html","page":"Conversion to Mathematical Model","title":"Conversion to Mathematical Model","text":"Voltage sources are parsed into gen objects. If loss parameters are specified (i.e. rs and/or xs) then a virtual bus and branch are created to model the internal impedance.","category":"page"},{"location":"manual/eng-data-model.html#Engineering-Data-Model","page":"Engineering Data Model","title":"Engineering Data Model","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"This document describes the ENGINEERING data model type in PowerModelsDistribution, which is transformed at runtime, or at the user's direction into a MATHEMATICAL data model for optimization.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"In this document,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"nphases refers to the number of non-neutral, non-ground active phases connected to a component,\nnconductors refers to all active conductors connected to a component, i.e. length(connections), and\nnwindings refers to the number of windings of a transformer.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The data structure is in the following format","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Dict{String,Any}(\n \"data_model\" => ENGINEERING,\n \"component_type\" => Dict{String,Dict{String,Any}}(\n id => Dict{String,Any}(\n \"parameter\" => value,\n ...\n ),\n ...\n ),\n ...\n)","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Valid component types are those that are documented in the sections below. Each component object is identified by an id, which must be a string (id <: String), but id does not appear inside of the component dictionary, and only appears as keys to the component dictionaries under each component type. Note that this requirement is so that data structures will be JSON serializable.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Each edge or node component (i.e. all those that are not data objects or buses), is expected to have status fields to specify whether the component is active or disabled, bus or f_bus and t_bus, to specify the buses that are connected to the component, and connections or f_connections and t_connections, to specify the terminals of the buses that are actively connected in an ordered list. NOTE: terminals, connections, f_connections, and t_connections, must be type Vector{Int}.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Parameter values on components are expected to be specified in SI units by default (where applicable) in the engineering data model. Relevant expected units are noted in the sections below. It is possible for the user to select universal scalar factors for power and voltages. For example, if power_scalar_factor and voltage_scalar_factor are their default values given below, where units is listed as watt or var, real units will be kW and kvar. Where units are listed as volt, real units will be kV (multiplied by vm_nom, where that value exists).","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The Used column describes the situations where certain parameters are used. \"always\" indicates those values are used in all contexts, opf, mld, or any other problem name abbreviation indicate they are used in particular for those problems. \"solution\" indicates that those parameters are outputs from the solvers. \"multinetwork\" indicates these values are only used to build multinetwork problems.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Those parameters that have a default may be omitted by the user from the data model, they will be populated by the specified default values.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Components that support \"codes\", such as lines, switches, and transformers, behave such that any property on said object that conflicts with a value in the code will override the value given in the code object. This is noted on each object where this is relevant.","category":"page"},{"location":"manual/eng-data-model.html#Root-Level-Properties","page":"Engineering Data Model","title":"Root-Level Properties","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"At the root level of the data structure, the following fields can be found.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Used Description\nname String Case name\ndata_model ENGINEERING DataModel always ENGINEERING, MATHEMATICAL, or DSS. Type of the data model (this document describes data_model==ENGINEERING)\nsettings Dict() Dict{String,<:Any} always Base settings for the data model, see Settings section below for details","category":"page"},{"location":"manual/eng-data-model.html#Settings-(settings)","page":"Engineering Data Model","title":"Settings (settings)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"At the root-level of the data model a settings dictionary object is expected, containing the following fields.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nvoltage_scale_factor 1e3 Real always Scalar multiplier for voltage values\npower_scale_factor 1e3 Real always Scalar multiplier for power values\nvbases_default Dict{String,Real} always Instruction to set the vbase at a number of buses for non-dimensionalization\nsbase_default Real always Instruction to set the power base for non-dimensionalization\nbase_frequency 60.0 Real Hz always Frequency base, i.e. the base frequency of the whole circuit","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The parameters voltage_scale_factor and power_scale_factordetermine the base for all voltage and power parameters in this data model. For example,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"voltage_scale_factor=1E3 and vm_nom=4.0: vm_nom is 4.0 kV/4.0E3 V,\npower_scale_factor=1E6 and pd_nom=2.0: pd_nom is 2.0 MW/2.0E6 W,\npower_scale_factor=1E6 and qd_nom=5.0: qd_nom is 5.0 MVAr/5.0E6 VAr,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"where the mentioned fields vm_nom, pd_nom and qd_nom are sample voltage and power variables which are defined later.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"On the other hand,vbase_default and sbase_default provide default values for a 'per unit' conversion; these do not affect the interpretation of the parameters in this model, like the scale factors do. Note that vbase_default is a Dict{Any,Real}, with pairs of bus ids and voltage magnitude levels, since in per unit conversion, the voltage base can change from bus to bus. The power base is the same everywhere, and therefore sbase_default has a single value.","category":"page"},{"location":"manual/eng-data-model.html#Buses-(bus)","page":"Engineering Data Model","title":"Buses (bus)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The data model below allows us to include buses of arbitrary many terminals (i.e., more than the usual four). This would be useful for","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"underground lines with multiple neutrals which are not joined at every bus;\ndistribution lines that carry several conventional lines in parallel (see for example the quad circuits in NEVTestCase).","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nterminals [1,2,3,4] Vector{Int} always Terminals for which the bus has active connections\nvm_lb Vector{Real} volt opf Minimum conductor-to-ground voltage magnitude, size=nphases\nvm_ub Vector{Real} volt opf Maximum conductor-to-ground voltage magnitude, size=nphases\nvm_pair_ub Vector{Tuple} opf e.g. [(1,2,210)] means |U1-U2|>210\nvm_pair_lb Vector{Tuple} opf e.g. [(1,2,230)] means |U1-U2|<230\ngrounded [] Vector{Int} always List of terminals which are grounded\nrg [] Vector{Real} always Resistance of each defined grounding, size=length(grounded)\nxg [] Vector{Real} always Reactance of each defined grounding, size=length(grounded)\nvm Vector{Real} volt always Voltage magnitude at bus. If set, voltage magnitude at bus is fixed\nva Vector{Real} degree always Voltage angle at bus. If set, voltage angle at bus is fixed\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Each terminal c of the bus has an associated complex voltage phasor v[c]. There are two types of voltage magnitude bounds. The first type bounds the voltage magnitude of each v[c] individually,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"lb <= |v[c]| <= ub","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"However, especially in four-wire networks, bounds are more naturally imposed on the difference of two terminal voltages instead, e.g. for terminals c and d,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"lb <= |v[c]-v[d]| <= ub","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"This is why we introduce the fields vm_pair_lb and vm_pair_ub, which define bounds for pairs of terminals,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"forall\n(c,d,lb) in vm_pair_lb: |v[c]-v[d]| >= lb\nforall\n(c,d,ub) in vm_pair_ub: |v[c]-v[d]| <= ub","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Finally, we give an example of how grounding impedances should be entered. If terminal 4 is grounded through an impedance Z=1+j2, we write","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"grounded=[4], rg=[1], xg=[2]","category":"page"},{"location":"manual/eng-data-model.html#Special-Case:-three-phase-bus","page":"Engineering Data Model","title":"Special Case: three-phase bus","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"For three-phase buses, instead of specifying bounds explicitly for each pair of windings, often we want to specify 'phase-to-phase', 'phase-to-neutral' and 'neutral-to-ground' bounds. This can be done conveniently with a number of additional fields. First, phases is a list of the phase terminals, and neutral designates a single terminal to be the neutral.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The bounds vm_pn_lb and vm_pn_ub specify the same lower and upper bound for the magnitude of the difference of each phase terminal and the neutral.\nThe bounds vm_pp_lb and vm_pp_ub specify the same lower and upper bound for the magnitude of the difference of all phase terminals.\nvm_ng_ub specifies an upper bound for the neutral terminal, the lower bound is typically zero.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"If all of these are specified, these bounds also imply valid bounds for the individual voltage magnitudes,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"forall\nc in phases: vm_pn_lb - vm_ng_ub <= |v[c]| <= vm_pn_ub + vm_ng_ub\n0 <= |v[neutral]|<= vm_ng_ub","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Instead of defining the bounds directly, they can be specified through an associated voltage zone.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nphases Vector{Int} always Identifies the terminal that represents the neutral conductor\nneutral Int always Identifies the terminal that represents the neutral conductor\nvm_pn_lb Real opf Minimum phase-to-neutral voltage magnitude for all phases\nvm_pn_ub Real opf Maximum phase-to-neutral voltage magnitude for all phases\nvm_pp_lb Real opf Minimum phase-to-phase voltage magnitude for all phases\nvm_pp_ub Real opf Maximum phase-to-phase voltage magnitude for all phases\nvm_ng_ub Real opf Maximum neutral-to-ground voltage magnitude","category":"page"},{"location":"manual/eng-data-model.html#Edge-Objects","page":"Engineering Data Model","title":"Edge Objects","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"These objects represent edges on the power grid and therefore require f_bus and t_bus (or buses in the case of transformers), and f_connections and t_connections (or connections in the case of transformers).","category":"page"},{"location":"manual/eng-data-model.html#Lines-(line)","page":"Engineering Data Model","title":"Lines (line)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"This is a pi-model branch. When a linecode is given, and any of rs, xs, b_fr, b_to, g_fr or g_to are specified, any of those overwrite the values on the linecode.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nf_bus String always id of from-side bus connection\nt_bus String always id of to-side bus connection\nf_connections Vector{Int} always Indicates for each conductor, to which terminal of the f_bus it connects\nt_connections Vector{Int} always Indicates for each conductor, to which terminal of the t_bus it connects\nlinecode String always id of an associated linecode\nrs Matrix{Real} ohm/meter always Series resistance matrix, size=(nconductors,nconductors)\nxs Matrix{Real} ohm/meter always Series reactance matrix, size=(nconductors,nconductors)\ng_fr zeros(nconductors, nconductors) Matrix{Real} siemens/meter/Hz always From-side conductance, size=(nconductors,nconductors)\nb_fr zeros(nconductors, nconductors) Matrix{Real} siemens/meter/Hz always From-side susceptance, size=(nconductors,nconductors)\ng_to zeros(nconductors, nconductors) Matrix{Real} siemens/meter/Hz always To-side conductance, size=(nconductors,nconductors)\nb_to zeros(nconductors, nconductors) Matrix{Real} siemens/meter/Hz always To-side susceptance, size=(nconductors,nconductors)\nlength 1.0 Real meter always Length of the line\ncm_ub Vector{Real} amp opf Symmetrically applicable current rating, size=nconductors\nsm_ub Vector{Real} watt opf Symmetrically applicable power rating, size=nconductors\nvad_lb Vector{Real} degree opf Voltage angle difference lower bound\nvad_ub Vector{Real} degree opf Voltage angle difference upper bound\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively","category":"page"},{"location":"manual/eng-data-model.html#Transformers-(transformer)","page":"Engineering Data Model","title":"Transformers (transformer)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"These are n-winding (nwinding), n-phase (nphase), lossy transformers. Note that most properties are now Vectors (or Vectors of Vectors), indexed over the windings.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nbus Vector{String} always List of bus for each winding, size=nwindings\nconnections Vector{Vector{Int}} always List of connection for each winding, size=((nconductors),nwindings)\nconfigurations fill(WYE, nwindings) Vector{ConnConfig} always WYE or DELTA. List of configuration for each winding, size=nwindings\nxfmrcode String always id of\nxsc zeros(nwindings*(nwindings-1)/2) Vector{Real} sm_nom[1] always List of short-circuit reactances between each pair of windings, relative to the VA rating of the first winding; enter as a list of the upper-triangle elements\nrw zeros(nwindings) Vector{Real} sm_nom[1] always Active power lost due to resistance of each winding, relative to the VA rating of each winding winding\ncmag 0.0 Real sm_nom[1] always Total no-load reactive power drawn by the transformer, relative to VA rating of the first winding (magnetizing current)\nnoloadloss 0.0 Real sm_nom[1] always Total no-load active power drawn by the transformer, relative to VA rating of the first winding\ntm_nom ones(nwindings) Vector{Real} always Nominal tap ratio for the transformer, size=nwindings (multiplier)\ntm_ub Vector{Vector{Real}} opf Maximum tap ratio for each winding and phase, size=((nphases),nwindings) (base=tm_nom)\ntm_lb Vector{Vector{Real}} opf Minimum tap ratio for for each winding and phase, size=((nphases),nwindings) (base=tm_nom)\ntm_set fill(fill(1.0,nphases),nwindings) Vector{Vector{Real}} always Set tap ratio for each winding and phase, size=((nphases),nwindings) (base=tm_nom)\ntm_fix fill(fill(true,nphases),nwindings) Vector{Vector{Bool}} oltc Indicates for each winding and phase whether the tap ratio is fixed, size=((nphases),nwindings)\npolarity fill(1,nwindings) Vector{Int} always \nvm_nom Vector{Real} volt always \nsm_nom Vector{Real} watt always \nsm_ub Real watt opf Rating for the total apparent power magnitude at each winding\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively","category":"page"},{"location":"manual/eng-data-model.html#Asymmetric,-Lossless,-Two-Winding-(AL2W)-Transformers-(transformer)","page":"Engineering Data Model","title":"Asymmetric, Lossless, Two-Winding (AL2W) Transformers (transformer)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Special case of the Generic transformer, which is still a transformer object, but has a simplified method for its definition. These are transformers are asymmetric (A), lossless (L) and two-winding (2W). Asymmetric refers to the fact that the secondary is always has a WYE configuration, whilst the primary can be DELTA. The table below indicates alternate, more simple ways to specify the special case of an AL2W Transformer. xsc and rw cannot be specified for an AL2W transformer, because it is lossless. To use this definition format, all of f_bus, t_bus, f_connections, t_connections, and configuration must be used, and none of buses, connections, configurations may be used. xfmrcode is ignored for this component.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nf_bus String always Alternative way to specify buses, requires both f_bus and t_bus\nt_bus String always Alternative way to specify buses, requires both f_bus and t_bus\nf_connections Vector{Int} always Alternative way to specify connections, requires both f_connections and t_connections, size=nphases\nt_connections Vector{Int} always Alternative way to specify connections, requires both f_connections and t_connections, size=nphases\nconfiguration WYE ConnConfig always WYE or DELTA. Alternative way to specify the from-side configuration, to-side is always WYE\ntm_nom 1.0 Real always Nominal tap ratio for the transformer (multiplier)\ntm_ub Vector{Real} opf Maximum tap ratio for each phase (base=tm_nom), size=nphases\ntm_lb Vector{Real} opf Minimum tap ratio for each phase (base=tm_nom), size=nphases\ntm_set fill(1.0,nphases) Vector{Real} always Set tap ratio for each phase (base=tm_nom), size=nphases\ntm_fix fill(true,nphases) Vector{Bool} oltc Indicates for each phase whether the tap ratio is fixed, size=nphases\nsm_ub Real opf Rating for the total apparent power magnitude at each winding","category":"page"},{"location":"manual/eng-data-model.html#Transformers-with-voltage-regulator-control-(controls)","page":"Engineering Data Model","title":"Transformers with voltage regulator control (controls)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Special case of the Generic transformer, which is part of the transformer object, and emulates a standard utility voltage regulator. The taps of these transformers can be controlled by modelling a line drop compensator.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nvreg Vector{Vector{Real}} volt oltc Voltage regulator reference, default value is 120.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)\nband Vector{Vector{Real}} volt oltc Voltage bandwidth, default value is 3.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)\nptratio Vector{Vector{Real}} oltc Voltage ratio of the potential transformer, default value is 60.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)\nctprim Vector{Vector{Real}} amp oltc Current transformer rating on primary side, default value is 300.0 for the controlled winding, 0.0 for winding without regulator control, size=((nphases),nwindings)\nr Vector{Vector{Real}} volt oltc Resistance setting on line drop compensator, default value is 0.0 for both controlled winding and winding without regulator control, size=((nphases),nwindings)\nx Vector{Vector{Real}} volt oltc Reactance setting on line drop compensator, default value is 0.0 for both controlled winding and winding without regulator control, size=((nphases),nwindings)","category":"page"},{"location":"manual/eng-data-model.html#Switches-(switch)","page":"Engineering Data Model","title":"Switches (switch)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Switches without rs, xs or a linecode (conductance/susceptance not considered), defined the switch will be treated as lossless. If lossy parameters are defined, switch objects will be decomposed into virtual branch & bus, and an ideal switch.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nf_bus String always id of from-side bus connection\nt_bus String always id of to-side bus connection\nf_connections Vector{Int} always Indicates for each conductor, to which terminal of the f_bus it connects\nt_connections Vector{Int} always Indicates for each conductor, to which terminal of the t_bus it connects\ncm_ub Vector{Real} amp opf Symmetrically applicable current rating\nsm_ub Vector{Real} watt opf Symmetrically applicable power rating\nlinecode String always id of an associated linecode, does not take into account conductance/susceptance\nrs zeros(nphases,nphases) Matrix{Real} ohm always Series resistance matrix, size=(nphases,nphases)\nxs zeros(nphases,nphases) Matrix{Real} ohm always Series reactance matrix, size=(nphases,nphases)\ndispatchable NO Dispatchable NO or YES, indicates whether switch state can be changed in a switching optimization problem\nstate CLOSED SwitchState always CLOSED: closed or OPEN: open, to indicate state of switch\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively","category":"page"},{"location":"manual/eng-data-model.html#Node-Objects","page":"Engineering Data Model","title":"Node Objects","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"These are objects that have single bus connections. Every object will have at least bus, connections, and status.","category":"page"},{"location":"manual/eng-data-model.html#Shunts-(shunt)","page":"Engineering Data Model","title":"Shunts (shunt)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\ngs Matrix{Real} siemens always Conductance, size=(nconductors,nconductors)\nbs Matrix{Real} siemens always Susceptance, size=(nconductors,nconductors)\nmodel GENERIC ShuntModel GENERIC, CAPACITOR, or REACTOR. Indicates the type of shunt which may be necessary for transient stability analysis\ndispatchable NO Dispatchable mld NO or YES, indicates whether a shunt can be shed\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,Any} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html#Shunts-with-capacitor-control-(controls)","page":"Engineering Data Model","title":"Shunts with capacitor control (controls)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Special case of the shunt capacitors, which is part of the shunt object, and emulates a typical utility capacitor control (CapControl) by sending switching messages.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\ntype Vector{String} capc Control type, default is current for controlled phase, `for uncontrolled phase,size=1forkvartype, otherwisesize=(nphases)`\nelement String capc source_id of element (typically line or transformer) to which CapControl is connected\nterminal Vector{Int} capc Number of the terminal of circuit element to which CapControl is connected, default is 1 for controlled phase, 0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)\nonsetting Vector{Real} capc Value at which the CapControl switches the capacitor on, default is 300.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)\noffsetting Vector{Real} capc Value at which the CapControl switches the capacitor off, default is 200.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)\nvoltoverride Vector{Bool} capc Indicate whether voltage over ride is enabled, default is false for both controlled and uncontrolled phases, size=1 for kvar type, otherwise size=(nphases)\nptratio Vector{Real} capc Ratio of potential transformer, default is 60.0 for controlled phase, 0.0 for uncontrolled phase, size=(nphases)\nctratio Vector{Real} capc Ratio of current transformer, default is 60.0 for controlled phase, 0.0 for uncontrolled phase, size=(nphases)\nvmin Vector{Real} volt capc Minimum voltage below which CapControl switches the capacitor on, default is 115.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)\nvmax Vector{Real} volt capc Maximum voltage above which CapControl switches the capacitor off, default is 126.0 for controlled phase, 0.0 for uncontrolled phase, size=1 for kvar type, otherwise size=(nphases)","category":"page"},{"location":"manual/eng-data-model.html#Loads-(load)","page":"Engineering Data Model","title":"Loads (load)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\nconfiguration WYE ConnConfig always WYE or DELTA. If WYE, connections[end]=neutral\nmodel POWER LoadModel always POWER, IMPEDANCE, CURRENT, EXPONENTIAL, or ZIP. Indicates the type of voltage-dependency\npd_nom Vector{Real} watt always Nominal active load, with respect to vm_nom, size=nphases\nqd_nom Vector{Real} var always Nominal reactive load, with respect to vm_nom, size=nphases\nvm_nom Real volt model!=POWER Nominal voltage (multiplier)\ndispatchable NO Dispatchable mld NO or YES, indicates whether a load can be shed\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Multi-phase loads define a number of individual loads connected between two terminals each. How they are connected, is defined both by configuration and connections. The table below indicates the value of configuration and lengths of the other properties for a consistent definition,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"configuration connections pd_nom | qd_nom | pd_exp\nDELTA 2 1\nDELTA 3 3\nWYE 2 1\nWYE 3 2\nWYE N N-1","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Note that for delta loads, only 2 and 3 connections are allowed. Each individual load i is connected between two terminals, exposed to a voltage magnitude v[i], which leads to a consumption pd[i]+j*qd[i]. The model then defines the relationship between these quantities,","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"model pd[i]/pd_nom[i]= qd[i]/qd_nom[i]=\nPOWER 1 1\nCURRENT (v[i]/vm_nom) (v[i]/vm_nom)\nIMPEDANCE (v[i]/vm_nom)^2 (v[i]/vm_nom)^2","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Two more model types are supported, which need additional fields and are defined below.","category":"page"},{"location":"manual/eng-data-model.html#model-EXPONENTIAL","page":"Engineering Data Model","title":"model == EXPONENTIAL","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"(pd[i]/pd_nom[i]) = (v[i]/vm_nom)^pd_exp[i]\n(qd[i]/qd_nom[i]) = (v[i]/vm_nom)^qd_exp[i]","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\npd_exp Real model==EXPONENTIAL \nqd_exp Real model==EXPONENTIAL ","category":"page"},{"location":"manual/eng-data-model.html#model-ZIP","page":"Engineering Data Model","title":"model == ZIP","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"ZIP load models are split into IMPEDANCE, CURRENT, POWER models.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"(pd[i]/pd_nom) = pd_cz[i]*(v[i]/vm_nom)^2 + pd_ci[i]*(v[i]/vm_nom) + pd_cp[i]\n(qd[i]/qd_nom) = qd_cz[i]*(v[i]/vm_nom)^2 + qd_ci[i]*(v[i]/vm_nom) + qd_cp[i]","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nzipv Vector{Real} model==ZIP First 3 are ZIP weighting factors for active power (pd_cz,pd_ci,pd_cp), next 3 are ZIP weighting factors for reactive power (qd_cz,qd_ci,qd_cp), last 1 is cut-off voltage in p.u. of base kV; load is 0 below this cut-off","category":"page"},{"location":"manual/eng-data-model.html#Generators-(generator)","page":"Engineering Data Model","title":"Generators (generator)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\nconfiguration WYE ConnConfig always WYE or DELTA. If WYE, connections[end]=neutral\nvg Vector{Real} volt control_mode==ISOCHRONOUS Voltage magnitude setpoint\npg_lb zeros(nphases) Vector{Real} watt opf Lower bound on active power generation per phase, size=nphases\npg_ub fill(Inf, nphases) Vector{Real} watt opf Upper bound on active power generation per phase, size=nphases\nqg_lb -pg_ub Vector{Real} var opf Lower bound on reactive power generation per phase, size=nphases\nqg_ub pg_ub Vector{Real} var opf Upper bound on reactive power generation per phase, size=nphases\npg Vector{Real} watt solution Present active power generation per phase, size=nphases\nqg Vector{Real} var solution Present reactive power generation per phase, size=nphases\ncontrol_mode FREQUENCYDROOP ControlMode FREQUENCYDROOP or ISOCHRONOUS\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html#generator-Cost-Model","page":"Engineering Data Model","title":"generator Cost Model","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The generator cost model is currently specified by the following fields.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\ncost_pg_model 2 Int opf Cost model type, 1 = piecewise-linear, 2 = polynomial\ncost_pg_parameters [0.0, 1.0, 0.0] Vector{Real} /MVA opf Cost model polynomial","category":"page"},{"location":"manual/eng-data-model.html#Photovoltaic-Systems-(solar)","page":"Engineering Data Model","title":"Photovoltaic Systems (solar)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\nconfiguration WYE ConnConfig always WYE or DELTA. If WYE, connections[end]=neutral\npg_lb Vector{Real} watt opf Lower bound on active power generation per phase, size=nphases\npg_ub Vector{Real} watt opf Upper bound on active power generation per phase, size=nphases\nqg_lb Vector{Real} var opf Lower bound on reactive power generation per phase, size=nphases\nqg_ub Vector{Real} var opf Upper bound on reactive power generation per phase, size=nphases\npg Vector{Real} watt solution Present active power generation per phase, size=nphases\nqg Vector{Real} var solution Present reactive power generation per phase, size=nphases\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html#solar-Cost-Model","page":"Engineering Data Model","title":"solar Cost Model","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"The cost model for a photovoltaic system currently matches that of generators.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\ncost_pg_model 2 Int opf Cost model type, 1 = piecewise-linear, 2 = polynomial\ncost_pg_parameters [0.0, 1.0, 0.0] Vector{Real} /MVA opf Cost model polynomial","category":"page"},{"location":"manual/eng-data-model.html#Wind-Turbine-Systems-(wind)","page":"Engineering Data Model","title":"Wind Turbine Systems (wind)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Wind turbine systems are most closely approximated by induction machines, also known as asynchronous machines. These are not currently supported, but there is plans to support them in the future.","category":"page"},{"location":"manual/eng-data-model.html#Storage-(storage)","page":"Engineering Data Model","title":"Storage (storage)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"A storage object is a flexible component that can represent a variety of energy storage objects, like Li-ion batteries, hydrogen fuel cells, flywheels, etc.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"How to include the inverter model for this? Similar issue as for a PV generator","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\nconfiguration WYE ConnConfig always WYE or DELTA. If WYE, connections[end]=neutral\nenergy Real watt-hr always Stored energy\nenergy_ub Real opf maximum energy rating\ncharge_ub Real opf maximum charge rating\ndischarge_ub Real opf maximum discharge rating\nsm_ub Real watt opf Power rating,\ncm_ub Real amp opf Current rating,\ncharge_efficiency Real percent always charging efficiency (losses)\ndischarge_efficiency Real percent always discharging efficiency (losses)\nqs_ub Real opf Maximum reactive power injection,\nqs_lb Real opf Minimum reactive power injection,\nrs Real ohm always converter resistance\nxs Real ohm always converter reactance\npex Real always Total active power standby exogenous flow (loss)\nqex Real always Total reactive power standby exogenous flow (loss)\nps Vector{Real} watt solution Present active power injection\nqs Vector{Real} var solution Present reactive power injection\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html#Voltage-Sources-(voltage_source)","page":"Engineering Data Model","title":"Voltage Sources (voltage_source)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"A voltage source is a source of power at a set voltage magnitude and angle connected to a slack bus. If rs or xs are not specified, the voltage source is assumed to be lossless, otherwise virtual branch and bus will be created in the mathematical model to represent the internal losses of the voltage source.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data 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\nconfiguration WYE ConnConfig always WYE or DELTA. If WYE, connections[end]=neutral\nvm ones(nphases) Vector{Real} volt always Voltage magnitude set at slack bus, size=nphases\nva zeros(nphases) Real degree always Voltage angle offsets at slack bus, applies symmetrically to each phase angle\nrs zeros(nconductors,nconductors) Matrix{Real} ohm always Internal series resistance of voltage source, size=(nconductors,nconductors)\nxs zeros(nconductors,nconductors) Matrix{Real} ohm always Internal series reactance of voltage soure, size=(nconductors,nconductors)\nstatus ENABLED Status always ENABLED or DISABLED. Indicates if component is enabled or disabled, respectively\ntime_series Dict{String,String} multinetwork Dictionary containing time series parameters.","category":"page"},{"location":"manual/eng-data-model.html#Data-Objects-(codes,-time-series,-etc.)","page":"Engineering Data Model","title":"Data Objects (codes, time series, etc.)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"These objects are referenced by node and edge objects, but are not part of the network themselves, only containing data.","category":"page"},{"location":"manual/eng-data-model.html#Linecodes-(linecode)","page":"Engineering Data Model","title":"Linecodes (linecode)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Linecodes are easy ways to specify properties common to multiple lines.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nrs Matrix{Real} ohm/meter always Series resistance, size=(nconductors,nconductors)\nxs Matrix{Real} ohm/meter always Series reactance, size=(nconductors,nconductors)\ng_fr zeros(nconductors,nconductors) Matrix{Real} siemens/meter/Hz always From-side conductance, size=(nconductors,nconductors)\nb_fr zeros(nconductors,nconductors) Matrix{Real} siemens/meter/Hz always From-side susceptance, size=(nconductors,nconductors)\ng_to zeros(nconductors,nconductors) Matrix{Real} siemens/meter/Hz always To-side conductance, size=(nconductors,nconductors)\nb_to zeros(nconductors,nconductors) Matrix{Real} siemens/meter/Hz always To-side susceptance, size=(nconductors,nconductors)\ncm_ub fill(Inf,nconductors) Vector{Real} ampere opf maximum current per conductor, symmetrically applicable\nsm_ub fill(Inf,nconductors) Vector{Real} watt opf maximum power per conductor, symmetrically applicable","category":"page"},{"location":"manual/eng-data-model.html#Transformer-Codes-(xfmrcode)","page":"Engineering Data Model","title":"Transformer Codes (xfmrcode)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Transformer codes are easy ways to specify properties common to multiple transformers","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\nconfigurations fill(WYE, nwindings) Vector{ConnConfig} always WYE or DELTA. List of configuration for each winding, size=nwindings\nxsc [0.0] Vector{Real} ohm always List of short-circuit reactances between each pair of windings; enter as a list of the upper-triangle elements, size=(nwindings == 2 ? 1 : 3)\nrw zeros(nwindings) Vector{Real} ohm always List of the winding resistance for each winding, size=nwindings\ntm_nom ones(nwindings) Vector{Real} always Nominal tap ratio for the transformer, size=nwindings (multiplier)\ntm_ub Vector{Vector{Real}} opf Maximum tap ratio for each winding and phase, size=((nphases), nwindings) (base=tm_nom)\ntm_lb Vector{Vector{Real}} opf Minimum tap ratio for for each winding and phase, size=((nphases), nwindings) (base=tm_nom)\ntm_set fill(fill(1.0, nphases), nwindings) Vector{Vector{Real}} always Set tap ratio for each winding and phase, size=((nphases), nwindings) (base=tm_nom)\ntm_fix fill(fill(true, nphases), nwindings) Vector{Vector{Bool}} always Indicates for each winding and phase whether the tap ratio is fixed, size=((nphases), nwindings)","category":"page"},{"location":"manual/eng-data-model.html#Time-Series-(time_series)","page":"Engineering Data Model","title":"Time Series (time_series)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Time series objects are used to specify time series for e.g. load or generation forecasts.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Some parameters for components specified in this document can support a time series by inserting a reference to a time_series object into the time_series dictionary inside a component under the relevant parameter name. For example, for a load, if pd_nom is supposed to be a time series, the user would specify \"time_series\" => Dict(\"pd_nom\" => time_series_id) where time_series_id is the id of an object in time_series, and has type Any.","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\ntime Union{Vector{Real},Vector{String}} hour always Time points at which values are specified. If time is specified in String, units not required to be in hours.\nvalues Vector{Real} always Multipers at each time step given in time\noffset 0 Real hour always Start time offset\nreplace true Bool always Indicates to replace with data, instead of multiply. Will only work on non-Array data","category":"page"},{"location":"manual/eng-data-model.html#Fuses-(fuse)","page":"Engineering Data Model","title":"Fuses (fuse)","text":"","category":"section"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Fuses can be defined on any terminal of any physical component","category":"page"},{"location":"manual/eng-data-model.html","page":"Engineering Data Model","title":"Engineering Data Model","text":"Name Default Type Units Used Description\ncomponent_type String \ncomponent_id String \nterminals Vector{Int} \nfuse_curve Array{Vector{Real},2} specifies the fuse blowing condition\nminimum_melting_curve Array{Vector{Real},2} specifies the minimum melting conditions of the fuse","category":"page"},{"location":"developer/contributing.html#Pull-Requests","page":"Contributing","title":"Pull Requests","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"All pull requests should be reviewed by a core developer, and may include a review by a subject matter expert if the area of the PR is outside that of one of the core developers. In that case, the core developers will primarily review style and design, rather than substance.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Every PR to PowerModelsDistribution should strive to meet the following guidelines.","category":"page"},{"location":"developer/contributing.html#PR-Title","page":"Contributing","title":"PR Title","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Should be concise and clear, describing in a phrase the content of the PR\nShould include a prefix that describes the primary type of the PR\nADD: feature addition\nFIX: bugfix\nREF: refactor\nUPD: updates to code for e.g. version bumps of dependencies\nSTY: style changes, no changes to function names, added features, etc.\nDOC: documentation-only additions/changes\nRM: dead code removal","category":"page"},{"location":"developer/contributing.html#PR-Body","page":"Contributing","title":"PR Body","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"If the change is breaking, it should be clearly stated up front\nThe purpose of this PR should be clearly stated right away\nMajor changes / additions to the code should be summarized. In the case where a refactor was performed, the name changes of public functions should be documented in the body of the PR\nAny associated Issues should be referenced in the body of the PR, and it is accepted/encouraged to use Closes #XX to automatically close Issues after the PR is merged","category":"page"},{"location":"developer/contributing.html#PR-Code","page":"Contributing","title":"PR Code","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"An entry should be added to CHANGELOG.md for every PR\nDocumentation should be updated (See Documentation section above for guidelines)\nUnit tests should be added. In the case where existing unit tests were altered, an explanation for the change must be included\nCode should be rebased to the latest version of whatever branch the PR is aimed at (no merge conflicts!)","category":"page"},{"location":"developer/contributing.html#Versions","page":"Contributing","title":"Versions","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"PowerModelsDistribution follows the Semantic Versioning (SemVer) convention of Major.minor.patch, where Major indicates breaking changes, minor indicates non-breaking feature additions, and patch indicates non-breaking bugfixes.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Currently, because Major==0, minor indicates breaking changes and patch indicates any non-breaking change, including both feature additions and bugfixes. Once PowerModelsDistribution reaches v1.0.0, we will adhere strictly to the SemVer convention.","category":"page"},{"location":"developer/contributing.html#Branch-Management","page":"Contributing","title":"Branch Management","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"The main branch is a protected branch, meaning that its history will always be contiguous and can never be overwritten.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Release candidate branches of the format vM.m.0-rc are also protected branches. These branches will contain only breaking changes and will not be merged into main until a new version is ready to be tagged. Pull requests including breaking changes should be directed into the next release candidate branch available, e.g. if the current version of the package is v0.9.0, the next release candidate branch will be v0.10.0-rc.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Pull requests that include only non-breaking changes can be merged directly into main once approved, and in the case of merge conflicts arising for release candidate branches, the -rc branch will need to be updated to include the latest main.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Pull requests will generally be merged using squash and merge into the branch they are aimed at, with the exception of release candidate branches, which generally be merged using rebase and merge into main.","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 = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"solve\")","category":"page"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_mld-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_mld","text":"Solve load shedding problem with storage\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_mld_uc-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_mld_uc","text":"Solve unit commitment load shedding problem (!relaxed)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_model-Tuple{Dict{String}, Type, Any, Function}","page":"Problems","title":"PowerModelsDistribution.solve_mc_model","text":"solve_mc_model(\n data::Dict{String,<:Any},\n model_type::Type,\n optimizer,\n build_mc::Function;\n ref_extensions::Vector{<:Function}=Function[],\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n eng2math_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,<:Vector{<:String}}=Dict{String,Vector{String}}(),\n make_si::Bool=!get(data, \"per_unit\", false),\n make_si_extensions::Vector{<:Function}=Function[],\n dimensionalize_math_extensions::Dict{String,Dict{String,Vector{String}}}=Dict{String,Dict{String,Vector{String}}}(),\n kwargs...\n)::Dict{String,Any}\n\nTakes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns a solution in the original data model defined by data.\n\nIf make_si is false, data will remain in per-unit.\n\nFor an explanation of multinetwork and global_keys, see make_multinetwork\n\nFor an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model\n\nFor an explanation of make_pu_extensions, see make_per_unit!\n\nFor an explanation of ref_extensions, see instantiate_mc_model\n\nFor an explanation of map_math2eng_extensions, make_si, make_si_extensions, and dimensionalize_math_extensions, see solution_make_si\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_model-Tuple{String, Type, Any, Function}","page":"Problems","title":"PowerModelsDistribution.solve_mc_model","text":"solve_mc_model(\n file::String,\n model_type::Type,\n optimizer,\n build_mc::Function;\n dss2eng_extensions::Vector{<:Function}=Function[],\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n kwargs...\n)::Dict{String,Any}\n\nGiven a file::String, data will be parsed automatically from the file.\n\nSee solve_mc_model for detailed explanation of function arguments.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_opf-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_opf","text":"function solve_mc_opf(\n\tdata::Union{Dict{String,<:Any},String},\n\tmodel_type::Type,\n\tsolver;\n\tkwargs...\n)\n\nSolve Optimal Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_opf_capc-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_opf_capc","text":"solve_mc_opf_capc(data::Union{Dict{String,<:Any},String}, model_type::Type, solver; kwargs...)\n\nSolve OPF with capacitor control\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_opf_oltc-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_opf_oltc","text":"Solve on-load tap-changer OPF\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_opf_oltc_capc-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_opf_oltc_capc","text":"solve_mc_opf_capc(data::Union{Dict{String,<:Any},String}, model_type::Type, solver; kwargs...)\n\nSolve OPF with capacitor control\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_opf_pbs-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_opf_pbs","text":"Solve OPF problem with slack power at every bus\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_pf-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_pf","text":"Power Flow Problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mc_pf_pbs-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mc_pf_pbs","text":"Solve PF problem with slack power at every bus\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mn_mc_mld_simple-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mn_mc_mld_simple","text":"Solve multinetwork load shedding problem with storage\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.solve_mn_mc_opf-Tuple{Union{String, Dict{String}}, Type, Any}","page":"Problems","title":"PowerModelsDistribution.solve_mn_mc_opf","text":"function solve_mn_mc_opf(\n\tdata::Union{Dict{String,<:Any},String},\n\tmodel_type::Type,\n\tsolver;\n\tkwargs...\n)\n\nSolve multinetwork optimal power flow problem\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 = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"build\")","category":"page"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_mld-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_mld","text":"Load shedding problem for Branch Flow model\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_mld-Tuple{AbstractUnbalancedIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_mld","text":"\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_mld-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_mld","text":"Load shedding problem including storage (snap-shot)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_mld_bf-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_mld_bf","text":"Load shedding problem for Branch Flow model\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_mld_uc-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_mld_uc","text":"Standard unit commitment (!relaxed) load shedding problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf-Tuple{AbstractExplicitNeutralACRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf","text":"function build_mc_opf(\n\tpm::AbstractExplicitNeutralACRModel\n)\n\nconstructor for OPF in power-voltage variable space with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf-Tuple{AbstractExplicitNeutralIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf","text":"function build_mc_opf(\n\tpm::AbstractExplicitNeutralIVRModel\n)\n\nconstructor for OPF in current-voltage variable space with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf","text":"function build_mc_opf(\n\tpm::AbstractUBFModels\n)\n\nconstructor for branch flow opf\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf-Tuple{AbstractUnbalancedIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf","text":"function build_mc_opf(\n\tpm::AbstractUnbalancedIVRModel\n)\n\nconstructor for OPF in current-voltage variable space\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf","text":"function build_mc_opf(\n\tpm::AbstractUnbalancedPowerModel\n)\n\nConstructor for Optimal Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_capc-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_capc","text":"constructor for branch flow opf with capcontrol\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_capc-Tuple{AbstractUnbalancedIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_capc","text":"constructor for capcontrol OPF in current-voltage variable space\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_capc-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_capc","text":"build_mc_opf_capc(pm::AbstractUnbalancedPowerModel)\n\nConstructor for capcontrol OPF\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_oltc-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_oltc","text":"constructor for branch flow on-load tap-changer OPF\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_oltc-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_oltc","text":"constructor for on-load tap-changer OPF\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_oltc_capc-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_oltc_capc","text":"constructor for branch flow opf\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_oltc_capc-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_oltc_capc","text":"build_mc_opf_capc(pm::AbstractUnbalancedPowerModel)\n\nConstructor for capcontrol OPF\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_opf_pbs-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_opf_pbs","text":"OPF problem with slack power at every bus\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_pf-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mc_pf","text":"Constructor for Branch Flow Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_pf-Tuple{AbstractUnbalancedIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_pf","text":"Constructor for Power Flow in current-voltage variable space\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_pf-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_pf","text":"Constructor for Power Flow Problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mc_pf_pbs-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mc_pf_pbs","text":"PF problem with slack power at every bus\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_mld_simple-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_mld_simple","text":"Multinetwork load shedding problem for Branch Flow model\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_mld_simple-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_mld_simple","text":"Multinetwork load shedding problem including storage\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_opf-Tuple{AbstractExplicitNeutralIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_opf","text":"function buildmcopf( pm::AbstractExplicitNeutralIVRModel )\n\nconstructor for multinetwork OPF in current-voltage variable space with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_opf-Tuple{AbstractUBFModels}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_opf","text":"function build_mn_mc_opf(\n\tpm::AbstractUBFModels\n)\n\nMultinetwork branch flow optimal power flow problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_opf-Tuple{AbstractUnbalancedIVRModel}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_opf","text":"function build_mn_mc_opf(\n\tpm::AbstractUnbalancedIVRModel\n)\n\nMultinetwork current-voltage optimal power flow problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_mn_mc_opf-Tuple{AbstractUnbalancedPowerModel}","page":"Problems","title":"PowerModelsDistribution.build_mn_mc_opf","text":"function build_mn_mc_opf(\n\tpm::AbstractUnbalancedPowerModel\n)\n\nMultinetwork optimal power flow problem\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_pf_result-Tuple{PowerFlowData, Vector{ComplexF64}, PFTerminationStatus, Int64, Real, Real}","page":"Problems","title":"PowerModelsDistribution.build_pf_result","text":"build_pf_result(\n pfd::PowerFlowData,\n Uv::Vector,\n status::PFTerminationStatus,\n its::Int,\n time::Real,\n stationarity::Real,\n verbose::Bool\n)\n\nBuilds the result dict from the solution dict.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.build_pf_solution-Tuple{PowerFlowData, Vector{ComplexF64}}","page":"Problems","title":"PowerModelsDistribution.build_pf_solution","text":"build_pf_solution(\n pfd::PowerFlowData,\n Uv::Vector\n)\n\nBuilds the solution dict.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Model-Instantiation","page":"Problems","title":"Model Instantiation","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"instantiate_mc_model","category":"page"},{"location":"reference/problems.html#PowerModelsDistribution.instantiate_mc_model","page":"Problems","title":"PowerModelsDistribution.instantiate_mc_model","text":"instantiate_mc_model(\n data::Dict{String,<:Any},\n model_type::Type,\n build_method::Function;\n ref_extensions::Vector{<:Function}=Function[],\n multinetwork::Bool=false,\n global_keys::Set{String}=Set{String}(),\n eng2math_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,<:Vector{<:String}}=Dict{String,Vector{String}}(),\n make_pu_extensions::Vector{<:Function}=Function[],\n kwargs...\n)\n\nTakes data in either the ENGINEERING or MATHEMATICAL model, a model type (e.g., ACRUPowerModel), and model builder function (e.g., build_mc_opf), and returns an AbstractUnbalancedPowerModel structure.\n\nFor an explanation of multinetwork and global_keys, see make_multinetwork\n\nFor an explanation of eng2math_extensions and eng2math_passthrough, see transform_data_model\n\nFor an explanation of make_pu_extensions, see make_per_unit!\n\nref_extensions\n\nInside of the model structures, data can be quickly accessed via the ref function. By default, the only ref objects available are created by ref_add_core!, but users can add their own custom ref objects by passing functions via ref_extensions that have the signature:\n\nref_add!(ref::Dict{Symbol,Any}, data::Dict{String,Any})\n\nSee the Beginners Guide for an example.\n\n\n\n\n\n","category":"function"},{"location":"reference/problems.html#Solution-Helpers","page":"Problems","title":"Solution Helpers","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"sol_\")","category":"page"},{"location":"reference/problems.html#PowerModelsDistribution.sol_data_model!-Tuple{AbstractUnbalancedACRModel, Dict{String}}","page":"Problems","title":"PowerModelsDistribution.sol_data_model!","text":"sol_data_model!(pm::AbstractUnbalancedACRModel, solution::Dict{String,<:Any})\n\nsolutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert ACR variables back into polar representation (default data model voltage form)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.sol_data_model!-Tuple{AbstractUnbalancedPowerModel, Dict{String}}","page":"Problems","title":"PowerModelsDistribution.sol_data_model!","text":"sol_data_model!(pm::AbstractUnbalancedPowerModel, solution::Dict{String,<:Any})\n\ndoes nothing (no sol_data_model! exists for the formulation attempting to be converted)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.sol_data_model!-Tuple{AbstractUnbalancedWModels, Dict{String}}","page":"Problems","title":"PowerModelsDistribution.sol_data_model!","text":"sol_data_model!(pm::AbstractUnbalancedWModels, solution::Dict{String,<:Any})\n\nsolutionprocessor, see [`solvemcmodel`](@ref solvemc_model), to convert W variables back into polar representation (default data model voltage form)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.sol_data_model!-Tuple{FBSUBFPowerModel, Dict{String}}","page":"Problems","title":"PowerModelsDistribution.sol_data_model!","text":"sol_data_model!(pm::FBSUBFPowerModel, solution::Dict{String,<:Any})\n\nsolution_processor, to convert FBS variables back into polar representation (default data model voltage form)\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsDistribution.sol_data_model!-Tuple{FOTRUPowerModel, Dict{String}}","page":"Problems","title":"PowerModelsDistribution.sol_data_model!","text":"sol_data_model!(pm::FOTRUPowerModel, solution::Dict{String,<:Any})\n\nsolution_processor, to convert FOT rectangular variables back into polar representation (default data model voltage form)\n\n\n\n\n\n","category":"method"},{"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 = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"run\")","category":"page"},{"location":"manual/load-model.html#Load-Models","page":"Load Models","title":"Load Models","text":"","category":"section"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^d=S^d_1S^d_n^T","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"is a column vector ntimes 1, specifying for each individual load how much power is consumed. By definition, this is","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^d=U^dodot left(I^dright)^*","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"where U^d is the voltage applied across each individual load and I^d is the current drawn by each load. At the same time, the composed load is connected to a bus with voltage U^textbus, and draws a current I^textbus and power S^textbus.","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"How these quantities relate to each other, depends on how the load is connected.","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"(S^d U^d I^d) (S^textbus U^textbus I^textbus)","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"In the implementations, these variables are referred to as","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"beginalign\nS^d=textpd+jtextqd S^textbus=textpd_bus+jtextqd_bus\nI^d=textcrd+jtextcid I^textbus=textcrd_bus+jtextcid_bus\nU^d=textvrd+jtextvid U^textbus=textvr+jtextvi\nendalign","category":"page"},{"location":"manual/load-model.html#Voltage-dependency","page":"Load Models","title":"Voltage dependency","text":"","category":"section"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"The general, exponential load model is defined as","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"P^d_i = P^d0_i left(fracV^d_iV^d0_iright)^alpha_i = a_i left(V^d_iright)^alpha_i","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"Q^d_i = Q^d0_i left(fracV^d_iV^d0_iright)^beta_i = b_i left(V^d_iright)^beta_i","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"There are a few cases which get a special name: constant power (alpha=beta=0), constant current (alpha=beta=1), and constant impedance (alpha=beta=2).","category":"page"},{"location":"manual/load-model.html#Wye-connected-Loads","page":"Load Models","title":"Wye-connected Loads","text":"","category":"section"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"A wye-connected load connects between a set of phases mathcalP and a neutral conductor n. The voltage as seen by each individual load is then","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"U^d = U^textbus_mathcalP-U^textbus_n","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"whilst the current","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"I^textbus_mathcalP = I^textdI^textbus_n=-1^TI^d","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"We now develop the expression for the power drawn at the bus for the phase conductors","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^textbus_mathcalP = (U^d+U^textbus_n)odot(I^d)^* = S^d+U^textbus_n S^doslash U^d","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"From conservation of power or simply the formulas above,","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^textbus_n = -1^TS^textbus_mathcalP+1^TS^d","category":"page"},{"location":"manual/load-model.html#Grounded-neutral","page":"Load Models","title":"Grounded neutral","text":"","category":"section"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"Note that when the neutral is grounded, i.e. U^textbus_n=0, these formulas simplify to","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^textbus_mathcalP=S^dS^textbus_n=0","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"which is why in Kron-reduced unbalanced networks, you can directly insert the power consumed by the loads, in the nodal power balance equations.","category":"page"},{"location":"manual/load-model.html#Delta-connected-Loads","page":"Load Models","title":"Delta-connected Loads","text":"","category":"section"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"Firstly, define the three-phase delta transformation matrix","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"M^Delta_3 = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"which can be extended to more phases in a straight-forward manner. For loads connected between split-phase terminals of triplex nodes (usually located on the secondary side of center-tapped transformers), we define a single-phase delta transformation matrix","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"M^Delta_1 = beginbmatrix 1 -1 endbmatrix","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"Now,","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"U^d = M^Delta U^textbus I^textbus = left(M^Deltaright)^T I^d","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"We can related S^textbus to U^textbus and I^d","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^textbus = U^textbusodot left(I^textbusright)^* = U^textbusodot left(M^Deltaright)^Tleft(I^dright)^*","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"and using the fact that left(I^dright)^*=S^d oslash U^d, and the expression above for U^d,","category":"page"},{"location":"manual/load-model.html","page":"Load Models","title":"Load Models","text":"S^textbus = U^textbusleft(M^Deltaright)^T S^d oslash M^Delta U^textbus","category":"page"},{"location":"index.html#![PowerModelsDistribution-Logo](assets/logo.svg)","page":"Introduction","title":"(Image: PowerModelsDistribution Logo)","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"CurrentModule = PowerModelsDistribution","category":"page"},{"location":"index.html#What-is-PowerModelsDistribution?","page":"Introduction","title":"What is PowerModelsDistribution?","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"PowerModelsDistribution.jl is a Julia/JuMP-based package for modeling unbalanced (i.e., multiconductor) power networks.","category":"page"},{"location":"index.html#Resources-for-Getting-Started","page":"Introduction","title":"Resources for Getting Started","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the Installation Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the Quickstart Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the introductory tutorial Introduction to PowerModelsDistribution.","category":"page"},{"location":"index.html#How-the-documentation-is-structured","page":"Introduction","title":"How the documentation is structured","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The following is a high-level overview of how our documentation is structured. There are three primary sections:","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The Manual contains detailed documentation for certain aspects of PowerModelsDistribution, such as the data model specification, the Unbalanced Network Formulations, or the Optimization Problem Specifications.\nTutorials contains working examples of how to use PowerModelsDistribution. Start here if you are new to PowerModelsDistribution.\nThe API Reference contains a complete list of the functions you can use in PowerModelsDistribution. Look here if you want to know how to use a particular function.","category":"page"},{"location":"index.html#Citing-PowerModelsDistribution","page":"Introduction","title":"Citing PowerModelsDistribution","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"If you find PowerModelsDistribution useful for your work, we kindly request that you cite the following publication:","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"@article{FOBES2020106664,\ntitle = \"PowerModelsDistribution.jl: An open-source framework for exploring distribution power flow formulations\",\njournal = \"Electric Power Systems Research\",\nvolume = \"189\",\npages = \"106664\",\nyear = \"2020\",\nissn = \"0378-7796\",\ndoi = \"https://doi.org/10.1016/j.epsr.2020.106664\",\nurl = \"http://www.sciencedirect.com/science/article/pii/S0378779620304673\",\nauthor = \"David M. Fobes and Sander Claeys and Frederik Geth and Carleton Coffrin\",\nkeywords = \"Nonlinear optimization, Convex optimization, AC optimal power flow, Julia language, Open-source\",\nabstract = \"In this work we introduce PowerModelsDistribution, a free, open-source toolkit for distribution power network optimization, whose primary focus is establishing a baseline implementation of steady-state multi-conductor unbalanced distribution network optimization problems, which includes implementations of Power Flow and Optimal Power Flow problem types. Currently implemented power flow formulations for these problem types include AC (polar and rectangular), a second-order conic relaxation of the Branch Flow Model (BFM) and Bus Injection Model (BIM), a semi-definite relaxation of BFM, and several linear approximations, such as the simplified unbalanced BFM. The results of AC power flow have been validated against OpenDSS, an open-source “electric power distribution system simulator”, using IEEE distribution test feeders (13, 34, 123 bus and LVTestCase), all parsed using a built-in OpenDSS parser. This includes support for standard distribution system components as well as novel resource models such as generic energy storage (multi-period) and photovoltaic systems, with the intention to add support for additional components in the future.\"\n}","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The associated Power Systems Computation Conference talk can be found on YouTube.","category":"page"},{"location":"index.html#License","page":"Introduction","title":"License","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"This code is provided under a BSD license as part of the Multi-Infrastructure Control and Optimization Toolkit (MICOT) project, LA-CC-13-108.","category":"page"},{"location":"reference/enums.html#EnumAPI","page":"Enums","title":"Enums","text":"","category":"section"},{"location":"reference/enums.html","page":"Enums","title":"Enums","text":"PowerModelsDistributionEnums\nDataModel\nENGINEERING\nMATHEMATICAL\nDSS\nMATPOWER\nLoadModel\nPOWER\nCURRENT\nIMPEDANCE\nEXPONENTIAL\nZIP\nShuntModel\nGENERIC\nCAPACITOR\nREACTOR\nSwitchState\nOPEN\nCLOSED\nControlMode\nFREQUENCYDROOP\nISOCHRONOUS\nConnConfig\nWYE\nDELTA\nDispatchable\nNO\nYES\nStatus\nDISABLED\nENABLED","category":"page"},{"location":"reference/enums.html#PowerModelsDistribution.PowerModelsDistributionEnums","page":"Enums","title":"PowerModelsDistribution.PowerModelsDistributionEnums","text":"Collection of the built-in Enums for PowerModelsDistribution\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.DataModel","page":"Enums","title":"PowerModelsDistribution.DataModel","text":"DataModel\n\nAn Enum to descibe the current data model contained in the structure\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.ENGINEERING","page":"Enums","title":"PowerModelsDistribution.ENGINEERING","text":"Model type for models that are in the PowerModelsDistribution engineering representation\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.MATHEMATICAL","page":"Enums","title":"PowerModelsDistribution.MATHEMATICAL","text":"Model type for models that are in the mathematical representation\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.DSS","page":"Enums","title":"PowerModelsDistribution.DSS","text":"Model type for raw dss imports\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.MATPOWER","page":"Enums","title":"PowerModelsDistribution.MATPOWER","text":"Model type for models imported via parse_file from PowerModels\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.LoadModel","page":"Enums","title":"PowerModelsDistribution.LoadModel","text":"LoadModel\n\nAn Enum to describe the type of load, e.g., constant power, constant current, etc.\n\nInformation about load models can be found under Load Models\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.POWER","page":"Enums","title":"PowerModelsDistribution.POWER","text":"Constant Power load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.CURRENT","page":"Enums","title":"PowerModelsDistribution.CURRENT","text":"Constant Current load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.IMPEDANCE","page":"Enums","title":"PowerModelsDistribution.IMPEDANCE","text":"Constant Impedance load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.EXPONENTIAL","page":"Enums","title":"PowerModelsDistribution.EXPONENTIAL","text":"Exponential load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ZIP","page":"Enums","title":"PowerModelsDistribution.ZIP","text":"ZIP load model\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ShuntModel","page":"Enums","title":"PowerModelsDistribution.ShuntModel","text":"ShuntModel\n\nAn Enum to describe the type of shunt, e.g., generic, capcitor or reactor type.\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.GENERIC","page":"Enums","title":"PowerModelsDistribution.GENERIC","text":"Generic shunt model, usually indicates user-created\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.CAPACITOR","page":"Enums","title":"PowerModelsDistribution.CAPACITOR","text":"Capacitor shunt model, usually indicates parsed from capacitor dss object\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.REACTOR","page":"Enums","title":"PowerModelsDistribution.REACTOR","text":"Reactor shunt model, usually indicates parsed from reactor dss object\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.SwitchState","page":"Enums","title":"PowerModelsDistribution.SwitchState","text":"SwitchState\n\nAn Enum to descibe whether a switch is open or closed\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.OPEN","page":"Enums","title":"PowerModelsDistribution.OPEN","text":"Switch state is open\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.CLOSED","page":"Enums","title":"PowerModelsDistribution.CLOSED","text":"Switch state is closed\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ControlMode","page":"Enums","title":"PowerModelsDistribution.ControlMode","text":"ControlMode\n\nAn Enum to descibe the current control mode of the generation object\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.FREQUENCYDROOP","page":"Enums","title":"PowerModelsDistribution.FREQUENCYDROOP","text":"Generation resource is in frequency droop mode (following)\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ISOCHRONOUS","page":"Enums","title":"PowerModelsDistribution.ISOCHRONOUS","text":"Generation resource is in isochronous mode (forming)\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ConnConfig","page":"Enums","title":"PowerModelsDistribution.ConnConfig","text":"ConnConfig\n\nAn Enum to describe the connection configuration, e.g., wye or delta\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.WYE","page":"Enums","title":"PowerModelsDistribution.WYE","text":"Wye connection configuration\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.DELTA","page":"Enums","title":"PowerModelsDistribution.DELTA","text":"Delta connection configuration\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.Dispatchable","page":"Enums","title":"PowerModelsDistribution.Dispatchable","text":"Dispatchable\n\nAn Enum to describe whether an object is dispatchable, e.g., can a switch state be controled, or can a load or shunt be shed individually.\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.NO","page":"Enums","title":"PowerModelsDistribution.NO","text":"The object is not dispatchable / controllable\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.YES","page":"Enums","title":"PowerModelsDistribution.YES","text":"The object is dispatchable / controllable\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.Status","page":"Enums","title":"PowerModelsDistribution.Status","text":"Status\n\nAn Enum to describe whether an object is enabled or disabled\n\n\n\n\n\n","category":"type"},{"location":"reference/enums.html#PowerModelsDistribution.DISABLED","page":"Enums","title":"PowerModelsDistribution.DISABLED","text":"The object is disabled\n\n\n\n\n\n","category":"constant"},{"location":"reference/enums.html#PowerModelsDistribution.ENABLED","page":"Enums","title":"PowerModelsDistribution.ENABLED","text":"The object is enabled\n\n\n\n\n\n","category":"constant"},{"location":"reference/constraints.html#ConstraintAPI","page":"Constraints","title":"Constraints","text":"","category":"section"},{"location":"reference/constraints.html","page":"Constraints","title":"Constraints","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"constraint\")","category":"page"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_M_psd-Tuple{JuMP.Model, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_M_psd","text":"For rectangular coordinates of a complex matrix M=Mre+im*Mim, this function applies constraints equivalent to requiring that M itself is PSD.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_SWL_psd-Tuple{JuMP.Model, Vararg{Any, 6}}","page":"Constraints","title":"PowerModelsDistribution.constraint_SWL_psd","text":"Take a multi-conductor voltage variable V and a current variable I. The associated power is then defined as S = VI^H Define the lifted variables as W and L as W = VV^H, L = I*I^H Then, it is equally valid that [W S; S^H L] ∈ PSDCone, rank([W S; S^H L])=1 This function adds this PSD constraint for the rectangular coordinates of S, W and L.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::AbstractUnbalancedACPModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching\n\nbeginalign\ntextkvar control (ON) q-q_texton M_q z - ϵ (1-z) \ntextkvar control (OFF) q-q_textoff -M_q (1-z) - ϵ z \ntextvoltage control (ON) v-v_textmin -M_v z + ϵ (1-z) \ntextvoltage control (OFF) v-v_textmax M_v (1-z) - ϵ z\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::AbstractUnbalancedACRModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching\n\nbeginalign\ntextkvar control (ON) q-q_texton M_q z - ϵ (1-z) \ntextkvar control (OFF) q-q_textoff -M_q (1-z) - ϵ z \ntextvoltage control (ON) v_r^2 + v_i^2 - v_textmin^2 -M_v z + ϵ (1-z) \ntextvoltage control (OFF) v_r^2 + v_i^2 - v_textmax^2 M_v (1-z) - ϵ z\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::AbstractUnbalancedIVRModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching\n\nbeginalign\ntextkvar control s = (vr_fr+im*vi_fr)*(cr_fr-im*ci_fr)\ntextkvar control (ON) Ims-q_texton M_q z - ϵ (1-z) \ntextkvar control (OFF) Ims-q_textoff -M_q (1-z) - ϵ z \ntextvoltage control (ON) v_r^2 + v_i^2 - v_textmin^2 -M_v z + ϵ (1-z) \ntextvoltage control (OFF) v_r^2 + v_i^2 - v_textmax^2 M_v (1-z) - ϵ z\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{FBSUBFPowerModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::FBSUBFPowerModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching\n\nbeginalign\ntextkvar control (ON) q-q_texton M_q z - ϵ (1-z) \ntextkvar control (OFF) q-q_textoff -M_q (1-z) - ϵ z \ntextvoltage control (ON) 2 v_r0 v_r + 2 v_i0 v_i - v_r0^2 - v_i0^2 - v_textmin^2 -M_v z + ϵ (1-z) \ntextvoltage control (OFF) 2 v_r0 v_r + 2 v_i0 v_i - v_r0^2 - v_i0^2 - v_textmax^2 M_v (1-z) - ϵ z\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{FOTRUPowerModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::FOTRUPowerModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching similar to FBSUBFPowerModel\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_capacitor_on_off-Tuple{LPUBFDiagModel, Int64, Int64, Vector{Tuple{Int64, Vector{Int64}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_capacitor_on_off","text":"constraint_capacitor_on_off(pm::LPUBFDiagModel, i::Int; nw::Int=nw_id_default)\n\nAdd constraints to model capacitor switching\n\nbeginalign\ntextkvar control (ON) q-q_texton M_q z - ϵ (1-z) \ntextkvar control (OFF) q-q_textoff -M_q (1-z) - ϵ z \ntextvoltage control (ON) w - v_textmin^2 -M_v z + ϵ (1-z) \ntextvoltage control (OFF) w - v_textmax^2 M_v (1-z) - ϵ z\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{AbstractUnbalancedACPModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"constraint_mc_ampacity_from(pm::AbstractUnbalancedACPModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq vm_{fr}^2 i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Float64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"nothing to do, no voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"constraint_mc_ampacity_from(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for branch current limit constraint from-side\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{AbstractUnbalancedRectangularModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"constraint_mc_ampacity_from(pm::AbstractUnbalancedRectangularModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq (vr_{fr}^2 + vi_{fr}^2) i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{AbstractUnbalancedWModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"constraint_mc_ampacity_from(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq w_{fr} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_from-Tuple{LPUBFDiagModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_from","text":"constraint_mc_ampacity_from(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})\n\nACP current limit constraint on branches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq w_{fr} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{AbstractUnbalancedACPModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"constraint_mc_ampacity_to(pm::AbstractUnbalancedACPModel, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches to-side\n\nmathp_{to}^2 + q_{to}^2 \\leq vm_{to}^2 i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Float64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"nothing to do, no voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"constraint_mc_ampacity_to(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothin\n\nTemplate function for branch current limit constraint to-side\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{AbstractUnbalancedRectangularModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"constraint_mc_ampacity_to(pm::AbstractUnbalancedRectangularModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches to-side\n\nmathp_{to}^2 + q_{to}^2 \\leq (vr_{to}^2 + vi_{to}^2) i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{AbstractUnbalancedWModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"constraint_mc_ampacity_to(pm::AbstractUnbalancedWModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on branches to-side\n\nmathp_{to}^2 + q_{to}^2 \\leq w_{to} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ampacity_to-Tuple{LPUBFDiagModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ampacity_to","text":"constraint_mc_ampacity_to(pm::AbstractUnbalancedWModels, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, c_rating::Vector{<:Real})\n\nACP current limit constraint on branches to-side\n\nmathp_{to}^2 + q_{to}^2 \\leq w_{to} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_current_limit-Tuple{AbstractExplicitNeutralACRModel, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector, Vector, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_current_limit","text":"function constraint_mc_branch_current_limit(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector,\n\tt_connections::Vector,\n\tc_rating::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the total current magnitude per conductor.\n\np_fr^2 + q_fr^2 <= r^2 * (vr_fr^2 + vi_fr^2)\np_to^2 + q_to^2 <= r^2 * (vr_to^2 + vi_to^2)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_current_limit-Tuple{AbstractExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector, Vector, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_current_limit","text":"function constraint_mc_branch_current_limit(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector,\n\tt_connections::Vector,\n\tc_rating::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, imposes a bound on the current magnitude per conductor at both ends of the branch (total current, i.e. including shunt contributions).\n\ncr_fr^2 + ci_fr^2 <= c_rating^2\ncr_to^2 + ci_to^2 <= c_rating^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_current_limit-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_current_limit","text":"function constraint_mc_branch_current_limit(\n\tpm::ExplicitNeutralModels,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nFor models with explicit neutrals, imposes a bound on the current magnitude per conductor at both ends of the branch (total current, i.e. including shunt contributions)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_current_series_product_hermitian-Tuple{AbstractUBFModels}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_current_series_product_hermitian","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_flow-Tuple{AbstractUnbalancedAPLossLessModels, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_flow","text":"Already handled by variablemcbranchpowerreal\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_branch_flow-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_branch_flow","text":"constraint_mc_branch_flow(pm::AbstractUnbalancedPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int})\n\nFor superconducting branch flow (brr and brx all zeros)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_balance-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_balance","text":"constraint_mc_bus_voltage_balance(pm::AbstractUnbalancedPowerModel, bus_id::Int; nw=nw_id_default)::Nothing\n\nTemplate function for bus voltage balance constraints.\n\nImpose all balance related constraints for which key present in data model of bus. For a discussion of sequence components and voltage unbalance factor (VUF), see @INPROCEEDINGS{girigoudarmolzahnroald-2019, \tauthor={K. Girigoudar and D. K. Molzahn and L. A. Roald}, \tbooktitle={submitted}, \ttitle={{Analytical and Empirical Comparisons of Voltage Unbalance Definitions}}, \tyear={2019}, \tmonth={}, url={https://molzahn.github.io/pubs/girigoudarmolzahnroald-2019.pdf} }\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_drop-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_drop","text":"function constraint_mc_bus_voltage_drop(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\ti::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tr::Matrix{<:Real},\n\tx::Matrix{<:Real}\n)\n\nFor IVR models with explicit neutrals, defines voltage drop over a branch, linking from and to side complex voltage.\n\nvr_to == vr_fr - r*csr_fr + x*csi_fr\nvi_to == vi_fr - r*csi_fr - x*csr_fr\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_drop-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_drop","text":"Defines voltage drop over a branch, linking from and to side complex voltage\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_drop-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_drop","text":"constraint_mc_bus_voltage_drop(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for bus voltage drop constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_ll-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Vector, Vector}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_ll","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_negative_sequence-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_negative_sequence","text":"a = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off","text":"on/off bus voltage magnitude constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off","text":"constraint_mc_bus_voltage_magnitude_on_off(pm::AbstractUnbalancedPowerModel, nw::Int, i::Int, vmin::Vector{<:Real}, vmax::Vector{<:Real})::Nothing\n\nGeneric on/off bus voltage magnitude constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off","text":"constraint_mc_bus_voltage_magnitude_on_off(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for on/off voltage magnitude constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_positive_sequence-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_positive_sequence","text":"a = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_sqr_on_off-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_sqr_on_off","text":"on/off bus voltage magnitude squared constraint for relaxed formulations\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_sqr_on_off-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_sqr_on_off","text":"constraint_mc_bus_voltage_magnitude_sqr_on_off(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for on/off voltage magnitude squared constraint for relaxed formulations\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_vuf-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_vuf","text":"a = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_zero_sequence-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_zero_sequence","text":"a = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedACPModel}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_on_off","text":"bus voltage on/off constraint for load shed problem\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedACRModel}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_on_off","text":"bus voltage on/off constraint for load shed problem\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedDCPModel}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_on_off","text":"on/off bus voltage constraint for DCP formulation, nothing to do\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedPowerModel}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_on_off","text":"constraint_mc_bus_voltage_on_off(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default)::Nothing\n\nTemplate function for on/off constraint for bus voltages\"\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_bus_voltage_on_off-Tuple{AbstractUnbalancedWModels}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_bus_voltage_on_off","text":"on/off bus voltage constraint for relaxed forms\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_balance-Tuple{AbstractUnbalancedIVRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_balance","text":"Kirchhoff's current law applied to buses sum(cr + im*ci) = 0\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_balance-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_balance","text":"constraint_mc_current_balance(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints in current-voltage variable space\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_balance-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_balance","text":"function constraint_mc_current_balance(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool},\n\tbus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_gens::Vector{Tuple{Int,Vector{Int}}},\n\tbus_storage::Vector{Tuple{Int,Vector{Int}}},\n\tbus_loads::Vector{Tuple{Int,Vector{Int}}},\n\tbus_shunts::Vector{Tuple{Int,Vector{Int}}}\n)\n\nKirchhoff's current law applied to buses sum(cr + im*ci) = 0\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_balance_capc-Tuple{AbstractUnbalancedIVRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_balance_capc","text":"constraint_mc_current_balance_capc(pm::AbstractUnbalancedIVRModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nCurrent balance constraints with capacitor control.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_balance_capc-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_balance_capc","text":"constraint_mc_current_balance_capc(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints in current-voltage variable space with capacitor control variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_from-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_from","text":"function constraint_mc_current_from(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tg_sh_fr::Matrix{<:Real},\n\tb_sh_fr::Matrix{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.\n\ncr_fr == csr_fr + g_sh_fr*vr_fr - b_sh_fr*vi_fr\nci_fr == csi_fr + g_sh_fr*vi_fr + b_sh_fr*vr_fr\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_from-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_from","text":"Defines how current distributes over series and shunt impedances of a pi-model branch\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_from-Tuple{AbstractUnbalancedIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_from","text":"constraint_mc_current_from(pm::AbstractUnbalancedIVRModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for current constraints on branches (from-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_from-Tuple{ReducedExplicitNeutralIVRModels, Int64, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_from","text":"function constraint_mc_current_from(\n\tpm::ReducedExplicitNeutralIVRModels,\n\tnw::Int,\n\tf_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tg_sh_fr::Matrix{<:Real},\n\tb_sh_fr::Matrix{<:Real};\n\treport::Bool=true\n)\n\nFor branch-reduced IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.\n\ncr_fr = csr_fr + g_sh_fr*vr_fr - b_sh_fr*vi_fr\nci_fr = csi_fr + g_sh_fr*vi_fr + b_sh_fr*vr_fr\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_limit-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_limit","text":"Bounds the current magnitude at both from and to side of a branch cr[f_idx]^2 + ci[f_idx]^2 <= c_rating_a^2 cr[t_idx]^2 + ci[t_idx]^2 <= c_rating_a^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_to-Tuple{AbstractExplicitNeutralIVRModel, Int64, Any, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_to","text":"function constraint_mc_current_to(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tt_bus,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tg_sh_to::Matrix{<:Real},\n\tb_sh_to::Matrix{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.\n\ncr_to == csr_to + g_sh_to*vr_to - b_sh_to*vi_to\nci_to == csi_to + g_sh_to*vi_to + b_sh_to*vr_to\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_to-Tuple{AbstractUnbalancedIVRModel, Int64, Any, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_to","text":"Defines how current distributes over series and shunt impedances of a pi-model branch\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_to-Tuple{AbstractUnbalancedIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_to","text":"constraint_mc_current_to(pm::AbstractUnbalancedIVRModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for current constraints on branches (to-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_current_to-Tuple{ReducedExplicitNeutralIVRModels, Int64, Any, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_current_to","text":"function constraint_mc_current_to(\n\tpm::ReducedExplicitNeutralIVRModels,\n\tnw::Int,\n\tt_bus,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tg_sh_to::Matrix{<:Real},\n\tb_sh_to::Matrix{<:Real};\n\treport::Bool=true\n)\n\nFor branch-reduced IVR models with explicit neutrals, defines how current distributes over series and shunt impedances of a pi-model branch.\n\ncr_to = csr_to + g_sh_to*vr_to - b_sh_to*vi_to\nci_to = csi_to + g_sh_to*vi_to + b_sh_to*vr_to\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_active_bounds-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_active_bounds","text":"pmin <= Re(v*cg') <= pmax\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_active_bounds-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_active_bounds","text":"constraint_mc_gen_active_bounds(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for defining limits on active power output of a generator where bounds can't be used.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_on_off-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_on_off","text":"on/off constraint for generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_on_off-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{<:Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_on_off","text":"on/off constraint for generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_on_off-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_on_off","text":"constraint_mc_gen_power_on_off(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for generator power on/off constraints (MLD problems)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_setpoint_real-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_setpoint_real","text":"pg[i] == pg\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_setpoint_real-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_setpoint_real","text":"constraint_mc_gen_power_setpoint_real(pm::AbstractUnbalancedPowerModel, nw::Int, i::Int, pg::Vector{<:Real})::Nothing\n\nGeneric generator real power setpoint constraint\n\nP_g == P_g^setpoint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_power_setpoint_real-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_power_setpoint_real","text":"constraint_mc_gen_power_setpoint_real(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for generator active power setpoint constraint, for power flow problems\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_reactive_bounds-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_reactive_bounds","text":"qmin <= Im(v*cg') <= qmax\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_gen_reactive_bounds-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_gen_reactive_bounds","text":"constraint_mc_gen_reactive_bounds(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for defines limits on reactive power output of a generator where bounds can't be used.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_current-Tuple{AbstractExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_current","text":"function constraint_mc_generator_current(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates expressions for the terminal current flows :crg_bus and :cig_bus.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_current_delta-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_current_delta","text":"function constraint_mc_generator_current_delta(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tconnections::Vector{Int};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates expressions for the terminal current flows :crg_bus and :cig_bus of delta-connected generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_current_wye-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_current_wye","text":"function constraint_mc_generator_current_wye(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tconnections::Vector{Int};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates expressions for the terminal current flows :crg_bus and :cig_bus of wye-connected generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power-Tuple{AbstractUnbalancedActivePowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power","text":"Only support wye-connected generators.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power","text":"constraint_mc_generator_power(pm::AbstractUnbalancedPowerModel, id::Int; nw::Int=nw_id_default, report::Bool=true, bounded::Bool=true)::Nothing\n\nTemplate function for generator power constraints\n\nDELTA\n\nWhen connected in delta, the load power gives the reference in the delta reference frame. This means\n\nsd_1 = v_abconj(i_ab) = (v_a-v_b)conj(i_ab)\n\nWe can relate this to the per-phase power by\n\nsn_a = v_aconj(i_a)\n = v_aconj(i_ab-i_ca)\n = v_aconj(conj(s_abv_ab) - conj(s_cav_ca))\n = v_a(s_ab(v_a-v_b) - s_ca(v_c-v_a))\n\nSo for delta, sn is constrained indirectly.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power-Tuple{SDPUBFKCLMXModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power","text":"Link the current and power withdrawn by a generator at the bus through a PSD constraint. The rank-1 constraint is dropped in this formulation.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power","text":"function constraint_mc_generator_power(\n pm::ExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n report::Bool=true\n)\n\nConstrains generator power variables for models with explicit neutrals.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"function constraint_mc_generator_power_delta(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor ACR models with explicit neutrals, links the terminal power flows :pg_bus and :qg_bus to the power variables :pg and :qg for delta-connected generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{AbstractNLExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"function constraint_mc_generator_power_delta(\n\tpm::AbstractNLExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates non-linear expressions for the generator power :pd and :qd of delta-connected generators as a function of voltage and current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"function constraint_mc_generator_power_delta(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, links the generator power variables :pd and :qd of delta-connected generators to the voltage and current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"constraint_mc_generator_power_delta(pm::FBSUBFPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)\n\nAdds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).\n\nbeginalign\ntextInitial line-neutral voltage V_0 = V_r0 +j V_i0\ntextThree-phase delta transformation matrix M^Delta = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix \ntextSingle-phase delta transformation matrix (triple nodes) M^Delta = beginbmatrix1 -1 endbmatrix \ntextInitial line-line voltage V_0^Delta = M^Delta V_0 \ntextLine-line current (I^Delta)^* = S^Delta oslash V_0^Delta \ntextLine-neutral current I_bus = (M^Delta)^T I^Delta \ntextBus generation power S_bus = V_0 oslash I_bus^*\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"constraint_mc_generator_power_delta(pm::FOTPUPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)\n\nAdds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).\n\nbeginalign\ntextInitial line-neutral voltage V_0 = V_m0 angle V_a0\ntextThree-phase delta transformation matrix M^Delta = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix \ntextSingle-phase delta transformation matrix (triple nodes) M^Delta = beginbmatrix1 -1 endbmatrix \ntextInitial line-line voltage V_0^Delta = M^Delta V_0 \ntextLine-line current (I^Delta)^* = S^Delta oslash V_0^Delta \ntextLine-neutral current I_bus = (M^Delta)^T I^Delta \ntextLine-neutral generation power S_bus = V_0 oslash I_bus^*\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{FOTRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"constraint_mc_generator_power_delta(pm::FOTRUPowerModel, nw::Int, id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)\n\nAdds constraints for delta-connected generators similar to delta-connected loads (zero-order approximation).\n\nbeginalign\ntextInitial line-neutral voltage V_0 = V_r0 +j V_i0\ntextThree-phase delta transformation matrix M^Delta = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix \ntextSingle-phase delta transformation matrix (triple nodes) M^Delta = beginbmatrix1 -1 endbmatrix \ntextInitial line-line voltage V_0^Delta = M^Delta V_0 \ntextLine-line current (I^Delta)^* = S^Delta oslash V_0^Delta \ntextLine-neutral current I_bus = (M^Delta)^T I^Delta \ntextLine-neutral generation power S_bus = V_0 oslash I_bus^*\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{IVRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"delta connected generator setpoint constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{LPUBFDiagModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"constraint_mc_generator_power_delta(pm::LPUBFDiagModel, nw::Int, gen_id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)\n\nAdds constraints for delta-connected generators similar to delta-connected loads (using auxilary variable X).\n\nbeginalign\ntextThree-phase delta transformation matrix T^Delta = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix \ntextSingle-phase delta transformation matrix (triple nodes) T^Delta = beginbmatrix1 -1 endbmatrix \ntextLine-neutral generation power S_bus = diag(T^Delta X_g) \ntextLine-line generation power S^Delta = diag(X_g T^Delta)\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_delta-Tuple{SOCUBFModels, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_delta","text":"constraint_mc_generator_power_delta(pm::SOCUBFModels, nw::Int, gen_id::Int, bus_id::Int, connections::Vector{Int}, pmin::Vector{<:Real}, pmax::Vector{<:Real}, qmin::Vector{<:Real}, qmax::Vector{<:Real}; report::Bool=true, bounded::Bool=true)\n\nAdds constraints for delta-connected generators similar to delta-connected loads (using auxilary variable X).\n\nbeginalign\ntextThree-phase delta transformation matrix T^Delta = beginbmatrix1 -1 0 0 1 -1 -1 0 1endbmatrix \ntextSingle-phase delta transformation matrix (triple nodes) T^Delta = beginbmatrix1 -1 endbmatrix \ntextLine-neutral generation power S_bus = diag(T^Delta X_g) \ntextLine-line generation power S^Delta = diag(X_g T^Delta)\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_wye-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_wye","text":"function constraint_mc_generator_power_wye(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor ACR models with explicit neutrals, links the terminal power flows :pg_bus and :qg_bus to the power variables :pg and :qg for wye-connected generators\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_wye-Tuple{AbstractNLExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_wye","text":"function constraint_mc_generator_power_wye(\n\tpm::AbstractNLExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, creates non-linear expressions for the generator power :pd and :qd of wye-connected generators as a function of voltage and current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_wye-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_wye","text":"function constraint_mc_generator_power_wye(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tpmin::Vector{<:Real},\n\tpmax::Vector{<:Real},\n\tqmin::Vector{<:Real},\n\tqmax::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, links the generator power variables :pd and :qd of wye-connected generators to the voltage and current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_wye-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_wye","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_generator_power_wye-Tuple{IVRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_generator_power_wye","text":"wye connected generator setpoint constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current-Tuple{AbstractExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current","text":"function constraint_mc_load_current(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, create non-linear expressions for the terminal current flows :crd_bus and :cid_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current","text":"function constraint_mc_load_current(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, create expressions for the terminal current flows :crd_bus and :cid_bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_delta-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_delta","text":"function constraint_mc_load_current_delta(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\ta::Vector{<:Real},\n\talpha::Vector{<:Real},\n\tb::Vector{<:Real},\n\tbeta::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, create non-linear expressions for the terminal current flows :crd_bus and :cid_bus of delta-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_delta-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_delta","text":"function constraint_mc_load_current_delta(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tconnections::Vector{Int};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, create expressions for the terminal current flows :crd_bus and :cid_bus for delta-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_delta-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector, Vector}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_delta","text":"We want to express sab = cp.|vab|+im.cq.|vab| iab = conj(sab/vab) = |vab|.(cq-im.cq)/conj(vab) = (1/|vab|).(cp-im.cq)*vab idem for ibc and ica And then sa = va.conj(ia) = va.conj(iab-ica) idem for sb and sc\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_delta-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Vector, Vector}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_delta","text":"constraint_mc_load_current_delta(pm::FOTPUPowerModel, nw::Int, load_id::Int, load_bus_id::Int, cp::Vector, cq::Vector)\n\nNo loads require a current variable. Delta loads are zero-order approximations and wye loads are first-order approximations around the initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_wye-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_wye","text":"function constraint_mc_load_current_wye(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\ta::Vector{<:Real},\n\talpha::Vector{<:Real},\n\tb::Vector{<:Real},\n\tbeta::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, create non-linear expressions for the terminal current flows :crd_bus and :cid_bus of wye-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_current_wye-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_current_wye","text":"function constraint_mc_load_current_wye(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tconnections::Vector{Int};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, create expressions for the terminal current flows :crd_bus and :cid_bus for wye-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{AbstractExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"function constraint_mc_load_power(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, the load power does not require any constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"function constraint_mc_load_power(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{AbstractUBFModels, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"Creates the constraints modelling the (relaxed) voltage-dependent loads.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{AbstractUnbalancedActivePowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"Only support wye-connected, constant-power loads.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"constraint_mc_load_power(pm::AbstractUnbalancedPowerModel, id::Int; nw::Int=nw_id_default, report::Bool=true)::Nothing\n\nTemplate function for load constraints.\n\nCONSTANT POWER\n\nFixes the load power sd.\n\nsd = sd_1 sd_2 sd_3\n\nWhat is actually fixed, depends on whether the load is connected in delta or wye. When connected in wye, the load power equals the per-phase power sn drawn at the bus to which the load is connected.\n\nsd_1 = v_aconj(i_a) = sn_a\n\nCONSTANT CURRENT\n\nSets the active and reactive load power sd to be proportional to the the voltage magnitude.\n\npd = cpvm\nqd = cqvm\nsd = cpvm + jcqvm\n\nCONSTANT IMPEDANCE\n\nSets the active and reactive power drawn by the load to be proportional to the square of the voltage magnitude.\n\npd = cpvm^2\nqd = cqvm^2\nsd = cpvm^2 + jcqvm^2\n\nDELTA\n\nWhen connected in delta, the load power gives the reference in the delta reference frame. This means\n\nsd_1 = v_abconj(i_ab) = (v_a-v_b)conj(i_ab)\n\nWe can relate this to the per-phase power by\n\nsn_a = v_aconj(i_a)\n = v_aconj(i_ab-i_ca)\n = v_aconj(conj(s_abv_ab) - conj(s_cav_ca))\n = v_a(s_ab(v_a-v_b) - s_ca(v_c-v_a))\n\nSo for delta, sn is constrained indirectly.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{FBSUBFPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"constraint_mc_load_power(pm::FBSUBFPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)\n\nLoad model is linearized around initial operating point. Wye loads are first-order and delta loads are zero-order approximations.\n\nbeginalign\ntextInitial operating point v_rd^0 + j v_id^0textwhere(v_m^0)^2 = (v_rd^0)^2 + (v_id^0)^2\ntextConstant power P^d = P^d0Q^d = Q^d0 \ntextConstant impedance P^d = a left(2cdot v_rd v_rd^0+2 v_id*v_id^0-(v_m^0)^2right)\n Q^d = b left(2cdot v_rd v_rd^0+2 v_id*v_id^0-(v_m^0)^2right) \ntextConstant current P^d = a left(v_m^0 + fracv_rd v_rd^0+ v_id*v_id^0-(v_m^0)^2v_m^0 right)\n Q^d = b left(v_m^0 + fracv_rd v_rd^0+ v_id*v_id^0-(v_m^0)^2v_m^0 right)\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{FOTPUPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"constraint_mc_load_power(pm::FOTPUPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)\n\nLoad model is linearized around initial operating point. Wye loads are first-order and delta loads are zero-order approximations.\n\nbeginalign\ntextInitial operating point v_m0 angle v_a0\ntextConstant power P^d = P^d0Q^d = Q^d0 \ntextConstant impedance P^d = a cdot left(v_m0^2+2 cdot v_m0 cdot (v_m-v_m0)right)\n Q^d = b cdot left(v_m0^2+2 cdot v_m0 cdot (v_m-v_m0)right) \ntextConstant current P^d = a cdot v_m\n Q^d = b cdot v_m\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{FOTRUPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"constraint_mc_load_power(pm::FOTRUPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)\n\nLoad model is linearized around initial operating point similar to FBSUBFPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{LPUBFDiagModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"constraint_mc_load_power(pm::LPUBFDiagModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)\n\nDelta/voltage-dependent load models for LPUBFDiagModel. Delta loads use the auxilary power variable (X). The constant current load model is derived by linearizing around the flat-start voltage solution.\n\nbeginalign\ntextConstant power Rightarrow P_i^d = P_i^d0Q_i^d = Q_i^d0 forall i in L \ntextConstant impedance (Wye) Rightarrow P_i^d = a_i cdot w_iQ_i^d = b_i cdot w_i forall i in L \ntextConstant impedance (Delta) Rightarrow P_i^d = 3cdot a_i cdot w_iQ_i^d = 3cdot b_i cdot w_i forall i in L \ntextConstant current (Wye) Rightarrow P_i^d = fraca_i2cdot left( 1+w_i right)Q_i^d = fracb_i2cdot left( 1+w_i right) forall i in L \ntextConstant current (Delta) Rightarrow P_i^d = fracsqrt3 cdot a_i2cdot left( 1+w_i right)Q_i^d = fracsqrt3 cdot b_i2cdot left( 1+w_i right) forall i in L\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{SDPUBFKCLMXModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"Creates the constraints modelling the (relaxed) voltage-dependent loads for the matrix KCL formulation.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power","text":"function constraint_mc_load_power(\n\tpm::ExplicitNeutralModels,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\treport::Bool=true\n)\n\nConstrains load power variables for models with explicit neutrals.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_delta-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_delta","text":"function constraint_mc_load_power_delta(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\ta::Vector{<:Real},\n\talpha::Vector{<:Real},\n\tb::Vector{<:Real},\n\tbeta::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor ACR models with explicit neutrals, creates non-linear expressions for terminal power flows ':pdbus' and ':qdbus' of delta-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_delta-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, LoadModel, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_delta","text":"function constraint_mc_load_power_delta(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tmodel::LoadModel,\n\ta::Vector{<:Real},\n\tb::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables for delta-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_delta-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_delta","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_delta-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_delta","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_delta-Tuple{IVRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_delta","text":"delta connected load setpoint constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_wye-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_wye","text":"function constraint_mc_load_power_wye(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\ta::Vector{<:Real},\n\talpha::Vector{<:Real},\n\tb::Vector{<:Real},\n\tbeta::Vector{<:Real};\n\treport::Bool=true\n)\n\nFor ACR models with explicit neutrals, creates non-linear expressions for terminal power flows ':pdbus' and ':qdbus' of wye-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_wye-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Int64, Vector{Int64}, LoadModel, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_wye","text":"function constraint_mc_load_power_wye(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tbus_id::Int,\n\tconnections::Vector{Int},\n\tmodel::LoadModel,\n\ta::Vector{<:Real},\n\tb::Vector{<:Real};\n\treport::Bool=true,\n\tbounded::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, link the load power variables :pd and :qd to the voltage, and link together the power, voltage and current variables for wye-connected loads\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_wye-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_wye","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_wye-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_wye","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_load_power_wye-Tuple{IVRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_load_power_wye","text":"wye connected load setpoint constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_current-Tuple{AbstractLPUBFModel, Int64, Vararg{Any, 5}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_current","text":"Defines relationship between branch (series) power flow, branch (series) current and node voltage magnitude\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_current-Tuple{AbstractUBFModels}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_current","text":"constraint_mc_model_current(pm::AbstractUBFModels; nw::Int=nw_id_default)::Nothing\n\nTemplate function for constraints for model current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_current-Tuple{SDPUBFModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_current","text":"Defines relationship between branch (series) power flow, branch (series) current and node voltage magnitude\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_current-Tuple{SOCConicUBFModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_current","text":"Defines relationship between branch (series) power flow, branch (series) current and node voltage magnitude\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_current-Tuple{SOCUBFModels, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_current","text":"Defines relationship between branch (series) power flow, branch (series) current and node voltage magnitude\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage-Tuple{AbstractUnbalancedDCPModel, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage","text":"nothing to do, these models do not have complex voltage constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage","text":"do nothing by default\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage-Tuple{AbstractUnbalancedPowerModel}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage","text":"constraint_mc_model_voltage(pm::AbstractUnbalancedPowerModel; nw::Int=nw_id_default)::Nothing\n\nTemplate function for model voltage constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference-Tuple{AbstractUBFModels, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference","text":"Defines voltage drop over a branch, linking from and to side voltage\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference","text":"constraint_mc_model_voltage_magnitude_difference(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for constraints for modeling voltage magnitude difference across branches\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference","text":"constraint_mc_model_voltage_magnitude_difference(pm::FBSUBFPowerModel, nw::Int, i::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, r::Matrix{<:Real}, x::Matrix{<:Real}, g_sh_fr::Matrix{<:Real}, b_sh_fr::Matrix{<:Real})\n\nVoltage drop over a branch linearized around initial operating point (forward sweep)\n\nbeginalign\ntextInitial operating points (v_r0^fr + j v_i0^fr) (v_r0^to + j v_i0^to)\ntextSeries active power flow p_s^fr = p^fr - g_sh^fr (v_m0^fr)^2\ntextSeries reactive power flow q_s^fr = q^fr + b_sh^fr (v_m0^fr)^2\ntextSeries real current flow cr_s^fr = frac(p_s^fr v_r0^fr + q_s^fr v_i0^fr)(v_m0^fr)^2\ntextSeries imaginary current flow ci_s^fr = frac(-q_s^fr v_r0^fr + p_s^fr v_i0^fr)(v_m0^fr)^2\ntextSeries real voltage drop v_r^to = v_r^fr - r cr_s^fr + x ci_s^fr \ntextSeries imaginary voltage drop v_i^to = v_i^fr - x cr_s^fr - r ci_s^fr\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference-Tuple{LPUBFDiagModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference","text":"Defines voltage drop over a branch, linking from and to side voltage\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_network_power_balance-Tuple{AbstractUnbalancedAPLossLessModels, Int64, Vararg{Any, 8}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_network_power_balance","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_network_power_balance-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_network_power_balance","text":"constraint_mc_network_power_balance(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for constraints that ensures that power generation and demand are balanced in OBF problem\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"function constraint_mc_ohms_yt_from(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tG::Matrix{<:Real},\n\tB::Matrix{<:Real},\n\tG_fr::Matrix{<:Real},\n\tB_fr::Matrix{<:Real}\n)\n\nFor ACR models with explicit neutrals, creates Ohms constraints for ACR models with explicit neutrals.\n\ns_fr = v_fr.*conj(Y*(v_fr-v_to))\ns_fr = (vr_fr+im*vi_fr).*(G-im*B)*([vr_fr-vr_to]-im*[vi_fr-vi_to])\ns_fr = (vr_fr+im*vi_fr).*([G*vr_fr-G*vr_to-B*vi_fr+B*vi_to]-im*[G*vi_fr-G*vi_to+B*vr_fr-B*vr_to])\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\np_fr == g[c,c] * vm_fr[c]^2 +\n sum( g[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) +\n b[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c) +\n sum(-g[c,d]*vm_fr[c]*vm_to[d]*cos(va_fr[c]-va_to[d]) +\n -b[c,d]*vm_fr[c]*vm_to[d]*sin(va_fr[c]-va_to[d]) for d in conductor_ids(pm))\n + g_fr[c,c] * vm_fr[c]^2 +\n sum( g_fr[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) +\n b_fr[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c)\n )\nq_fr == -b[c,c] *vm_fr[c]^2 -\n sum( b[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) -\n g[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c) -\n sum(-b[c,d]*vm_fr[c]*vm_to[d]*cos(va_fr[c]-va_to[d]) +\n g[c,d]*vm_fr[c]*vm_to[d]*sin(va_fr[c]-va_to[d]) for d in conductor_ids(pm))\n -b_fr[c,c] *vm_fr[c]^2 -\n sum( b_fr[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) -\n g_fr[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c)\n )\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"Creates Ohms constraints\n\nsfr = vfr.conj(Y(vfr-vto)) sfr = (vrfr+imvi_fr).(G-imB)([vrfr-vrto]-im[vifr-vito]) sfr = (vrfr+imvifr).([Gvrfr-Gvr_to-Bvifr+B*vito]-im[Gvifr-G*vito+Bvr_fr-Bvr_to])\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractUnbalancedDCPModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\np[f_idx] == -b*(t[f_bus] - t[t_bus])\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractUnbalancedNFAModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"nothing to do, no voltage angle variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"constraint_mc_ohms_yt_from(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nTemplate function for ohms constraint for branches on the from-side\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"constraint_mc_ohms_yt_from(pm::FOTPUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_fr::Matrix{<:Real}, B_fr::Matrix{<:Real})\n\nOhm constraints similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating points.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_from-Tuple{FOTRUPowerModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_from","text":"constraint_mc_ohms_yt_from(pm::FOTRUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_fr::Matrix{<:Real}, B_fr::Matrix{<:Real})\n\nCreates Ohms constraints by linearizing (similar to power balance constraints) around initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vararg{Matrix, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"function constraint_mc_ohms_yt_to(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tG::Matrix,\n\tB::Matrix,\n\tG_to::Matrix,\n\tB_to::Matrix\n)\n\nFor ACR models with explicit neutrals, creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form).\n\np[t_idx] == (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\nq[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\np[t_idx] == (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\nq[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vararg{Matrix, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\np[t_idx] == (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\nq[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractUnbalancedAPLossLessModels, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"Do nothing, this model is symmetric\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"constraint_mc_ohms_yt_to(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nTemplate function for ohms constraint for branches on the to-side\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{AbstractUnbalancedWModels, Int64, Int64, Vararg{Any, 11}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"constraint_mc_ohms_yt_to(pm::FOTPUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_to::Matrix{<:Real}, B_to::Matrix{<:Real})\n\nOhm constraints similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating points.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{FOTRUPowerModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vararg{Matrix, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"constraint_mc_ohms_yt_to(pm::FOTRUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix, B::Matrix, G_to::Matrix, B_to::Matrix)\n\nCreates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_ohms_yt_to-Tuple{NFAUPowerModel, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_ohms_yt_to","text":"nothing to do, this model is symmetric\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_oltc_tap_fix-Tuple{AbstractUnbalancedPowerModel, Int64, Vector, Vector}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_oltc_tap_fix","text":"For a variable tap transformer, fix the tap variables which are fixed. For example, an OLTC where the third phase is fixed, will have tap variables for all phases, but the third tap variable should be fixed.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{AbstractUnbalancedACPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{AbstractUnbalancedACRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{AbstractUnbalancedActivePowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"constraint_mc_power_balance(pm::AbstractUnbalancedActivePowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\npower balanace constraint with line shunts and transformers, active power only\n\np_br + p_tr + p_sw == p_g - p_s - p_d - G\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"constraint_mc_power_balance(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{AbstractUnbalancedWModels, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{FBSUBFPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"constraint_mc_power_balance(pm::FBSUBFPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints similar to ACRUPowerModel with shunt current calculated using initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{FOTPUPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"constraint_mc_power_balance(pm::FOTPUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance equations similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating point.\n\nbeginalign\ntextInitial operating points v_m0^t angle v_a0^tv_m0^u angle v_a0^u\n v_m^t^2 Rightarrow v_m0^t^2+2 cdot v_m0^t cdot (v_m^t-v_m0^t)\n v_m^t cdot v_m^u cdot cos(v_a^t-v_a^u) Rightarrow v_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u) +\nbeginbmatrix\nv_m0^u cdot cos(v_a0^t-v_a0^u) \nv_m0^t cdot cos(v_a0^t-v_a0^u) \n-v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u) \nv_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u)\nendbmatrix^top\nbeginbmatrix\nv_m^t-v_m0^t \nv_m^u-v_m0^u \nv_a^t-v_a0^t \nv_a^u-v_a0^u\nendbmatrix \n v_m^t cdot v_m^u cdot sin(v_a^t-v_a^u) Rightarrow v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u) +\nbeginbmatrix\nv_m0^u cdot sin(v_a0^t-v_a0^u) \nv_m0^t cdot sin(v_a0^t-v_a0^u) \nv_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u) \n-v_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u)\nendbmatrix^top\nbeginbmatrix\nv_m^t-v_m0^t \nv_m^u-v_m0^u \nv_a^t-v_a0^t \nv_a^u-v_a0^u\nendbmatrix\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{FOTRUPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"constraint_mc_power_balance(pm::FOTRUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints similar to ACRUPowerModel with shunt current linearized around initial operating point.\n\nbeginalign\ntextInitial operating point (v_r0 + j v_i0)\n v_r v_i = v_r0 v_i0 + v_r v_i0 + v_r0 v_i - 2 v_r0 v_i0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{LPUBFDiagModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{SDPUBFKCLMXModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"Shunt handling in matrix form: I = Y.U S = U.I' = U.(Y.U)' = U.U'.Y' = W.Y' = (Wr+j.Wi)(G+jB)' = (Wr+j.Wi)(G'-j.B') = (Wr.G'+Wi.B')+j(-Wr.B'+Wi.G') P = Wr.G'+Wi.B' Q = -Wr.B'+Wi.G'\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance","text":"function constraint_mc_power_balance(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool},\n\tbus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n\tbus_gens::Vector{Tuple{Int,Vector{Int}}},\n\tbus_storage::Vector{Tuple{Int,Vector{Int}}},\n\tbus_loads::Vector{Tuple{Int,Vector{Int}}},\n\tbus_shunts::Vector{Tuple{Int,Vector{Int}}}\n)\n\nImposes power balance constraints at each ungrounded terminal of bus i for rectangular voltage models with explicit neutrals. sum(p + im*q) = 0\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{AbstractUnbalancedACPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::AbstractUnbalancedACPModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control.\n\nbeginalign\n Bs = z bs \n textcapacitor ON z = 1 \n textcapacitor OFF z = 0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{AbstractUnbalancedACRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::AbstractUnbalancedACRModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control.\n\nbeginalign\n Bt = z bs \n textcapacitor ON z = 1 \n textcapacitor OFF z = 0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{AbstractUnbalancedActivePowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"nothing to do in capc, no complex voltage variables in these models\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nTemplate function for KCL constraints with capacitor control variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{FBSUBFPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::FBSUBFPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control similar to ACRUPowerModel with shunt current calculated using initial operating point.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{FOTPUPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::FOTPUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control with shunt current calculated using initial operating point.\n\nbeginalign\n B_s = b_s z cq_sh = B_s v \n B_s cdot v_m^t cdot v_m^u cdot cos(v_a^t-v_a^u) Rightarrow B_s0 cdot v_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u) +\nbeginbmatrix\nB_s0 cdot v_m0^u cdot cos(v_a0^t-v_a0^u) \nB_s0 cdot v_m0^t cdot cos(v_a0^t-v_a0^u) \n-B_s0 cdot v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u) \nB_s0 cdot v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u) \nv_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u)\nendbmatrix^top\nbeginbmatrix\nv_m^t-v_m0^t \nv_m^u-v_m0^u \nv_a^t-v_a0^t \nv_a^u-v_a0^u \nB_s -B_s0\nendbmatrix \n B_s cdot v_m^t cdot v_m^u cdot sin(v_a^t-v_a^u) Rightarrow B_s0 cdot v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u) +\nbeginbmatrix\n B_s0 cdot v_m0^u cdot sin(v_a0^t-v_a0^u) \n B_s0 cdot v_m0^t cdot sin(v_a0^t-v_a0^u) \n B_s0 cdot v_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u) \n -B_s0 cdot v_m0^t cdot v_m0^u cdot cos(v_a0^t-v_a0^u) \n v_m0^t cdot v_m0^u cdot sin(v_a0^t-v_a0^u)\nendbmatrix^top\nbeginbmatrix\nv_m^t-v_m0^t \nv_m^u-v_m0^u \nv_a^t-v_a0^t \nv_a^u-v_a0^u \nB_s -B_s0\nendbmatrix\n\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{FOTRUPowerModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::FOTRUPowerModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control with shunt current calculated using initial operating point.\n\nbeginalign\n B_t = b_s z cq_sh = B_t v \n textFOT approximation B_t v_r v_i = B_t0 v_r0 v_i0 + B_t v_r0 v_i0 + B_t0 v_r v_i0 + B_t0 v_r0 v_i - 3 B_t0 v_r0 v_i0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_capc-Tuple{LPUBFDiagModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_capc","text":"constraint_mc_power_balance_capc(pm::LPUBFDiagModel, nw::Int, i::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_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})\n\nPower balance constraints with capacitor control linearized using McCormick envelopes\n\nbeginalign\n B_s = b_s z cq_sh = B_s w \n textUnderestimator cq_sh B_s w_textmin cq_sh b_s w + B_s w_textmax - b_s w_textmax\n textOverestimator cq_sh B_s w_textmax cq_sh b_s w + B_s w_textmin - b_s w_textmin\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed-Tuple{AbstractUnbalancedACPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed-Tuple{AbstractUnbalancedACRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed-Tuple{AbstractUnbalancedDCPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed","text":"power balance constraint with line shunts and transformers for load shed problem, DCP formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed","text":"constraint_mc_power_balance_shed(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints for load shed problem\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed-Tuple{AbstractUnbalancedWModels, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed","text":"KCL for load shed problem with transformers (AbstractWForms)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_shed_simple-Tuple{AbstractUnbalancedDCPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_shed_simple","text":"power balance constraint with line shunts and transformers for load shed problem, DCP formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_simple-Tuple{AbstractUnbalancedACPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_simple","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_simple-Tuple{AbstractUnbalancedACRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_simple","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_simple-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_simple","text":"constraint_mc_power_balance_simple(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints for simple load shedding\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_slack-Tuple{AbstractUnbalancedACPModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_slack","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_slack-Tuple{AbstractUnbalancedACRModel, 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}}}, Vararg{Vector{Tuple{Int64, Vector{Int64}}}, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_slack","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_slack-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_slack","text":"constraint_mc_power_balance_slack(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for KCL constraints which include a slack power at every bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_balance_slack-Tuple{AbstractUnbalancedWModels, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{<:Tuple{Tuple{Int64, Int64, Int64}, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Tuple{Int64, Int64, Int64}, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Tuple{Int64, Int64, Int64}, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Int64, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Int64, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Int64, Vector{Union{Int64, String}}}}, Vector{<:Tuple{Int64, Vector{Union{Int64, String}}}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_balance_slack","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_losses-Tuple{AbstractUBFModels, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_losses","text":"Defines branch flow model power flow equations\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_losses-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_losses","text":"constraint_mc_power_losses(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for constraints for modeling power losses across branches\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_losses-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_losses","text":"constraint_mc_power_losses(pm::FBSUBFPowerModel, nw::Int, i::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, r::Matrix{<:Real}, x::Matrix{<:Real}, g_sh_fr::Matrix{<:Real}, g_sh_to::Matrix{<:Real}, b_sh_fr::Matrix{<:Real}, b_sh_to::Matrix{<:Real})\n\nBranch flow model power flow equation linearized around initial operating point (backward sweep)\n\nbeginalign\ntextInitial operating points (v_r0^fr + j v_i0^fr) (v_r0^to + j v_i0^to)\ntextVoltage drop v_drop = (v_r0^fr + j v_i0^fr) - (v_r0^to + j v_i0^to)\ntextLine series admittance y = (r+j x)^-1\ntextPower loss s_loss = v_drop (y v_drop)^*\ntextActive power flow p^fr + p^to = g_sh^fr (v_m0^fr)^2 + g_sh^to (v_m0^to)^2 + Re(s_loss)\ntextReactive power flow q^fr + q^to = -b_sh^fr (v_m0^fr)^2 - b_sh^to (v_m0^to)^2 + Im(s_loss)\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_power_losses-Tuple{LPUBFDiagModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}, Matrix{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_power_losses","text":"Defines branch flow model power flow equations\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_regen_setpoint_active-Tuple{AbstractUnbalancedIVRModel, Int64, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_regen_setpoint_active","text":"qq[i] == qq\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_current_limit-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_current_limit","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_current_limit-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Int64, Vector{Int64}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_current_limit","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_current_limit-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_current_limit","text":"constraint_mc_storage_current_limit(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for storage current limit constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUBFAModel, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"Neglects the active and reactive loss terms associated with the squared current magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUBFModels, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"Neglects the active and reactive loss terms associated with the squared current magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedACRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedAPLossLessModels, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"active power only, lossless model\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedAPLossLessModels, Int64, Vararg{Any, 6}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"active power only\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"constraint_mc_storage_losses(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for storage loss constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_losses-Tuple{AbstractUnbalancedWConvexModels, Int64, Int64, Int64, Vector{Int64}, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_losses","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_on_off-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_on_off-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{Int64}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Vector{<:Real}, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_on_off-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_on_off","text":"constraint_mc_storage_on_off(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTempate function for storage on/off constraints for MLD problems\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_power_setpoint_real-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_power_setpoint_real","text":"constraint_mc_storage_power_setpoint_real(pm::AbstractUnbalancedPowerModel, nw::Int, i::Int, ps::Real)::Nothing\n\nGeneric storage real power setpoint constraint\n\nP_s == P_s^setpoint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_power_setpoint_real-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_power_setpoint_real","text":"constraint_mc_storage_power_setpoint_real(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for storage active power setpoint constraint, for power flow problems\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_thermal_limit-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Vector{Int64}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_thermal_limit","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_thermal_limit-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vector{Int64}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_thermal_limit","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_thermal_limit-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_thermal_limit","text":"constraint_mc_storage_thermal_limit(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for storage thermal limit constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_storage_thermal_limit-Tuple{LPUBFDiagModel, Int64, Int64, Vector{Int64}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_storage_thermal_limit","text":"constraintmcstoragethermallimit(pm::AbstractUnbalancedPowerModel, nw::Int, i::Int, connections::Vector{Int}, rating::Real)\n\nLinear version of storage thermal limit constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{AbstractUnbalancedACPModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"constraint_mc_switch_ampacity(pm::AbstractUnbalancedACPModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on switches\n\nmathp_{fr}^2 + q_{fr}^2 \\leq vm_{fr}^2 i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Float64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"nothing to do, no voltage variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"constraint_mc_switch_ampacity(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for switch current limit constraint from-side\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{AbstractUnbalancedRectangularModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"constraint_mc_switch_ampacity(pm::AbstractUnbalancedRectangularModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on switches\n\nmathp_{fr}^2 + q_{fr}^2 \\leq (vr_{fr}^2 + vi_{fr}^2) i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{AbstractUnbalancedWModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"constraint_mc_switch_ampacity(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})::Nothing\n\nACP current limit constraint on switches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq w_{fr} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_ampacity-Tuple{LPUBFDiagModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_ampacity","text":"constraint_mc_switch_ampacity(pm::AbstractUnbalancedWModels, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, c_rating::Vector{<:Real})\n\nACP current limit constraint on switches from-side\n\nmathp_{fr}^2 + q_{fr}^2 \\leq w_{fr} i_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current","text":"function constraint_mc_switch_current(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int};\n\treport::Bool=true\n)\n\nFor IVR models with explicit neutrals, create expressions for the terminal current flows :crsw_bus and cisw_bus, and link the from-side to the to-side switch current\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current","text":"function constraint_mc_switch_current(\n pm::ExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n report::Bool=true\n)\n\nFor models with explicit neutrals, link the switch currents or create appropiate expressions for them.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current_limit-Tuple{AbstractExplicitNeutralACRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current_limit","text":"function constraint_mc_switch_current_limit(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the switch current magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side current, so it suffices to apply this only explicitly at the from-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current_limit-Tuple{AbstractExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current_limit","text":"function constraint_mc_switch_current_limit(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tconnections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nFor IVR models with explicit neutrals, imposes a bound on the switch current magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side current, so it suffices to apply this only explicitly at the from-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current_limit-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current_limit","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_current_limit-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_current_limit","text":"constraint_mc_switch_current_limit(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for switch current limit constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_power-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_power","text":"function constraint_mc_switch_power(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int};\n\treport::Bool=true\n)\n\nconstraintmcswitchpower( pm::ReducedExplicitNeutralIVRModels, nw::Int, id::Int, fidx::Tuple{Int,Int,Int}, tidx::Tuple{Int,Int,Int}, fconnections::Vector{Int}, t_connections::Vector{Int}; report::Bool=true )\n\nFor IVR models with explicit neutrals, create expressions for the terminal power flows :psw_bus and qsw_bus, and link the from-side to the to-side switch power\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_power-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_power","text":"function constraint_mc_switch_power(\n pm::ExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n report::Bool=true\n)\n\nFor IVR models with explicit neutrals, link the switch power or create appropiate expressions for them\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_power_on_off-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_power_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_power_on_off-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_power_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state","text":"constraint_mc_switch_state(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for switch state constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedDCPModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedNFAModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"nothing to do\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{AbstractUnbalancedWModels, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_closed-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_closed","text":"constraint_mc_switch_state_closed(pm::FBSUBFPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_connections::Vector{Int}, t_connections::Vector{Int})\n\nVoltage constraints for closed switches similar to ACRUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_on_off-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_on_off-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_on_off-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_on_off-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_on_off","text":"constraint_mc_switch_state_on_off(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default, relax::Bool=false)::Nothing\n\nTemplate function for switch state on/off constraints (MLD problems)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_on_off-Tuple{AbstractUnbalancedWModels, Int64, Int64, Int64, Int64, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_on_off","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_open-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_open","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_open-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_open","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_state_open-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_state_open","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractExplicitNeutralACRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"function constraint_mc_switch_thermal_limit(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the switch power magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side power when the switch is closed (equal voltages), and also when it is open since the power then equals zero on both ends.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractLPUBFModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Float64}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"function constraint_mc_switch_thermal_limit(\n\tpm::AbstractNLExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nThis method is not yet implemented for AbstractLPUBFModel. If the limit is finite, a warning is thrown.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractNLExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"function constraint_mc_switch_thermal_limit(\n\tpm::AbstractNLExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nFor IVR models with explicit neutrals, imposes a bound on the switch power magnitude per conductor. Note that a bound on the from-side implies the same bound on the to-side power when the switch is closed (equal voltages), and also when it is open since the power then equals zero on both ends.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"function constraint_mc_switch_thermal_limit(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trating::Vector{<:Real}\n)\n\nFor quadratic IVR models with explicit neutrals, throw an error because this cannot be represented quadratically without introducing explicit power variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"constraint_mc_switch_thermal_limit(pm::AbstractUnbalancedActivePowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, rating::Vector{<:Real})::Nothing\n\nActive power only switch thermal limit constraint\n\nmath-S_{max} \\leq p_{fr} \\leq S_{max}\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_switch_thermal_limit-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_switch_thermal_limit","text":"constraint_mc_switch_thermal_limit(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for switch thermal limit constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractExplicitNeutralACRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"function constraint_mc_thermal_limit_from(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the from-side line power magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"function constraint_mc_thermal_limit_from(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor IVR models with explicit neutrals, imposes a bound on the from-side line power magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"function constraint_mc_thermal_limit_from(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor quadratic IVR models with explicit neutrals, throw an error because this cannot be represented quadratically without introducing explicit power variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"-rate_a <= p[f_idx] <= rate_a\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"p[f_idx]^2 + q[f_idx]^2 <= rate_a^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"constraint_mc_thermal_limit_from(pm::AbstractUnbalancedPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, rate_a::Vector{<:Real})::Nothing\n\nGeneric thermal limit constraint for branches (from-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_from-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_from","text":"constraint_mc_thermal_limit_from(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for branch thermal constraints (from-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractExplicitNeutralACRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"function constraint_mc_thermal_limit_to(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tt_idx::Tuple{Int,Int,Int},\n\tt_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the from-side line power magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"function constraint_mc_thermal_limit_to(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\tt_idx::Tuple{Int,Int,Int},\n\tt_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor IVR models with explicit neutrals, imposes a bound on the to-side line power magnitude.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"function constraint_mc_thermal_limit_to(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tt_idx::Tuple{Int,Int,Int},\n\tt_connections::Vector{Int},\n\trate_a::Vector{<:Real}\n)\n\nFor quadratic IVR models with explicit neutrals, throw an error because this cannot be represented quadratically without introducing explicit power variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractUnbalancedActivePowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractUnbalancedIVRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"p[t_idx]^2 + q[t_idx]^2 <= rate_a^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"constraint_mc_thermal_limit_to(pm::AbstractUnbalancedPowerModel, nw::Int, t_idx::Tuple{Int,Int,Int}, t_connections::Vector{Int}, rate_a::Vector{<:Real})::Nothing\n\nGeneric thermal limit constraint for branches (to-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_thermal_limit_to-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_thermal_limit_to","text":"constraint_mc_thermal_limit_to(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for branch thermal constraints (to-side)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"Creates phase angle constraints at reference buses\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedNFAModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"nothing to do, no voltage angle variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedPolarModels, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"Creates phase angle constraints at reference buses\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"constraint_mc_theta_ref(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for reference angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedWModels, Int64, Int64, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"do nothing, no way to represent this in these variables\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{AbstractUnbalancedWModels, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{FBSUBFPowerModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"constraint_mc_theta_ref(pm::FBSUBFPowerModel, nw::Int, i::Int, va_ref::Vector{<:Real})\n\nCreates phase angle constraints at reference buses similar to ACRUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{LPUBFDiagModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"balanced three-phase phasor\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_theta_ref-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64, Int64, Vector{<:Real}, Vector{Int64}, Vector{Bool}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_theta_ref","text":"function constraint_mc_theta_ref(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tva::Vector{<:Real},\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool}\n)\n\nCreates phase angle constraints at bus i\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_current-Tuple{AbstractExplicitNeutralIVRModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_current","text":"function constraint_mc_transformer_current(\n\tpm::AbstractExplicitNeutralIVRModel,\n\ti::Int;\n\tnw::Int=nw_id_default,\n\tfix_taps::Bool=true\n)\n\nFor IVR models with explicit neutrals, links the current variables of the from-side and to-side transformer windings, and creates expressions for the terminal current flows\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_current_dy-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_current_dy","text":"function constraint_mc_transformer_current_dy(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor IVR models with explicit neutrals, links the current variables of the from-side and to-side transformer windings, and creates expressions for the terminal current flows for delta-wye connected transformers\n\nscale*cr_fr_P + cr_to_P == 0\nscale*ci_fr_P + ci_to_P == 0\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_current_yy-Tuple{AbstractExplicitNeutralIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_current_yy","text":"function constraint_mc_transformer_current_yy(\n\tpm::AbstractExplicitNeutralIVRModel,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor IVR models with explicit neutrals, links the current variables of the from-side and to-side transformer windings, and creates expressions for the terminal current flows for wye-wye connected transformers\n\nscale*cr_fr_P + cr_to_P == 0\nscale*ci_fr_P + ci_to_P == 0\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power","text":"constraint_mc_transformer_power(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default, fix_taps::Bool=true)::Nothing\n\nTemplate function for Transformer constraints in Power-voltage space, considering winding type, conductor order, polarity and tap settings.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power-Tuple{NFAUPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power","text":"constraint_mc_transformer_power(pm::NFAUPowerModel, i::Int; nw::Int=nw_id_default)\n\ntransformer active power only constraint pf=-pt\n\np_ffc == -pttc\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"function constraint_mc_transformer_power_dy(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor ACR models with explicit neutrals, links the from-side and to-side power variables of delta-wye connected transformers. Expressions for the terminal power flow variables are also added.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"This function adds all constraints required to model a two-winding, delta-wye connected transformer.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"delta-wye transformer power constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"constraint_mc_transformer_power_dy(pm::FBSUBFPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, delta-wye connected transformer similar to ACRUPowerModel with power constraints using initial operating point voltage instead of actual voltage variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"constraint_mc_transformer_power_dy(pm::FOTPUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, delta-wye connected transformer similar to ACPUPowerModel with voltage constraints linearized using first-order Taylor approximation and power constraints simplified using initial operating point voltage instead of actual voltage variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{FOTRUPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"constraint_mc_transformer_power_dy(pm::FOTRUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, delta-wye connected transformer similar to ACRUPowerModel with power constraints using initial operating point voltage instead of actual voltage variables.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_dy-Tuple{SOCUBFModels, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_dy","text":"constraint_mc_transformer_power_dy(pm::SOCUBFModels, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nConstraints to model a two-winding, delta-wye connected transformer.\n\nbeginalign\n W_fr^ij-W_fr^ik-W_fr^lj+W_fr^lk = t_m^2W_to^ij forall ij in 123 textand kl in 231 \n S_fr = X_tT_t \n S_fr^Delta = T_tX_t \n s_fr^Delta + s_to = 0\n M_Delta =\n beginbmatrix\n W_fr X_t \n X_t^textH L_Delta\n endbmatrix succeq 0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"function constraint_mc_transformer_power_yy(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor ACR models with explicit neutrals, links the from-side and to-side power variables of wye-wye connected transformers. Expressions for the terminal power flow variables are also added.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"This function adds all constraints required to model a two-winding, wye-wye connected transformer.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{AbstractUnbalancedIVRModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"wye-wye transformer power constraint for IVR formulation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{FBSUBFPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"constraint_mc_transformer_power_yy(pm::FBSUBFPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, wye-wye connected transformer similar to ACRUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{FOTPUPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"constraint_mc_transformer_power_yy(pm::FOTPUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, wye-wye connected transformer similar to ACPUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{FOTRUPowerModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"constraint_mc_transformer_power_yy(pm::FOTRUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nAdd all constraints required to model a two-winding, wye-wye connected transformer similar to ACRUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{LPUBFDiagModel, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"Links to and from power and voltages in a wye-wye transformer, assumes tm_fixed is true\n\nw_fr_i=(pol_i*tm_scale*tm_i)^2w_to_i\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_power_yy-Tuple{SOCUBFModels, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_power_yy","text":"constraint_mc_transformer_power_yy(pm::SOCUBFModels, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)\n\nConstraints to model a two-winding, wye-wye connected transformer.\n\nbeginalign\n W_fr = T_mT_m^H W_to \n s_fr + s_to = 0\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_thermal_limit-Tuple{AbstractExplicitNeutralACRModel, Int64, Int64, Tuple, Tuple, Int64, Int64, Vector, Vector, ConnConfig, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_thermal_limit","text":"function constraint_mc_transformer_thermal_limit(\n\tpm::AbstractExplicitNeutralACRModel,\n\tnw::Int,\n\tid::Int,\n\tf_idx::Tuple,\n\tt_idx::Tuple,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_connections::Vector,\n\tt_connections::Vector,\n\tconfig::ConnConfig,\n\tsm_ub::Real;\n\treport::Bool=true\n)\n\nFor ACR models with explicit neutrals, imposes a bound on the magnitude of the total apparent power at each winding of the transformer.\n\nsum(pt_fr)^2 + sum(qt_fr)^2 <= sm_ub^2\nsum(pt_to)^2 + sum(qt_to)^2 <= sm_ub^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_thermal_limit-Tuple{AbstractNLExplicitNeutralIVRModel, Int64, Int64, Tuple, Tuple, Int64, Int64, Vector, Vector, ConnConfig, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_thermal_limit","text":"function constraint_mc_transformer_thermal_limit(\n\tpm::AbstractNLExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tf_idx::Tuple,\n\tt_idx::Tuple,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_connections::Vector,\n\tt_connections::Vector,\n\tconfig::ConnConfig,\n\tsm_ub::Real;\n\treport::Bool=true\n)\n\nFor non-linear IVR models with explicit neutrals, imposes a bound on the magnitude of the total apparent power at both windings. Expressions are created for the transformer power variables.\n\nsum(pt_fr)^2 + sum(qt_fr)^2 <= sm_ub^2\nsum(pt_to)^2 + sum(qt_to)^2 <= sm_ub^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_thermal_limit-Tuple{AbstractQuadraticExplicitNeutralIVRModel, Int64, Int64, Tuple, Tuple, Int64, Int64, Vector, Vector, ConnConfig, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_thermal_limit","text":"function constraint_mc_transformer_thermal_limit(\n\tpm::AbstractQuadraticExplicitNeutralIVRModel,\n\tnw::Int,\n\tid::Int,\n\tf_idx::Tuple,\n\tt_idx::Tuple,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_connections::Vector,\n\tt_connections::Vector,\n\tconfig::ConnConfig,\n\tsm_ub::Real;\n\treport::Bool=true\n)\n\nFor quadratic IVR models with explicit neutrals, imposes a bound on the magnitude of the total apparent power at both windings.\n\nsum(pt_fr)^2 + sum(qt_fr)^2 <= sm_ub^2\nsum(pt_to)^2 + sum(qt_to)^2 <= sm_ub^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_thermal_limit-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_thermal_limit","text":"function constraint_mc_transformer_thermal_limit(\n\tpm::ExplicitNeutralModels,\n\tid::Int;\n\tnw::Int=nw_id_default,\n\tbounded::Bool=true,\n\treport::Bool=true,\n)\n\nImposes a bound on the total apparent at each transformer winding\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_voltage-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_voltage","text":"function constraint_mc_transformer_voltage(\n pm::ExplicitNeutralModels,\n i::Int;\n nw::Int=nw_id_default,\n fix_taps::Bool=true\n)\n\nFor models with explicit neutrals, links the voltage of the from-side and to-side transformer windings\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_voltage_dy-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_voltage_dy","text":"function constraint_mc_transformer_voltage_dy(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor rectangular voltage models with explicit neutrals, links the voltage of the from-side and to-side transformer windings for delta-wye connected transformers\n\nMd*vr_fr_P == scale * (vr_to_P - vr_to_n)\nMd*vi_fr_P == scale * (vi_to_P - vi_to_n)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_transformer_voltage_yy-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64, Int64, Int64, Int64, Tuple{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Int64, Vector{<:Real}, Vector{Bool}, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_transformer_voltage_yy","text":"function constraint_mc_transformer_voltage_yy(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ttrans_id::Int,\n\tf_bus::Int,\n\tt_bus::Int,\n\tf_idx::Tuple{Int,Int,Int},\n\tt_idx::Tuple{Int,Int,Int},\n\tf_connections::Vector{Int},\n\tt_connections::Vector{Int},\n\tpol::Int,\n\ttm_set::Vector{<:Real},\n\ttm_fixed::Vector{Bool},\n\ttm_scale::Real\n)\n\nFor rectangular voltage models with explicit neutrals, links the voltage of the from-side and to-side transformer windings for wye-wye connected transformers\n\n(vr_fr_P-vr_fr_n) == scale * (vr_to_P.-vr_to_n)\n(vi_fr_P-vi_fr_n) == scale * (vi_to_P.-vi_to_n)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_absolute-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_absolute","text":"function constraint_mc_voltage_absolute(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool},\n\tvmin::Vector{<:Real},\n\tvmax::Vector{<:Real};\n\treport::Bool=true\n)\n\nImposes absolute voltage magnitude bounds for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_absolute-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_absolute","text":"function constraint_mc_voltage_absolute(\n pm::RectangularVoltageExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n bounded::Bool=true,\n report::Bool=true,\n)\n\nImposes absolute voltage magnitude bounds for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUBFModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"This is duplicated at PowerModelsDistribution level to correctly handle the indexing of the shunts.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUnbalancedACRModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUnbalancedIVRModel, Int64, Any, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"Bounds the voltage angle difference between bus pairs\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUnbalancedNFAModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"nothing to do, these models do not have angle difference constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUnbalancedPolarModels, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"constraint_mc_voltage_angle_difference(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for constraints of the voltage angle difference across branches\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{FBSUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"constraint_mc_voltage_angle_difference(pm::FBSUBFPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, angmin::Vector{<:Real}, angmax::Vector{<:Real})\n\nNothing to do, this model ignores angle difference constraints\"\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_angle_difference-Tuple{FOTRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_angle_difference","text":"constraint_mc_voltage_angle_difference(pm::FOTRUPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, angmin::Vector{<:Real}, angmax::Vector{<:Real})\n\nNothing to do, this model ignores angle difference constraints\"\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_fixed-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64, Int64, Vector{<:Real}, Vector{<:Real}, Vector{Int64}, Vector{Bool}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_fixed","text":"function constraint_mc_voltage_fixed(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tvm::Vector{<:Real},\n\tva::Vector{<:Real},\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool}\n)\n\nFixes the voltage variables at bus i to vm.*exp.(im*va)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds","text":"vmin <= vm[i] <= vmax\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds","text":"constraint_mc_voltage_magnitude_bounds(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for voltage magnitude bounds constraints.\n\nThis constraint captures problem agnostic constraints that define limits for voltage magnitudes (where variable bounds cannot be used). Notable examples include IVRUPowerModel and ACRUPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds-Tuple{FBSUBFPowerModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds","text":"constraint_mc_voltage_magnitude_bounds(pm::FBSUBFPowerModel, nw::Int, i::Int, vmin::Vector{<:Real}, vmax::Vector{<:Real})\n\nUpper voltage magnitude limits are linearized using outer approximation. Lower voltage magnitude limits are linearized around initial operating point.\n\nbeginalign\ntextInitial operating point v_r^0 + j v_i^0textwhere(v_m^0)^2 = (v_r^0)^2 + (v_i^0)^2\ntextLower limits 2 v_r v_r^0 + 2 v_i v_i^0 - (v_m^0)^2 v_min^2\ntextUpper limits -v_max v_r v_max\n -v_max v_i v_max\n-sqrt2 v_max v_r + v_i sqrt2 v_max\n -sqrt2 v_max v_r - v_i sqrt2 v_max\nendalign\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds-Tuple{FOTRUPowerModel, Int64, Int64, Vector{<:Real}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds","text":"constraint_mc_voltage_magnitude_bounds(pm::FOTRUPowerModel, nw::Int, i::Int, vmin::Vector{<:Real}, vmax::Vector{<:Real})\n\nLinearized voltage magnitude limits similar to FBSUBFPowerModel.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_fixed-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64, Int64, Vector{<:Real}, Vector{Int64}, Vector{Bool}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_fixed","text":"function constraint_mc_voltage_magnitude_fixed(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tvm::Vector{<:Real},\n\tva::Vector{<:Real},\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool}\n)\n\nFixes the voltage variables at bus i to vm.*exp.(im*va)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_only-Tuple{AbstractUnbalancedACPModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_only","text":"vm[i] == vmref\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_only-Tuple{AbstractUnbalancedACRModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_only","text":"vm[i] == vmref\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_only-Tuple{AbstractUnbalancedActivePowerModel, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_only","text":"nothing to do\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_only-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_only","text":"constraint_mc_voltage_magnitude_only(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for voltage magnitude setpoint constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_magnitude_only-Tuple{AbstractUnbalancedWModels, Int64, Int64, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_magnitude_only","text":"vm[i] == vmref\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_pairwise-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{<:Tuple{Any, Any, Real}}, Vector{<:Tuple{Any, Any, Real}}}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_pairwise","text":"function constraint_mc_voltage_pairwise(\n\tpm::RectangularVoltageExplicitNeutralModels,\n\tnw::Int,\n\ti::Int,\n\tterminals::Vector{Int},\n\tgrounded::Vector{Bool},\n\tvm_pair_lb::Vector,\n\tvm_pair_ub::Vector;\n\treport::Bool=true\n)\n\nImposes pairwise voltage magnitude bounds, i.e. magnitude bounds on the voltage between to terminals, for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_pairwise-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_pairwise","text":"function constraint_mc_voltage_pairwise(\n pm::RectangularVoltageExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n bounded::Bool=true,\n report::Bool=true,\n)\n\nImposes pairwise voltage magnitude bounds, i.e. magnitude bounds on the voltage between to terminals, for models with explicit neutrals\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_psd-Tuple{SDPUBFModel, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_psd","text":"Add explicit PSD-ness of W for nodes where it is not implied\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_psd-Tuple{SOCConicUBFModel, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_psd","text":"Add explicit PSD-ness of W for nodes where it is not implied\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_psd-Tuple{SOCUBFModels, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_psd","text":"Add explicit PSD-ness of W for nodes where it is not implied\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_mc_voltage_reference-Tuple{Union{RectangularVoltageExplicitNeutralModels, ExplicitNeutralModels}, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_mc_voltage_reference","text":"function constraint_mc_voltage_reference(\n pm::ExplicitNeutralModels,\n id::Int;\n nw::Int=nw_id_default,\n bounded::Bool=true,\n report::Bool=true,\n)\n\nImposes suitable constraints for the voltage at the reference bus\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_pqw-Tuple{JuMP.Model, JuMP.VariableRef, JuMP.VariableRef, Vararg{Real, 6}}","page":"Constraints","title":"PowerModelsDistribution.constraint_pqw","text":"Creates the constraints modelling the (relaxed) voltage-dependency of the power consumed in each phase, s=p+jq. This is completely symmetrical for p and q, with appropriate substitutions of the variables and parameters: p->q, a->b, alpha->beta, pmin->qmin, pmax->qmax\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_complementarity_mi-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Real, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_complementarity_mi","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_complementarity_mi-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_complementarity_mi","text":"constraint_storage_complementarity_mi(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nTemplate function for mixed-integer storage complementarity constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_complementarity_nl-Tuple{AbstractUnbalancedPowerModel, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_complementarity_nl","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_complementarity_nl-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_complementarity_nl","text":"constraint_storage_complementarity_nl(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)\n\nTemplate function for nonlinear storage complementarity constraints\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_complementarity_nl-Tuple{LPUBFDiagModel, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_complementarity_nl","text":"constraint_storage_complementarity_nl(pm::LPUBFDiagModel, n::Int, i::Int)\n\nLinear version of storage complementarity constraint\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_state-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Int64, Real, Real, Real}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_state","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_state-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_state","text":"constraint_storage_state(pm::AbstractUnbalancedPowerModel, i::Int, nw_1::Int, nw_2::Int)::Nothing\n\nTemplate function for storage state constraints for multinetwork problems\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_state-Tuple{AbstractUnbalancedPowerModel, Int64}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_state","text":"constraint_storage_state(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)::Nothing\n\nTemplate function for storage state constraints (non multinetwork)\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_storage_state_initial-Tuple{AbstractUnbalancedPowerModel, Int64, Int64, Vararg{Real, 4}}","page":"Constraints","title":"PowerModelsDistribution.constraint_storage_state_initial","text":"\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.constraint_switch_thermal_limit-Tuple{AbstractUnbalancedPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{<:Real}}","page":"Constraints","title":"PowerModelsDistribution.constraint_switch_thermal_limit","text":"constraint_switch_thermal_limit(pm::AbstractUnbalancedPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, rating::Vector{<:Real})::Nothing\n\nGeneric thermal limit constraint for switches (from-side)\n\nmathp_{fr}^2 + q_{fr}^2 \\leq S_{max}^2\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#Relaxation-Helpers","page":"Constraints","title":"Relaxation Helpers","text":"","category":"section"},{"location":"reference/constraints.html","page":"Constraints","title":"Constraints","text":"Modules = [PowerModelsDistribution]\nPrivate = false\nOrder = [:function]\nPages = [\"relaxation_scheme.jl\"]","category":"page"},{"location":"reference/constraints.html#PowerModelsDistribution.cut_complex_product_and_angle_difference-NTuple{7, Any}","page":"Constraints","title":"PowerModelsDistribution.cut_complex_product_and_angle_difference","text":"cut_complex_product_and_angle_difference(m, wf, wt, wr, wi, angmin, angmax)\n\nA valid inequality for the product of two complex variables with magnitude and angle difference bounds. In the literature this constraints are called the Lifted Nonlinear Cuts (LNCs). @misc{1512.04644, Author = {Carleton Coffrin and Hassan Hijazi and Pascal Van Hentenryck}, Title = {Strengthening the SDP Relaxation of AC Power Flows with Convex Envelopes, Bound Tightening, and Lifted Nonlinear Cuts}, Year = {2015}, Eprint = {arXiv:1512.04644}, }\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_psd_real-Tuple{Any, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_psd_real","text":"relaxation_psd_to_psd_real(m, mxreal, mximag; ndim=3)\n\nFor debugging / exploration: real-valued SDP to SDP relaxation based on PSDness of principal minors, default is 3x3 SDP relaxation\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc-Tuple{JuMP.Model, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc","text":"relaxation_psd_to_soc(m::JuMP.Model, mxreal, mximag; complex::Bool=true)\n\nSee section 4.3 for complex to real PSD constraint transformation: @article{Fazel2001, author = {Fazel, M. and Hindi, H. and Boyd, S.P.}, title = {{A rank minimization heuristic with application to minimum order system approximation}}, doi = {10.1109/ACC.2001.945730}, journal = {Proc. American Control Conf.}, number = {2}, pages = {4734–4739}, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=945730}, volume = {6}, year = {2001} }\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc_complex-Tuple{Any, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc_complex","text":"relaxation_psd_to_soc_complex(m, mxreal, mximag)\n\nSDP to SOC relaxation of type 2, applied to complex-value matrix, as described in:\n\n@article{Kim2003,\nauthor = {Kim, S and Kojima, M and Yamashita, M},\ntitle = {{Second order cone programming relaxation of a positive semidefinite constraint}},\ndoi = {10.1080/1055678031000148696},\njournal = {Optimization Methods and Software},\nnumber = {5},\npages = {535--541},\nvolume = {18},\nyear = {2003}\n}\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc_complex_conic-Tuple{Any, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc_complex_conic","text":"relaxation_psd_to_soc_complex_conic(m, mxreal, mximag)\n\nSDP to SOC relaxation of type 2, applied to complex-value matrix, as described in:\n\n@article{Kim2003,\nauthor = {Kim, S and Kojima, M and Yamashita, M},\ntitle = {{Second order cone programming relaxation of a positive semidefinite constraint}},\ndoi = {10.1080/1055678031000148696},\njournal = {Optimization Methods and Software},\nnumber = {5},\npages = {535--541},\nvolume = {18},\nyear = {2003}\n}\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc_conic-Tuple{Any, Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc_conic","text":"relaxation_psd_to_soc_conic(m, mxreal, mximag; complex=true)\n\nSee section 4.3 for complex to real PSD constraint transformation: @article{Fazel2001, author = {Fazel, M. and Hindi, H. and Boyd, S.P.}, title = {{A rank minimization heuristic with application to minimum order system approximation}}, doi = {10.1109/ACC.2001.945730}, journal = {Proc. American Control Conf.}, number = {2}, pages = {4734–4739}, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=945730}, volume = {6}, year = {2001} }\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc_real-Tuple{Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc_real","text":"relaxation_psd_to_soc_real(m, mx)\n\nSDP to SOC relaxation of type 2, applied to real-value matrix, as described in:\n\n@article{Kim2003,\nauthor = {Kim, S and Kojima, M and Yamashita, M},\ntitle = {{Second order cone programming relaxation of a positive semidefinite constraint}},\ndoi = {10.1080/1055678031000148696},\njournal = {Optimization Methods and Software},\nnumber = {5},\npages = {535--541},\nvolume = {18},\nyear = {2003}\n}\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsDistribution.relaxation_psd_to_soc_real_conic-Tuple{Any, Any}","page":"Constraints","title":"PowerModelsDistribution.relaxation_psd_to_soc_real_conic","text":"relaxation_psd_to_soc_real_conic(m, mx)\n\nSDP to SOC relaxation of type 2, applied to real-value matrix, as described in:\n\n@article{Kim2003,\nauthor = {Kim, S and Kojima, M and Yamashita, M},\ntitle = {{Second order cone programming relaxation of a positive semidefinite constraint}},\ndoi = {10.1080/1055678031000148696},\njournal = {Optimization Methods and Software},\nnumber = {5},\npages = {535--541},\nvolume = {18},\nyear = {2003}\n}\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#Miscellaneous-Helpers","page":"Constraints","title":"Miscellaneous Helpers","text":"","category":"section"},{"location":"reference/constraints.html","page":"Constraints","title":"Constraints","text":"calculate_tm_scale\ncalc_branch_y\ncalc_buspair_parameters","category":"page"},{"location":"reference/constraints.html#PowerModelsDistribution.calculate_tm_scale","page":"Constraints","title":"PowerModelsDistribution.calculate_tm_scale","text":"Calculates the tap scale factor for the non-dimensionalized equations.\n\n\n\n\n\n","category":"function"},{"location":"reference/constraints.html#PowerModelsDistribution.calc_branch_y","page":"Constraints","title":"PowerModelsDistribution.calc_branch_y","text":"calc_branch_y(branch::Dict{String,<:Any})\n\ncomputes branch admittance matrices\n\n\n\n\n\n","category":"function"},{"location":"reference/constraints.html#PowerModelsDistribution.calc_buspair_parameters","page":"Constraints","title":"PowerModelsDistribution.calc_buspair_parameters","text":"calc_buspair_parameters(buses, branches)\n\nComputes the buspair parameters for the network\n\n\n\n\n\n","category":"function"}] } diff --git a/dev/tutorials/Beginners Guide.html b/dev/tutorials/Beginners Guide.html index 96f48d3df..d69fbb914 100644 --- a/dev/tutorials/Beginners Guide.html +++ b/dev/tutorials/Beginners Guide.html @@ -352,10 +352,10 @@ Documenter.jl version 0.27.25 on - - Friday 4 August 2023 + + Wednesday 20 September 2023 - . Using Julia version 1.9.2. + . Using Julia version 1.9.3.

      diff --git a/dev/tutorials/Beginners Guide.jl.html b/dev/tutorials/Beginners Guide.jl.html index 85502b704..1b02c4660 100644 --- a/dev/tutorials/Beginners Guide.jl.html +++ b/dev/tutorials/Beginners Guide.jl.html @@ -3,11 +3,11 @@ diff --git a/dev/tutorials/Engineering Model - Helper Functions.html b/dev/tutorials/Engineering Model - Helper Functions.html index 5bf1af914..92429e096 100644 --- a/dev/tutorials/Engineering Model - Helper Functions.html +++ b/dev/tutorials/Engineering Model - Helper Functions.html @@ -352,10 +352,10 @@ Documenter.jl version 0.27.25 on - - Friday 4 August 2023 + + Wednesday 20 September 2023 - . Using Julia version 1.9.2. + . Using Julia version 1.9.3.

      diff --git a/dev/tutorials/Engineering Model - Helper Functions.jl.html b/dev/tutorials/Engineering Model - Helper Functions.jl.html index 71a33fe33..04009ce55 100644 --- a/dev/tutorials/Engineering Model - Helper Functions.jl.html +++ b/dev/tutorials/Engineering Model - Helper Functions.jl.html @@ -7,7 +7,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.19.27"; -window.pluto_statefile = "data:;base64,3gARpWJvbmRzgKxjZWxsX3Jlc3VsdHON2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODGKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52eM8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+SW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB3ZSBwcm92aWRlIGV4YW1wbGVzIG9mIGEgd2lkZXIgcmFuZ2Ugb2YgY29tcG9uZW50IHR5cGVzIHRoYXQgY2FuIGJlIGFkZGVkIHVzaW5nIGhlbHBlciBmdW5jdGlvbnMgdG8gZ2l2ZSBhIGZsYXZvciBvZiB3aGF0IGlzIHBvc3NpYmxlIGluIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIHYwLjk8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNQgg/HDbBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkNjUwYjZkZWUtZTc1My00MThjLWFmMWUtYTBkZGRhMDlkZjgxuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAATF4rVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDc2ODNkYWJjLTc3MmYtNGZkZi1hNzg0LTU0OWMwNTA4NDk1OIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZVjxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5Jbml0aWFsaXplIGFuIGVtcHR5IDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBtb2RlbDwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1B0zoJisHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTi5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABFBNtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZmY0YjJmZmEtOWQyNS0xMWViLTA3ZDAtMjk3NTFlN2I1N2MyiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoBITxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDE+QnVpbGRpbmcgRW5naW5lZXJpbmcgRGF0YSBNb2RlbHMgd2l0aCBIZWxwZXIgRnVuY3Rpb25zPC9oMT4KPHA+SW4gdGhpcyBub3RlYm9vayB3ZSB3aWxsIGRlbW9uc3RyYXRlIGFuIGVhc3kgd2F5IHRvIHN0YXJ0IGJ1aWxkaW5nIG5ldyBkaXN0cmlidXRpb24gbmV0d29yayBtb2RlbHMgaW4gdGhlIGVuZ2luZWVyaW5nIGZvcm1hdCB1c2luZyBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhZGRlZCBpbiBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiB2MC45PC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUHRD4yawcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGZmNGIyZmZhLTlkMjUtMTFlYi0wN2QwLTI5NzUxZTdiNTdjMrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgY9fsm1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQzMDQxN2NjZi1kMGI0LTQzZDUtOWNlYi01YjAwZWY5YzhhMTeKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5oKRtaW1lqnRleHQvcGxhaW6scm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUHNI3NewcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDMwNDE3Y2NmLWQwYjQtNDNkNS05Y2ViLTViMDBlZjljOGExN7lkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzwAAAAHBFXSGtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMjBkM2Q5NWQtNzgxNy00NWRlLTg5ZTktZmZjZTAyMDJkOGNmiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkq8ic2Jhc2VfZGVmYXVsdCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkrAidmJhc2VzX2RlZmF1bHQiqnRleHQvcGxhaW6ShaZwcmVmaXivRGljdHtBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzAzNzMyZjE5NThjOWJlMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpK2InZvbHRhZ2Vfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKStCJwb3dlcl9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpKwImJhc2VfZnJlcXVlbmN5Iqp0ZXh0L3BsYWlukqQ2MC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDEyNzEyOWZlZGEwMDhlYmLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJwZXJfdW5pdCKqdGV4dC9wbGFpbpKlZmFsc2WqdGV4dC9wbGFpbpKSrCJkYXRhX21vZGVsIqp0ZXh0L3BsYWlukrpFTkdJTkVFUklORzo6RGF0YU1vZGVsID0gMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3NDExN2M4YjlkNDEzMDlmpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNQdQN+X7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMjBkM2Q5NWQtNzgxNy00NWRlLTg5ZTktZmZjZTAyMDJkOGNmuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXNxHy1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQxY2E5NjU3Yi04NWI0LTRlYTYtOTAxYy1kMzZlMjNlODQ0MGaKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOYkpKwInZvbHRhZ2Vfc291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqCJzb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpK3InZvbHRhZ2Vfc291cmNlLnNvdXJjZSKqdGV4dC9wbGFpbpKSpCJ2YSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyZjc2MjY3NDk5ZTg1ODYy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDM2NTA2NzQ5MjY1MjBhYmbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ2bSKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwY2FkMTBhNDQ0ZjUzMmU1YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4ZDdhNzRlYzUyNjBlMzg42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzdjMGVmMDk0NmVkZDlmNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKpInByaW1hcnkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjE2NjVkZjA3OWQyNDliNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbpKSqCJ2YWRfdWIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNWM0ZTVjMmRlZmEyNDQ2ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKuImxpbmUucHJpbWFyeSKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK9hMjkxODFkY2I1N2I2YTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ0cnVuayKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhOTExYjhiYTA5MjkxMDJm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZl9idXMiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SkqgidmFkX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDMyNmY0MzkzOWJlNDI2OTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsaW5lLnRydW5rIqp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQzNTIxODIzYmRhOWM4NWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTg4ZWUxOGQ2ODIzNTZkZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSryJzYmFzZV9kZWZhdWx0Iqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSsCJ2YmFzZXNfZGVmYXVsdCKqdGV4dC9wbGFpbpKFpnByZWZpeK9EaWN0e0FueSwgUmVhbH2oZWxlbWVudHORkpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3OTc5YmJkMWFhNWY5MGZi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkrYidm9sdGFnZV9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpKqImJhc2VfYnVzIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlukpK0InBvd2VyX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkrAiYmFzZV9mcmVxdWVuY3kiqnRleHQvcGxhaW6SpDYwLjCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDRjMzgzYjRjMGYzMjJkMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKqImJhbGFuY2VkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SryJsb2FkLmJhbGFuY2VkIqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOTU2MmIxZWQ2MWNiMmE4ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4NDZkNjk3MzQyZDIyOTBl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicGRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5MmRkYmMzNmRjYzBmOTA12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvZWQwMjZjZGQ0YTYxN2Rk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNmYjQ2Y2I0YjY2ZTk5N2HZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKtImJ1cy5wcmltYXJ5Iqp0ZXh0L3BsYWlukpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkNzcwMGNlNGJjNGEzZTU02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK9mMWNmMTBlYWJhM2U4MmLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGM4NmE1OTVhNDg0MGM2YWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNThhZTNhMmViZWM2OTRjNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjYzQ3OGRjZjRmZmIwMTBk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SryJidXMuc291cmNlYnVzIqp0ZXh0L3BsYWlukpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrzdmNTc2YTYxZDU0ZjA5MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1ODQ1OTgwOTNkZjUzNzFi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxOGZmMjc5NDZiYWY4MWQ22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwN2E0MGYxMDUwMWVjMDM2ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1MjEwMWZhMmRiOGM1OTcy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukq0iYnVzLmxvYWRidXMiqnRleHQvcGxhaW6SkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYmIyYWRmOGI4M2JmYmMxNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmM2EwOTcwOWY0YWI0ZDFh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzMWU3NDk2NzFkN2ZjYjU32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjViMzcwNThkOGQwZGM0ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2NzJkZDAyODg1YzdhMDYx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDE2MjQxNGVlZTNiNDM5NjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJsaW5lY29kZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqkiZGVmYXVsdCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqYiYl9mciKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktlJM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAxICAwLjAgICAwLjAKIDAuMCAgIDAuMDEgIDAuMAogMC4wICAgMC4wICAgMC4wMap0ZXh0L3BsYWlukpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKyImxpbmVjb2RlLmRlZmF1bHQiqnRleHQvcGxhaW6SkqQieHMiqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMiAgMC4wICAwLjAKIDAuMCAgMC4yICAwLjAKIDAuMCAgMC4wICAwLjKqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6SkqYiYl90byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU5NDA5MDIwODk4NmM3MmbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYWUwNjkzODA5MzEyYzNhNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlukpKsImRhdGFfbW9kZWwiqnRleHQvcGxhaW6SukVOR0lORUVSSU5HOjpEYXRhTW9kZWwgPSAwqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGMxMDFjMDJhYjk2ZjhlMjCkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1B1ocKLsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQxY2E5NjU3Yi04NWI0LTRlYTYtOTAxYy1kMzZlMjNlODQ0MGa5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4MHF6ytXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkOTAxMGNjY2ItZTE3NC00ZGZmLWI5MzQtN2U3YmU1YTkzYTFkiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedlWPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPlJ1bm5pbmcgdGhpcyBjYXNlIHdpdGggT1BGIGdpdmVzIHRoZSByZXN1bHRzIGJlbG93PC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUHWiDNiwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDkwMTBjY2NiLWUxNzQtNGRmZi1iOTM0LTdlN2JlNWE5M2ExZLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAERV61cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQxODg1Y2UwZS1mZTFhLTRiOWItYjY1Mi03MmNiZWUyMTMzOWSKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXjZKE1hdGhPcHRJbnRlcmZhY2UuT3B0aW1pemVyV2l0aEF0dHJpYnV0ZXOoZWxlbWVudHOSkrVvcHRpbWl6ZXJfY29uc3RydWN0b3KSr0lwb3B0Lk9wdGltaXplcqp0ZXh0L3BsYWlukqZwYXJhbXOShaZwcmVmaXjZNlBhaXJ7TWF0aE9wdEludGVyZmFjZS5BYnN0cmFjdE9wdGltaXplckF0dHJpYnV0ZSwgQW55fahlbGVtZW50c5KSAZKDpHR5cGWkUGFpcqhvYmplY3RpZLA3ZWRlMjM2MTUzMjdiOTJhqWtleV92YWx1ZZKShaZwcmVmaXi1UmF3T3B0aW1pemVyQXR0cmlidXRlqGVsZW1lbnRzkZKkbmFtZZKtInByaW50X2xldmVsIqp0ZXh0L3BsYWlupHR5cGWmc3RydWN0rHByZWZpeF9zaG9ydLVSYXdPcHRpbWl6ZXJBdHRyaWJ1dGWob2JqZWN0aWSwODAyZGE4MDQwNGI3NTNkY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kqEwqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoOkdHlwZaRQYWlyqG9iamVjdGlksDZlNjE0ZjRlNTlhZDQxYmGpa2V5X3ZhbHVlkpKFpnByZWZpeLVSYXdPcHRpbWl6ZXJBdHRyaWJ1dGWoZWxlbWVudHORkqRuYW1lkqUidG9sIqp0ZXh0L3BsYWlupHR5cGWmc3RydWN0rHByZWZpeF9zaG9ydLVSYXdPcHRpbWl6ZXJBdHRyaWJ1dGWob2JqZWN0aWSwNzNhNTYwZWU4MDk2ZWVlM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kqYxLjBlLTaqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxMmNmNjk3ZWRmZmMyYjkz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaZzdHJ1Y3SscHJlZml4X3Nob3J0t09wdGltaXplcldpdGhBdHRyaWJ1dGVzqG9iamVjdGlkrzQzZTMyM2YwNTc0OTJkZKRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlrGlwb3B0X3NvbHZlcrJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUHTONqiwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDE4ODVjZTBlLWZlMWEtNGI5Yi1iNjUyLTcyY2JlZTIxMzM5ZLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgKR1pW1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ5NWVjZDY1OS00NWQwLTRiZDAtOWYzMi05Y2FmZDc4ZmIyYzeKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOckpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukq0iYnVzLnByaW1hcnkiqnRleHQvcGxhaW6SkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDgyM2MyZDFjOThiOTRlOTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFjZDBkNTFiNGRlMmExM2LZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDdhNmFlMTBiMDk5ZDI3YWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZWM4MTU0OGE2ZDQzOTg0ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhOTJhNWM3OWU3MTNmNTU22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SryJidXMuc291cmNlYnVzIqp0ZXh0L3BsYWlukpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrzkxZmI3YmUyNjgwNjE3MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiODYxNzMyNzA1MDNhMTkw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxZGUzMjhmYWU2MWMwNzE22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOWE1YzY0ODc0OGY5YjIxMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3ZDFiYmIzNDhlZmVkNjhj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidHRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKrImJ1cy50dGJ1cyKqdGV4dC9wbGFpbpKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjZTQwMDgzMjMwYzEzOTBl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU4YWUxMTZlNDU5ZDUyMjDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDdiZDQ2ZTJkYTFmZWI2MmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmZTE2ODA0MTkwNmU0Y2Y42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDJiMmYzMzIwZWIyNWRkNWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJsb2FkYnVzMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukq4iYnVzLmxvYWRidXMyIqp0ZXh0L3BsYWlukpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDk0MWI4MGRkM2M3N2QwMzXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOTM1ZTQ5YzNiYWZkNWI3NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjYwMDA3ZGI5NjU1YjQyONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNkM2MxNGFlMGViOGVjNjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmU2YTk5YWYxMTkzMzZhN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpImxvYWRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKtImJ1cy5sb2FkYnVzIqp0ZXh0L3BsYWlukpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDdiZjE3ZmQ3OGMyM2U3ODbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTFlYTVkZTNiODE1ZWQ5MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNzMzMmM4ODAxMGJiNDgxM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDljZDIyOTIyY2RlNThhNWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZWZmMWYxNGQ3NGFiNDA3Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjZWMzMmYwOTMyNDU5ZTcw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKvInNiYXNlX2RlZmF1bHQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4r0RpY3R7QW55LCBSZWFsfahlbGVtZW50c5GSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGZlZDY2YjkwMTI3NGQzYzHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkqoiYmFzZV9idXMiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNjAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjODFjMzFiYmE0ZmZlZTkx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsiZ2VuZXJhdG9yIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqyJzZWNvbmRhcnkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpK1ImdlbmVyYXRvci5zZWNvbmRhcnkiqnRleHQvcGxhaW6SkrQiY29zdF9wZ19wYXJhbWV0ZXJzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGJjM2EzZmM5MGQyY2UwYzjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDQ3OWVmNDMzMzQ5ODYxYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuImNvbnRyb2xfbW9kZSKqdGV4dC9wbGFpbpK/RlJFUVVFTkNZRFJPT1A6OkNvbnRyb2xNb2RlID0gMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKqImxvYWRidXMyIqp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzYyMGUyYmFhMGY5YTJiYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4ZGMyZGMyMDMwM2Q5M2Mz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3dpdGNoIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqSJicmVha2VyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SsCJzd2l0Y2guYnJlYWtlciKqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkMjAyNDE3MWI4YmM1N2I12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZl9idXMiqnRleHQvcGxhaW6SpyJ0dGJ1cyKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSriJkaXNwYXRjaGFibGUiqnRleHQvcGxhaW6StE5POjpEaXNwYXRjaGFibGUgPSAwqnRleHQvcGxhaW6SkqcidF9idXMiqnRleHQvcGxhaW6SqiJsb2FkYnVzMiKqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxMjFjNWZmNmI4ZjA5NTgy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDVjYTY5MGJkY2UwNGYzNGLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6StyJ2b2x0YWdlX3NvdXJjZS5zb3VyY2UiqnRleHQvcGxhaW6SkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOWVhYTkyMDQ2N2FhZTEyYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4ZGFiZTlmZTQ1YWQ4ODNi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQidm0iqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI1ZDliNDY0MTYwOTI0NWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjA2ODRmNzhkNTkwZWNkMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiY2QyY2M5MDBlNjNjYmVl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxNDVkNjI2ZmJkNzkxM2Q42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZl9idXMiqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukpKoInZhZF91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK9iZDdlOGZmMmM2ZjNlOTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SriJsaW5lLnByaW1hcnkiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTM5YzMwNmFiYmY2NjdkZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnInRydW5rIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKvInRfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDhiNTUwODE4MmI2OWYxZWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKSqCJ2YWRfdWIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmViNzI2MTc3MjJkYWI1YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxpbmUudHJ1bmsiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTlmZjdjZTc0OGJlZGIyYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjMGI4MjU4NDk2MmU1NWQ32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6SkqwiZGF0YV9tb2RlbCKqdGV4dC9wbGFpbpK6RU5HSU5FRVJJTkc6OkRhdGFNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJ0cmFuc2Zvcm1lciKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqUidHgxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SsSJ0cmFuc2Zvcm1lci50eDEiqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzMwYjc2NGRiMDZjYzUzNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlukpKoInRtX25vbSKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqgidG1fZml4Iqp0ZXh0L3BsYWlukoWmcHJlZml4pEJvb2yoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDI4YmUyNzg1ZTViZDlhMWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhNzMyMzY2N2UzMjJmNjJh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGM4OGU3YWIyYTVkYjc5NjPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJzaHVudCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqUiY2FwIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SqyJzaHVudC5jYXAiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6St0dFTkVSSUM6OlNodW50TW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrzk5YjgwNDliZDhjYTc4Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuImRpc3BhdGNoYWJsZSKqdGV4dC9wbGFpbpK0Tk86OkRpc3BhdGNoYWJsZSA9IDCqdGV4dC9wbGFpbpKSpCJncyKqdGV4dC9wbGFpbpLZZTTDlzQgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjExNTRlZTM3NmUyYmFkNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5ZGRkOTQzMWQwNzM1ZWUy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqcidGxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQudGxvYWQiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0YzIxMmQ0Y2FjZmE5ZWMx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGMxYjc2YWJlMmRjNDdkYTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGYxNDRjMTYzZjc0MWVjMjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3MDhhMmZlYWY1Y2NiZGI12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiYmFsYW5jZWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKvImxvYWQuYmFsYW5jZWQiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmYWFlZWVlODBhMWNlNGM52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDZhZmM0ODJlODA0ZTQ5MDjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGY3YmYzNTYwMDQzZDZjNTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiZTQyNmI0ZDExNDNlMWQ02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDgzNTRlMTY4OWI3MWFiOGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJsaW5lY29kZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqkiZGVmYXVsdCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqYiYl9mciKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktlJM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAxICAwLjAgICAwLjAKIDAuMCAgIDAuMDEgIDAuMAogMC4wICAgMC4wICAgMC4wMap0ZXh0L3BsYWlukpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKyImxpbmVjb2RlLmRlZmF1bHQiqnRleHQvcGxhaW6SkqQieHMiqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMiAgMC4wICAwLjAKIDAuMCAgMC4yICAwLjAKIDAuMCAgMC4wICAwLjKqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6SkqYiYl90byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDRmMjk4NWFkMzMxYTNlNGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGMxN2UzNTQyY2Y2ZmY2NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhMzJlMjk0MjViMWNiNWYzpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNQgknYYrBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkOTVlY2Q2NTktNDVkMC00YmQwLTlmMzItOWNhZmQ3OGZiMmM3uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAVkerVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGYyNjU0ZDk1LTBjOGItNDUyNC1hZDFmLWYwZjEyYTM1YzU3MIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZ9DxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5GaXJzdCwgd2UgbmVlZCBhIG9wdGltaXplci4gSW4gdGhpcyBjYXNlIHdlIHdpbGwgdXNlIElwb3B0IGFuZCBpbml0aWFsaXplIGl0IHdpdGggSnVNUCYjMzk7cyA8Y29kZT5vcHRpbWl6ZXJfd2l0aF9hdHRyaWJ1dGVzPC9jb2RlPiwgd2hpY2ggd2UgaGF2ZSBleHBvcnRlZCBmcm9tIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIGJ5IGRlZmF1bHQgZm9yIHRoZSB1c2VyPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUHRGLYSwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGYyNjU0ZDk1LTBjOGItNDUyNC1hZDFmLWYwZjEyYTM1YzU3MLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAFbj61cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRmZGFlZDc4Mi01MjliLTQyNjctYmY3My1lMjZhNmEzZDQyOTeKpnF1ZXVlZMKkbG9nc5GIpGxpbmX/o21zZ5LZVnVwZGF0ZWQgZ2VuZXJhdG9yIDEgY29zdCBmdW5jdGlvbiB3aXRoIG9yZGVyIDMgdG8gYSBmdW5jdGlvbiBvZiBvcmRlciAyOiBbMC4wMDEyLCAwLjBdqnRleHQvcGxhaW6nY2VsbF9pZNkkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3pmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uX2ZhNTJkNzY1pGZpbGXZSy9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2NvcmUvZGF0YS5qbKVncm91cKRkYXRhpWxldmVspEluZm+ncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOYkpKsInNvbHZlX3RpbWUiqnRleHQvcGxhaW6SpzQuMTY2MTWqdGV4dC9wbGFpbpKSqyJvcHRpbWl6ZXIiqnRleHQvcGxhaW6SpyJJcG9wdCKqdGV4dC9wbGFpbpKStCJ0ZXJtaW5hdGlvbl9zdGF0dXMiqnRleHQvcGxhaW6S2StJVEVSQVRJT05fTElNSVQ6OlRlcm1pbmF0aW9uU3RhdHVzQ29kZSA9IDExqnRleHQvcGxhaW6Skq0iZHVhbF9zdGF0dXMiqnRleHQvcGxhaW6S2StVTktOT1dOX1JFU1VMVF9TVEFUVVM6OlJlc3VsdFN0YXR1c0NvZGUgPSA4qnRleHQvcGxhaW6Skq8icHJpbWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZK1VOS05PV05fUkVTVUxUX1NUQVRVUzo6UmVzdWx0U3RhdHVzQ29kZSA9IDiqdGV4dC9wbGFpbpKSqyJvYmplY3RpdmUiqnRleHQvcGxhaW6SqS01LjA4NmUxNap0ZXh0L3BsYWlukpKqInNvbHV0aW9uIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmZKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmNmVhZGY5YjAzMTQ4YTcz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGMyYjViOTUzMWFhYTQyNWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyZWI5MjRiZmRmOGYxZWQ02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidHJ1bmsiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDlhOWZlY2E2Yjc1Y2RmMjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2E4OTg5MjM5NzMwMGM3ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpyJzYmFzZSKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGZmYzc0NDdiODFhYjU5ODjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJ0cmFuc2Zvcm1lciKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqUidHgxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjMDJjYmNlYThiNGVlYjcz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc0Yzc1Y2JkNzQ4NDM0ZDLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJnZW5lcmF0b3IiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKrInNlY29uZGFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmE0N2U5NzVlOWFkNGY0M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhOWIwMGMxYzY4N2RhMzFm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqcidGxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI1ZGU3NTM1MDExZjM0YzjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJiYWxhbmNlZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvMzRiM2ZmYjFiZmFmMTRm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGZiYWI5NzU2OGNiYmE3N2HZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzd2l0Y2giqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKpImJyZWFrZXIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGEzZDM4ZTg5YzljNDA3ZGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvZTYxOWU5NDllZTAyY2Iy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiZjk0ZWZjYTgxNDY5ZWRm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkNDBiODQ5N2FhMzNhNmY12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidHRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGVjNDdhOWM3NWFhYmRlNzDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJsb2FkYnVzMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTFlMTIwZjUyNWRlZGU5MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpImxvYWRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGVhYzRhYmM4ZDdhNWVhMDPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTlmMzQxZTNkNjAzMTU1ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmYjg3OTdjYjhjNGUwMjY42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4ib2JqZWN0aXZlX2xiIqp0ZXh0L3BsYWlukqQtSW5mqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI1YTRhYTQ4ODAzY2M1YjekbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZadyZXN1bHQysmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNQhMW5qrBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXPAAAAAk6YY7y1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWSKpnF1ZXVlZMKkbG9nc5GIpGxpbmX/o21zZ5LaAYMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqClRoaXMgcHJvZ3JhbSBjb250YWlucyBJcG9wdCwgYSBsaWJyYXJ5IGZvciBsYXJnZS1zY2FsZSBub25saW5lYXIgb3B0aW1pemF0aW9uLgogSXBvcHQgaXMgcmVsZWFzZWQgYXMgb3BlbiBzb3VyY2UgY29kZSB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAoRVBMKS4KICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gdmlzaXQgaHR0cHM6Ly9naXRodWIuY29tL2NvaW4tb3IvSXBvcHQKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgqqdGV4dC9wbGFpbqdjZWxsX2lk2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWSma3dhcmdzkKJpZLlNYWluX1BsdXRvUnVubmVyXzMwNDNkYjhjpGZpbGXZQi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUGx1dG8va3hlc28vc3JjL3J1bm5lci9QbHV0b1J1bm5lci5qbKVncm91cKtQbHV0b1J1bm5lcqVsZXZlbK5Mb2dMZXZlbCgtNTU1KadydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5iSkqwic29sdmVfdGltZSKqdGV4dC9wbGFpbpKnMS4xOTIwOKp0ZXh0L3BsYWlukpKrIm9wdGltaXplciKqdGV4dC9wbGFpbpKnIklwb3B0Iqp0ZXh0L3BsYWlukpK0InRlcm1pbmF0aW9uX3N0YXR1cyKqdGV4dC9wbGFpbpLZKUxPQ0FMTFlfU09MVkVEOjpUZXJtaW5hdGlvblN0YXR1c0NvZGUgPSA0qnRleHQvcGxhaW6Skq0iZHVhbF9zdGF0dXMiqnRleHQvcGxhaW6S2SRGRUFTSUJMRV9QT0lOVDo6UmVzdWx0U3RhdHVzQ29kZSA9IDGqdGV4dC9wbGFpbpKSryJwcmltYWxfc3RhdHVzIqp0ZXh0L3BsYWluktkkRkVBU0lCTEVfUE9JTlQ6OlJlc3VsdFN0YXR1c0NvZGUgPSAxqnRleHQvcGxhaW6Skqsib2JqZWN0aXZlIqp0ZXh0L3BsYWlukqkwLjAxNTAwMTaqdGV4dC9wbGFpbpKSqiJzb2x1dGlvbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKoInNvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTIxYjRmNGJhOWRjZTY3YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjN2QyZDdkMTE1NGJmNTZj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzFkYWEwODQ2NmQ2OTM2OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnInRydW5rIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhYmYwNGQ2ZTViMDFlZjU32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGEzYjQ4YmVmY2E4YTYzNmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqcic2Jhc2UiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0Y2QyNDRjMTliYjA3Nzkz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqoiYmFsYW5jZWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQzM2FmYjg5MDk4OTVmNjbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjA3MDE5MGZjM2YzOTA1MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNzk4MmYzYmQ3NjE3ZGJkZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDI0MmNkMDMyNzk3OTBhNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpImxvYWRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY0NGJhMTE4NGJhOTJiNzjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDZmMjhiZTM5MGY3MDA1YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkNWYwZTg1ZmIyNDNkOGVk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4ib2JqZWN0aXZlX2xiIqp0ZXh0L3BsYWlukqQtSW5mqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDhmYmQyYjQ0YTRhOWQwZDikbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZaZyZXN1bHSybGFzdF9ydW5fdGltZXN0YW1wy0HZM1CCD3hksHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc8AAAAKO6bdnrVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGQ0Y2U0OWJkLWYzOGUtNDRlMC1hYTNhLTRlZTNmMGY3MGJmMYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaBC08ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+SW4gdGhpcyBibG9jayB3ZSBidWlsZCBhIHRocmVlIGJ1cyBuZXR3b3JrLCB3aXRoIG5ldXRyYWxzIGdyb3VuZGVkIGF0IHRoZSBzb3VyY2UgYW5kIGxvYWRzLjwvcD4KPHA+V2Ugc3RhcnQgd2l0aCBidXNlcywgd2l0aCB0aGUgc291cmNlYnVzIGFuZCBsb2FkYnVzIGhhdmluZyA0IHRlcm1pbmFscywgd2l0aCB0aGUgbGFzdCB0ZXJtaW5hbCBncm91bmRlZC48L3A+CjxwPlRoZW4gd2UgYWRkIGEgZ2VuZXJhdGlvbiBzb3VyY2UsIGluIHRoaXMgY2FzZSBhIHZvbHRhZ2Ugc291cmNlLCB3aGljaCBpcyA8Y29kZT5XWUU8L2NvZGU+IGNvbmZpZ3VyZWQgYnkgZGVmYXVsdCwgYW5kIHRoZXJlZm9yZSBleHBlY3RzIHRoZSBsYXN0IGNvbmR1Y3RvciB0byBiZSBhIGdyb3VuZGVkIG5ldXRyYWw8L3A+CjxwPldlIGFkZCB0d28gdGhyZWUgcGhhc2UgbGluZXMgdG8gY29ubmVjdCB0aGUgYnVzZXMgPGNvZGU+c291cmNlYnVzPC9jb2RlPiwgPGNvZGU+cHJpbWFyeTwvY29kZT4sIGFuZCA8Y29kZT5sb2FkYnVzPC9jb2RlPi4gTm90ZSB0aGF0IG5vbmUgb2YgdGhlIGxpbmVzIGhhdmUgYSBuZXV0cmFsIGNvbmR1Y3Rvci48L3A+CjxwPldlIGZpbmFsbHkgYWRkIGEgdGhyZWUtcGhhc2UgbG9hZCBhIHRoZSA8Y29kZT5sb2FkYnVzPC9jb2RlPiBidXMsIGJ1dCBub3RlIGFnYWluIHRoYXQgdGhpcyBpcyBhIDxjb2RlPldZRTwvY29kZT4gY29uZmlndXJlZCBsb2FkLCBhbmQgbGlrZSB0aGUgdm9sdGFnZSBzb3VyY2UsIHRoaXMgaW1wbGllcyB0aGF0IHRoZSBsYXN0IGNvbmR1Y3RvciBpcyBhIGdyb3VuZGVkIG5ldXRyYWwgZm9yIHRoZSBwdXJwb3NlcyBvZiBrcm9uIHJlZHVjdGlvbiAmIzQwO3doaWNoIGlzIHJlcXVpcmVkIGJ5IGRlZmF1bHQgdW50aWwgZXhwbGljaXQgNC13aXJlIG1vZGVsaW5nIGlzIGFkZGVkIHRvIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uJiM0MTs8L3A+CjxwPkxhc3RseSwgd2UgbmVlZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgdmJhc2Ugb2YgdGhlIHN5c3RlbSBhdCB0aGUgPGNvZGU+c291cmNlYnVzPC9jb2RlPjwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1B1A9cssHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRkNGNlNDliZC1mMzhlLTQ0ZTAtYWEzYS00ZWUzZjBmNzBiZjG5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ACj0ctXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwqtzdGF0dXNfdHJlZYSkbmFtZahub3RlYm9va6hzdWJ0YXNrc4Smc2F2aW5nhKRuYW1lpnNhdmluZ6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUHNYjo+qc3RhcnRlZF9hdMtB2TNQc1iAgKl3b3Jrc3BhY2WEpG5hbWWpd29ya3NwYWNlqHN1YnRhc2tzgqxpbml0X3Byb2Nlc3OEpG5hbWWsaW5pdF9wcm9jZXNzqHN1YnRhc2tzhKE0hKRuYW1loTSoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1A3lPYjqnN0YXJ0ZWRfYXTLQdkzUDYk3nahMYSkbmFtZaExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNQNhjjP6pzdGFydGVkX2F0y0HZM1A1IytjoTKEpG5hbWWhMqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUDYi7f6qc3RhcnRlZF9hdMtB2TNQNhjjVKEzhKRuYW1loTOoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1A2JN5hqnN0YXJ0ZWRfYXTLQdkzUDYi7hyrZmluaXNoZWRfYXTLQdkzUDeU9jCqc3RhcnRlZF9hdMtB2TNQNSMrH65jcmVhdGVfcHJvY2Vzc4SkbmFtZa5jcmVhdGVfcHJvY2Vzc6hzdWJ0YXNrc4KhMYSkbmFtZaExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNQMzi03apzdGFydGVkX2F0y0HZM1AyFztxoTKEpG5hbWWhMqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUDUjKvqqc3RhcnRlZF9hdMtB2TNQMzi08qtmaW5pc2hlZF9hdMtB2TNQNSMq7apzdGFydGVkX2F0y0HZM1AyFztUq2ZpbmlzaGVkX2F0y0HZM1A3lPY4qnN0YXJ0ZWRfYXTLQdkzUDIXOyqjcGtnhKRuYW1lo3BrZ6hzdWJ0YXNrc4SsaW5zdGFudGlhdGUxhKRuYW1lrGluc3RhbnRpYXRlMahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUDJOH8Wqc3RhcnRlZF9hdMtB2TNQMhcs1KhhbmFseXNpc4SkbmFtZahhbmFseXNpc6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUDIMgaqqc3RhcnRlZF9hdMtB2TNQMgxlQapwcmVjb21waWxlhKRuYW1lqnByZWNvbXBpbGWoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1BxB4x6qnN0YXJ0ZWRfYXTLQdkzUDJptWyncmVzb2x2ZYSkbmFtZadyZXNvbHZlqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNQMmm1TqpzdGFydGVkX2F0y0HZM1AyTh/aq2ZpbmlzaGVkX2F0y0HZM1BxB4yLqnN0YXJ0ZWRfYXTLQdkzUDIMZSijcnVuhKRuYW1lo3J1bqhzdWJ0YXNrc4KwcmVzb2x2ZV90b3BvbG9neYSkbmFtZbByZXNvbHZlX3RvcG9sb2d5qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNQc1jCf6pzdGFydGVkX2F0y0HZM1BzWLf2qGV2YWx1YXRlhKRuYW1lqGV2YWx1YXRlqHN1YnRhc2tzjKE0hKRuYW1loTSoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1B0zoKhqnN0YXJ0ZWRfYXTLQdkzUHTON9KhMYSkbmFtZaExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNQdEPjiqpzdGFydGVkX2F0y0HZM1BzWU6DojEyhKRuYW1lojEyqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNQhMW6CqpzdGFydGVkX2F0y0HZM1CCSdkSoTKEpG5hbWWhMqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUHRGLdyqc3RhcnRlZF9hdMtB2TNQdEPj/KE3hKRuYW1loTeoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1B1ocL4qnN0YXJ0ZWRfYXTLQdkzUHUD15mhNoSkbmFtZaE2qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNQdQPXZ6pzdGFydGVkX2F0y0HZM1B1A38PojExhKRuYW1lojExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNQgknYy6pzdGFydGVkX2F0y0HZM1CCD8dxoTiEpG5hbWWhOKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUHWiDQuqc3RhcnRlZF9hdMtB2TNQdaHDRKIxMISkbmFtZaIxMKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUIIPx0Oqc3RhcnRlZF9hdMtB2TNQgg95EKE1hKRuYW1loTWoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1B1A37IqnN0YXJ0ZWRfYXTLQdkzUHTOgs+hOYSkbmFtZaE5qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNQgg94wKpzdGFydGVkX2F0y0HZM1B1og0woTOEpG5hbWWhM6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUHTONw2qc3RhcnRlZF9hdMtB2TNQdEYuI6tmaW5pc2hlZF9hdMtB2TNQhMXMyapzdGFydGVkX2F0y0HZM1BzWMJ/q2ZpbmlzaGVkX2F0y0HZM1CExczJqnN0YXJ0ZWRfYXTLQdkzUHNYt9irZmluaXNoZWRfYXTAqnN0YXJ0ZWRfYXTLQdkzUDILNHqxY2VsbF9kZXBlbmRlbmNpZXON2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODG0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTiEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTi0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRmZjRiMmZmYS05ZDI1LTExZWItMDdkMC0yOTc1MWU3YjU3YzKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRmZjRiMmZmYS05ZDI1LTExZWItMDdkMC0yOTc1MWU3YjU3YzK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQzMDQxN2NjZi1kMGI0LTQzZDUtOWNlYi01YjAwZWY5YzhhMTeEtHByZWNlZGVuY2VfaGV1cmlzdGljB6djZWxsX2lk2SQzMDQxN2NjZi1kMGI0LTQzZDUtOWNlYi01YjAwZWY5YzhhMTe0ZG93bnN0cmVhbV9jZWxsc19tYXCDt1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9ukKVJcG9wdJHZJDE4ODVjZTBlLWZlMWEtNGI5Yi1iNjUyLTcyY2JlZTIxMzM5ZKVkaWFnbZLZJDFjYTk2NTdiLTg1YjQtNGVhNi05MDFjLWQzNmUyM2U4NDQwZtkkOTVlY2Q2NTktNDVkMC00YmQwLTlmMzItOWNhZmQ3OGZiMmM3snVwc3RyZWFtX2NlbGxzX21hcIDZJDIwZDNkOTVkLTc4MTctNDVkZS04OWU5LWZmY2UwMjAyZDhjZoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDIwZDNkOTVkLTc4MTctNDVkZS04OWU5LWZmY2UwMjAyZDhjZrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaVNb2RlbJDZJDFjYTk2NTdiLTg1YjQtNGVhNi05MDFjLWQzNmUyM2U4NDQwZoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDFjYTk2NTdiLTg1YjQtNGVhNi05MDFjLWQzNmUyM2U4NDQwZrRkb3duc3RyZWFtX2NlbGxzX21hcIGjZW5nktkkM2VkNDQxYjgtMjA1NS00MWI3LWE0YjUtMjkxMzBkNTg4MGVk2SQ5NWVjZDY1OS00NWQwLTRiZDAtOWYzMi05Y2FmZDc4ZmIyYzeydXBzdHJlYW1fY2VsbHNfbWFwiqhhZGRfYnVzIZCtYWRkX2xpbmVjb2RlIZCpYWRkX2xvYWQhkKlhZGRfbGluZSGQpWRpYWdtkdkkMzA0MTdjY2YtZDBiNC00M2Q1LTljZWItNWIwMGVmOWM4YTE3pU1vZGVskLJhZGRfdmJhc2VfZGVmYXVsdCGQpGZpbGyQs2FkZF92b2x0YWdlX3NvdXJjZSGQoj0+kNkkOTAxMGNjY2ItZTE3NC00ZGZmLWI5MzQtN2U3YmU1YTkzYTFkhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkOTAxMGNjY2ItZTE3NC00ZGZmLWI5MzQtN2U3YmU1YTkzYTFktGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkMTg4NWNlMGUtZmUxYS00YjliLWI2NTItNzJjYmVlMjEzMzlkhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkMTg4NWNlMGUtZmUxYS00YjliLWI2NTItNzJjYmVlMjEzMzlktGRvd25zdHJlYW1fY2VsbHNfbWFwgaxpcG9wdF9zb2x2ZXKS2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWTZJGZkYWVkNzgyLTUyOWItNDI2Ny1iZjczLWUyNmE2YTNkNDI5N7J1cHN0cmVhbV9jZWxsc19tYXCDpUlwb3B0kdkkMzA0MTdjY2YtZDBiNC00M2Q1LTljZWItNWIwMGVmOWM4YTE3oj0+kLlvcHRpbWl6ZXJfd2l0aF9hdHRyaWJ1dGVzkNkkOTVlY2Q2NTktNDVkMC00YmQwLTlmMzItOWNhZmQ3OGZiMmM3hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkOTVlY2Q2NTktNDVkMC00YmQwLTlmMzItOWNhZmQ3OGZiMmM3tGRvd25zdHJlYW1fY2VsbHNfbWFwgaRlbmcykdkkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3snVwc3RyZWFtX2NlbGxzX21hcIuwYWRkX3RyYW5zZm9ybWVyIZCiPT6QqGFkZF9idXMhkKhkZWVwY29weZCpYWRkX2xvYWQhkKthZGRfc3dpdGNoIZCuYWRkX2dlbmVyYXRvciGQpWRpYWdtkdkkMzA0MTdjY2YtZDBiNC00M2Q1LTljZWItNWIwMGVmOWM4YTE3qmFkZF9zaHVudCGQo2VuZ5HZJDFjYTk2NTdiLTg1YjQtNGVhNi05MDFjLWQzNmUyM2U4NDQwZqRmaWxskNkkZjI2NTRkOTUtMGM4Yi00NTI0LWFkMWYtZjBmMTJhMzVjNTcwhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZjI2NTRkOTUtMGM4Yi00NTI0LWFkMWYtZjBmMTJhMzVjNTcwtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3tGRvd25zdHJlYW1fY2VsbHNfbWFwgadyZXN1bHQykLJ1cHN0cmVhbV9jZWxsc19tYXCErGlwb3B0X3NvbHZlcpHZJDE4ODVjZTBlLWZlMWEtNGI5Yi1iNjUyLTcyY2JlZTIxMzM5ZKRlbmcykdkkOTVlY2Q2NTktNDVkMC00YmQwLTlmMzItOWNhZmQ3OGZiMmM3rkFDUFVQb3dlck1vZGVskKxzb2x2ZV9tY19vcGaQ2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWSEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWS0ZG93bnN0cmVhbV9jZWxsc19tYXCBpnJlc3VsdJCydXBzdHJlYW1fY2VsbHNfbWFwhKxpcG9wdF9zb2x2ZXKR2SQxODg1Y2UwZS1mZTFhLTRiOWItYjY1Mi03MmNiZWUyMTMzOWSuQUNQVVBvd2VyTW9kZWyQo2VuZ5HZJDFjYTk2NTdiLTg1YjQtNGVhNi05MDFjLWQzNmUyM2U4NDQwZqxzb2x2ZV9tY19vcGaQ2SRkNGNlNDliZC1mMzhlLTQ0ZTAtYWEzYS00ZWUzZjBmNzBiZjGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRkNGNlNDliZC1mMzhlLTQ0ZTAtYWEzYS00ZWUzZjBmNzBiZjG0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQtGNlbGxfZXhlY3V0aW9uX29yZGVyndkkMzA0MTdjY2YtZDBiNC00M2Q1LTljZWItNWIwMGVmOWM4YTE32SRmZjRiMmZmYS05ZDI1LTExZWItMDdkMC0yOTc1MWU3YjU3YzLZJGYyNjU0ZDk1LTBjOGItNDUyNC1hZDFmLWYwZjEyYTM1YzU3MNkkMTg4NWNlMGUtZmUxYS00YjliLWI2NTItNzJjYmVlMjEzMzlk2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTjZJDIwZDNkOTVkLTc4MTctNDVkZS04OWU5LWZmY2UwMjAyZDhjZtkkZDRjZTQ5YmQtZjM4ZS00NGUwLWFhM2EtNGVlM2YwZjcwYmYx2SQxY2E5NjU3Yi04NWI0LTRlYTYtOTAxYy1kMzZlMjNlODQ0MGbZJDkwMTBjY2NiLWUxNzQtNGRmZi1iOTM0LTdlN2JlNWE5M2ExZNkkM2VkNDQxYjgtMjA1NS00MWI3LWE0YjUtMjkxMzBkNTg4MGVk2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODHZJDk1ZWNkNjU5LTQ1ZDAtNGJkMC05ZjMyLTljYWZkNzhmYjJjN9kkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3tGxhc3RfaG90X3JlbG9hZF90aW1lywAAAAAAAAAAqXNob3J0cGF0aNknRW5naW5lZXJpbmcgTW9kZWwgLSBIZWxwZXIgRnVuY3Rpb25zLmpsrnByb2Nlc3Nfc3RhdHVzpXJlYWR5pHBhdGjZMGV4YW1wbGVzL0VuZ2luZWVyaW5nIE1vZGVsIC0gSGVscGVyIEZ1bmN0aW9ucy5qbK5sYXN0X3NhdmVfdGltZctB2TNQc1iASapjZWxsX29yZGVyndkkZmY0YjJmZmEtOWQyNS0xMWViLTA3ZDAtMjk3NTFlN2I1N2My2SQzMDQxN2NjZi1kMGI0LTQzZDUtOWNlYi01YjAwZWY5YzhhMTfZJGYyNjU0ZDk1LTBjOGItNDUyNC1hZDFmLWYwZjEyYTM1YzU3MNkkMTg4NWNlMGUtZmUxYS00YjliLWI2NTItNzJjYmVlMjEzMzlk2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTjZJDIwZDNkOTVkLTc4MTctNDVkZS04OWU5LWZmY2UwMjAyZDhjZtkkZDRjZTQ5YmQtZjM4ZS00NGUwLWFhM2EtNGVlM2YwZjcwYmYx2SQxY2E5NjU3Yi04NWI0LTRlYTYtOTAxYy1kMzZlMjNlODQ0MGbZJDkwMTBjY2NiLWUxNzQtNGRmZi1iOTM0LTdlN2JlNWE5M2ExZNkkM2VkNDQxYjgtMjA1NS00MWI3LWE0YjUtMjkxMzBkNTg4MGVk2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODHZJDk1ZWNkNjU5LTQ1ZDAtNGJkMC05ZjMyLTljYWZkNzhmYjJjN9kkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3sXB1Ymxpc2hlZF9vYmplY3RzgKVuYnBrZ4iyaW5zdGFsbGVkX3ZlcnNpb25zg7dQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbqYwLjE0LjetTGluZWFyQWxnZWJyYaZzdGRsaWKlSXBvcHSlMS4yLjCwdGVybWluYWxfb3V0cHV0c4S3UG93ZXJNb2RlbHNEaXN0cmlidXRpb27aCWQbWzMzbRtbMW3ilIwgG1syMm0bWzM5bRtbMzNtG1sxbVdhcm5pbmc6IBtbMjJtG1szOW1UaGUgYWN0aXZlIG1hbmlmZXN0IGZpbGUgYXQgYC90bXAvamxfTDVoMmtrL01hbmlmZXN0LnRvbWxgIGhhcyBhbiBvbGQgZm9ybWF0IHRoYXQgaXMgYmVpbmcgbWFpbnRhaW5lZC4KG1szM20bWzFt4pSCIBtbMjJtG1szOW1UbyB1cGRhdGUgdG8gdGhlIG5ldyBmb3JtYXQsIHdoaWNoIGlzIHN1cHBvcnRlZCBieSBKdWxpYSB2ZXJzaW9ucyDiiaUgMS42LjIsIHJ1biBgaW1wb3J0IFBrZzsgUGtnLnVwZ3JhZGVfbWFuaWZlc3QoKWAgd2hpY2ggd2lsbCB1cGdyYWRlIHRoZSBmb3JtYXQgd2l0aG91dCByZS1yZXNvbHZpbmcuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdGhlbiByZWNvcmQgdGhlIGp1bGlhIHZlcnNpb24gcmUtcmVzb2x2ZSB3aXRoIGBQa2cucmVzb2x2ZSgpYCBhbmQgaWYgdGhlcmUgYXJlIHJlc29sdmUgY29uZmxpY3RzIGNvbnNpZGVyIGBQa2cudXBkYXRlKClgLgobWzMzbRtbMW3ilJQgG1syMm0bWzM5bRtbOTBtQCBQa2cuVHlwZXMgL29wdC9ob3N0ZWR0b29sY2FjaGUvanVsaWEvMS45LjIveDY0L3NoYXJlL2p1bGlhL3N0ZGxpYi92MS45L1BrZy9zcmMvbWFuaWZlc3Quamw6MzE2G1szOW0KCkluc3RhbnRpYXRpbmcuLi4KG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGlzIGFuIG9sZGVyIGZvcm1hdCB3aXRoIG5vIGp1bGlhIHZlcnNpb24gZW50cnkuIERlcGVuZGVuY2llcyBtYXkgaGF2ZSBiZWVuIHJlc29sdmVkIHdpdGggYSBkaWZmZXJlbnQganVsaWEgdmVyc2lvbi4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgL3RtcC9qbF9MNWgya2svTWFuaWZlc3QudG9tbDowG1szOW0KG1szMm0bWzFtICAgSW5zdGFsbGVkG1syMm0bWzM5bSBDb21wYXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHY0LjYuMQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFNwZWNpYWxGdW5jdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHYyLjIuMCAgICAgICAgICAgICAgG1szMm0bWzFtG1syMm0bWzM5bQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIOKUgCB2MC4xNC43ICAgICAgICAgICAgIBtbMzJtG1sxbRtbMjJtG1szOW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgClJlc29sdmluZy4uLgobWzMybRtbMW0gIE5vIENoYW5nZXMbWzIybRtbMzltIHRvIGAvdG1wL2psX0w1aDJray9Qcm9qZWN0LnRvbWxgChtbMzJtG1sxbSAgICBVcGRhdGluZxtbMjJtG1szOW0gYC90bXAvamxfTDVoMmtrL01hbmlmZXN0LnRvbWxgCiAgG1s5MG1bNDRjZmU5NWFdIBtbMzltG1s5M23ihpEgUGtnIHYxLjguMCDih5IgdjEuOS4yG1szOW0KICAbWzkwbVsxMDc0NWIxNl0gG1szOW0bWzkzbX4gU3RhdGlzdGljcyDih5IgdjEuOS4wG1szOW0KICAbWzkwbVtmYTI2N2YxZl0gG1szOW0bWzkzbeKGkSBUT01MIHYxLjAuMCDih5IgdjEuMC4zG1szOW0KICAbWzkwbVthNGU1NjlhNl0gG1szOW0bWzk1beKGkyBUYXIgdjEuMTAuMSDih5IgdjEuMTAuMBtbMzltCiAgG1s5MG1bZTY2ZTAwNzhdIBtbMzltG1s5M23ihpEgQ29tcGlsZXJTdXBwb3J0TGlicmFyaWVzX2psbCB2MS4wLjErMCDih5IgdjEuMC41KzAbWzM5bQogIBtbOTBtW2M4ZmZkOWMzXSAbWzM5bRtbOTNt4oaRIE1iZWRUTFNfamxsIHYyLjI4LjArMCDih5IgdjIuMjguMiswG1szOW0KICAbWzkwbVsxNGEzNjA2ZF0gG1szOW0bWzkzbeKGkSBNb3ppbGxhQ0FDZXJ0c19qbGwgdjIwMjIuMi4xIOKHkiB2MjAyMi4xMC4xMRtbMzltCiAgG1s5MG1bNDUzNjYyOWFdIBtbMzltG1s5M23ihpEgT3BlbkJMQVNfamxsIHYwLjMuMjArMCDih5IgdjAuMy4yMSs0G1szOW0KICAbWzkwbVtiZWE4N2Q0YV0gG1szOW0bWzkybSsgU3VpdGVTcGFyc2VfamxsIHY1LjEwLjErNhtbMzltCiAgG1s5MG1bODM3NzVhNThdIBtbMzltG1s5M23ihpEgWmxpYl9qbGwgdjEuMi4xMiszIOKHkiB2MS4yLjEzKzAbWzM5bQogIBtbOTBtWzhlODUwYjkwXSAbWzM5bRtbOTNt4oaRIGxpYmJsYXN0cmFtcG9saW5lX2psbCB2NS4xLjErMCDih5IgdjUuOC4wKzAbWzM5bQoKUHJlY29tcGlsaW5nLi4uChtbMzJtG1sxbSAgQWN0aXZhdGluZxtbMjJtG1szOW0gcHJvamVjdCBhdCBgL3RtcC9qbF9MNWgya2tgChtbMzJtG1sxbVByZWNvbXBpbGluZxtbMjJtG1szOW0gcHJvamVjdC4uLgogIDIzIGRlcGVuZGVuY2llcyBzdWNjZXNzZnVsbHkgcHJlY29tcGlsZWQgaW4gMjQ1IHNlY29uZHMuIDUwIGFscmVhZHkgcHJlY29tcGlsZWQuqm5icGtnX3N5bmPaCWQbWzMzbRtbMW3ilIwgG1syMm0bWzM5bRtbMzNtG1sxbVdhcm5pbmc6IBtbMjJtG1szOW1UaGUgYWN0aXZlIG1hbmlmZXN0IGZpbGUgYXQgYC90bXAvamxfTDVoMmtrL01hbmlmZXN0LnRvbWxgIGhhcyBhbiBvbGQgZm9ybWF0IHRoYXQgaXMgYmVpbmcgbWFpbnRhaW5lZC4KG1szM20bWzFt4pSCIBtbMjJtG1szOW1UbyB1cGRhdGUgdG8gdGhlIG5ldyBmb3JtYXQsIHdoaWNoIGlzIHN1cHBvcnRlZCBieSBKdWxpYSB2ZXJzaW9ucyDiiaUgMS42LjIsIHJ1biBgaW1wb3J0IFBrZzsgUGtnLnVwZ3JhZGVfbWFuaWZlc3QoKWAgd2hpY2ggd2lsbCB1cGdyYWRlIHRoZSBmb3JtYXQgd2l0aG91dCByZS1yZXNvbHZpbmcuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdGhlbiByZWNvcmQgdGhlIGp1bGlhIHZlcnNpb24gcmUtcmVzb2x2ZSB3aXRoIGBQa2cucmVzb2x2ZSgpYCBhbmQgaWYgdGhlcmUgYXJlIHJlc29sdmUgY29uZmxpY3RzIGNvbnNpZGVyIGBQa2cudXBkYXRlKClgLgobWzMzbRtbMW3ilJQgG1syMm0bWzM5bRtbOTBtQCBQa2cuVHlwZXMgL29wdC9ob3N0ZWR0b29sY2FjaGUvanVsaWEvMS45LjIveDY0L3NoYXJlL2p1bGlhL3N0ZGxpYi92MS45L1BrZy9zcmMvbWFuaWZlc3Quamw6MzE2G1szOW0KCkluc3RhbnRpYXRpbmcuLi4KG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGlzIGFuIG9sZGVyIGZvcm1hdCB3aXRoIG5vIGp1bGlhIHZlcnNpb24gZW50cnkuIERlcGVuZGVuY2llcyBtYXkgaGF2ZSBiZWVuIHJlc29sdmVkIHdpdGggYSBkaWZmZXJlbnQganVsaWEgdmVyc2lvbi4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgL3RtcC9qbF9MNWgya2svTWFuaWZlc3QudG9tbDowG1szOW0KG1szMm0bWzFtICAgSW5zdGFsbGVkG1syMm0bWzM5bSBDb21wYXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHY0LjYuMQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFNwZWNpYWxGdW5jdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHYyLjIuMCAgICAgICAgICAgICAgG1szMm0bWzFtG1syMm0bWzM5bQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIOKUgCB2MC4xNC43ICAgICAgICAgICAgIBtbMzJtG1sxbRtbMjJtG1szOW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgClJlc29sdmluZy4uLgobWzMybRtbMW0gIE5vIENoYW5nZXMbWzIybRtbMzltIHRvIGAvdG1wL2psX0w1aDJray9Qcm9qZWN0LnRvbWxgChtbMzJtG1sxbSAgICBVcGRhdGluZxtbMjJtG1szOW0gYC90bXAvamxfTDVoMmtrL01hbmlmZXN0LnRvbWxgCiAgG1s5MG1bNDRjZmU5NWFdIBtbMzltG1s5M23ihpEgUGtnIHYxLjguMCDih5IgdjEuOS4yG1szOW0KICAbWzkwbVsxMDc0NWIxNl0gG1szOW0bWzkzbX4gU3RhdGlzdGljcyDih5IgdjEuOS4wG1szOW0KICAbWzkwbVtmYTI2N2YxZl0gG1szOW0bWzkzbeKGkSBUT01MIHYxLjAuMCDih5IgdjEuMC4zG1szOW0KICAbWzkwbVthNGU1NjlhNl0gG1szOW0bWzk1beKGkyBUYXIgdjEuMTAuMSDih5IgdjEuMTAuMBtbMzltCiAgG1s5MG1bZTY2ZTAwNzhdIBtbMzltG1s5M23ihpEgQ29tcGlsZXJTdXBwb3J0TGlicmFyaWVzX2psbCB2MS4wLjErMCDih5IgdjEuMC41KzAbWzM5bQogIBtbOTBtW2M4ZmZkOWMzXSAbWzM5bRtbOTNt4oaRIE1iZWRUTFNfamxsIHYyLjI4LjArMCDih5IgdjIuMjguMiswG1szOW0KICAbWzkwbVsxNGEzNjA2ZF0gG1szOW0bWzkzbeKGkSBNb3ppbGxhQ0FDZXJ0c19qbGwgdjIwMjIuMi4xIOKHkiB2MjAyMi4xMC4xMRtbMzltCiAgG1s5MG1bNDUzNjYyOWFdIBtbMzltG1s5M23ihpEgT3BlbkJMQVNfamxsIHYwLjMuMjArMCDih5IgdjAuMy4yMSs0G1szOW0KICAbWzkwbVtiZWE4N2Q0YV0gG1szOW0bWzkybSsgU3VpdGVTcGFyc2VfamxsIHY1LjEwLjErNhtbMzltCiAgG1s5MG1bODM3NzVhNThdIBtbMzltG1s5M23ihpEgWmxpYl9qbGwgdjEuMi4xMiszIOKHkiB2MS4yLjEzKzAbWzM5bQogIBtbOTBtWzhlODUwYjkwXSAbWzM5bRtbOTNt4oaRIGxpYmJsYXN0cmFtcG9saW5lX2psbCB2NS4xLjErMCDih5IgdjUuOC4wKzAbWzM5bQoKUHJlY29tcGlsaW5nLi4uChtbMzJtG1sxbSAgQWN0aXZhdGluZxtbMjJtG1szOW0gcHJvamVjdCBhdCBgL3RtcC9qbF9MNWgya2tgChtbMzJtG1sxbVByZWNvbXBpbGluZxtbMjJtG1szOW0gcHJvamVjdC4uLgogIDIzIGRlcGVuZGVuY2llcyBzdWNjZXNzZnVsbHkgcHJlY29tcGlsZWQgaW4gMjQ1IHNlY29uZHMuIDUwIGFscmVhZHkgcHJlY29tcGlsZWQurUxpbmVhckFsZ2VicmHaCWQbWzMzbRtbMW3ilIwgG1syMm0bWzM5bRtbMzNtG1sxbVdhcm5pbmc6IBtbMjJtG1szOW1UaGUgYWN0aXZlIG1hbmlmZXN0IGZpbGUgYXQgYC90bXAvamxfTDVoMmtrL01hbmlmZXN0LnRvbWxgIGhhcyBhbiBvbGQgZm9ybWF0IHRoYXQgaXMgYmVpbmcgbWFpbnRhaW5lZC4KG1szM20bWzFt4pSCIBtbMjJtG1szOW1UbyB1cGRhdGUgdG8gdGhlIG5ldyBmb3JtYXQsIHdoaWNoIGlzIHN1cHBvcnRlZCBieSBKdWxpYSB2ZXJzaW9ucyDiiaUgMS42LjIsIHJ1biBgaW1wb3J0IFBrZzsgUGtnLnVwZ3JhZGVfbWFuaWZlc3QoKWAgd2hpY2ggd2lsbCB1cGdyYWRlIHRoZSBmb3JtYXQgd2l0aG91dCByZS1yZXNvbHZpbmcuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdGhlbiByZWNvcmQgdGhlIGp1bGlhIHZlcnNpb24gcmUtcmVzb2x2ZSB3aXRoIGBQa2cucmVzb2x2ZSgpYCBhbmQgaWYgdGhlcmUgYXJlIHJlc29sdmUgY29uZmxpY3RzIGNvbnNpZGVyIGBQa2cudXBkYXRlKClgLgobWzMzbRtbMW3ilJQgG1syMm0bWzM5bRtbOTBtQCBQa2cuVHlwZXMgL29wdC9ob3N0ZWR0b29sY2FjaGUvanVsaWEvMS45LjIveDY0L3NoYXJlL2p1bGlhL3N0ZGxpYi92MS45L1BrZy9zcmMvbWFuaWZlc3Quamw6MzE2G1szOW0KCkluc3RhbnRpYXRpbmcuLi4KG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGlzIGFuIG9sZGVyIGZvcm1hdCB3aXRoIG5vIGp1bGlhIHZlcnNpb24gZW50cnkuIERlcGVuZGVuY2llcyBtYXkgaGF2ZSBiZWVuIHJlc29sdmVkIHdpdGggYSBkaWZmZXJlbnQganVsaWEgdmVyc2lvbi4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgL3RtcC9qbF9MNWgya2svTWFuaWZlc3QudG9tbDowG1szOW0KG1szMm0bWzFtICAgSW5zdGFsbGVkG1syMm0bWzM5bSBDb21wYXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHY0LjYuMQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFNwZWNpYWxGdW5jdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHYyLjIuMCAgICAgICAgICAgICAgG1szMm0bWzFtG1syMm0bWzM5bQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIOKUgCB2MC4xNC43ICAgICAgICAgICAgIBtbMzJtG1sxbRtbMjJtG1szOW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgClJlc29sdmluZy4uLgobWzMybRtbMW0gIE5vIENoYW5nZXMbWzIybRtbMzltIHRvIGAvdG1wL2psX0w1aDJray9Qcm9qZWN0LnRvbWxgChtbMzJtG1sxbSAgICBVcGRhdGluZxtbMjJtG1szOW0gYC90bXAvamxfTDVoMmtrL01hbmlmZXN0LnRvbWxgCiAgG1s5MG1bNDRjZmU5NWFdIBtbMzltG1s5M23ihpEgUGtnIHYxLjguMCDih5IgdjEuOS4yG1szOW0KICAbWzkwbVsxMDc0NWIxNl0gG1szOW0bWzkzbX4gU3RhdGlzdGljcyDih5IgdjEuOS4wG1szOW0KICAbWzkwbVtmYTI2N2YxZl0gG1szOW0bWzkzbeKGkSBUT01MIHYxLjAuMCDih5IgdjEuMC4zG1szOW0KICAbWzkwbVthNGU1NjlhNl0gG1szOW0bWzk1beKGkyBUYXIgdjEuMTAuMSDih5IgdjEuMTAuMBtbMzltCiAgG1s5MG1bZTY2ZTAwNzhdIBtbMzltG1s5M23ihpEgQ29tcGlsZXJTdXBwb3J0TGlicmFyaWVzX2psbCB2MS4wLjErMCDih5IgdjEuMC41KzAbWzM5bQogIBtbOTBtW2M4ZmZkOWMzXSAbWzM5bRtbOTNt4oaRIE1iZWRUTFNfamxsIHYyLjI4LjArMCDih5IgdjIuMjguMiswG1szOW0KICAbWzkwbVsxNGEzNjA2ZF0gG1szOW0bWzkzbeKGkSBNb3ppbGxhQ0FDZXJ0c19qbGwgdjIwMjIuMi4xIOKHkiB2MjAyMi4xMC4xMRtbMzltCiAgG1s5MG1bNDUzNjYyOWFdIBtbMzltG1s5M23ihpEgT3BlbkJMQVNfamxsIHYwLjMuMjArMCDih5IgdjAuMy4yMSs0G1szOW0KICAbWzkwbVtiZWE4N2Q0YV0gG1szOW0bWzkybSsgU3VpdGVTcGFyc2VfamxsIHY1LjEwLjErNhtbMzltCiAgG1s5MG1bODM3NzVhNThdIBtbMzltG1s5M23ihpEgWmxpYl9qbGwgdjEuMi4xMiszIOKHkiB2MS4yLjEzKzAbWzM5bQogIBtbOTBtWzhlODUwYjkwXSAbWzM5bRtbOTNt4oaRIGxpYmJsYXN0cmFtcG9saW5lX2psbCB2NS4xLjErMCDih5IgdjUuOC4wKzAbWzM5bQoKUHJlY29tcGlsaW5nLi4uChtbMzJtG1sxbSAgQWN0aXZhdGluZxtbMjJtG1szOW0gcHJvamVjdCBhdCBgL3RtcC9qbF9MNWgya2tgChtbMzJtG1sxbVByZWNvbXBpbGluZxtbMjJtG1szOW0gcHJvamVjdC4uLgogIDIzIGRlcGVuZGVuY2llcyBzdWNjZXNzZnVsbHkgcHJlY29tcGlsZWQgaW4gMjQ1IHNlY29uZHMuIDUwIGFscmVhZHkgcHJlY29tcGlsZWQupUlwb3B02glkG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGF0IGAvdG1wL2psX0w1aDJray9NYW5pZmVzdC50b21sYCBoYXMgYW4gb2xkIGZvcm1hdCB0aGF0IGlzIGJlaW5nIG1haW50YWluZWQuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdXBkYXRlIHRvIHRoZSBuZXcgZm9ybWF0LCB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgSnVsaWEgdmVyc2lvbnMg4omlIDEuNi4yLCBydW4gYGltcG9ydCBQa2c7IFBrZy51cGdyYWRlX21hbmlmZXN0KClgIHdoaWNoIHdpbGwgdXBncmFkZSB0aGUgZm9ybWF0IHdpdGhvdXQgcmUtcmVzb2x2aW5nLgobWzMzbRtbMW3ilIIgG1syMm0bWzM5bVRvIHRoZW4gcmVjb3JkIHRoZSBqdWxpYSB2ZXJzaW9uIHJlLXJlc29sdmUgd2l0aCBgUGtnLnJlc29sdmUoKWAgYW5kIGlmIHRoZXJlIGFyZSByZXNvbHZlIGNvbmZsaWN0cyBjb25zaWRlciBgUGtnLnVwZGF0ZSgpYC4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgUGtnLlR5cGVzIC9vcHQvaG9zdGVkdG9vbGNhY2hlL2p1bGlhLzEuOS4yL3g2NC9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuOS9Qa2cvc3JjL21hbmlmZXN0LmpsOjMxNhtbMzltCgpJbnN0YW50aWF0aW5nLi4uChtbMzNtG1sxbeKUjCAbWzIybRtbMzltG1szM20bWzFtV2FybmluZzogG1syMm0bWzM5bVRoZSBhY3RpdmUgbWFuaWZlc3QgZmlsZSBpcyBhbiBvbGRlciBmb3JtYXQgd2l0aCBubyBqdWxpYSB2ZXJzaW9uIGVudHJ5LiBEZXBlbmRlbmNpZXMgbWF5IGhhdmUgYmVlbiByZXNvbHZlZCB3aXRoIGEgZGlmZmVyZW50IGp1bGlhIHZlcnNpb24uChtbMzNtG1sxbeKUlCAbWzIybRtbMzltG1s5MG1AIC90bXAvamxfTDVoMmtrL01hbmlmZXN0LnRvbWw6MBtbMzltChtbMzJtG1sxbSAgIEluc3RhbGxlZBtbMjJtG1szOW0gQ29tcGF0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCB2NC42LjEKICAgICAgICAgICAgSW5zdGFsbGVkICAgICAgICAgICBTcGVjaWFsRnVuY3Rpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCB2Mi4yLjAgICAgICAgICAgICAgIBtbMzJtG1sxbRtbMjJtG1szOW0KICAgICAgICAgICAgSW5zdGFsbGVkICAgICAgICAgICBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiDilIAgdjAuMTQuNyAgICAgICAgICAgICAbWzMybRtbMW0bWzIybRtbMzltCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApSZXNvbHZpbmcuLi4KG1szMm0bWzFtICBObyBDaGFuZ2VzG1syMm0bWzM5bSB0byBgL3RtcC9qbF9MNWgya2svUHJvamVjdC50b21sYAobWzMybRtbMW0gICAgVXBkYXRpbmcbWzIybRtbMzltIGAvdG1wL2psX0w1aDJray9NYW5pZmVzdC50b21sYAogIBtbOTBtWzQ0Y2ZlOTVhXSAbWzM5bRtbOTNt4oaRIFBrZyB2MS44LjAg4oeSIHYxLjkuMhtbMzltCiAgG1s5MG1bMTA3NDViMTZdIBtbMzltG1s5M21+IFN0YXRpc3RpY3Mg4oeSIHYxLjkuMBtbMzltCiAgG1s5MG1bZmEyNjdmMWZdIBtbMzltG1s5M23ihpEgVE9NTCB2MS4wLjAg4oeSIHYxLjAuMxtbMzltCiAgG1s5MG1bYTRlNTY5YTZdIBtbMzltG1s5NW3ihpMgVGFyIHYxLjEwLjEg4oeSIHYxLjEwLjAbWzM5bQogIBtbOTBtW2U2NmUwMDc4XSAbWzM5bRtbOTNt4oaRIENvbXBpbGVyU3VwcG9ydExpYnJhcmllc19qbGwgdjEuMC4xKzAg4oeSIHYxLjAuNSswG1szOW0KICAbWzkwbVtjOGZmZDljM10gG1szOW0bWzkzbeKGkSBNYmVkVExTX2psbCB2Mi4yOC4wKzAg4oeSIHYyLjI4LjIrMBtbMzltCiAgG1s5MG1bMTRhMzYwNmRdIBtbMzltG1s5M23ihpEgTW96aWxsYUNBQ2VydHNfamxsIHYyMDIyLjIuMSDih5IgdjIwMjIuMTAuMTEbWzM5bQogIBtbOTBtWzQ1MzY2MjlhXSAbWzM5bRtbOTNt4oaRIE9wZW5CTEFTX2psbCB2MC4zLjIwKzAg4oeSIHYwLjMuMjErNBtbMzltCiAgG1s5MG1bYmVhODdkNGFdIBtbMzltG1s5Mm0rIFN1aXRlU3BhcnNlX2psbCB2NS4xMC4xKzYbWzM5bQogIBtbOTBtWzgzNzc1YTU4XSAbWzM5bRtbOTNt4oaRIFpsaWJfamxsIHYxLjIuMTIrMyDih5IgdjEuMi4xMyswG1szOW0KICAbWzkwbVs4ZTg1MGI5MF0gG1szOW0bWzkzbeKGkSBsaWJibGFzdHJhbXBvbGluZV9qbGwgdjUuMS4xKzAg4oeSIHY1LjguMCswG1szOW0KClByZWNvbXBpbGluZy4uLgobWzMybRtbMW0gIEFjdGl2YXRpbmcbWzIybRtbMzltIHByb2plY3QgYXQgYC90bXAvamxfTDVoMmtrYAobWzMybRtbMW1QcmVjb21waWxpbmcbWzIybRtbMzltIHByb2plY3QuLi4KICAyMyBkZXBlbmRlbmNpZXMgc3VjY2Vzc2Z1bGx5IHByZWNvbXBpbGVkIGluIDI0NSBzZWNvbmRzLiA1MCBhbHJlYWR5IHByZWNvbXBpbGVkLqdlbmFibGVkw7dyZXN0YXJ0X3JlY29tbWVuZGVkX21zZ8C0cmVzdGFydF9yZXF1aXJlZF9tc2fArWJ1c3lfcGFja2FnZXOQr2luc3RhbGxfdGltZV9uc88AAAA6hCBfgqxpbnN0YW50aWF0ZWTDq2NlbGxfaW5wdXRzjdkkNjUwYjZkZWUtZTc1My00MThjLWFmMWUtYTBkZGRhMDlkZjgxhKdjZWxsX2lk2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODGkY29kZdnHbWQiIiJJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHdlIHByb3ZpZGUgZXhhbXBsZXMgb2YgYSB3aWRlciByYW5nZSBvZiBjb21wb25lbnQgdHlwZXMgdGhhdCBjYW4gYmUgYWRkZWQgdXNpbmcgaGVscGVyIGZ1bmN0aW9ucyB0byBnaXZlIGEgZmxhdm9yIG9mIHdoYXQgaXMgcG9zc2libGUgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gdjAuOSIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkNzY4M2RhYmMtNzcyZi00ZmRmLWE3ODQtNTQ5YzA1MDg0OTU4hKdjZWxsX2lk2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTikY29kZdkrbWQiSW5pdGlhbGl6ZSBhbiBlbXB0eSBgRU5HSU5FRVJJTkdgIG1vZGVsIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkZmY0YjJmZmEtOWQyNS0xMWViLTA3ZDAtMjk3NTFlN2I1N2MyhKdjZWxsX2lk2SRmZjRiMmZmYS05ZDI1LTExZWItMDdkMC0yOTc1MWU3YjU3YzKkY29kZdoBAW1kIiIiCiMgQnVpbGRpbmcgRW5naW5lZXJpbmcgRGF0YSBNb2RlbHMgd2l0aCBIZWxwZXIgRnVuY3Rpb25zCgpJbiB0aGlzIG5vdGVib29rIHdlIHdpbGwgZGVtb25zdHJhdGUgYW4gZWFzeSB3YXkgdG8gc3RhcnQgYnVpbGRpbmcgbmV3IGRpc3RyaWJ1dGlvbiBuZXR3b3JrIG1vZGVscyBpbiB0aGUgZW5naW5lZXJpbmcgZm9ybWF0IHVzaW5nIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGFkZGVkIGluIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIHYwLjkKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQzMDQxN2NjZi1kMGI0LTQzZDUtOWNlYi01YjAwZWY5YzhhMTeEp2NlbGxfaWTZJDMwNDE3Y2NmLWQwYjQtNDNkNS05Y2ViLTViMDBlZjljOGExN6Rjb2Rl2VFiZWdpbgoJdXNpbmcgUG93ZXJNb2RlbHNEaXN0cmlidXRpb24KCXVzaW5nIExpbmVhckFsZ2VicmE6IGRpYWdtCgl1c2luZyBJcG9wdAplbmSobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDIwZDNkOTVkLTc4MTctNDVkZS04OWU5LWZmY2UwMjAyZDhjZoSnY2VsbF9pZNkkMjBkM2Q5NWQtNzgxNy00NWRlLTg5ZTktZmZjZTAyMDJkOGNmpGNvZGWnTW9kZWwoKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkMWNhOTY1N2ItODViNC00ZWE2LTkwMWMtZDM2ZTIzZTg0NDBmhKdjZWxsX2lk2SQxY2E5NjU3Yi04NWI0LTRlYTYtOTAxYy1kMzZlMjNlODQ0MGakY29kZdoCl2JlZ2luCgllbmcgPSBNb2RlbCgpCgoJYWRkX2J1cyEoZW5nLCAic291cmNlYnVzIjsgdGVybWluYWxzPVsxLDIsMyw0XSwgZ3JvdW5kZWQ9WzRdKQoJYWRkX2J1cyEoZW5nLCAicHJpbWFyeSI7IHRlcm1pbmFscz1bMSwyLDNdKQoJYWRkX2J1cyEoZW5nLCAibG9hZGJ1cyI7IHRlcm1pbmFscz1bMSwyLDMsNF0sIGdyb3VuZGVkPVs0XSkKCglhZGRfdm9sdGFnZV9zb3VyY2UhKGVuZywgInNvdXJjZSIsICJzb3VyY2VidXMiLCBbMSwyLDMsNF07IHZtPVsxLCAxLCAxLCAwXSkKCglhZGRfbGluZWNvZGUhKGVuZywgImRlZmF1bHQiLCBkaWFnbSgwPT5maWxsKDAuMDEsIDMpKSwgZGlhZ20oMD0+ZmlsbCgwLjIsIDMpKSkKCglhZGRfbGluZSEoZW5nLCAidHJ1bmsiLCAic291cmNlYnVzIiwgInByaW1hcnkiLCBbMSwyLDNdLCBbMSwyLDNdOyBsaW5lY29kZT0iZGVmYXVsdCIpCglhZGRfbGluZSEoZW5nLCAicHJpbWFyeSIsICJwcmltYXJ5IiwgImxvYWRidXMiLCBbMSwyLDNdLCBbMSwyLDNdOyBsaW5lY29kZT0iZGVmYXVsdCIpCgoJYWRkX2xvYWQhKGVuZywgImJhbGFuY2VkIiwgImxvYWRidXMiLCBbMSwyLDMsNF07IHBkX25vbT1bNSwgNSwgNV0sIHFkX25vbT1bMSwgMSwgMV0pCgoJYWRkX3ZiYXNlX2RlZmF1bHQhKGVuZywgInNvdXJjZWJ1cyIsIDEpCgoJZW5nCmVuZKhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkOTAxMGNjY2ItZTE3NC00ZGZmLWI5MzQtN2U3YmU1YTkzYTFkhKdjZWxsX2lk2SQ5MDEwY2NjYi1lMTc0LTRkZmYtYjkzNC03ZTdiZTVhOTNhMWSkY29kZdk2bWQiUnVubmluZyB0aGlzIGNhc2Ugd2l0aCBPUEYgZ2l2ZXMgdGhlIHJlc3VsdHMgYmVsb3ciqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQxODg1Y2UwZS1mZTFhLTRiOWItYjY1Mi03MmNiZWUyMTMzOWSEp2NlbGxfaWTZJDE4ODVjZTBlLWZlMWEtNGI5Yi1iNjUyLTcyY2JlZTIxMzM5ZKRjb2Rl2VhpcG9wdF9zb2x2ZXIgPSBvcHRpbWl6ZXJfd2l0aF9hdHRyaWJ1dGVzKElwb3B0Lk9wdGltaXplciwgInByaW50X2xldmVsIj0+MCwgInRvbCI9PjFlLTYpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ5NWVjZDY1OS00NWQwLTRiZDAtOWYzMi05Y2FmZDc4ZmIyYzeEp2NlbGxfaWTZJDk1ZWNkNjU5LTQ1ZDAtNGJkMC05ZjMyLTljYWZkNzhmYjJjN6Rjb2Rl2gIzYmVnaW4KCWVuZzIgPSBkZWVwY29weShlbmcpCgoJYWRkX2J1cyEoZW5nMiwgInR0YnVzIjsgdGVybWluYWxzPVsxLDIsMyw0XSwgZ3JvdW5kZWQ9WzRdKQoKCWFkZF90cmFuc2Zvcm1lciEoZW5nMiwgInR4MSIsICJzb3VyY2VidXMiLCAidHRidXMiLCBbMSwyLDMsNF0sIFsxLDIsMyw0XSkKCglhZGRfYnVzIShlbmcyLCAibG9hZGJ1czIiOyB0ZXJtaW5hbHM9WzEsMiwzLDRdLCBncm91bmRlZD1bNF0pCgoJYWRkX3N3aXRjaCEoZW5nMiwgImJyZWFrZXIiLCAidHRidXMiLCAibG9hZGJ1czIiLCBbMSwyLDNdLCBbMSwyLDNdKQoKCWFkZF9sb2FkIShlbmcyLCAidGxvYWQiLCAibG9hZGJ1czIiLCBbMSwyLDMsNF07IHBkX25vbT1bNSwgNSwgNV0sIHFkX25vbT1bMSwgMSwgMV0pCgoJYWRkX2dlbmVyYXRvciEoZW5nMiwgInNlY29uZGFyeSIsICJsb2FkYnVzMiIsIFsxLDIsMyw0XTsgY29zdF9wZ19wYXJhbWV0ZXJzPVswLjAsIDEuMiwgMF0pCgoJYWRkX3NodW50IShlbmcyLCAiY2FwIiwgImxvYWRidXMyIiwgWzEsMiwzLDRdOyBicz1kaWFnbSgwPT5maWxsKDEsIDMpKSkKCgoJZW5nMgplbmSobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJGYyNjU0ZDk1LTBjOGItNDUyNC1hZDFmLWYwZjEyYTM1YzU3MISnY2VsbF9pZNkkZjI2NTRkOTUtMGM4Yi00NTI0LWFkMWYtZjBmMTJhMzVjNTcwpGNvZGXZy21kIiIiCkZpcnN0LCB3ZSBuZWVkIGEgb3B0aW1pemVyLiBJbiB0aGlzIGNhc2Ugd2Ugd2lsbCB1c2UgSXBvcHQgYW5kIGluaXRpYWxpemUgaXQgd2l0aCBKdU1QJ3MgYG9wdGltaXplcl93aXRoX2F0dHJpYnV0ZXNgLCB3aGljaCB3ZSBoYXZlIGV4cG9ydGVkIGZyb20gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gYnkgZGVmYXVsdCBmb3IgdGhlIHVzZXIKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRmZGFlZDc4Mi01MjliLTQyNjctYmY3My1lMjZhNmEzZDQyOTeEp2NlbGxfaWTZJGZkYWVkNzgyLTUyOWItNDI2Ny1iZjczLWUyNmE2YTNkNDI5N6Rjb2Rl2TpyZXN1bHQyID0gc29sdmVfbWNfb3BmKGVuZzIsIEFDUFVQb3dlck1vZGVsLCBpcG9wdF9zb2x2ZXIpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWSEp2NlbGxfaWTZJDNlZDQ0MWI4LTIwNTUtNDFiNy1hNGI1LTI5MTMwZDU4ODBlZKRjb2Rl2ThyZXN1bHQgPSBzb2x2ZV9tY19vcGYoZW5nLCBBQ1BVUG93ZXJNb2RlbCwgaXBvcHRfc29sdmVyKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkZDRjZTQ5YmQtZjM4ZS00NGUwLWFhM2EtNGVlM2YwZjcwYmYxhKdjZWxsX2lk2SRkNGNlNDliZC1mMzhlLTQ0ZTAtYWEzYS00ZWUzZjBmNzBiZjGkY29kZdoDoG1kIiIiCkluIHRoaXMgYmxvY2sgd2UgYnVpbGQgYSB0aHJlZSBidXMgbmV0d29yaywgd2l0aCBuZXV0cmFscyBncm91bmRlZCBhdCB0aGUgc291cmNlIGFuZCBsb2Fkcy4KCldlIHN0YXJ0IHdpdGggYnVzZXMsIHdpdGggdGhlIHNvdXJjZWJ1cyBhbmQgbG9hZGJ1cyBoYXZpbmcgNCB0ZXJtaW5hbHMsIHdpdGggdGhlIGxhc3QgdGVybWluYWwgZ3JvdW5kZWQuCgpUaGVuIHdlIGFkZCBhIGdlbmVyYXRpb24gc291cmNlLCBpbiB0aGlzIGNhc2UgYSB2b2x0YWdlIHNvdXJjZSwgd2hpY2ggaXMgYFdZRWAgY29uZmlndXJlZCBieSBkZWZhdWx0LCBhbmQgdGhlcmVmb3JlIGV4cGVjdHMgdGhlIGxhc3QgY29uZHVjdG9yIHRvIGJlIGEgZ3JvdW5kZWQgbmV1dHJhbAoKV2UgYWRkIHR3byB0aHJlZSBwaGFzZSBsaW5lcyB0byBjb25uZWN0IHRoZSBidXNlcyBgc291cmNlYnVzYCwgYHByaW1hcnlgLCBhbmQgYGxvYWRidXNgLiBOb3RlIHRoYXQgbm9uZSBvZiB0aGUgbGluZXMgaGF2ZSBhIG5ldXRyYWwgY29uZHVjdG9yLgoKV2UgZmluYWxseSBhZGQgYSB0aHJlZS1waGFzZSBsb2FkIGEgdGhlIGBsb2FkYnVzYCBidXMsIGJ1dCBub3RlIGFnYWluIHRoYXQgdGhpcyBpcyBhIGBXWUVgIGNvbmZpZ3VyZWQgbG9hZCwgYW5kIGxpa2UgdGhlIHZvbHRhZ2Ugc291cmNlLCB0aGlzIGltcGxpZXMgdGhhdCB0aGUgbGFzdCBjb25kdWN0b3IgaXMgYSBncm91bmRlZCBuZXV0cmFsIGZvciB0aGUgcHVycG9zZXMgb2Yga3JvbiByZWR1Y3Rpb24gKHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGRlZmF1bHQgdW50aWwgZXhwbGljaXQgNC13aXJlIG1vZGVsaW5nIGlzIGFkZGVkIHRvIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uKQoKTGFzdGx5LCB3ZSBuZWVkIHRvIGRlZmluZSB0aGUgZGVmYXVsdCB2YmFzZSBvZiB0aGUgc3lzdGVtIGF0IHRoZSBgc291cmNlYnVzYAoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMOrbm90ZWJvb2tfaWTZJDM0ZjE4YWNhLTMyZjMtMTFlZS0xMzcyLWMzZjM3NzA5YzE3Oatpbl90ZW1wX2RpcsKobWV0YWRhdGGA"; +window.pluto_statefile = "data:;base64,3gARpWJvbmRzgKxjZWxsX3Jlc3VsdHON2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODGKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52eM8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+SW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB3ZSBwcm92aWRlIGV4YW1wbGVzIG9mIGEgd2lkZXIgcmFuZ2Ugb2YgY29tcG9uZW50IHR5cGVzIHRoYXQgY2FuIGJlIGFkZGVkIHVzaW5nIGhlbHBlciBmdW5jdGlvbnMgdG8gZ2l2ZSBhIGZsYXZvciBvZiB3aGF0IGlzIHBvc3NpYmxlIGluIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIHYwLjk8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULH4GCiCrBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkNjUwYjZkZWUtZTc1My00MThjLWFmMWUtYTBkZGRhMDlkZjgxuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAP6YbVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDc2ODNkYWJjLTc3MmYtNGZkZi1hNzg0LTU0OWMwNTA4NDk1OIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZVjxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5Jbml0aWFsaXplIGFuIGVtcHR5IDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBtb2RlbDwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsfUvBH1sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTi5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABDNntXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZmY0YjJmZmEtOWQyNS0xMWViLTA3ZDAtMjk3NTFlN2I1N2MyiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoBITxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDE+QnVpbGRpbmcgRW5naW5lZXJpbmcgRGF0YSBNb2RlbHMgd2l0aCBIZWxwZXIgRnVuY3Rpb25zPC9oMT4KPHA+SW4gdGhpcyBub3RlYm9vayB3ZSB3aWxsIGRlbW9uc3RyYXRlIGFuIGVhc3kgd2F5IHRvIHN0YXJ0IGJ1aWxkaW5nIG5ldyBkaXN0cmlidXRpb24gbmV0d29yayBtb2RlbHMgaW4gdGhlIGVuZ2luZWVyaW5nIGZvcm1hdCB1c2luZyBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhZGRlZCBpbiBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiB2MC45PC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCx9RFHPiwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGZmNGIyZmZhLTlkMjUtMTFlYi0wN2QwLTI5NzUxZTdiNTdjMrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgWaNSi1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQzMDQxN2NjZi1kMGI0LTQzZDUtOWNlYi01YjAwZWY5YzhhMTeKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5oKRtaW1lqnRleHQvcGxhaW6scm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCx9Nq0MSwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDMwNDE3Y2NmLWQwYjQtNDNkNS05Y2ViLTViMDBlZjljOGExN7lkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzwAAAAGFFDe9tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMjBkM2Q5NWQtNzgxNy00NWRlLTg5ZTktZmZjZTAyMDJkOGNmiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkq8ic2Jhc2VfZGVmYXVsdCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkrAidmJhc2VzX2RlZmF1bHQiqnRleHQvcGxhaW6ShaZwcmVmaXivRGljdHtBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwODc0NGM5ODVjOTlkM2QzYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpK2InZvbHRhZ2Vfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKStCJwb3dlcl9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpKwImJhc2VfZnJlcXVlbmN5Iqp0ZXh0L3BsYWlukqQ2MC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGE5NTFjYjU3OGRiNzQ3MWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJwZXJfdW5pdCKqdGV4dC9wbGFpbpKlZmFsc2WqdGV4dC9wbGFpbpKSrCJkYXRhX21vZGVsIqp0ZXh0L3BsYWlukrpFTkdJTkVFUklORzo6RGF0YU1vZGVsID0gMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3NTI1YzMyNmE1NWYzNzhjpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULH1O6TT7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMjBkM2Q5NWQtNzgxNy00NWRlLTg5ZTktZmZjZTAyMDJkOGNmuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAEklbVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDFjYTk2NTdiLTg1YjQtNGVhNi05MDFjLWQzNmUyM2U4NDQwZoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5iSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKoInNvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukrcidm9sdGFnZV9zb3VyY2Uuc291cmNlIqp0ZXh0L3BsYWlukpKkInZhIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDM5MmI3MTFmNWI4MDU0MGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzcwYWM2MzA3NzNmMTg2OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK81ZjAyYWFmNzUwOWI5YmXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDgyY2U5YzJjOWM4OGU2OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxZGU2YmQzNzU1M2MzMGVk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK84ZmVjYWVjMmIxM2Y2ZmLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW6SkqgidmFkX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDM2ZWUwOTBjODZmMjc2NzfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SriJsaW5lLnByaW1hcnkiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjVkNzk4ZGM2NGM1YTMxYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnInRydW5rIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKvInRfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYyZjk1NWUyNWYwOTUzZGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKSqCJ2YWRfdWIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZmEzNzYxMjMwZDg1NjJkNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxpbmUudHJ1bmsiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDdiYTIxMTM0ODhhZjU2MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjM2U2ODM4NmEwZTM2ZDY52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKvInNiYXNlX2RlZmF1bHQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4r0RpY3R7QW55LCBSZWFsfahlbGVtZW50c5GSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGJlYzgzNTY2MTZmZjUyZTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkqoiYmFzZV9idXMiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNjAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhOTM0MmZiN2ViZDc0MzA02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqoiYmFsYW5jZWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKvImxvYWQuYmFsYW5jZWQiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4NjUxYmFhZjI1YjllMjdm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGM0NTljZWQ5ZDEwYjU3NDHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDZiMzIyYzNmZWY3YWM0Y2TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyMzM4MDBmMzVmODY3YzU52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGM4NzkxMTNlYWEwOGExNTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKtImJ1cy5wcmltYXJ5Iqp0ZXh0L3BsYWlukpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2NDY0OGZjZWEzYjVjMzRm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxZmUwNmE0ZTlhYWQ2Njc42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3M2UzOTgwNjAxMzVkMmFk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDdjNzczMmFjZDNkYjA0ZGLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYWM1ZjNkYWE3MjJkMzA3NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukq8iYnVzLnNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiMWU2YTJmNjNlYjllMWY12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDJhNTY4MDg3MmY5OTg4N2TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRkZjEzNTg3MDRkOWFlMDDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzNmU0OWFmZDQ4YjVjZjc12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDViODhiY2I1ZDA4MDY5ZWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrSJidXMubG9hZGJ1cyKqdGV4dC9wbGFpbpKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzNjVmOGMxMGM3YWM2ZWU42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGE2OWQ0YTc4MjgyNzM1ZTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGZjOGEzYWVmZTIwYmI2MjPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2OGE2YmFiZGFjM2FjZGE52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDVhNTIzYWE1NGUxMzI3OTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOWYyZjlmY2VkN2NlMmUzZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImxpbmVjb2RlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqSJkZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpiJiX2ZyIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6SkqQicnMiqnRleHQvcGxhaW6S2Ukzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMDEgIDAuMCAgIDAuMAogMC4wICAgMC4wMSAgMC4wCiAwLjAgICAwLjAgICAwLjAxqnRleHQvcGxhaW6Skqsic291cmNlX2lkIqp0ZXh0L3BsYWlukrIibGluZWNvZGUuZGVmYXVsdCKqdGV4dC9wbGFpbpKSpCJ4cyKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4yICAwLjAgIDAuMAogMC4wICAwLjIgIDAuMAogMC4wICAwLjAgIDAuMqp0ZXh0L3BsYWlukpKmImdfdG8iqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbpKSpiJiX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvNzhhN2Y4NGE4MmI5NDg02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNiMWMyYTNiMGY0ZjAxODTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJwZXJfdW5pdCKqdGV4dC9wbGFpbpKlZmFsc2WqdGV4dC9wbGFpbpKSrCJkYXRhX21vZGVsIqp0ZXh0L3BsYWlukrpFTkdJTkVFUklORzo6RGF0YU1vZGVsID0gMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1MWIzOTgxNDNjZDYyNjFlpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULH1XWM1rBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMWNhOTY1N2ItODViNC00ZWE2LTkwMWMtZDM2ZTIzZTg0NDBmuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOCrtxHrVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDkwMTBjY2NiLWUxNzQtNGRmZi1iOTM0LTdlN2JlNWE5M2ExZIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZVjxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5SdW5uaW5nIHRoaXMgY2FzZSB3aXRoIE9QRiBnaXZlcyB0aGUgcmVzdWx0cyBiZWxvdzwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsfVddI1sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ5MDEwY2NjYi1lMTc0LTRkZmYtYjkzNC03ZTdiZTVhOTNhMWS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AA73StXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMTg4NWNlMGUtZmUxYS00YjliLWI2NTItNzJjYmVlMjEzMzlkiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml42ShNYXRoT3B0SW50ZXJmYWNlLk9wdGltaXplcldpdGhBdHRyaWJ1dGVzqGVsZW1lbnRzkpK1b3B0aW1pemVyX2NvbnN0cnVjdG9ykq9JcG9wdC5PcHRpbWl6ZXKqdGV4dC9wbGFpbpKmcGFyYW1zkoWmcHJlZml42TZQYWlye01hdGhPcHRJbnRlcmZhY2UuQWJzdHJhY3RPcHRpbWl6ZXJBdHRyaWJ1dGUsIEFueX2oZWxlbWVudHOSkgGSg6R0eXBlpFBhaXKob2JqZWN0aWSwMWM2NGMxMTFlNjA0OTRhZalrZXlfdmFsdWWSkoWmcHJlZml4tVJhd09wdGltaXplckF0dHJpYnV0ZahlbGVtZW50c5GSpG5hbWWSrSJwcmludF9sZXZlbCKqdGV4dC9wbGFpbqR0eXBlpnN0cnVjdKxwcmVmaXhfc2hvcnS1UmF3T3B0aW1pemVyQXR0cmlidXRlqG9iamVjdGlksGI4NmZlOTljMzkyMGQ2NjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKhMKp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApKDpHR5cGWkUGFpcqhvYmplY3RpZLBmN2RkMzNhNjJiZTI3MDczqWtleV92YWx1ZZKShaZwcmVmaXi1UmF3T3B0aW1pemVyQXR0cmlidXRlqGVsZW1lbnRzkZKkbmFtZZKlInRvbCKqdGV4dC9wbGFpbqR0eXBlpnN0cnVjdKxwcmVmaXhfc2hvcnS1UmF3T3B0aW1pemVyQXR0cmlidXRlqG9iamVjdGlksDU0YTVlNTNlZjIwNDFlNWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKmMS4wZS02qnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvZThkN2ZlYjU2YjdjMzcz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaZzdHJ1Y3SscHJlZml4X3Nob3J0t09wdGltaXplcldpdGhBdHRyaWJ1dGVzqG9iamVjdGlksGFiNjJmZTgwZDUyOTI5NDekbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZaxpcG9wdF9zb2x2ZXKybGFzdF9ydW5fdGltZXN0YW1wy0HZQsfUu8g2sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQxODg1Y2UwZS1mZTFhLTRiOWItYjY1Mi03MmNiZWUyMTMzOWS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4CQAiWtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkOTVlY2Q2NTktNDVkMC00YmQwLTlmMzItOWNhZmQ3OGZiMmM3iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRznJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKpInByaW1hcnkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKtImJ1cy5wcmltYXJ5Iqp0ZXh0L3BsYWlukpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3ZmJlYWQxOTY2ODJlYWEw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1Y2IyNTNiYjIwNmExY2Iw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkMWVhZDg0YmMwZTg0MjUz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYzYjg5OThmMmU3NjYzYzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWZlODQyZGQ1Y2UyYmE3NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukq8iYnVzLnNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5MWE3MWZlYzBhNTNhZGQ12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDc4MjBhMTYzZDc0Njk5OTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDkxOWUwZmZmMGE1M2YzNmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiZTQxNzE1ODYzODdlMjk12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI3NDc5N2Q1OGJhYzY4ZTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ0dGJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqsiYnVzLnR0YnVzIqp0ZXh0L3BsYWlukpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkr2Q2ZGRkZWI4MWUwZGUyYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0YWQ3MDAzMzdjYjMyYmI12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5YWNlOWIwZTFjYjRhMjkw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYjc2ZWQ1MjY1NWUyODU4ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK9lYzdlNGFhYmFhNTkzNDjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJsb2FkYnVzMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukq4iYnVzLmxvYWRidXMyIqp0ZXh0L3BsYWlukpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGJjYjIwYzg4NjE0YzIwNjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwN2ViMGUxYzhlNTRhMDViM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOWQ1ZDhmZTVhMWQyOWNiYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGZmZWRjOTJkNjdjMzliMDbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZWE1YTBkZTNmMWNhOWExYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpImxvYWRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKtImJ1cy5sb2FkYnVzIqp0ZXh0L3BsYWlukpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFhZmYxZmFhOWQwMzQxZTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDRiNGVhYzY5MDZmMjRkMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzFhMTY1OTk2YTVhYTBjZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGMyMmU0ZGEyZWI2MWU1MzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmI0YmM4ZDY3M2FjNGNmZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzNDVjMDQ0ZjA1Yzk1MDNj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKvInNiYXNlX2RlZmF1bHQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4r0RpY3R7QW55LCBSZWFsfahlbGVtZW50c5GSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFiODg3ZTk2NzQxZmNlZTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkqoiYmFzZV9idXMiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNjAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2OGM0YjVkOGVlOTdmZDM32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsiZ2VuZXJhdG9yIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqyJzZWNvbmRhcnkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpK1ImdlbmVyYXRvci5zZWNvbmRhcnkiqnRleHQvcGxhaW6SkrQiY29zdF9wZ19wYXJhbWV0ZXJzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDMxNTAwYmJjN2VjMDJhMWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNGUzN2I4N2EwMzg2ZmQxOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuImNvbnRyb2xfbW9kZSKqdGV4dC9wbGFpbpK/RlJFUVVFTkNZRFJPT1A6OkNvbnRyb2xNb2RlID0gMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKqImxvYWRidXMyIqp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDM5OGY1ODdjOGYzZWQxODfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvMjFjNzcyNjIwNThmYjYz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3dpdGNoIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqSJicmVha2VyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SsCJzd2l0Y2guYnJlYWtlciKqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmZDA5MTM4YzE3MmE2ZTUz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZl9idXMiqnRleHQvcGxhaW6SpyJ0dGJ1cyKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSriJkaXNwYXRjaGFibGUiqnRleHQvcGxhaW6StE5POjpEaXNwYXRjaGFibGUgPSAwqnRleHQvcGxhaW6SkqcidF9idXMiqnRleHQvcGxhaW6SqiJsb2FkYnVzMiKqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzNzJlZWQ2NzBiNzY1ZmI42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGIxOTI3M2UxMDAzYzhjNDLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6StyJ2b2x0YWdlX3NvdXJjZS5zb3VyY2UiqnRleHQvcGxhaW6SkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTJhNmRhNmIwYzY1NTU4YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4ZmI4YmE0Yjg2ODk0YmJm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQidm0iqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDI2ZmJiOGMyYjUwZjRiODPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmUyYTUzNzM3OTVlNGQ5ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK8zZTcxNzI2MjRkN2M5ZTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKvInRfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDc4OWE1ZTA4MGU0MDU4ZTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW6SkqgidmFkX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNmNTg2YTFhMWJiYzY0NmXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SriJsaW5lLnByaW1hcnkiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTM0YjljMTRjM2EyYzliN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnInRydW5rIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKvInRfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDM5ZTM1MzFkMTBkMTEwZGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKSqCJ2YWRfdWIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDY4NzI4ZjEyYTE5MzA1MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxpbmUudHJ1bmsiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmI3YTk1NGM5M2ZmYTFjY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK81YzQ5ODVkMjg5NGM5MDXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJwZXJfdW5pdCKqdGV4dC9wbGFpbpKlZmFsc2WqdGV4dC9wbGFpbpKSrCJkYXRhX21vZGVsIqp0ZXh0L3BsYWlukrpFTkdJTkVFUklORzo6RGF0YU1vZGVsID0gMKp0ZXh0L3BsYWlukpKtInRyYW5zZm9ybWVyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpSJ0eDEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKxInRyYW5zZm9ybWVyLnR4MSKqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2ZDY2YWNhNjQxZTRkNDQ52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZl9idXMiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SkqgidG1fbm9tIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqCJ0bV9maXgiqnRleHQvcGxhaW6ShaZwcmVmaXikQm9vbKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDkxYzE4MTNmOTNkNDhhMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDFkYTVkNzliNTg2MWQzOTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTk3ZGU0NDNkMDEyMzYwZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnInNodW50Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpSJjYXAiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKrInNodW50LmNhcCKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK3R0VORVJJQzo6U2h1bnRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMWNmNTI5MTRhMTAxYzBjYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuImRpc3BhdGNoYWJsZSKqdGV4dC9wbGFpbpK0Tk86OkRpc3BhdGNoYWJsZSA9IDCqdGV4dC9wbGFpbpKSpCJncyKqdGV4dC9wbGFpbpLZZTTDlzQgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvNjRkZGRiNmE4YmM2NGM42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGNkMjAyNmEyMzY2MGVlMzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsb2FkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSpyJ0bG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqwibG9hZC50bG9hZCKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDcyODg5OWU1ODIyOGQwMjDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNWRiY2U5NjAyMjkxNWNmNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInBkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTQzNDY5OThlNTgwNmRjYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDYyYTMzMWNhNjE2NGU4YzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJiYWxhbmNlZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukq8ibG9hZC5iYWxhbmNlZCKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDEzYTAxMTViYzQ1MDI3NTLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDk5OTllYmI3YTRiMGVlNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInBkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTZkN2I3NjhjYWMwZmZlYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzFhNzhjOTdhMDVlZDA5MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzYmIzMzIxOTk0NzUyZGE12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoibGluZWNvZGUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKpImRlZmF1bHQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKmImJfZnIiqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbpKSpCJycyKqdGV4dC9wbGFpbpLZSTPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wMSAgMC4wICAgMC4wCiAwLjAgICAwLjAxICAwLjAKIDAuMCAgIDAuMCAgIDAuMDGqdGV4dC9wbGFpbpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SsiJsaW5lY29kZS5kZWZhdWx0Iqp0ZXh0L3BsYWlukpKkInhzIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjIgIDAuMCAgMC4wCiAwLjAgIDAuMiAgMC4wCiAwLjAgIDAuMCAgMC4yqnRleHQvcGxhaW6SkqYiZ190byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlukpKmImJfdG8iqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5YmVjNjZkZTU0ZWU1NTM52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDJjZjg3ZWU5ZjcwNGQ2MjbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMmM5NGE4N2I3NjMyZTc3NaRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCx+CTd2CwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDk1ZWNkNjU5LTQ1ZDAtNGJkMC05ZjMyLTljYWZkNzhmYjJjN7lkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAFR/u1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRmMjY1NGQ5NS0wYzhiLTQ1MjQtYWQxZi1mMGYxMmEzNWM1NzCKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52fQ8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+Rmlyc3QsIHdlIG5lZWQgYSBvcHRpbWl6ZXIuIEluIHRoaXMgY2FzZSB3ZSB3aWxsIHVzZSBJcG9wdCBhbmQgaW5pdGlhbGl6ZSBpdCB3aXRoIEp1TVAmIzM5O3MgPGNvZGU+b3B0aW1pemVyX3dpdGhfYXR0cmlidXRlczwvY29kZT4sIHdoaWNoIHdlIGhhdmUgZXhwb3J0ZWQgZnJvbSBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiBieSBkZWZhdWx0IGZvciB0aGUgdXNlcjwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsfUR0MDsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRmMjY1NGQ5NS0wYzhiLTQ1MjQtYWQxZi1mMGYxMmEzNWM1NzC5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABRi2tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3iqZxdWV1ZWTCpGxvZ3ORiKRsaW5l/6Ntc2eS2VZ1cGRhdGVkIGdlbmVyYXRvciAxIGNvc3QgZnVuY3Rpb24gd2l0aCBvcmRlciAzIHRvIGEgZnVuY3Rpb24gb2Ygb3JkZXIgMjogWzAuMDAxMiwgMC4wXap0ZXh0L3BsYWlup2NlbGxfaWTZJGZkYWVkNzgyLTUyOWItNDI2Ny1iZjczLWUyNmE2YTNkNDI5N6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl9mYTUyZDc2NaRmaWxl2UsvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9jb3JlL2RhdGEuamylZ3JvdXCkZGF0YaVsZXZlbKRJbmZvp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmJKSrCJzb2x2ZV90aW1lIqp0ZXh0L3BsYWlukqYzLjU3OTWqdGV4dC9wbGFpbpKSqyJvcHRpbWl6ZXIiqnRleHQvcGxhaW6SpyJJcG9wdCKqdGV4dC9wbGFpbpKStCJ0ZXJtaW5hdGlvbl9zdGF0dXMiqnRleHQvcGxhaW6S2StJVEVSQVRJT05fTElNSVQ6OlRlcm1pbmF0aW9uU3RhdHVzQ29kZSA9IDExqnRleHQvcGxhaW6Skq0iZHVhbF9zdGF0dXMiqnRleHQvcGxhaW6S2StVTktOT1dOX1JFU1VMVF9TVEFUVVM6OlJlc3VsdFN0YXR1c0NvZGUgPSA4qnRleHQvcGxhaW6Skq8icHJpbWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZK1VOS05PV05fUkVTVUxUX1NUQVRVUzo6UmVzdWx0U3RhdHVzQ29kZSA9IDiqdGV4dC9wbGFpbpKSqyJvYmplY3RpdmUiqnRleHQvcGxhaW6SqS01LjA4NmUxNap0ZXh0L3BsYWlukpKqInNvbHV0aW9uIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmZKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjM2U3OGI2MDc5MGU0OGQ02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDU0YzI2MjI1OWFjM2UzZmPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5ZjJmNjI1M2FmMjRhZTJi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidHJ1bmsiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk3MTliNDM4MWVmOTU3YzDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZWEyNGExN2RjNTBmMzRkZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpyJzYmFzZSKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDE2NDBlOTE0OWQ0NmE0YTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJ0cmFuc2Zvcm1lciKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqUidHgxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiM2UxNGNhNjI1ODJlNmVm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGNmOTBlOTc5ZGNlMjFlM2XZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJnZW5lcmF0b3IiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKrInNlY29uZGFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmIzM2Q4YmFjN2FiNTIxNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1ODAyZDNlOWExNDk0ZDEw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqcidGxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDEyNzU4MzU3MTYwZTU5NTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJiYWxhbmNlZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNzdiZTc5NWM2MGEwNDkxOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5M2JlODlkZTE4YTA2ZWE42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3dpdGNoIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqSJicmVha2VyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3YTA3MjAwMWU0ZDQzNTNj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDczOTE1ODdjNTdlOGE3NDXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJwZXJfdW5pdCKqdGV4dC9wbGFpbpKlZmFsc2WqdGV4dC9wbGFpbpKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKpInByaW1hcnkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDMyOGZjMzY1ZDVlNTVjODHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc4ZjI3Mjg5ZTJhYWMwMzDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ0dGJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZWZhNTI3MjM1MDEwMmJmZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImxvYWRidXMyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhZjAwNjA4YzRlYzY5ZjQ02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTkyOThjYmZjMzE4ZmI5YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjY2ZjZmMzYzBhYmZlMGYz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDljOTRiY2Y2MmE2ODliYTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJvYmplY3RpdmVfbGIiqnRleHQvcGxhaW6SpC1JbmaqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDU4YjYxNDlmYzUwYzhjOaRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlp3Jlc3VsdDKybGFzdF9ydW5fdGltZXN0YW1wy0HZQsfisr62sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRmZGFlZDc4Mi01MjliLTQyNjctYmY3My1lMjZhNmEzZDQyOTe5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc8AAAAB+GnGGrVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDNlZDQ0MWI4LTIwNTUtNDFiNy1hNGI1LTI5MTMwZDU4ODBlZIqmcXVldWVkwqRsb2dzkYikbGluZf+jbXNnktoBgwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKVGhpcyBwcm9ncmFtIGNvbnRhaW5zIElwb3B0LCBhIGxpYnJhcnkgZm9yIGxhcmdlLXNjYWxlIG5vbmxpbmVhciBvcHRpbWl6YXRpb24uCiBJcG9wdCBpcyByZWxlYXNlZCBhcyBvcGVuIHNvdXJjZSBjb2RlIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpLgogICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiB2aXNpdCBodHRwczovL2dpdGh1Yi5jb20vY29pbi1vci9JcG9wdAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCqp0ZXh0L3BsYWlup2NlbGxfaWTZJDNlZDQ0MWI4LTIwNTUtNDFiNy1hNGI1LTI5MTMwZDU4ODBlZKZrd2FyZ3OQomlkuU1haW5fUGx1dG9SdW5uZXJfMzA0M2RiOGOkZmlsZdlCL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9QbHV0by9reGVzby9zcmMvcnVubmVyL1BsdXRvUnVubmVyLmpspWdyb3Vwq1BsdXRvUnVubmVypWxldmVsrkxvZ0xldmVsKC01NTUpp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmJKSrCJzb2x2ZV90aW1lIqp0ZXh0L3BsYWlukqcxLjA4MDA0qnRleHQvcGxhaW6Skqsib3B0aW1pemVyIqp0ZXh0L3BsYWlukqciSXBvcHQiqnRleHQvcGxhaW6SkrQidGVybWluYXRpb25fc3RhdHVzIqp0ZXh0L3BsYWluktkpTE9DQUxMWV9TT0xWRUQ6OlRlcm1pbmF0aW9uU3RhdHVzQ29kZSA9IDSqdGV4dC9wbGFpbpKSrSJkdWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZJEZFQVNJQkxFX1BPSU5UOjpSZXN1bHRTdGF0dXNDb2RlID0gMap0ZXh0L3BsYWlukpKvInByaW1hbF9zdGF0dXMiqnRleHQvcGxhaW6S2SRGRUFTSUJMRV9QT0lOVDo6UmVzdWx0U3RhdHVzQ29kZSA9IDGqdGV4dC9wbGFpbpKSqyJvYmplY3RpdmUiqnRleHQvcGxhaW6SqTAuMDE1MDAxNqp0ZXh0L3BsYWlukpKqInNvbHV0aW9uIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1ODg3NDc0MGE0NjEzZTY22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGYwNzFiNjI5ZDQzNWY4MGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4OTBhM2E1YzgxMzMwOWE12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidHJ1bmsiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzgzOWViNzVmZjkyNzQ3YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3NWE3NTI0MmRhNmQyYTll2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKnInNiYXNlIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTE4YmI4YTI5MTVmNTNkYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKqImJhbGFuY2VkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK81MTMzMGFkZjg2MzExYWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjFkMGJiZmM1MWRkZTdmZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmYyYzViZTU0Yzc5NjU3M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTI0MDRiMTA5MmExMzE2ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpImxvYWRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQ3YzgxMjdiZmRiMGMwZjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjE2Y2NmY2NiMGZhNWI2YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkNjVmZWIwNWExYzY4ZDRl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4ib2JqZWN0aXZlX2xiIqp0ZXh0L3BsYWlukqQtSW5mqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk0NzVkN2Q0MTZkYzA3NGOkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZaZyZXN1bHSybGFzdF9ydW5fdGltZXN0YW1wy0HZQsfgYF9GsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc8AAAAI+oea/bVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGQ0Y2U0OWJkLWYzOGUtNDRlMC1hYTNhLTRlZTNmMGY3MGJmMYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaBC08ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+SW4gdGhpcyBibG9jayB3ZSBidWlsZCBhIHRocmVlIGJ1cyBuZXR3b3JrLCB3aXRoIG5ldXRyYWxzIGdyb3VuZGVkIGF0IHRoZSBzb3VyY2UgYW5kIGxvYWRzLjwvcD4KPHA+V2Ugc3RhcnQgd2l0aCBidXNlcywgd2l0aCB0aGUgc291cmNlYnVzIGFuZCBsb2FkYnVzIGhhdmluZyA0IHRlcm1pbmFscywgd2l0aCB0aGUgbGFzdCB0ZXJtaW5hbCBncm91bmRlZC48L3A+CjxwPlRoZW4gd2UgYWRkIGEgZ2VuZXJhdGlvbiBzb3VyY2UsIGluIHRoaXMgY2FzZSBhIHZvbHRhZ2Ugc291cmNlLCB3aGljaCBpcyA8Y29kZT5XWUU8L2NvZGU+IGNvbmZpZ3VyZWQgYnkgZGVmYXVsdCwgYW5kIHRoZXJlZm9yZSBleHBlY3RzIHRoZSBsYXN0IGNvbmR1Y3RvciB0byBiZSBhIGdyb3VuZGVkIG5ldXRyYWw8L3A+CjxwPldlIGFkZCB0d28gdGhyZWUgcGhhc2UgbGluZXMgdG8gY29ubmVjdCB0aGUgYnVzZXMgPGNvZGU+c291cmNlYnVzPC9jb2RlPiwgPGNvZGU+cHJpbWFyeTwvY29kZT4sIGFuZCA8Y29kZT5sb2FkYnVzPC9jb2RlPi4gTm90ZSB0aGF0IG5vbmUgb2YgdGhlIGxpbmVzIGhhdmUgYSBuZXV0cmFsIGNvbmR1Y3Rvci48L3A+CjxwPldlIGZpbmFsbHkgYWRkIGEgdGhyZWUtcGhhc2UgbG9hZCBhIHRoZSA8Y29kZT5sb2FkYnVzPC9jb2RlPiBidXMsIGJ1dCBub3RlIGFnYWluIHRoYXQgdGhpcyBpcyBhIDxjb2RlPldZRTwvY29kZT4gY29uZmlndXJlZCBsb2FkLCBhbmQgbGlrZSB0aGUgdm9sdGFnZSBzb3VyY2UsIHRoaXMgaW1wbGllcyB0aGF0IHRoZSBsYXN0IGNvbmR1Y3RvciBpcyBhIGdyb3VuZGVkIG5ldXRyYWwgZm9yIHRoZSBwdXJwb3NlcyBvZiBrcm9uIHJlZHVjdGlvbiAmIzQwO3doaWNoIGlzIHJlcXVpcmVkIGJ5IGRlZmF1bHQgdW50aWwgZXhwbGljaXQgNC13aXJlIG1vZGVsaW5nIGlzIGFkZGVkIHRvIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uJiM0MTs8L3A+CjxwPkxhc3RseSwgd2UgbmVlZCB0byBkZWZpbmUgdGhlIGRlZmF1bHQgdmJhc2Ugb2YgdGhlIHN5c3RlbSBhdCB0aGUgPGNvZGU+c291cmNlYnVzPC9jb2RlPjwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsfU7uvZsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRkNGNlNDliZC1mMzhlLTQ0ZTAtYWEzYS00ZWUzZjBmNzBiZjG5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ACLhztXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwqtzdGF0dXNfdHJlZYSkbmFtZahub3RlYm9va6hzdWJ0YXNrc4Smc2F2aW5nhKRuYW1lpnNhdmluZ6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCx9N3h3uqc3RhcnRlZF9hdMtB2ULH03eDZql3b3Jrc3BhY2WEpG5hbWWpd29ya3NwYWNlqHN1YnRhc2tzgqxpbml0X3Byb2Nlc3OEpG5hbWWsaW5pdF9wcm9jZXNzqHN1YnRhc2tzhKE0hKRuYW1loTSoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQsef+hsJqnN0YXJ0ZWRfYXTLQdlCx563VoKhMYSkbmFtZaExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULHnq1bIapzdGFydGVkX2F0y0HZQsedqmrToTKEpG5hbWWhMqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCx561yViqc3RhcnRlZF9hdMtB2ULHnq1bQqEzhKRuYW1loTOoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQseet1ZpqnN0YXJ0ZWRfYXTLQdlCx561yXmrZmluaXNoZWRfYXTLQdlCx5/6GxWqc3RhcnRlZF9hdMtB2ULHnapqg65jcmVhdGVfcHJvY2Vzc4SkbmFtZa5jcmVhdGVfcHJvY2Vzc6hzdWJ0YXNrc4KhMYSkbmFtZaExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULHnBS43KpzdGFydGVkX2F0y0HZQsebLd0noTKEpG5hbWWhMqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCx52qal2qc3RhcnRlZF9hdMtB2ULHnBS4+qtmaW5pc2hlZF9hdMtB2ULHnapqUapzdGFydGVkX2F0y0HZQsebLd0Bq2ZpbmlzaGVkX2F0y0HZQsef+hseqnN0YXJ0ZWRfYXTLQdlCx5st3MqjcGtnhKRuYW1lo3BrZ6hzdWJ0YXNrc4SsaW5zdGFudGlhdGUxhKRuYW1lrGluc3RhbnRpYXRlMahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCx5tf2vWqc3RhcnRlZF9hdMtB2ULHmy3L+6hhbmFseXNpc4SkbmFtZahhbmFseXNpc6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCx5sn9Reqc3RhcnRlZF9hdMtB2ULHmyfYe6pwcmVjb21waWxlhKRuYW1lqnByZWNvbXBpbGWoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQsfRd5BkqnN0YXJ0ZWRfYXTLQdlCx5tuiBancmVzb2x2ZYSkbmFtZadyZXNvbHZlqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULHm26Hz6pzdGFydGVkX2F0y0HZQsebX9sBq2ZpbmlzaGVkX2F0y0HZQsfRd5CCqnN0YXJ0ZWRfYXTLQdlCx5sn2F6jcnVuhKRuYW1lo3J1bqhzdWJ0YXNrc4KwcmVzb2x2ZV90b3BvbG9neYSkbmFtZbByZXNvbHZlX3RvcG9sb2d5qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULH03e28qpzdGFydGVkX2F0y0HZQsfTd63JqGV2YWx1YXRlhKRuYW1lqGV2YWx1YXRlqHN1YnRhc2tzjKE0hKRuYW1loTSoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQsfUvBI8qnN0YXJ0ZWRfYXTLQdlCx9S7yPOhMYSkbmFtZaExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULH1EUeFapzdGFydGVkX2F0y0HZQsfTeENbojEyhKRuYW1lojEyqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULH4rK/GqpzdGFydGVkX2F0y0HZQsfgk3gxoTKEpG5hbWWhMqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCx9RHQ3Sqc3RhcnRlZF9hdMtB2ULH1EUeZKE3hKRuYW1loTeoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQsfVdY0/qnN0YXJ0ZWRfYXTLQdlCx9Tu7GihNoSkbmFtZaE2qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULH1O7sJapzdGFydGVkX2F0y0HZQsfU7pQIojExhKRuYW1lojExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULH4JN32apzdGFydGVkX2F0y0HZQsfgYKKQoTiEpG5hbWWhOKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCx9V10nCqc3RhcnRlZF9hdMtB2ULH1XWNhqIxMISkbmFtZaIxMKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCx+Bgolmqc3RhcnRlZF9hdMtB2ULH4GBf6aE1hKRuYW1loTWoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQsfU7pO8qnN0YXJ0ZWRfYXTLQdlCx9S8EnOhOYSkbmFtZaE5qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULH4GBfmqpzdGFydGVkX2F0y0HZQsfVddKeoTOEpG5hbWWhM6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCx9S7yLCqc3RhcnRlZF9hdMtB2ULH1EdDv6tmaW5pc2hlZF9hdMtB2ULH4rLT+qpzdGFydGVkX2F0y0HZQsfTd7byq2ZpbmlzaGVkX2F0y0HZQsfistP6qnN0YXJ0ZWRfYXTLQdlCx9N3rZerZmluaXNoZWRfYXTAqnN0YXJ0ZWRfYXTLQdlCx5smwQGxY2VsbF9kZXBlbmRlbmNpZXON2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODG0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTiEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTi0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRmZjRiMmZmYS05ZDI1LTExZWItMDdkMC0yOTc1MWU3YjU3YzKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRmZjRiMmZmYS05ZDI1LTExZWItMDdkMC0yOTc1MWU3YjU3YzK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQzMDQxN2NjZi1kMGI0LTQzZDUtOWNlYi01YjAwZWY5YzhhMTeEtHByZWNlZGVuY2VfaGV1cmlzdGljB6djZWxsX2lk2SQzMDQxN2NjZi1kMGI0LTQzZDUtOWNlYi01YjAwZWY5YzhhMTe0ZG93bnN0cmVhbV9jZWxsc19tYXCDt1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9ukKVJcG9wdJHZJDE4ODVjZTBlLWZlMWEtNGI5Yi1iNjUyLTcyY2JlZTIxMzM5ZKVkaWFnbZLZJDFjYTk2NTdiLTg1YjQtNGVhNi05MDFjLWQzNmUyM2U4NDQwZtkkOTVlY2Q2NTktNDVkMC00YmQwLTlmMzItOWNhZmQ3OGZiMmM3snVwc3RyZWFtX2NlbGxzX21hcIDZJDIwZDNkOTVkLTc4MTctNDVkZS04OWU5LWZmY2UwMjAyZDhjZoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDIwZDNkOTVkLTc4MTctNDVkZS04OWU5LWZmY2UwMjAyZDhjZrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaVNb2RlbJDZJDFjYTk2NTdiLTg1YjQtNGVhNi05MDFjLWQzNmUyM2U4NDQwZoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDFjYTk2NTdiLTg1YjQtNGVhNi05MDFjLWQzNmUyM2U4NDQwZrRkb3duc3RyZWFtX2NlbGxzX21hcIGjZW5nktkkM2VkNDQxYjgtMjA1NS00MWI3LWE0YjUtMjkxMzBkNTg4MGVk2SQ5NWVjZDY1OS00NWQwLTRiZDAtOWYzMi05Y2FmZDc4ZmIyYzeydXBzdHJlYW1fY2VsbHNfbWFwiqhhZGRfYnVzIZCtYWRkX2xpbmVjb2RlIZCpYWRkX2xvYWQhkKlhZGRfbGluZSGQpWRpYWdtkdkkMzA0MTdjY2YtZDBiNC00M2Q1LTljZWItNWIwMGVmOWM4YTE3pU1vZGVskLJhZGRfdmJhc2VfZGVmYXVsdCGQpGZpbGyQs2FkZF92b2x0YWdlX3NvdXJjZSGQoj0+kNkkOTAxMGNjY2ItZTE3NC00ZGZmLWI5MzQtN2U3YmU1YTkzYTFkhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkOTAxMGNjY2ItZTE3NC00ZGZmLWI5MzQtN2U3YmU1YTkzYTFktGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkMTg4NWNlMGUtZmUxYS00YjliLWI2NTItNzJjYmVlMjEzMzlkhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkMTg4NWNlMGUtZmUxYS00YjliLWI2NTItNzJjYmVlMjEzMzlktGRvd25zdHJlYW1fY2VsbHNfbWFwgaxpcG9wdF9zb2x2ZXKS2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWTZJGZkYWVkNzgyLTUyOWItNDI2Ny1iZjczLWUyNmE2YTNkNDI5N7J1cHN0cmVhbV9jZWxsc19tYXCDpUlwb3B0kdkkMzA0MTdjY2YtZDBiNC00M2Q1LTljZWItNWIwMGVmOWM4YTE3oj0+kLlvcHRpbWl6ZXJfd2l0aF9hdHRyaWJ1dGVzkNkkOTVlY2Q2NTktNDVkMC00YmQwLTlmMzItOWNhZmQ3OGZiMmM3hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkOTVlY2Q2NTktNDVkMC00YmQwLTlmMzItOWNhZmQ3OGZiMmM3tGRvd25zdHJlYW1fY2VsbHNfbWFwgaRlbmcykdkkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3snVwc3RyZWFtX2NlbGxzX21hcIuwYWRkX3RyYW5zZm9ybWVyIZCiPT6QqGFkZF9idXMhkKhkZWVwY29weZCpYWRkX2xvYWQhkKthZGRfc3dpdGNoIZCuYWRkX2dlbmVyYXRvciGQpWRpYWdtkdkkMzA0MTdjY2YtZDBiNC00M2Q1LTljZWItNWIwMGVmOWM4YTE3qmFkZF9zaHVudCGQo2VuZ5HZJDFjYTk2NTdiLTg1YjQtNGVhNi05MDFjLWQzNmUyM2U4NDQwZqRmaWxskNkkZjI2NTRkOTUtMGM4Yi00NTI0LWFkMWYtZjBmMTJhMzVjNTcwhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZjI2NTRkOTUtMGM4Yi00NTI0LWFkMWYtZjBmMTJhMzVjNTcwtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3tGRvd25zdHJlYW1fY2VsbHNfbWFwgadyZXN1bHQykLJ1cHN0cmVhbV9jZWxsc19tYXCErGlwb3B0X3NvbHZlcpHZJDE4ODVjZTBlLWZlMWEtNGI5Yi1iNjUyLTcyY2JlZTIxMzM5ZKRlbmcykdkkOTVlY2Q2NTktNDVkMC00YmQwLTlmMzItOWNhZmQ3OGZiMmM3rkFDUFVQb3dlck1vZGVskKxzb2x2ZV9tY19vcGaQ2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWSEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWS0ZG93bnN0cmVhbV9jZWxsc19tYXCBpnJlc3VsdJCydXBzdHJlYW1fY2VsbHNfbWFwhKxpcG9wdF9zb2x2ZXKR2SQxODg1Y2UwZS1mZTFhLTRiOWItYjY1Mi03MmNiZWUyMTMzOWSuQUNQVVBvd2VyTW9kZWyQo2VuZ5HZJDFjYTk2NTdiLTg1YjQtNGVhNi05MDFjLWQzNmUyM2U4NDQwZqxzb2x2ZV9tY19vcGaQ2SRkNGNlNDliZC1mMzhlLTQ0ZTAtYWEzYS00ZWUzZjBmNzBiZjGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRkNGNlNDliZC1mMzhlLTQ0ZTAtYWEzYS00ZWUzZjBmNzBiZjG0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQtGNlbGxfZXhlY3V0aW9uX29yZGVyndkkMzA0MTdjY2YtZDBiNC00M2Q1LTljZWItNWIwMGVmOWM4YTE32SRmZjRiMmZmYS05ZDI1LTExZWItMDdkMC0yOTc1MWU3YjU3YzLZJGYyNjU0ZDk1LTBjOGItNDUyNC1hZDFmLWYwZjEyYTM1YzU3MNkkMTg4NWNlMGUtZmUxYS00YjliLWI2NTItNzJjYmVlMjEzMzlk2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTjZJDIwZDNkOTVkLTc4MTctNDVkZS04OWU5LWZmY2UwMjAyZDhjZtkkZDRjZTQ5YmQtZjM4ZS00NGUwLWFhM2EtNGVlM2YwZjcwYmYx2SQxY2E5NjU3Yi04NWI0LTRlYTYtOTAxYy1kMzZlMjNlODQ0MGbZJDkwMTBjY2NiLWUxNzQtNGRmZi1iOTM0LTdlN2JlNWE5M2ExZNkkM2VkNDQxYjgtMjA1NS00MWI3LWE0YjUtMjkxMzBkNTg4MGVk2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODHZJDk1ZWNkNjU5LTQ1ZDAtNGJkMC05ZjMyLTljYWZkNzhmYjJjN9kkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3tGxhc3RfaG90X3JlbG9hZF90aW1lywAAAAAAAAAAqXNob3J0cGF0aNknRW5naW5lZXJpbmcgTW9kZWwgLSBIZWxwZXIgRnVuY3Rpb25zLmpsrnByb2Nlc3Nfc3RhdHVzpXJlYWR5pHBhdGjZMGV4YW1wbGVzL0VuZ2luZWVyaW5nIE1vZGVsIC0gSGVscGVyIEZ1bmN0aW9ucy5qbK5sYXN0X3NhdmVfdGltZctB2ULH03eDLKpjZWxsX29yZGVyndkkZmY0YjJmZmEtOWQyNS0xMWViLTA3ZDAtMjk3NTFlN2I1N2My2SQzMDQxN2NjZi1kMGI0LTQzZDUtOWNlYi01YjAwZWY5YzhhMTfZJGYyNjU0ZDk1LTBjOGItNDUyNC1hZDFmLWYwZjEyYTM1YzU3MNkkMTg4NWNlMGUtZmUxYS00YjliLWI2NTItNzJjYmVlMjEzMzlk2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTjZJDIwZDNkOTVkLTc4MTctNDVkZS04OWU5LWZmY2UwMjAyZDhjZtkkZDRjZTQ5YmQtZjM4ZS00NGUwLWFhM2EtNGVlM2YwZjcwYmYx2SQxY2E5NjU3Yi04NWI0LTRlYTYtOTAxYy1kMzZlMjNlODQ0MGbZJDkwMTBjY2NiLWUxNzQtNGRmZi1iOTM0LTdlN2JlNWE5M2ExZNkkM2VkNDQxYjgtMjA1NS00MWI3LWE0YjUtMjkxMzBkNTg4MGVk2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODHZJDk1ZWNkNjU5LTQ1ZDAtNGJkMC05ZjMyLTljYWZkNzhmYjJjN9kkZmRhZWQ3ODItNTI5Yi00MjY3LWJmNzMtZTI2YTZhM2Q0Mjk3sXB1Ymxpc2hlZF9vYmplY3RzgKVuYnBrZ4iyaW5zdGFsbGVkX3ZlcnNpb25zg7dQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbqYwLjE0LjetTGluZWFyQWxnZWJyYaZzdGRsaWKlSXBvcHSlMS4yLjCwdGVybWluYWxfb3V0cHV0c4S3UG93ZXJNb2RlbHNEaXN0cmlidXRpb27aCWQbWzMzbRtbMW3ilIwgG1syMm0bWzM5bRtbMzNtG1sxbVdhcm5pbmc6IBtbMjJtG1szOW1UaGUgYWN0aXZlIG1hbmlmZXN0IGZpbGUgYXQgYC90bXAvamxfZnl5WHRFL01hbmlmZXN0LnRvbWxgIGhhcyBhbiBvbGQgZm9ybWF0IHRoYXQgaXMgYmVpbmcgbWFpbnRhaW5lZC4KG1szM20bWzFt4pSCIBtbMjJtG1szOW1UbyB1cGRhdGUgdG8gdGhlIG5ldyBmb3JtYXQsIHdoaWNoIGlzIHN1cHBvcnRlZCBieSBKdWxpYSB2ZXJzaW9ucyDiiaUgMS42LjIsIHJ1biBgaW1wb3J0IFBrZzsgUGtnLnVwZ3JhZGVfbWFuaWZlc3QoKWAgd2hpY2ggd2lsbCB1cGdyYWRlIHRoZSBmb3JtYXQgd2l0aG91dCByZS1yZXNvbHZpbmcuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdGhlbiByZWNvcmQgdGhlIGp1bGlhIHZlcnNpb24gcmUtcmVzb2x2ZSB3aXRoIGBQa2cucmVzb2x2ZSgpYCBhbmQgaWYgdGhlcmUgYXJlIHJlc29sdmUgY29uZmxpY3RzIGNvbnNpZGVyIGBQa2cudXBkYXRlKClgLgobWzMzbRtbMW3ilJQgG1syMm0bWzM5bRtbOTBtQCBQa2cuVHlwZXMgL29wdC9ob3N0ZWR0b29sY2FjaGUvanVsaWEvMS45LjMveDY0L3NoYXJlL2p1bGlhL3N0ZGxpYi92MS45L1BrZy9zcmMvbWFuaWZlc3Quamw6MzE2G1szOW0KCkluc3RhbnRpYXRpbmcuLi4KG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGlzIGFuIG9sZGVyIGZvcm1hdCB3aXRoIG5vIGp1bGlhIHZlcnNpb24gZW50cnkuIERlcGVuZGVuY2llcyBtYXkgaGF2ZSBiZWVuIHJlc29sdmVkIHdpdGggYSBkaWZmZXJlbnQganVsaWEgdmVyc2lvbi4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgL3RtcC9qbF9meXlYdEUvTWFuaWZlc3QudG9tbDowG1szOW0KG1szMm0bWzFtICAgSW5zdGFsbGVkG1syMm0bWzM5bSBDb21wYXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHY0LjYuMQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFNwZWNpYWxGdW5jdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHYyLjIuMCAgICAgICAgICAgICAgG1szMm0bWzFtG1syMm0bWzM5bQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIOKUgCB2MC4xNC43ICAgICAgICAgICAgIBtbMzJtG1sxbRtbMjJtG1szOW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgClJlc29sdmluZy4uLgobWzMybRtbMW0gIE5vIENoYW5nZXMbWzIybRtbMzltIHRvIGAvdG1wL2psX2Z5eVh0RS9Qcm9qZWN0LnRvbWxgChtbMzJtG1sxbSAgICBVcGRhdGluZxtbMjJtG1szOW0gYC90bXAvamxfZnl5WHRFL01hbmlmZXN0LnRvbWxgCiAgG1s5MG1bNDRjZmU5NWFdIBtbMzltG1s5M23ihpEgUGtnIHYxLjguMCDih5IgdjEuOS4yG1szOW0KICAbWzkwbVsxMDc0NWIxNl0gG1szOW0bWzkzbX4gU3RhdGlzdGljcyDih5IgdjEuOS4wG1szOW0KICAbWzkwbVtmYTI2N2YxZl0gG1szOW0bWzkzbeKGkSBUT01MIHYxLjAuMCDih5IgdjEuMC4zG1szOW0KICAbWzkwbVthNGU1NjlhNl0gG1szOW0bWzk1beKGkyBUYXIgdjEuMTAuMSDih5IgdjEuMTAuMBtbMzltCiAgG1s5MG1bZTY2ZTAwNzhdIBtbMzltG1s5M23ihpEgQ29tcGlsZXJTdXBwb3J0TGlicmFyaWVzX2psbCB2MS4wLjErMCDih5IgdjEuMC41KzAbWzM5bQogIBtbOTBtW2M4ZmZkOWMzXSAbWzM5bRtbOTNt4oaRIE1iZWRUTFNfamxsIHYyLjI4LjArMCDih5IgdjIuMjguMiswG1szOW0KICAbWzkwbVsxNGEzNjA2ZF0gG1szOW0bWzkzbeKGkSBNb3ppbGxhQ0FDZXJ0c19qbGwgdjIwMjIuMi4xIOKHkiB2MjAyMi4xMC4xMRtbMzltCiAgG1s5MG1bNDUzNjYyOWFdIBtbMzltG1s5M23ihpEgT3BlbkJMQVNfamxsIHYwLjMuMjArMCDih5IgdjAuMy4yMSs0G1szOW0KICAbWzkwbVtiZWE4N2Q0YV0gG1szOW0bWzkybSsgU3VpdGVTcGFyc2VfamxsIHY1LjEwLjErNhtbMzltCiAgG1s5MG1bODM3NzVhNThdIBtbMzltG1s5M23ihpEgWmxpYl9qbGwgdjEuMi4xMiszIOKHkiB2MS4yLjEzKzAbWzM5bQogIBtbOTBtWzhlODUwYjkwXSAbWzM5bRtbOTNt4oaRIGxpYmJsYXN0cmFtcG9saW5lX2psbCB2NS4xLjErMCDih5IgdjUuOC4wKzAbWzM5bQoKUHJlY29tcGlsaW5nLi4uChtbMzJtG1sxbSAgQWN0aXZhdGluZxtbMjJtG1szOW0gcHJvamVjdCBhdCBgL3RtcC9qbF9meXlYdEVgChtbMzJtG1sxbVByZWNvbXBpbGluZxtbMjJtG1szOW0gcHJvamVjdC4uLgogIDIzIGRlcGVuZGVuY2llcyBzdWNjZXNzZnVsbHkgcHJlY29tcGlsZWQgaW4gMjEyIHNlY29uZHMuIDUwIGFscmVhZHkgcHJlY29tcGlsZWQuqm5icGtnX3N5bmPaCWQbWzMzbRtbMW3ilIwgG1syMm0bWzM5bRtbMzNtG1sxbVdhcm5pbmc6IBtbMjJtG1szOW1UaGUgYWN0aXZlIG1hbmlmZXN0IGZpbGUgYXQgYC90bXAvamxfZnl5WHRFL01hbmlmZXN0LnRvbWxgIGhhcyBhbiBvbGQgZm9ybWF0IHRoYXQgaXMgYmVpbmcgbWFpbnRhaW5lZC4KG1szM20bWzFt4pSCIBtbMjJtG1szOW1UbyB1cGRhdGUgdG8gdGhlIG5ldyBmb3JtYXQsIHdoaWNoIGlzIHN1cHBvcnRlZCBieSBKdWxpYSB2ZXJzaW9ucyDiiaUgMS42LjIsIHJ1biBgaW1wb3J0IFBrZzsgUGtnLnVwZ3JhZGVfbWFuaWZlc3QoKWAgd2hpY2ggd2lsbCB1cGdyYWRlIHRoZSBmb3JtYXQgd2l0aG91dCByZS1yZXNvbHZpbmcuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdGhlbiByZWNvcmQgdGhlIGp1bGlhIHZlcnNpb24gcmUtcmVzb2x2ZSB3aXRoIGBQa2cucmVzb2x2ZSgpYCBhbmQgaWYgdGhlcmUgYXJlIHJlc29sdmUgY29uZmxpY3RzIGNvbnNpZGVyIGBQa2cudXBkYXRlKClgLgobWzMzbRtbMW3ilJQgG1syMm0bWzM5bRtbOTBtQCBQa2cuVHlwZXMgL29wdC9ob3N0ZWR0b29sY2FjaGUvanVsaWEvMS45LjMveDY0L3NoYXJlL2p1bGlhL3N0ZGxpYi92MS45L1BrZy9zcmMvbWFuaWZlc3Quamw6MzE2G1szOW0KCkluc3RhbnRpYXRpbmcuLi4KG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGlzIGFuIG9sZGVyIGZvcm1hdCB3aXRoIG5vIGp1bGlhIHZlcnNpb24gZW50cnkuIERlcGVuZGVuY2llcyBtYXkgaGF2ZSBiZWVuIHJlc29sdmVkIHdpdGggYSBkaWZmZXJlbnQganVsaWEgdmVyc2lvbi4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgL3RtcC9qbF9meXlYdEUvTWFuaWZlc3QudG9tbDowG1szOW0KG1szMm0bWzFtICAgSW5zdGFsbGVkG1syMm0bWzM5bSBDb21wYXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHY0LjYuMQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFNwZWNpYWxGdW5jdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHYyLjIuMCAgICAgICAgICAgICAgG1szMm0bWzFtG1syMm0bWzM5bQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIOKUgCB2MC4xNC43ICAgICAgICAgICAgIBtbMzJtG1sxbRtbMjJtG1szOW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgClJlc29sdmluZy4uLgobWzMybRtbMW0gIE5vIENoYW5nZXMbWzIybRtbMzltIHRvIGAvdG1wL2psX2Z5eVh0RS9Qcm9qZWN0LnRvbWxgChtbMzJtG1sxbSAgICBVcGRhdGluZxtbMjJtG1szOW0gYC90bXAvamxfZnl5WHRFL01hbmlmZXN0LnRvbWxgCiAgG1s5MG1bNDRjZmU5NWFdIBtbMzltG1s5M23ihpEgUGtnIHYxLjguMCDih5IgdjEuOS4yG1szOW0KICAbWzkwbVsxMDc0NWIxNl0gG1szOW0bWzkzbX4gU3RhdGlzdGljcyDih5IgdjEuOS4wG1szOW0KICAbWzkwbVtmYTI2N2YxZl0gG1szOW0bWzkzbeKGkSBUT01MIHYxLjAuMCDih5IgdjEuMC4zG1szOW0KICAbWzkwbVthNGU1NjlhNl0gG1szOW0bWzk1beKGkyBUYXIgdjEuMTAuMSDih5IgdjEuMTAuMBtbMzltCiAgG1s5MG1bZTY2ZTAwNzhdIBtbMzltG1s5M23ihpEgQ29tcGlsZXJTdXBwb3J0TGlicmFyaWVzX2psbCB2MS4wLjErMCDih5IgdjEuMC41KzAbWzM5bQogIBtbOTBtW2M4ZmZkOWMzXSAbWzM5bRtbOTNt4oaRIE1iZWRUTFNfamxsIHYyLjI4LjArMCDih5IgdjIuMjguMiswG1szOW0KICAbWzkwbVsxNGEzNjA2ZF0gG1szOW0bWzkzbeKGkSBNb3ppbGxhQ0FDZXJ0c19qbGwgdjIwMjIuMi4xIOKHkiB2MjAyMi4xMC4xMRtbMzltCiAgG1s5MG1bNDUzNjYyOWFdIBtbMzltG1s5M23ihpEgT3BlbkJMQVNfamxsIHYwLjMuMjArMCDih5IgdjAuMy4yMSs0G1szOW0KICAbWzkwbVtiZWE4N2Q0YV0gG1szOW0bWzkybSsgU3VpdGVTcGFyc2VfamxsIHY1LjEwLjErNhtbMzltCiAgG1s5MG1bODM3NzVhNThdIBtbMzltG1s5M23ihpEgWmxpYl9qbGwgdjEuMi4xMiszIOKHkiB2MS4yLjEzKzAbWzM5bQogIBtbOTBtWzhlODUwYjkwXSAbWzM5bRtbOTNt4oaRIGxpYmJsYXN0cmFtcG9saW5lX2psbCB2NS4xLjErMCDih5IgdjUuOC4wKzAbWzM5bQoKUHJlY29tcGlsaW5nLi4uChtbMzJtG1sxbSAgQWN0aXZhdGluZxtbMjJtG1szOW0gcHJvamVjdCBhdCBgL3RtcC9qbF9meXlYdEVgChtbMzJtG1sxbVByZWNvbXBpbGluZxtbMjJtG1szOW0gcHJvamVjdC4uLgogIDIzIGRlcGVuZGVuY2llcyBzdWNjZXNzZnVsbHkgcHJlY29tcGlsZWQgaW4gMjEyIHNlY29uZHMuIDUwIGFscmVhZHkgcHJlY29tcGlsZWQurUxpbmVhckFsZ2VicmHaCWQbWzMzbRtbMW3ilIwgG1syMm0bWzM5bRtbMzNtG1sxbVdhcm5pbmc6IBtbMjJtG1szOW1UaGUgYWN0aXZlIG1hbmlmZXN0IGZpbGUgYXQgYC90bXAvamxfZnl5WHRFL01hbmlmZXN0LnRvbWxgIGhhcyBhbiBvbGQgZm9ybWF0IHRoYXQgaXMgYmVpbmcgbWFpbnRhaW5lZC4KG1szM20bWzFt4pSCIBtbMjJtG1szOW1UbyB1cGRhdGUgdG8gdGhlIG5ldyBmb3JtYXQsIHdoaWNoIGlzIHN1cHBvcnRlZCBieSBKdWxpYSB2ZXJzaW9ucyDiiaUgMS42LjIsIHJ1biBgaW1wb3J0IFBrZzsgUGtnLnVwZ3JhZGVfbWFuaWZlc3QoKWAgd2hpY2ggd2lsbCB1cGdyYWRlIHRoZSBmb3JtYXQgd2l0aG91dCByZS1yZXNvbHZpbmcuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdGhlbiByZWNvcmQgdGhlIGp1bGlhIHZlcnNpb24gcmUtcmVzb2x2ZSB3aXRoIGBQa2cucmVzb2x2ZSgpYCBhbmQgaWYgdGhlcmUgYXJlIHJlc29sdmUgY29uZmxpY3RzIGNvbnNpZGVyIGBQa2cudXBkYXRlKClgLgobWzMzbRtbMW3ilJQgG1syMm0bWzM5bRtbOTBtQCBQa2cuVHlwZXMgL29wdC9ob3N0ZWR0b29sY2FjaGUvanVsaWEvMS45LjMveDY0L3NoYXJlL2p1bGlhL3N0ZGxpYi92MS45L1BrZy9zcmMvbWFuaWZlc3Quamw6MzE2G1szOW0KCkluc3RhbnRpYXRpbmcuLi4KG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGlzIGFuIG9sZGVyIGZvcm1hdCB3aXRoIG5vIGp1bGlhIHZlcnNpb24gZW50cnkuIERlcGVuZGVuY2llcyBtYXkgaGF2ZSBiZWVuIHJlc29sdmVkIHdpdGggYSBkaWZmZXJlbnQganVsaWEgdmVyc2lvbi4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgL3RtcC9qbF9meXlYdEUvTWFuaWZlc3QudG9tbDowG1szOW0KG1szMm0bWzFtICAgSW5zdGFsbGVkG1syMm0bWzM5bSBDb21wYXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHY0LjYuMQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFNwZWNpYWxGdW5jdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHYyLjIuMCAgICAgICAgICAgICAgG1szMm0bWzFtG1syMm0bWzM5bQogICAgICAgICAgICBJbnN0YWxsZWQgICAgICAgICAgIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIOKUgCB2MC4xNC43ICAgICAgICAgICAgIBtbMzJtG1sxbRtbMjJtG1szOW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgClJlc29sdmluZy4uLgobWzMybRtbMW0gIE5vIENoYW5nZXMbWzIybRtbMzltIHRvIGAvdG1wL2psX2Z5eVh0RS9Qcm9qZWN0LnRvbWxgChtbMzJtG1sxbSAgICBVcGRhdGluZxtbMjJtG1szOW0gYC90bXAvamxfZnl5WHRFL01hbmlmZXN0LnRvbWxgCiAgG1s5MG1bNDRjZmU5NWFdIBtbMzltG1s5M23ihpEgUGtnIHYxLjguMCDih5IgdjEuOS4yG1szOW0KICAbWzkwbVsxMDc0NWIxNl0gG1szOW0bWzkzbX4gU3RhdGlzdGljcyDih5IgdjEuOS4wG1szOW0KICAbWzkwbVtmYTI2N2YxZl0gG1szOW0bWzkzbeKGkSBUT01MIHYxLjAuMCDih5IgdjEuMC4zG1szOW0KICAbWzkwbVthNGU1NjlhNl0gG1szOW0bWzk1beKGkyBUYXIgdjEuMTAuMSDih5IgdjEuMTAuMBtbMzltCiAgG1s5MG1bZTY2ZTAwNzhdIBtbMzltG1s5M23ihpEgQ29tcGlsZXJTdXBwb3J0TGlicmFyaWVzX2psbCB2MS4wLjErMCDih5IgdjEuMC41KzAbWzM5bQogIBtbOTBtW2M4ZmZkOWMzXSAbWzM5bRtbOTNt4oaRIE1iZWRUTFNfamxsIHYyLjI4LjArMCDih5IgdjIuMjguMiswG1szOW0KICAbWzkwbVsxNGEzNjA2ZF0gG1szOW0bWzkzbeKGkSBNb3ppbGxhQ0FDZXJ0c19qbGwgdjIwMjIuMi4xIOKHkiB2MjAyMi4xMC4xMRtbMzltCiAgG1s5MG1bNDUzNjYyOWFdIBtbMzltG1s5M23ihpEgT3BlbkJMQVNfamxsIHYwLjMuMjArMCDih5IgdjAuMy4yMSs0G1szOW0KICAbWzkwbVtiZWE4N2Q0YV0gG1szOW0bWzkybSsgU3VpdGVTcGFyc2VfamxsIHY1LjEwLjErNhtbMzltCiAgG1s5MG1bODM3NzVhNThdIBtbMzltG1s5M23ihpEgWmxpYl9qbGwgdjEuMi4xMiszIOKHkiB2MS4yLjEzKzAbWzM5bQogIBtbOTBtWzhlODUwYjkwXSAbWzM5bRtbOTNt4oaRIGxpYmJsYXN0cmFtcG9saW5lX2psbCB2NS4xLjErMCDih5IgdjUuOC4wKzAbWzM5bQoKUHJlY29tcGlsaW5nLi4uChtbMzJtG1sxbSAgQWN0aXZhdGluZxtbMjJtG1szOW0gcHJvamVjdCBhdCBgL3RtcC9qbF9meXlYdEVgChtbMzJtG1sxbVByZWNvbXBpbGluZxtbMjJtG1szOW0gcHJvamVjdC4uLgogIDIzIGRlcGVuZGVuY2llcyBzdWNjZXNzZnVsbHkgcHJlY29tcGlsZWQgaW4gMjEyIHNlY29uZHMuIDUwIGFscmVhZHkgcHJlY29tcGlsZWQupUlwb3B02glkG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGF0IGAvdG1wL2psX2Z5eVh0RS9NYW5pZmVzdC50b21sYCBoYXMgYW4gb2xkIGZvcm1hdCB0aGF0IGlzIGJlaW5nIG1haW50YWluZWQuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdXBkYXRlIHRvIHRoZSBuZXcgZm9ybWF0LCB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgSnVsaWEgdmVyc2lvbnMg4omlIDEuNi4yLCBydW4gYGltcG9ydCBQa2c7IFBrZy51cGdyYWRlX21hbmlmZXN0KClgIHdoaWNoIHdpbGwgdXBncmFkZSB0aGUgZm9ybWF0IHdpdGhvdXQgcmUtcmVzb2x2aW5nLgobWzMzbRtbMW3ilIIgG1syMm0bWzM5bVRvIHRoZW4gcmVjb3JkIHRoZSBqdWxpYSB2ZXJzaW9uIHJlLXJlc29sdmUgd2l0aCBgUGtnLnJlc29sdmUoKWAgYW5kIGlmIHRoZXJlIGFyZSByZXNvbHZlIGNvbmZsaWN0cyBjb25zaWRlciBgUGtnLnVwZGF0ZSgpYC4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgUGtnLlR5cGVzIC9vcHQvaG9zdGVkdG9vbGNhY2hlL2p1bGlhLzEuOS4zL3g2NC9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuOS9Qa2cvc3JjL21hbmlmZXN0LmpsOjMxNhtbMzltCgpJbnN0YW50aWF0aW5nLi4uChtbMzNtG1sxbeKUjCAbWzIybRtbMzltG1szM20bWzFtV2FybmluZzogG1syMm0bWzM5bVRoZSBhY3RpdmUgbWFuaWZlc3QgZmlsZSBpcyBhbiBvbGRlciBmb3JtYXQgd2l0aCBubyBqdWxpYSB2ZXJzaW9uIGVudHJ5LiBEZXBlbmRlbmNpZXMgbWF5IGhhdmUgYmVlbiByZXNvbHZlZCB3aXRoIGEgZGlmZmVyZW50IGp1bGlhIHZlcnNpb24uChtbMzNtG1sxbeKUlCAbWzIybRtbMzltG1s5MG1AIC90bXAvamxfZnl5WHRFL01hbmlmZXN0LnRvbWw6MBtbMzltChtbMzJtG1sxbSAgIEluc3RhbGxlZBtbMjJtG1szOW0gQ29tcGF0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCB2NC42LjEKICAgICAgICAgICAgSW5zdGFsbGVkICAgICAgICAgICBTcGVjaWFsRnVuY3Rpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCB2Mi4yLjAgICAgICAgICAgICAgIBtbMzJtG1sxbRtbMjJtG1szOW0KICAgICAgICAgICAgSW5zdGFsbGVkICAgICAgICAgICBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiDilIAgdjAuMTQuNyAgICAgICAgICAgICAbWzMybRtbMW0bWzIybRtbMzltCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApSZXNvbHZpbmcuLi4KG1szMm0bWzFtICBObyBDaGFuZ2VzG1syMm0bWzM5bSB0byBgL3RtcC9qbF9meXlYdEUvUHJvamVjdC50b21sYAobWzMybRtbMW0gICAgVXBkYXRpbmcbWzIybRtbMzltIGAvdG1wL2psX2Z5eVh0RS9NYW5pZmVzdC50b21sYAogIBtbOTBtWzQ0Y2ZlOTVhXSAbWzM5bRtbOTNt4oaRIFBrZyB2MS44LjAg4oeSIHYxLjkuMhtbMzltCiAgG1s5MG1bMTA3NDViMTZdIBtbMzltG1s5M21+IFN0YXRpc3RpY3Mg4oeSIHYxLjkuMBtbMzltCiAgG1s5MG1bZmEyNjdmMWZdIBtbMzltG1s5M23ihpEgVE9NTCB2MS4wLjAg4oeSIHYxLjAuMxtbMzltCiAgG1s5MG1bYTRlNTY5YTZdIBtbMzltG1s5NW3ihpMgVGFyIHYxLjEwLjEg4oeSIHYxLjEwLjAbWzM5bQogIBtbOTBtW2U2NmUwMDc4XSAbWzM5bRtbOTNt4oaRIENvbXBpbGVyU3VwcG9ydExpYnJhcmllc19qbGwgdjEuMC4xKzAg4oeSIHYxLjAuNSswG1szOW0KICAbWzkwbVtjOGZmZDljM10gG1szOW0bWzkzbeKGkSBNYmVkVExTX2psbCB2Mi4yOC4wKzAg4oeSIHYyLjI4LjIrMBtbMzltCiAgG1s5MG1bMTRhMzYwNmRdIBtbMzltG1s5M23ihpEgTW96aWxsYUNBQ2VydHNfamxsIHYyMDIyLjIuMSDih5IgdjIwMjIuMTAuMTEbWzM5bQogIBtbOTBtWzQ1MzY2MjlhXSAbWzM5bRtbOTNt4oaRIE9wZW5CTEFTX2psbCB2MC4zLjIwKzAg4oeSIHYwLjMuMjErNBtbMzltCiAgG1s5MG1bYmVhODdkNGFdIBtbMzltG1s5Mm0rIFN1aXRlU3BhcnNlX2psbCB2NS4xMC4xKzYbWzM5bQogIBtbOTBtWzgzNzc1YTU4XSAbWzM5bRtbOTNt4oaRIFpsaWJfamxsIHYxLjIuMTIrMyDih5IgdjEuMi4xMyswG1szOW0KICAbWzkwbVs4ZTg1MGI5MF0gG1szOW0bWzkzbeKGkSBsaWJibGFzdHJhbXBvbGluZV9qbGwgdjUuMS4xKzAg4oeSIHY1LjguMCswG1szOW0KClByZWNvbXBpbGluZy4uLgobWzMybRtbMW0gIEFjdGl2YXRpbmcbWzIybRtbMzltIHByb2plY3QgYXQgYC90bXAvamxfZnl5WHRFYAobWzMybRtbMW1QcmVjb21waWxpbmcbWzIybRtbMzltIHByb2plY3QuLi4KICAyMyBkZXBlbmRlbmNpZXMgc3VjY2Vzc2Z1bGx5IHByZWNvbXBpbGVkIGluIDIxMiBzZWNvbmRzLiA1MCBhbHJlYWR5IHByZWNvbXBpbGVkLqdlbmFibGVkw7dyZXN0YXJ0X3JlY29tbWVuZGVkX21zZ8C0cmVzdGFydF9yZXF1aXJlZF9tc2fArWJ1c3lfcGFja2FnZXOQr2luc3RhbGxfdGltZV9uc88AAAAygaKN9KxpbnN0YW50aWF0ZWTDq2NlbGxfaW5wdXRzjdkkNjUwYjZkZWUtZTc1My00MThjLWFmMWUtYTBkZGRhMDlkZjgxhKdjZWxsX2lk2SQ2NTBiNmRlZS1lNzUzLTQxOGMtYWYxZS1hMGRkZGEwOWRmODGkY29kZdnHbWQiIiJJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHdlIHByb3ZpZGUgZXhhbXBsZXMgb2YgYSB3aWRlciByYW5nZSBvZiBjb21wb25lbnQgdHlwZXMgdGhhdCBjYW4gYmUgYWRkZWQgdXNpbmcgaGVscGVyIGZ1bmN0aW9ucyB0byBnaXZlIGEgZmxhdm9yIG9mIHdoYXQgaXMgcG9zc2libGUgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gdjAuOSIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkNzY4M2RhYmMtNzcyZi00ZmRmLWE3ODQtNTQ5YzA1MDg0OTU4hKdjZWxsX2lk2SQ3NjgzZGFiYy03NzJmLTRmZGYtYTc4NC01NDljMDUwODQ5NTikY29kZdkrbWQiSW5pdGlhbGl6ZSBhbiBlbXB0eSBgRU5HSU5FRVJJTkdgIG1vZGVsIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkZmY0YjJmZmEtOWQyNS0xMWViLTA3ZDAtMjk3NTFlN2I1N2MyhKdjZWxsX2lk2SRmZjRiMmZmYS05ZDI1LTExZWItMDdkMC0yOTc1MWU3YjU3YzKkY29kZdoBAW1kIiIiCiMgQnVpbGRpbmcgRW5naW5lZXJpbmcgRGF0YSBNb2RlbHMgd2l0aCBIZWxwZXIgRnVuY3Rpb25zCgpJbiB0aGlzIG5vdGVib29rIHdlIHdpbGwgZGVtb25zdHJhdGUgYW4gZWFzeSB3YXkgdG8gc3RhcnQgYnVpbGRpbmcgbmV3IGRpc3RyaWJ1dGlvbiBuZXR3b3JrIG1vZGVscyBpbiB0aGUgZW5naW5lZXJpbmcgZm9ybWF0IHVzaW5nIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGFkZGVkIGluIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIHYwLjkKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQzMDQxN2NjZi1kMGI0LTQzZDUtOWNlYi01YjAwZWY5YzhhMTeEp2NlbGxfaWTZJDMwNDE3Y2NmLWQwYjQtNDNkNS05Y2ViLTViMDBlZjljOGExN6Rjb2Rl2VFiZWdpbgoJdXNpbmcgUG93ZXJNb2RlbHNEaXN0cmlidXRpb24KCXVzaW5nIExpbmVhckFsZ2VicmE6IGRpYWdtCgl1c2luZyBJcG9wdAplbmSobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDIwZDNkOTVkLTc4MTctNDVkZS04OWU5LWZmY2UwMjAyZDhjZoSnY2VsbF9pZNkkMjBkM2Q5NWQtNzgxNy00NWRlLTg5ZTktZmZjZTAyMDJkOGNmpGNvZGWnTW9kZWwoKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkMWNhOTY1N2ItODViNC00ZWE2LTkwMWMtZDM2ZTIzZTg0NDBmhKdjZWxsX2lk2SQxY2E5NjU3Yi04NWI0LTRlYTYtOTAxYy1kMzZlMjNlODQ0MGakY29kZdoCl2JlZ2luCgllbmcgPSBNb2RlbCgpCgoJYWRkX2J1cyEoZW5nLCAic291cmNlYnVzIjsgdGVybWluYWxzPVsxLDIsMyw0XSwgZ3JvdW5kZWQ9WzRdKQoJYWRkX2J1cyEoZW5nLCAicHJpbWFyeSI7IHRlcm1pbmFscz1bMSwyLDNdKQoJYWRkX2J1cyEoZW5nLCAibG9hZGJ1cyI7IHRlcm1pbmFscz1bMSwyLDMsNF0sIGdyb3VuZGVkPVs0XSkKCglhZGRfdm9sdGFnZV9zb3VyY2UhKGVuZywgInNvdXJjZSIsICJzb3VyY2VidXMiLCBbMSwyLDMsNF07IHZtPVsxLCAxLCAxLCAwXSkKCglhZGRfbGluZWNvZGUhKGVuZywgImRlZmF1bHQiLCBkaWFnbSgwPT5maWxsKDAuMDEsIDMpKSwgZGlhZ20oMD0+ZmlsbCgwLjIsIDMpKSkKCglhZGRfbGluZSEoZW5nLCAidHJ1bmsiLCAic291cmNlYnVzIiwgInByaW1hcnkiLCBbMSwyLDNdLCBbMSwyLDNdOyBsaW5lY29kZT0iZGVmYXVsdCIpCglhZGRfbGluZSEoZW5nLCAicHJpbWFyeSIsICJwcmltYXJ5IiwgImxvYWRidXMiLCBbMSwyLDNdLCBbMSwyLDNdOyBsaW5lY29kZT0iZGVmYXVsdCIpCgoJYWRkX2xvYWQhKGVuZywgImJhbGFuY2VkIiwgImxvYWRidXMiLCBbMSwyLDMsNF07IHBkX25vbT1bNSwgNSwgNV0sIHFkX25vbT1bMSwgMSwgMV0pCgoJYWRkX3ZiYXNlX2RlZmF1bHQhKGVuZywgInNvdXJjZWJ1cyIsIDEpCgoJZW5nCmVuZKhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkOTAxMGNjY2ItZTE3NC00ZGZmLWI5MzQtN2U3YmU1YTkzYTFkhKdjZWxsX2lk2SQ5MDEwY2NjYi1lMTc0LTRkZmYtYjkzNC03ZTdiZTVhOTNhMWSkY29kZdk2bWQiUnVubmluZyB0aGlzIGNhc2Ugd2l0aCBPUEYgZ2l2ZXMgdGhlIHJlc3VsdHMgYmVsb3ciqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQxODg1Y2UwZS1mZTFhLTRiOWItYjY1Mi03MmNiZWUyMTMzOWSEp2NlbGxfaWTZJDE4ODVjZTBlLWZlMWEtNGI5Yi1iNjUyLTcyY2JlZTIxMzM5ZKRjb2Rl2VhpcG9wdF9zb2x2ZXIgPSBvcHRpbWl6ZXJfd2l0aF9hdHRyaWJ1dGVzKElwb3B0Lk9wdGltaXplciwgInByaW50X2xldmVsIj0+MCwgInRvbCI9PjFlLTYpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ5NWVjZDY1OS00NWQwLTRiZDAtOWYzMi05Y2FmZDc4ZmIyYzeEp2NlbGxfaWTZJDk1ZWNkNjU5LTQ1ZDAtNGJkMC05ZjMyLTljYWZkNzhmYjJjN6Rjb2Rl2gIzYmVnaW4KCWVuZzIgPSBkZWVwY29weShlbmcpCgoJYWRkX2J1cyEoZW5nMiwgInR0YnVzIjsgdGVybWluYWxzPVsxLDIsMyw0XSwgZ3JvdW5kZWQ9WzRdKQoKCWFkZF90cmFuc2Zvcm1lciEoZW5nMiwgInR4MSIsICJzb3VyY2VidXMiLCAidHRidXMiLCBbMSwyLDMsNF0sIFsxLDIsMyw0XSkKCglhZGRfYnVzIShlbmcyLCAibG9hZGJ1czIiOyB0ZXJtaW5hbHM9WzEsMiwzLDRdLCBncm91bmRlZD1bNF0pCgoJYWRkX3N3aXRjaCEoZW5nMiwgImJyZWFrZXIiLCAidHRidXMiLCAibG9hZGJ1czIiLCBbMSwyLDNdLCBbMSwyLDNdKQoKCWFkZF9sb2FkIShlbmcyLCAidGxvYWQiLCAibG9hZGJ1czIiLCBbMSwyLDMsNF07IHBkX25vbT1bNSwgNSwgNV0sIHFkX25vbT1bMSwgMSwgMV0pCgoJYWRkX2dlbmVyYXRvciEoZW5nMiwgInNlY29uZGFyeSIsICJsb2FkYnVzMiIsIFsxLDIsMyw0XTsgY29zdF9wZ19wYXJhbWV0ZXJzPVswLjAsIDEuMiwgMF0pCgoJYWRkX3NodW50IShlbmcyLCAiY2FwIiwgImxvYWRidXMyIiwgWzEsMiwzLDRdOyBicz1kaWFnbSgwPT5maWxsKDEsIDMpKSkKCgoJZW5nMgplbmSobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJGYyNjU0ZDk1LTBjOGItNDUyNC1hZDFmLWYwZjEyYTM1YzU3MISnY2VsbF9pZNkkZjI2NTRkOTUtMGM4Yi00NTI0LWFkMWYtZjBmMTJhMzVjNTcwpGNvZGXZy21kIiIiCkZpcnN0LCB3ZSBuZWVkIGEgb3B0aW1pemVyLiBJbiB0aGlzIGNhc2Ugd2Ugd2lsbCB1c2UgSXBvcHQgYW5kIGluaXRpYWxpemUgaXQgd2l0aCBKdU1QJ3MgYG9wdGltaXplcl93aXRoX2F0dHJpYnV0ZXNgLCB3aGljaCB3ZSBoYXZlIGV4cG9ydGVkIGZyb20gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gYnkgZGVmYXVsdCBmb3IgdGhlIHVzZXIKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRmZGFlZDc4Mi01MjliLTQyNjctYmY3My1lMjZhNmEzZDQyOTeEp2NlbGxfaWTZJGZkYWVkNzgyLTUyOWItNDI2Ny1iZjczLWUyNmE2YTNkNDI5N6Rjb2Rl2TpyZXN1bHQyID0gc29sdmVfbWNfb3BmKGVuZzIsIEFDUFVQb3dlck1vZGVsLCBpcG9wdF9zb2x2ZXIpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQzZWQ0NDFiOC0yMDU1LTQxYjctYTRiNS0yOTEzMGQ1ODgwZWSEp2NlbGxfaWTZJDNlZDQ0MWI4LTIwNTUtNDFiNy1hNGI1LTI5MTMwZDU4ODBlZKRjb2Rl2ThyZXN1bHQgPSBzb2x2ZV9tY19vcGYoZW5nLCBBQ1BVUG93ZXJNb2RlbCwgaXBvcHRfc29sdmVyKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkZDRjZTQ5YmQtZjM4ZS00NGUwLWFhM2EtNGVlM2YwZjcwYmYxhKdjZWxsX2lk2SRkNGNlNDliZC1mMzhlLTQ0ZTAtYWEzYS00ZWUzZjBmNzBiZjGkY29kZdoDoG1kIiIiCkluIHRoaXMgYmxvY2sgd2UgYnVpbGQgYSB0aHJlZSBidXMgbmV0d29yaywgd2l0aCBuZXV0cmFscyBncm91bmRlZCBhdCB0aGUgc291cmNlIGFuZCBsb2Fkcy4KCldlIHN0YXJ0IHdpdGggYnVzZXMsIHdpdGggdGhlIHNvdXJjZWJ1cyBhbmQgbG9hZGJ1cyBoYXZpbmcgNCB0ZXJtaW5hbHMsIHdpdGggdGhlIGxhc3QgdGVybWluYWwgZ3JvdW5kZWQuCgpUaGVuIHdlIGFkZCBhIGdlbmVyYXRpb24gc291cmNlLCBpbiB0aGlzIGNhc2UgYSB2b2x0YWdlIHNvdXJjZSwgd2hpY2ggaXMgYFdZRWAgY29uZmlndXJlZCBieSBkZWZhdWx0LCBhbmQgdGhlcmVmb3JlIGV4cGVjdHMgdGhlIGxhc3QgY29uZHVjdG9yIHRvIGJlIGEgZ3JvdW5kZWQgbmV1dHJhbAoKV2UgYWRkIHR3byB0aHJlZSBwaGFzZSBsaW5lcyB0byBjb25uZWN0IHRoZSBidXNlcyBgc291cmNlYnVzYCwgYHByaW1hcnlgLCBhbmQgYGxvYWRidXNgLiBOb3RlIHRoYXQgbm9uZSBvZiB0aGUgbGluZXMgaGF2ZSBhIG5ldXRyYWwgY29uZHVjdG9yLgoKV2UgZmluYWxseSBhZGQgYSB0aHJlZS1waGFzZSBsb2FkIGEgdGhlIGBsb2FkYnVzYCBidXMsIGJ1dCBub3RlIGFnYWluIHRoYXQgdGhpcyBpcyBhIGBXWUVgIGNvbmZpZ3VyZWQgbG9hZCwgYW5kIGxpa2UgdGhlIHZvbHRhZ2Ugc291cmNlLCB0aGlzIGltcGxpZXMgdGhhdCB0aGUgbGFzdCBjb25kdWN0b3IgaXMgYSBncm91bmRlZCBuZXV0cmFsIGZvciB0aGUgcHVycG9zZXMgb2Yga3JvbiByZWR1Y3Rpb24gKHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGRlZmF1bHQgdW50aWwgZXhwbGljaXQgNC13aXJlIG1vZGVsaW5nIGlzIGFkZGVkIHRvIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uKQoKTGFzdGx5LCB3ZSBuZWVkIHRvIGRlZmluZSB0aGUgZGVmYXVsdCB2YmFzZSBvZiB0aGUgc3lzdGVtIGF0IHRoZSBgc291cmNlYnVzYAoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMOrbm90ZWJvb2tfaWTZJDJkNjAyMzQwLTU3ZDMtMTFlZS0xMjQ2LWViNzUwYjlkMzA3Oatpbl90ZW1wX2RpcsKobWV0YWRhdGGA"; window.pluto_preamble_html = undefined; diff --git a/dev/tutorials/Explicit Neutral Models.html b/dev/tutorials/Explicit Neutral Models.html index 7796e6e35..1f166efd8 100644 --- a/dev/tutorials/Explicit Neutral Models.html +++ b/dev/tutorials/Explicit Neutral Models.html @@ -352,10 +352,10 @@ Documenter.jl version 0.27.25 on - - Friday 4 August 2023 + + Wednesday 20 September 2023 - . Using Julia version 1.9.2. + . Using Julia version 1.9.3.

      diff --git a/dev/tutorials/Explicit Neutral Models.jl.html b/dev/tutorials/Explicit Neutral Models.jl.html index e2d77588d..abb820f79 100644 --- a/dev/tutorials/Explicit Neutral Models.jl.html +++ b/dev/tutorials/Explicit Neutral Models.jl.html @@ -3,11 +3,11 @@ diff --git a/dev/tutorials/Extension Tutorial.html b/dev/tutorials/Extension Tutorial.html index 201db2d34..91a92564e 100644 --- a/dev/tutorials/Extension Tutorial.html +++ b/dev/tutorials/Extension Tutorial.html @@ -352,10 +352,10 @@ Documenter.jl version 0.27.25 on - - Friday 4 August 2023 + + Wednesday 20 September 2023 - . Using Julia version 1.9.2. + . Using Julia version 1.9.3.

      diff --git a/dev/tutorials/Extension Tutorial.jl.html b/dev/tutorials/Extension Tutorial.jl.html index e31d11a3f..4211fc0a3 100644 --- a/dev/tutorials/Extension Tutorial.jl.html +++ b/dev/tutorials/Extension Tutorial.jl.html @@ -3,11 +3,11 @@ diff --git a/dev/tutorials/Native Power Flow.html b/dev/tutorials/Native Power Flow.html index 97899f678..565c92c70 100644 --- a/dev/tutorials/Native Power Flow.html +++ b/dev/tutorials/Native Power Flow.html @@ -352,10 +352,10 @@ Documenter.jl version 0.27.25 on - - Friday 4 August 2023 + + Wednesday 20 September 2023 - . Using Julia version 1.9.2. + . Using Julia version 1.9.3.

      diff --git a/dev/tutorials/Native Power Flow.jl.html b/dev/tutorials/Native Power Flow.jl.html index bac3b44f5..36c1d86ab 100644 --- a/dev/tutorials/Native Power Flow.jl.html +++ b/dev/tutorials/Native Power Flow.jl.html @@ -3,11 +3,11 @@ diff --git a/dev/tutorials/The Engineering Model.html b/dev/tutorials/The Engineering Model.html index c92bc212b..98c15aa89 100644 --- a/dev/tutorials/The Engineering Model.html +++ b/dev/tutorials/The Engineering Model.html @@ -352,10 +352,10 @@ Documenter.jl version 0.27.25 on - - Friday 4 August 2023 + + Wednesday 20 September 2023 - . Using Julia version 1.9.2. + . Using Julia version 1.9.3.

      diff --git a/dev/tutorials/The Engineering Model.jl.html b/dev/tutorials/The Engineering Model.jl.html index 3d1a5bf39..0b40901ba 100644 --- a/dev/tutorials/The Engineering Model.jl.html +++ b/dev/tutorials/The Engineering Model.jl.html @@ -7,7 +7,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.19.27"; -window.pluto_statefile = "data:;base64,3gARpWJvbmRzgKxjZWxsX3Jlc3VsdHPeAE3ZJDVhYjZjZDE2LTNjMjQtNGY2MC1iZGYyLTdmNDhiM2UyNTA4NYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZsDxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG1hbnVhbGx5IGNvbnZlcnQgdGhlIHNvbHV0aW9uIGJhY2sgdG8gdGhlIDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBmb3JtYXQsIHByb3ZpZGVkIHlvdSBoYXZlIHRoZSA8c3Ryb25nPm1hcDwvc3Ryb25nPjwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FHAqpQsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ1YWI2Y2QxNi0zYzI0LTRmNjAtYmRmMi03ZjQ4YjNlMjUwODW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABW6itXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkOTY3NTdkZGUtNTJiZS00OTMwLTliZGQtOTMwM2JiNzE1ZTU1iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmJKSrCJzb2x2ZV90aW1lIqp0ZXh0L3BsYWlukqkwLjAwMjMyMjKqdGV4dC9wbGFpbpKSqyJvcHRpbWl6ZXIiqnRleHQvcGxhaW6SpyJJcG9wdCKqdGV4dC9wbGFpbpKStCJ0ZXJtaW5hdGlvbl9zdGF0dXMiqnRleHQvcGxhaW6S2SlMT0NBTExZX1NPTFZFRDo6VGVybWluYXRpb25TdGF0dXNDb2RlID0gNKp0ZXh0L3BsYWlukpKtImR1YWxfc3RhdHVzIqp0ZXh0L3BsYWluktkkRkVBU0lCTEVfUE9JTlQ6OlJlc3VsdFN0YXR1c0NvZGUgPSAxqnRleHQvcGxhaW6Skq8icHJpbWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZJEZFQVNJQkxFX1BPSU5UOjpSZXN1bHRTdGF0dXNDb2RlID0gMap0ZXh0L3BsYWlukpKrIm9iamVjdGl2ZSKqdGV4dC9wbGFpbpKnMC4wMDQ5Nap0ZXh0L3BsYWlukpKqInNvbHV0aW9uIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KStSJtdWx0aWluZnJhc3RydWN0dXJlIqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlukpKuIm11bHRpbmV0d29yayKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKkIm53Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2Y2ZhOTZkZWQ0ZjE2Mzc42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvNjU5ODhmOTg3OWI0MmQ32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYmQ2YmNiNWY3NWQzZDdhMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU1NGIwMWYwYzU3ZWQ4OWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlMzBhZmFjZDQxMGY0NDYz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOTc4NWMwYzMyOWY0OTc1NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU4MTk3ZjJmY2IxYmVhZDDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjVkYTFmMzRlNjlkMzFhMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuIm9iamVjdGl2ZV9sYiKqdGV4dC9wbGFpbpKkLUluZqp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmMTZjYWVjMGRkZDUzNjE2pG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWWucmVzdWx0X21hdGhfbW6ybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FHCOWTsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ5Njc1N2RkZS01MmJlLTQ5MzAtOWJkZC05MzAzYmI3MTVlNTW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AtbyEtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMDI2MDg4ZjctYjFkZi00NjQ3LWFkODEtNTJjNmM4ZWE3OTQ0iqZxdWV1ZWTCpGxvZ3OTiKRsaW5l/6Ntc2eS2UtDaXJjdWl0IGhhcyBiZWVuIHJlc2V0IHdpdGggdGhlICdjbGVhcicgb24gbGluZSAxIGluICdjYXNlM191bmJhbGFuY2VkLmRzcyeqdGV4dC9wbGFpbqdjZWxsX2lk2SQwMjYwODhmNy1iMWRmLTQ2NDctYWQ4MS01MmM2YzhlYTc5NDSma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fZDI0YWVjMDCkZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlbQ29tbWFuZCAnY2FsY3ZvbHRhZ2ViYXNlcycgb24gbGluZSAzNSBpbiAnY2FzZTNfdW5iYWxhbmNlZC5kc3MnIGlzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nLqp0ZXh0L3BsYWlup2NlbGxfaWTZJDAyNjA4OGY3LWIxZGYtNDY0Ny1hZDgxLTUyYzZjOGVhNzk0NKZrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl83ODkyMTQ5NqRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2VBDb21tYW5kICdzb2x2ZScgb24gbGluZSAzNyBpbiAnY2FzZTNfdW5iYWxhbmNlZC5kc3MnIGlzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nLqp0ZXh0L3BsYWlup2NlbGxfaWTZJDAyNjA4OGY3LWIxZGYtNDY0Ny1hZDgxLTUyYzZjOGVhNzk0NKZrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl83ODkyMTQ5NqRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZvp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzm5KSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNhNTAwOWJhMTRlN2IzNTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK8zOTljNDFmYmRmMTYyNznZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGE4ZThhOTQyODg4ZjNkNWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGM0YTI3MWJmYTcyMTQ4YjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjhiM2ZiYjI4ODI1ZDMwYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5MzdiYWNiOTQ3MjVkZjhk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiOWM5ZDJhOWE4ZmUzYzA22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU3NDgzYThmZTNmYjAxYmPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDY1YjFlMzIxNjk0MDEwM2HZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhZmYzYzFkMjk1NTIxYmYw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGQzNTMwZmNkNDZkNDlmNTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4NDQxOWU1NWJkZWRkMDJi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDkyNDVlMTBkNTlmNjQ0YWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGY2ZTM4NDU3MGI5ZmRiNTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0MGQzODA3YzM3MTE5MDNk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGMwMDg4YTRlYTAzZjhkOTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjVhY2RmNTQwYjg4MzhmMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmIm5hbWUiqnRleHQvcGxhaW6SriIzYnVzX2V4YW1wbGUiqnRleHQvcGxhaW6Skqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKvInNiYXNlX2RlZmF1bHQiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6SkrAidmJhc2VzX2RlZmF1bHQiqnRleHQvcGxhaW6ShaZwcmVmaXiyRGljdHtTdHJpbmcsIFJlYWx9qGVsZW1lbnRzkZKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SpzAuMjMwOTSqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGQ4ZGQ4YzMzYjRhOTZiMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpK2InZvbHRhZ2Vfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKStCJwb3dlcl9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpKwImJhc2VfZnJlcXVlbmN5Iqp0ZXh0L3BsYWlukqQ1MC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGMwZGVmNDMyMjFlZDM3NmXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmaWxlcyKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHORkgGS2SsiLi4vdGVzdC9kYXRhL29wZW5kc3MvY2FzZTNfdW5iYWxhbmNlZC5kc3MiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDljYmU3YzVlZjAzYjBkOGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJkc3Nfb3B0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkq4idm9sdGFnZWJhc2VzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORkgGSozAuNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxMjVkZjE1YWRiNzk0NDQ32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkrEiZGVmYXVsdGJhc2VmcmVxIqp0ZXh0L3BsYWlukqQ1MC4wqnRleHQvcGxhaW6SkqsidG9sZXJhbmNlIqp0ZXh0L3BsYWlukqYxLjBlLTaqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGQ0MTJlZjViYThhNjgyNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKwInZvbHRhZ2Vfc291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqCJzb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKwInZzb3VyY2Uuc291cmNlIqp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktnVNMOXNCBNYXRyaXh7RmxvYXQ2NH06CiA0LjI3NjkxZS04ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05CiAzLjk2MzQyZS05ICA0LjI3NjkxZS04ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05CiAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICA0LjI3NjkxZS04ICAzLjk2MzQyZS05CiAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICA0LjI3NjkxZS04qnRleHQvcGxhaW6SkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOTdhNzg1MmNjZjk3NDZjNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1MjFkM2NmZjQ0ODIyNTZl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQidm0iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMWM2NmRlOGQ1OTE1ZmEyZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDljZWMyNTE2ZDc5YTMzYTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGQ4ZmNhYWZiOGUxZmU3M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKmInF1YWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjE5N2YyNjVlMWY3ZjA5MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SqyJsaW5lLnF1YWQiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcidF9idXMiqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDVmYjhjYzk5NWUzYTNiNmXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJvaGxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmVhNTkyYzU3YzEyZTQyYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlukpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKtImxpbmUub2hsaW5lIqp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnInRfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3YWM2OTg5NDE0NTRlYzVi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU3ZWU5NGE1NmVhNTIyNTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJkYXRhX21vZGVsIqp0ZXh0L3BsYWlukrpFTkdJTkVFUklORzo6RGF0YU1vZGVsID0gMKp0ZXh0L3BsYWlukpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKkImwyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYWNmYWJmODM3OGFhOTVkZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInBkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2NDMzMDJlOWZkZDI2Nzcw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSryJjb25maWd1cmF0aW9uIqp0ZXh0L3BsYWlukrNXWUU6OkNvbm5Db25maWcgPSAwqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYWUzN2RmYThmYjI0Y2RiNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkImwzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmMxYzM4NGVmNmVkNGMzYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInBkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkZGIwMjcyMmYwY2M2Nzc42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSryJjb25maWd1cmF0aW9uIqp0ZXh0L3BsYWlukrNXWUU6OkNvbm5Db25maWcgPSAwqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDViODliNjQyOTJmMjEwMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkImwxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjdjMDAxNzRlZDQwNjVmZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInBkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkOGU5YTQ5MGU3M2ZkMDdj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSryJjb25maWd1cmF0aW9uIqp0ZXh0L3BsYWlukrNXWUU6OkNvbm5Db25maWcgPSAwqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMmIxMWQwNDJmM2U0MGRiYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzZWNiYzQxNTljNGM4YmFm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoibGluZWNvZGUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKoIjU1Nm1jbSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqYiYl9mciKqdGV4dC9wbGFpbpLZYDPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMjUuNDY0OCAgLTAuMCAgICAgLTAuMAogLTAuMCAgICAgMjUuNDY0OCAgLTAuMAogLTAuMCAgICAgLTAuMCAgICAgMjUuNDY0OKp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktlKM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjEgICAwLjA0ICAwLjA0CiAwLjA0ICAwLjEgICAwLjA0CiAwLjA0ICAwLjA0ICAwLjGqdGV4dC9wbGFpbpKSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkYjA0NDVjZTU2MzhkYjVl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMDU4MyAgMC4wMjMzICAwLjAyMzMKIDAuMDIzMyAgMC4wNTgzICAwLjAyMzMKIDAuMDIzMyAgMC4wMjMzICAwLjA1ODOqdGV4dC9wbGFpbpKSpiJiX3RvIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqYiZ190byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDE0NTViYzE5NDhkOWM3NzPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSI0LzBxdWFkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpiJiX2ZyIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqQicnMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMTE2NyAgMC4wNDY3ICAwLjA0NjcKIDAuMDQ2NyAgMC4xMTY3ICAwLjA0NjcKIDAuMDQ2NyAgMC4wNDY3ICAwLjExNjeqdGV4dC9wbGFpbpKSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzNjlkNTZhOThjMDJlZGZm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMDY2NyAgMC4wMjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wNjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wMjY3ICAwLjA2NjeqdGV4dC9wbGFpbpKSpiJiX3RvIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqYiZ190byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkr2FjMDMxZmRiNDQ4YTY0MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiOWZjMzhiNjEyYWU4NzY22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNkZGQyMzY4MWJlOTgxZjCkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZadlbmdfYWxssmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRMFrqp7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMDI2MDg4ZjctYjFkZi00NjQ3LWFkODEtNTJjNmM4ZWE3OTQ0uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOB04Mv7VwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGYwNmI5NTkyLTBlMTYtNGZkMS1iZjZlLTYyNGVjMGNkYjhmYoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaBEM8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+QWdhaW4sIHdlIHNlZSBjb21wb25lbnRzIGlkZW50aWZpZWQgYnkgdGhlaXIgT3BlbkRTUyBuYW1lcy4gQSA8Y29kZT4mcXVvdDtsaW5lJnF1b3Q7PC9jb2RlPiBpcyBhbiBlZGdlIG9iamVjdCwgd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6PC9wPgo8dWw+CjxsaT48cD48Y29kZT4mcXVvdDtmX2J1cyZxdW90OzwvY29kZT48L3A+CjwvbGk+CjxsaT48cD48Y29kZT4mcXVvdDt0X2J1cyZxdW90OzwvY29kZT48L3A+CjwvbGk+CjxsaT48cD48Y29kZT4mcXVvdDtmX2Nvbm5lY3Rpb25zJnF1b3Q7PC9jb2RlPiAtIGxpc3Qgb2YgdGVybWluYWxzIHRvIHdoaWNoIHRoZSBsaW5lIGlzIGNvbm5lY3RlZCBvbiB0aGUgZnJvbS1zaWRlPC9wPgo8L2xpPgo8bGk+PHA+PGNvZGU+JnF1b3Q7dF9jb25uZWN0aW9ucyZxdW90OzwvY29kZT4gLSBsaXN0IG9mIHRlcm1pbmFscyB0byB3aGljaCB0aGUgbGluZSBpcyBjb25uZWN0ZWQgb24gdGhlIHRvLXNpZGU8L3A+CjwvbGk+CjwvdWw+CjxwPkhlcmUgd2UgYXJlIGFsc28gaW50cm9kdWNlZCB0byB0d28gaW1wb3J0YW50IGNvbmNlcHRzLCB0aGUgPGNvZGU+JnF1b3Q7c291cmNlX2lkJnF1b3Q7PC9jb2RlPiwgd2hpY2ggaXMgYW4gZWFzeSB3YXkgdG8gaWRlbnRpZnkgZnJvbSB3aGVyZSBhbiBvYmplY3Qgb3JpZ2luYXRlcyBpbiB0aGUgZHNzIGZpbGUsIGFuZCBhIGRhdGEgdHlwZSBlbGVtZW50LCBwb2ludGVkIHRvIGJ5IDxjb2RlPiZxdW90O2xpbmVjb2RlJnF1b3Q7PC9jb2RlPiBpbiB0aGlzIGNhc2UuPC9wPgo8cD5BIGRhdGEgdHlwZSBlbGVtZW50IGlzIGFuIGVsZW1lbnQgdGhhdCBkb2VzIG5vdCByZXByZXNlbnQgYSByZWFsIGVuZ2luZWVyaW5nIG9iamVjdCwgYnV0IG9ubHkgY29udGFpbnMgZGF0YSB0aGF0IG9uZSBvZiB0aG9zZSByZWFsIG9iamVjdHMgY2FuIHJlZmVyIHRvLCBpbiB0aGlzIGNhc2UgYSBsaW5lY29kZSwgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gbGlrZSBsaW5lIHJlc2lzdGFuY2UvcmVhY3RhbmNlIGFuZCBjb25kdWN0YW5jZS9zdXNjZXB0YW5jZS48L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRMEDTArBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZjA2Yjk1OTItMGUxNi00ZmQxLWJmNmUtNjI0ZWMwY2RiOGZiuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAyUubVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGIxZTU1MjYzLTljNzYtNDNiMi1iOTFjLTExNWIyZjA4MDE4MoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaAXE8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+QW5vdGhlciB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbiBpbmNsdWRlZCBpbiBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiBpcyB0aGUgPGNvZGU+YXBwbHlfdm9sdGFnZV9ib3VuZHMmIzMzOzwvY29kZT4gZnVuY3Rpb24sIHdoaWNoIHdpbGwgYXBwbHkgc29tZSB2b2x0YWdlIGJvdW5kcyBpbiBTSSB1bml0cywgZ2l2ZW4gc29tZSBwZXJjZW50IHZhbHVlLCA8ZW0+ZS5nLjwvZW0+IGlmIHdlIHdhbnQgdGhlIGxvd2VyIGJvdW5kIG9uIHZvbHRhZ2UgdG8gYmUgPGNvZGU+MC45PC9jb2RlPiBhbmQgdXBwZXIgYm91bmQgPGNvZGU+MS4xPC9jb2RlPiBhZnRlciBwZXItdW5pdCBjb252ZXJzaW9uPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUZzbyawcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGIxZTU1MjYzLTljNzYtNDNiMi1iOTFjLTExNWIyZjA4MDE4MrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAFtbq1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ0NjAzYmM1Ni1jNDAyLTQ4YWYtOTcxNS0wNzIyZTQyZDkwZjeKpnF1ZXVlZMKkbG9nc5GIpGxpbmX/o21zZ5LZS0NvbnZlcnRpbmcgRU5HSU5FRVJJTkcgZGF0YSBtb2RlbCB0byBNQVRIRU1BVElDQUwgZmlyc3QgdG8gYnVpbGQgSnVNUCBtb2RlbKp0ZXh0L3BsYWlup2NlbGxfaWTZJDQ2MDNiYzU2LWM0MDItNDhhZi05NzE1LTA3MjJlNDJkOTBmN6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl8zOTM0MmNmZaRmaWxl2U0vaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9wcm9iL2NvbW1vbi5qbKVncm91cKZjb21tb26lbGV2ZWykSW5mb6dydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeK5ORkFVUG93ZXJNb2RlbKhlbGVtZW50c5qSpW1vZGVsktoBAEEgSnVNUCBNb2RlbApNaW5pbWl6YXRpb24gcHJvYmxlbSB3aXRoOgpWYXJpYWJsZXM6IDEyCk9iamVjdGl2ZSBmdW5jdGlvbiB0eXBlOiBKdU1QLkFmZkV4cHIKYEp1TVAuQWZmRXhwcmAtaW4tYE1hdGhPcHRJbnRlcmZhY2UuRXF1YWxUb3tGbG9hdDY0fWA6IDEyIGNvbnN0cmFpbnRzCk1vZGVsIG1vZGU6IEFVVE9NQVRJQwpDYWNoaW5nT3B0aW1pemVyIHN0YXRlOiBOT19PUFRJTUlaRVIKU29sdmVyIG5hbWU6IE5vIG9wdGltaXplciBhdHRhY2hlZC6qdGV4dC9wbGFpbpKkZGF0YZKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5uSkrEiaXNfa3Jvbl9yZWR1Y2VkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6Skq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5OSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRiNjQzMmVlZDA3OTRmYmTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqMiNCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvOWI1NGIwYjRkMWE3YTNi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTI1ZjFkZjlkZTZiZDg3ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDE1YmQ1Njc1NjUyNjI5OWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlYWJhZWIwMTBmMjE4YzFm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDhmM2Y4NGFiNTgyYmRlMzHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJuYW1lIqp0ZXh0L3BsYWlukq4iM2J1c19leGFtcGxlIqp0ZXh0L3BsYWlukpKlIm1hcCKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGI3MzA0YmU5YTNmNGUwOTKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksGVjOWY4OTQ0ZTJlNGM3Mzepa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA3ZThkZTBiNzI3NWU2NjM0qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNmVmYjJmYzE4YmMxODkzM6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI4OTNmOGRiOWI1YjY4YWGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlksDYxZTRjZmJhMTgxZDFiODapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyNDljZjY3MjM0NjI2NGU5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTQ0MDBkYmRiYTA3NjJjNKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk3NWFmY2MzOTdkZmE5Njepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmE4OGM5NjFlZGJhNzA0NalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzUxNjQ0OWZhN2ZhMmI1MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDdhNmNlOWYyNmQxYzVjNDKpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTBlYTk3MWEwMzM3NDRlM6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvNzRiZjVhYmVkMTcwY2Y1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk0ODU1MjQ0ODg5NGMwN2Wpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhYmNjN2NiYWUwYzNiYmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNDI3OTY0MGE5MDNkM2YxZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYzk0YTIzY2I2ZTlhYjViZalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTljYmU1MjkwZDQ3ZGI1Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvZmUzMDhkOWZmMmRjMjBhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzQ5ZTlmZjhiZWE3YTY4Y6lrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlksGUzNWJkZDhiZGQ3Yjc1Y2Wmc2NoZW1hwNkiYXBwbGljYXRpb24vdm5kLnBsdXRvLnRhYmxlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkq8ic2Jhc2VfZGVmYXVsdCKqdGV4dC9wbGFpbpKlNTAwLjCqdGV4dC9wbGFpbpKSsCJ2YmFzZXNfZGVmYXVsdCKqdGV4dC9wbGFpbpKFpnByZWZpeLJEaWN0e1N0cmluZywgUmVhbH2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc2ZjE1ZDhkMjc3ZmI4NjnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6Skqcic2Jhc2UiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNTAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2NmZkYmQ2MTA3YTgyNGUx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhYzA3MzlkNjkxYmVhOTI32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDg3ODFiNTk0YzhiMTE4ODDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJicmFuY2giqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDMxMDYxMDQwOWJiNzcwNDXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxZGU2OWU0MTc1Nzk3NGQ32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjMwYmVjZGYxZmM3ZWYzYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5OGIxNzA3YTZiMTA0MmFm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkic3RvcmFnZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5CkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDlkMzAyNTE1NzQwZDhlMjnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiYzZmYzM5YjMyOGM0Mzgw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSp3NldHRpbmeShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOQpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0MWUyMTUzNDNkNjVjNjkw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSqHNvbHV0aW9ukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmI1ZTAyNzQxMDc5NzViM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kqNyZWaShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHORkpKjOml0qnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHORkpKkOnBtZKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5NTAxNjE5Y2UzYTRkNmQ42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGE1NTRhMzYyODQ0YWMzNGLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjkzYzgxYTc4YzFhN2YxZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kqN2YXKShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHOSkpKkOmRlcKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmNjZmI3Njk5MzQyYmExZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjOml0qnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHORkpKkOnBtZKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0OTk0OWFjOGNjY2M5M2M52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDg2NWNjOWJkNDY1Y2NkNWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTAwMzFkOTA1OWE5ODE1ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kqNjb26ShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHOSkpKkOmRlcKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGI5NjIyZjM1MGQwNTFkZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjOml0qnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHORkpKkOnBtZKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1MmFkOTQ5NjVlZmY3MzE02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGUyYTI0NjhjZmVlOGUzODPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2VhZTZhMTA1NzAwZmNjMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kqNzb2yShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHOSkpKkOmRlcKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGM5M2FmZmZkMmNjNjIzMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjOml0qnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHORkpKkOnBtZKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0NWM0YWIzYWM1MmQ0NmUx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGE4NTBmOGYzOGE0NzIxYWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjA1MmM3ZTI3YTRhYTc5Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kqhzb2xfcHJvY5KFpnByZWZpeLFEaWN0e1N5bWJvbCwgQW55fahlbGVtZW50c5KSkqQ6ZGVwqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHOQpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3ZDM0Yzk2N2I0MGUzMmJl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqM6aXSqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N5bWJvbCwgQW55fahlbGVtZW50c5GSkqQ6cG1kqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk1NzU1MGM2ZTRhN2M2YzjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYWZkMjI1MDc5OTQ4ZWNhMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2YjYxOGUzNjEwNjdkYjU32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSo2V4dJKFpnByZWZpeLFEaWN0e1N5bWJvbCwgQW55fahlbGVtZW50c5CkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGMyNDM0NjlkM2UyODE1ZmPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpnN0cnVjdKxwcmVmaXhfc2hvcnSuTkZBVVBvd2VyTW9kZWyob2JqZWN0aWSwZDI0ZmU3YzNkNjZhNmM5MaRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlpnBtX2VuZ7JsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUgJTDCwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDQ2MDNiYzU2LWM0MDItNDhhZi05NzE1LTA3MjJlNDJkOTBmN7lkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzrG6ZXu1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ1OGY4MDY1MS00YTQ0LTQ3ODEtYTZjMC1hMDU2ZWM3NmIwN2WKpnF1ZXVlZMKkbG9nc5OIpGxpbmX/o21zZ5LZSUNpcmN1aXQgaGFzIGJlZW4gcmVzZXQgd2l0aCB0aGUgJ2NsZWFyJyBvbiBsaW5lIDEgaW4gJ3V0X3RyYW5zXzJ3X3l5LmRzcyeqdGV4dC9wbGFpbqdjZWxsX2lk2SQ1OGY4MDY1MS00YTQ0LTQ3ODEtYTZjMC1hMDU2ZWM3NmIwN2Wma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fZDI0YWVjMDCkZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlZQ29tbWFuZCAnY2FsY3ZvbHRhZ2ViYXNlcycgb24gbGluZSAzNSBpbiAndXRfdHJhbnNfMndfeXkuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SQ1OGY4MDY1MS00YTQ0LTQ3ODEtYTZjMC1hMDU2ZWM3NmIwN2Wma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlOQ29tbWFuZCAnc29sdmUnIG9uIGxpbmUgMzggaW4gJ3V0X3RyYW5zXzJ3X3l5LmRzcycgaXMgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcuqnRleHQvcGxhaW6nY2VsbF9pZNkkNThmODA2NTEtNGE0NC00NzgxLWE2YzAtYTA1NmVjNzZiMDdlpmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzc4OTIxNDk2pGZpbGXZUi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3NfcGFyc2UuamylZ3JvdXCpZHNzX3BhcnNlpWxldmVspEluZm+ncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOakpKwInZvbHRhZ2Vfc291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqCJzb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKwInZzb3VyY2Uuc291cmNlIqp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktllNMOXNCBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbpKSpCJ2YSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4MWNjOTFmMDlmNzRmODQ02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQ0YTNiNWQyNDUyNDM2ZjLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ2bSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0MmYzYmZlNzIxYzM1ZmI22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWY0NDFhOWFmNWZhMGQzNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzNDQ1NDRmYjlmZmM3MzE32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibmFtZSKqdGV4dC9wbGFpbpKqInV0X3RyYW5zIqp0ZXh0L3BsYWlukpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKnImxpbmUyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhZTdlOGRjODk1NTIyNjRi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlZDkwNzFjODEzNzVlMTEx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTdhYmZkMGY4N2FkMTQxY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxpbmUxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxNTRjMmQyNmUyZWQyZDNl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2Uszw5czIE1hdHJpeHtGbG9hdDY0fToKICAwLjAgIC0wLjAgIC0wLjAKIC0wLjAgICAwLjAgIC0wLjAKIC0wLjAgIC0wLjAgICAwLjCqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhMWY1ODJmOWZjM2ZkMDlh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYmZjMjFkNzFiN2Q5MTA0NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiYmY2YmYyMDMwNDI5MjJl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5SSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6SBJKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmN2ZhYmNjMThjZWFmNThj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKvInNiYXNlX2RlZmF1bHQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4skRpY3R7U3RyaW5nLCBSZWFsfahlbGVtZW50c5GSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqc2LjM1MDg1qnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDIwNThiNDVjNzkwMDQxODnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNjAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmNjQzZGMzZWE0ZTc5MWZh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZmlsZXMiqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzkZIBktkpIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL3V0X3RyYW5zXzJ3X3l5LmRzcyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwY2ZiYzE4N2YzYmYwM2VjZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKtInRyYW5zZm9ybWVyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpSJ0eDEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKqInBvbGFyaXR5Iqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4N2M1ZjE4NDQ3ZjkwNmVm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic21fbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFkODAxZjE3ZjM2Y2QyMTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ0bV9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI1MTU1MjkxMDcwYmE5YjnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeK1WZWN0b3J7SW50NjR9qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK9lMTljOGUwMzkxMzExMGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ0bV9zZXQiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3ZWQ3ZWQxZTFhOWFhODM02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkidG1fc3RlcCKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDI2YjUwZTZmNmE0YjllMWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0NzUwMGJlODQ3MGNjN2Q42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY5NGViN2M0MGIwYWE5YmLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsb2FkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSpyJsb2FkMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqwibG9hZC5sb2FkMyKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzZhYTE2ODQyYTM2ODg1YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxYWQ4ZDFiNDZlMDc4NTg12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidm1fbm9tIqp0ZXh0L3BsYWlukqU2LjUzMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDVhYWNhMzFmNmRhZjVlZmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJsb2FkNiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqwibG9hZC5sb2FkNiKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZmM0YWE4OTc5NTc0MzA1OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxYmVlY2VhNTcwNDlhNmZi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidm1fbm9tIqp0ZXh0L3BsYWlukqMyLjOqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4YWQ2MWRlY2NlMWJhM2I42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibG9hZDIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDIiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRkNjQzZmEzNTc2ZDM1NTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNmRiMTJjNTMxM2QxNWQ3OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKlNi41MzGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5OTdhN2NmOGViNjQwMTAw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibG9hZDUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDUiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkr2QzOTAzODZiNzFmY2MyN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzZTUxY2E3MDM1MTI3ZjM42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidm1fbm9tIqp0ZXh0L3BsYWlukqMyLjOqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiYzE0ZWI2ODMwOTk3YzJl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibG9hZDEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDEiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGVjY2U2OWY3NzY0OTc4ZmTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDk1OTQ5NDQ2YjIwYWZiNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKlNi41MzGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxNjhmYWY3ZGU1OGM1ZWQw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibG9hZDQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDQiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDE5MjgzNGViNGVmYjMyMTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjU4Y2M2YThhMzg3MTM3YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKjMi4zqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzQ2M2IxZDRhMTM1MDNlZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhODA3MTVkNDg4N2ExNDNm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlJKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxYWM2MWQ0MzUyMmEzZDNj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDM5MzlhYzVhOGYxMTVhMzbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFlMTJmMWY4ZjM4ZmI2MzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0ZTkxMjI2YmI5YzBlMjQw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDZjNzMyMmJiOTEzODI3NGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGExNmM3YTcyNWZkMDljNDDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjcyOWFlYzQ4YjRhZmNkN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjRmYzUwODNhMTYyODBkNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGU5MzExNTI4NmY1OGVjMWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjliYTVlMTM4YmM1NTczZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDZkZWMyNTA0NzhjZWZmNjnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYjNjODllOGE4NDg3ZmRmY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTkzNzBkMDAwOWQ3ZjEyNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDViM2E5OGQxNTM2YzAyMGLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2E1NjE0ZDBjY2ZjZDlkN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDZlN2VhYjNiNzlmNWEyNDfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMzMyYTI1ZDg4MzRiZDMyYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjA0OGMyMjQ3N2ZiN2E4NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGE1ZDFjOTcwZTg5YmUzNGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZWRlNTRmYjcxNDFiNTljYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlNDZkMjJhMjgxMmMyM2Rh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwiZGF0YV9tb2RlbCKqdGV4dC9wbGFpbpK6RU5HSU5FRVJJTkc6OkRhdGFNb2RlbCA9IDCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjMzODg5ZDQ5ZWQwZjZmNqRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUZzC1awcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDU4ZjgwNjUxLTRhNDQtNDc4MS1hNmMwLWEwNTZlYzc2YjA3ZblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgaeTju1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ5NmE2NWJkYy03ZWU0LTRlOWYtOTRmNS04YTgzZjc1MTJmZTmKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52co8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+QWx0ZXJuYXRpdmVseSwgdGhlIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4gbW9kZWwgY2FuIGJlIHJldHVybmVkIGRpcmVjdGx5IGZyb20gdGhlIDxjb2RlPnBhcnNlX2ZpbGU8L2NvZGU+IGNvbW1hbmQgd2l0aCB0aGUgPGNvZGU+ZGF0YV9tb2RlbDwvY29kZT4ga2V5d29yZCBhcmd1bWVudDwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FG3/NnsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ5NmE2NWJkYy03ZWU0LTRlOWYtOTRmNS04YTgzZjc1MTJmZTm5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABECutXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkYTczNDhmYzgtYjI1ZS00ZWNmLTlmZTYtMzE0MDM2YjdkZjljiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRz3AASkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOTkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5MjIwNjU1NWEzOTQxY2Qx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4idGltZV9lbGFwc2VkIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKjIjQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKsInZtX3BhaXJfbGIiqnRleHQvcGxhaW6ShaZwcmVmaXi1VHVwbGV7QW55LCBBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZTE1MGExNzM0MGYxMGJmN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpK3InZvbHRhZ2Vfc291cmNlLnNvdXJjZSKqdGV4dC9wbGFpbpKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKRCb29sqGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzYjQ0OGVlNWFiYzIyZjlm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYidm1pbiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlYTEwNDFmOGQzNzJmMDE22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwidm1fcGFpcl91YiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlNWRjNjEyMDRhMDg5MDY52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciYnVzX2kiqnRleHQvcGxhaW6SoTSqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4MWU5YWQ1YjgzMTRiMGYx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqwidm1fcGFpcl9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiZTE4NjJmN2ZiOGY1NzYx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXikQm9vbKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDFlNWExMTU1OTA0NzA5Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKsInZtX3BhaXJfdWIiqnRleHQvcGxhaW6ShaZwcmVmaXi1VHVwbGV7QW55LCBBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSuZDAwMDA0MDBmZWQ3ZDTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJidXNfaSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukpKqImJ1c190eXBlIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNWZlNTM4ZTZiZjBlYWU0Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKsInZtX3BhaXJfbGIiqnRleHQvcGxhaW6ShaZwcmVmaXi1VHVwbGV7QW55LCBBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOGVjYzgzYTQxY2Y3YzdmMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pEJvb2yoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDI1M2JmNjM4N2U5ZWJmZjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJ2bV9wYWlyX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4tVR1cGxle0FueSwgQW55LCBSZWFsfahlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRmNzhhZjMyYmU1MDFiODLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJidXNfaSKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SkqoiYnVzX3R5cGUiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK82YmY4NGY5OGNjMmNhMDfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSrCJ2bV9wYWlyX2xiIqp0ZXh0L3BsYWlukoWmcHJlZml4tVR1cGxle0FueSwgQW55LCBSZWFsfahlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFhYTc1MjEyYjM5ZjZkNjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKRCb29sqGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1OGZlODNhY2U2MjNiOTQ52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwidm1fcGFpcl91YiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjZGJhZWI1MTE5YzY5NzNm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciYnVzX2kiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSqiJidXNfdHlwZSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzhiYjVlOGY5MGNjMjAwZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkNjA3ZTk2Y2FiNTI5Njcy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibmFtZSKqdGV4dC9wbGFpbpKuIjNidXNfZXhhbXBsZSKqdGV4dC9wbGFpbpKSpSJtYXAiqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiNzMwNGJlOWEzZjRlMDkyqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBlYzlmODk0NGUyZTRjNzM3qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2U4ZGUwYjcyNzVlNjYzNKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDZlZmIyZmMxOGJjMTg5MzOpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyODkzZjhkYjliNWI2OGFhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIEk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2MWU0Y2ZiYTE4MWQxYjg2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjQ5Y2Y2NzIzNDYyNjRlOalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksDE0NDAwZGJkYmEwNzYyYzSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NzVhZmNjMzk3ZGZhOTY3qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhODhjOTYxZWRiYTcwNDWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK81MTY0NDlmYTdmYTJiNTGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIHk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3YTZjZTlmMjZkMWM1YzQyqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGEwZWE5NzFhMDMzNzQ0ZTOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgiTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzc0YmY1YWJlZDE3MGNmNalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NDg1NTI0NDg4OTRjMDdlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYWJjYzdjYmFlMGMzYmJkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDQyNzk2NDBhOTAzZDNmMWWpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlksGNjODBhYzg2YjQ1NmM4YTSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGEwMWQwZmU0YmY3YmJkMWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkr2ZlMzA4ZDlmZjJkYzIwYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM0OWU5ZmY4YmVhN2E2OGOpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLA4MjFhMTNiZTM5NmQ1ZjFipnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKvInNiYXNlX2RlZmF1bHQiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6SkrAidmJhc2VzX2RlZmF1bHQiqnRleHQvcGxhaW6ShaZwcmVmaXiyRGljdHtTdHJpbmcsIFJlYWx9qGVsZW1lbnRzkZKSoyIyIqp0ZXh0L3BsYWlukqcwLjIzMDk0qnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk2MGMzYjQ3MmI2YjdlZDjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6Skqcic2Jhc2UiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNTAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK9kYmQ4ZWZkOWFiZDllYWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKkInBnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDQ3YjJmOThlOGViOTk4YjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJtb2RlbCKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzMzgyMjNkOTY2NTc4NWM22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2h1dGRvd24iqnRleHQvcGxhaW6SozAuMKp0ZXh0L3BsYWlukpKpInN0YXJ0dXAiqnRleHQvcGxhaW6SozAuMKp0ZXh0L3BsYWlukpKvImNvbmZpZ3VyYXRpb24iqnRleHQvcGxhaW6Ss1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0OTk1ZGUzYTkyODA2ZmZj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY2MjgzMjE0Y2I5MzJjYzDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJicmFuY2giqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKmImJyX3IiqnRleHQvcGxhaW6S2W4zw5czIE1hdHJpeHtGbG9hdDY0fToKIDEuMDk0MDYgICAwLjQzNzgxMiAgMC40Mzc4MTIKIDAuNDM3ODEyICAxLjA5NDA2ICAgMC40Mzc4MTIKIDAuNDM3ODEyICAwLjQzNzgxMiAgMS4wOTQwNqp0ZXh0L3BsYWlukpKoInJhdGVfYSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlOWY5NmY1YjUzNDcwZjlm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iZl9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNmVjMjZkZjQ1Y2Q4MzMyM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInJhdGVfYiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5ZmJlNTM5ZTNlZDBjOWM22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibmFtZSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW6SkqYiYnJfeCKqdGV4dC9wbGFpbpLZbzPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC42MjUzMTIgIDAuMjUwMzEyICAwLjI1MDMxMgogMC4yNTAzMTIgIDAuNjI1MzEyICAwLjI1MDMxMgogMC4yNTAzMTIgIDAuMjUwMzEyICAwLjYyNTMxMqp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDE0NDhhMjc4MjdlNmQxZmPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpiJicl9yIqp0ZXh0L3BsYWluktlbM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjkzNzUgIDAuMzc1ICAgMC4zNzUKIDAuMzc1ICAgMC45Mzc1ICAwLjM3NQogMC4zNzUgICAwLjM3NSAgIDAuOTM3Nap0ZXh0L3BsYWlukpKoInJhdGVfYSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzMTI5NTNlNDYxYTZjMGQ42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iZl9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYWMwODIyM2ZkNzYzOTNjOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInJhdGVfYiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxNWViZjVlMzJiMmJmOGQy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibmFtZSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbpKSpiJicl94Iqp0ZXh0L3BsYWluktlvM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjU0NjU2MiAgMC4yMTg0MzcgIDAuMjE4NDM3CiAwLjIxODQzNyAgMC41NDY1NjIgIDAuMjE4NDM3CiAwLjIxODQzNyAgMC4yMTg0MzcgIDAuNTQ2NTYyqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZGEzYTIxMzJiM2M5ZmFjYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpK3InZvbHRhZ2Vfc291cmNlLnNvdXJjZSKqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjNDFjODEwNzA3OGMzYjBi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZl9idXMiqnRleHQvcGxhaW6SoTSqdGV4dC9wbGFpbpKSpiJicl9yIqp0ZXh0L3BsYWluktmBM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiA0LjAwOTYxZS03ICAzLjcxNTcxZS04ICAzLjcxNTcxZS04CiAzLjcxNTcxZS04ICA0LjAwOTYxZS03ICAzLjcxNTcxZS04CiAzLjcxNTcxZS04ICAzLjcxNTcxZS04ICA0LjAwOTYxZS03qnRleHQvcGxhaW6SkqYiYl9mciKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlukpKrImJyX3N0YXR1cyKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI5OGZiMGVkNzI2MGZkZTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjAyNzZiM2JiZjkxOTVhM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpInN0b3JhZ2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOQpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3MDU5MzIyZWRmZjUxZDU02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3dpdGNoIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNzU3MTNlMGVlYTI1MzYzNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuImlzX3Byb2plY3RlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6SkqwiZGF0YV9tb2RlbCKqdGV4dC9wbGFpbpK7TUFUSEVNQVRJQ0FMOjpEYXRhTW9kZWwgPSAxqnRleHQvcGxhaW6Skqcic2h1bnQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOQpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0ZmJiYzVlOTllYmE1Njdl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq0idHJhbnNmb3JtZXIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOQpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK81NjA1ZmMwOGEwMzZmNTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJidXNfbG9va3VwIqp0ZXh0L3BsYWlukoWmcHJlZml4sERpY3R7QW55LCBJbnQ2NH2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkr2YyNmE4ZjAxZDkxMTljNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1YTgwZGYxZGVhM2ViZDNm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SpCJsMiKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyM2I4MjRkMzdjYWNhMjA32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWFlZGMwN2NiNTMwYmNkOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkMjdiMTFhZTVhMzMyNTFh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmMGZiYWFiMzE3MzNhNGZm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGQwNzVhOTgxOTYzOGRlN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0ZmRlMmExOTU0Zjk0NDBl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4NjdiYTFkZTQyMzM4NDM32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWFjOTdhNDBiNGU3Y2FiNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5MGZhMDJlMmExMzZjNzVm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGViMWUxZTQxNTU3ZWJmMDekbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZaRtYXRosmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRRt2+YrBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkYTczNDhmYzgtYjI1ZS00ZWNmLTlmZTYtMzE0MDM2YjdkZjljuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAB84obVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGY4ODJmMDcwLTc0YWYtNGYzYi05YWQxLWJkN2FkNDUzNzc4ZoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaASY8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgzPkJyYW5jaCBGbG93IGZvcm11bGF0aW9uczwvaDM+CjxwPlByZXZpb3VzbHksIHRvIHVzZSBhIGJyYW5jaCBmbG93IGZvcm11bGF0aW9uLCBzdWNoIGFzIDxjb2RlPlNPQ05MUFVCRlBvd2VyTW9kZWw8L2NvZGU+LCBpdCB3YXMgcmVxdWlyZWQgdG8gdXNlIGEgZGlmZmVyZW50IDxjb2RlPnNvbHZlXzwvY29kZT4gY29tbWFuZCwgYnV0IG5vdywgYnkgdXNpbmcgbXVsdGlwbGUgZGlzcGF0Y2ggd2UgaGF2ZSBzaW1wbGlmaWVkIHRoaXMgZm9yIHRoZSB1c2VyPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTwyyEuwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGY4ODJmMDcwLTc0YWYtNGYzYi05YWQxLWJkN2FkNDUzNzc4ZrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAE+2a1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmOKpnF1ZXVlZMKkbG9nc5WIpGxpbmX/o21zZ5LZSUNpcmN1aXQgaGFzIGJlZW4gcmVzZXQgd2l0aCB0aGUgJ2NsZWFyJyBvbiBsaW5lIDEgaW4gJ2Nhc2UzX2JhbGFuY2VkLmRzcyeqdGV4dC9wbGFpbqdjZWxsX2lk2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmOma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fZDI0YWVjMDCkZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlZQ29tbWFuZCAnY2FsY3ZvbHRhZ2ViYXNlcycgb24gbGluZSAzNiBpbiAnY2FzZTNfYmFsYW5jZWQuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmOma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlOQ29tbWFuZCAnc29sdmUnIG9uIGxpbmUgMzggaW4gJ2Nhc2UzX2JhbGFuY2VkLmRzcycgaXMgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcuqnRleHQvcGxhaW6nY2VsbF9pZNkkYWQ0OGIzYWQtZWRlMS00MTA5LTk2NDctMDA3YzFkOGQxOTZjpmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzc4OTIxNDk2pGZpbGXZUi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3NfcGFyc2UuamylZ3JvdXCpZHNzX3BhcnNlpWxldmVspEluZm+IpGxpbmX/o21zZ5LZXWJhc2VtdmE9MTAwIGlzIHRoZSBkZWZhdWx0IHZhbHVlLCB5b3UgbWF5IHdhbnQgdG8gYWRqdXN0IHNiYXNlX2RlZmF1bHQgZm9yIGJldHRlciBjb252ZXJnZW5jZap0ZXh0L3BsYWlup2NlbGxfaWTZJGFkNDhiM2FkLWVkZTEtNDEwOS05NjQ3LTAwN2MxZDhkMTk2Y6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl9hZjAyMTAwMKRmaWxl2VAvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzMmVuZy5qbKVncm91cKdkc3MyZW5npWxldmVspEluZm+IpGxpbmX/o21zZ5LZcmFzc3VtaW5nIHRpbWUgaXMgaW4gaG91cnMgZm9yIHRpbWVfZWxhcHNlZCBpbmZlcmVuY2UuIGlmIHRoaXMgaXMgaW5jb3JyZWN0LCBtYW51YWxseSBhZGp1c3Qgd2l0aCBzZXRfdGltZV9lbGFwc2VkIap0ZXh0L3BsYWlup2NlbGxfaWTZJGFkNDhiM2FkLWVkZTEtNDEwOS05NjQ3LTAwN2MxZDhkMTk2Y6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl8wMzYxMzM5ZqRmaWxl2VkvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9kYXRhX21vZGVsL211bHRpbmV0d29yay5qbKVncm91cKxtdWx0aW5ldHdvcmulbGV2ZWykSW5mb6dydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqYibmFtZSKqdGV4dC9wbGFpbpKuIjNidXNfZXhhbXBsZSKqdGV4dC9wbGFpbpKSpSJtYXAiqnRleHQvcGxhaW6ShaZwcmVmaXjZJ0RpY3R7U3RyaW5nLCBWZWN0b3J7RGljdHtTdHJpbmcsIEFueX19fahlbGVtZW50c5qSkqMiOCKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGI3MzA0YmU5YTNmNGUwOTKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksGVjOWY4OTQ0ZTJlNGM3Mzepa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA3ZThkZTBiNzI3NWU2NjM0qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNmVmYjJmYzE4YmMxODkzM6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI4OTNmOGRiOWI1YjY4YWGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlksDYxZTRjZmJhMTgxZDFiODapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyNDljZjY3MjM0NjI2NGU5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTQ0MDBkYmRiYTA3NjJjNKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk3NWFmY2MzOTdkZmE5Njepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmE4OGM5NjFlZGJhNzA0NalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzUxNjQ0OWZhN2ZhMmI1MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDdhNmNlOWYyNmQxYzVjNDKpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTBlYTk3MWEwMzM3NDRlM6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvNzRiZjVhYmVkMTcwY2Y1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk0ODU1MjQ0ODg5NGMwN2Wpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhYmNjN2NiYWUwYzNiYmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNDI3OTY0MGE5MDNkM2YxZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjJiNjRlOTg1MDllMTRiNalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTVkZjYwYWQyODEwNTQ5MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvZmUzMDhkOWZmMmRjMjBhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzQ5ZTlmZjhiZWE3YTY4Y6lrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlkrzRiYTQxOTdhNzM3OTQ5MKZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0kpKjIjQiqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiNzMwNGJlOWEzZjRlMDkyqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBlYzlmODk0NGUyZTRjNzM3qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2U4ZGUwYjcyNzVlNjYzNKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDZlZmIyZmMxOGJjMTg5MzOpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyODkzZjhkYjliNWI2OGFhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIEk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2MWU0Y2ZiYTE4MWQxYjg2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjQ5Y2Y2NzIzNDYyNjRlOalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksDE0NDAwZGJkYmEwNzYyYzSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NzVhZmNjMzk3ZGZhOTY3qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhODhjOTYxZWRiYTcwNDWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK81MTY0NDlmYTdmYTJiNTGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIHk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3YTZjZTlmMjZkMWM1YzQyqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGEwZWE5NzFhMDMzNzQ0ZTOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgiTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzc0YmY1YWJlZDE3MGNmNalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NDg1NTI0NDg4OTRjMDdlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYWJjYzdjYmFlMGMzYmJkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDQyNzk2NDBhOTAzZDNmMWWpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlksDM0NGQ5MWU4ZTdiNWRjZWOpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDljMDQ0MTJkMzU3Y2U5ZGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkr2ZlMzA4ZDlmZjJkYzIwYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM0OWU5ZmY4YmVhN2E2OGOpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLBjYTBkMmRiNmIxZDgxOTIzpnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiMSKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGI3MzA0YmU5YTNmNGUwOTKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksGVjOWY4OTQ0ZTJlNGM3Mzepa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA3ZThkZTBiNzI3NWU2NjM0qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNmVmYjJmYzE4YmMxODkzM6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI4OTNmOGRiOWI1YjY4YWGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlksDYxZTRjZmJhMTgxZDFiODapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyNDljZjY3MjM0NjI2NGU5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTQ0MDBkYmRiYTA3NjJjNKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk3NWFmY2MzOTdkZmE5Njepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmE4OGM5NjFlZGJhNzA0NalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzUxNjQ0OWZhN2ZhMmI1MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDdhNmNlOWYyNmQxYzVjNDKpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTBlYTk3MWEwMzM3NDRlM6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvNzRiZjVhYmVkMTcwY2Y1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk0ODU1MjQ0ODg5NGMwN2Wpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhYmNjN2NiYWUwYzNiYmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNDI3OTY0MGE5MDNkM2YxZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTQ0MTNjMDhhMGMyNzRiOKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOWE3YTg1M2MzMjdjNjhlZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvZmUzMDhkOWZmMmRjMjBhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzQ5ZTlmZjhiZWE3YTY4Y6lrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlksDhmYjY5NGZlM2Q0NzJlYmKmc2NoZW1hwNkiYXBwbGljYXRpb24vdm5kLnBsdXRvLnRhYmxlK29iamVjdJKSoyI1Iqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjczMDRiZTlhM2Y0ZTA5MqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWM5Zjg5NDRlMmU0YzczN6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDdlOGRlMGI3Mjc1ZTY2MzSpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2ZWZiMmZjMThiYzE4OTMzqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjg5M2Y4ZGI5YjViNjhhYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjFlNGNmYmExODFkMWI4NqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI0OWNmNjcyMzQ2MjY0ZTmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxNDQwMGRiZGJhMDc2MmM0qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc1YWZjYzM5N2RmYTk2N6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTg4Yzk2MWVkYmE3MDQ1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNTE2NDQ5ZmE3ZmEyYjUxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2E2Y2U5ZjI2ZDFjNWM0MqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBhMGVhOTcxYTAzMzc0NGUzqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZK83NGJmNWFiZWQxNzBjZjWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTQ4NTUyNDQ4ODk0YzA3ZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmFiY2M3Y2JhZTBjM2JiZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0Mjc5NjQwYTkwM2QzZjFlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZK83MmM5NTQ1ZGY4YjUzMTmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDczZmZlMmNkZTU3NDAwNzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkr2ZlMzA4ZDlmZjJkYzIwYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM0OWU5ZmY4YmVhN2E2OGOpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLBmZWU4ZGQyNjliYTE3M2U2pnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGI3MzA0YmU5YTNmNGUwOTKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksGVjOWY4OTQ0ZTJlNGM3Mzepa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA3ZThkZTBiNzI3NWU2NjM0qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNmVmYjJmYzE4YmMxODkzM6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI4OTNmOGRiOWI1YjY4YWGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlksDYxZTRjZmJhMTgxZDFiODapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyNDljZjY3MjM0NjI2NGU5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTQ0MDBkYmRiYTA3NjJjNKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk3NWFmY2MzOTdkZmE5Njepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmE4OGM5NjFlZGJhNzA0NalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzUxNjQ0OWZhN2ZhMmI1MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDdhNmNlOWYyNmQxYzVjNDKpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTBlYTk3MWEwMzM3NDRlM6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvNzRiZjVhYmVkMTcwY2Y1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk0ODU1MjQ0ODg5NGMwN2Wpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhYmNjN2NiYWUwYzNiYmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNDI3OTY0MGE5MDNkM2YxZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNDVmYmJkYmUyNWYxZDFkYalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwN2ZhMTkzOGI3Y2M4NjYwMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvZmUzMDhkOWZmMmRjMjBhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzQ5ZTlmZjhiZWE3YTY4Y6lrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlksGFmNjcwMTA2N2RiZGJiMTOmc2NoZW1hwNkiYXBwbGljYXRpb24vdm5kLnBsdXRvLnRhYmxlK29iamVjdJKSoyI2Iqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjczMDRiZTlhM2Y0ZTA5MqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWM5Zjg5NDRlMmU0YzczN6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDdlOGRlMGI3Mjc1ZTY2MzSpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2ZWZiMmZjMThiYzE4OTMzqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjg5M2Y4ZGI5YjViNjhhYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjFlNGNmYmExODFkMWI4NqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI0OWNmNjcyMzQ2MjY0ZTmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxNDQwMGRiZGJhMDc2MmM0qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc1YWZjYzM5N2RmYTk2N6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTg4Yzk2MWVkYmE3MDQ1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNTE2NDQ5ZmE3ZmEyYjUxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2E2Y2U5ZjI2ZDFjNWM0MqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBhMGVhOTcxYTAzMzc0NGUzqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZK83NGJmNWFiZWQxNzBjZjWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTQ4NTUyNDQ4ODk0YzA3ZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmFiY2M3Y2JhZTBjM2JiZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0Mjc5NjQwYTkwM2QzZjFlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmNhYTNkYThjNjNhMzU3qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOTkgGSpyJnZW4uMSKqdGV4dC9wbGFpbpICkqciYnVzLjQiqnRleHQvcGxhaW6SA5KqImJyYW5jaC4zIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0ZmIyODBmYzFjZWI4MzBi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK9mZTMwOGQ5ZmYyZGMyMGGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJzb3VyY2UiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAzNDllOWZmOGJlYTdhNjhjqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK/Il9tYXBfbWF0aDJlbmdfdm9sdGFnZV9zb3VyY2UhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sob2JqZWN0aWSwNDc0ZGJjNDlhY2EwNTZiZqZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0kpKjIjciqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiNzMwNGJlOWEzZjRlMDkyqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBlYzlmODk0NGUyZTRjNzM3qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2U4ZGUwYjcyNzVlNjYzNKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDZlZmIyZmMxOGJjMTg5MzOpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyODkzZjhkYjliNWI2OGFhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIEk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2MWU0Y2ZiYTE4MWQxYjg2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjQ5Y2Y2NzIzNDYyNjRlOalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksDE0NDAwZGJkYmEwNzYyYzSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NzVhZmNjMzk3ZGZhOTY3qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhODhjOTYxZWRiYTcwNDWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK81MTY0NDlmYTdmYTJiNTGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIHk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3YTZjZTlmMjZkMWM1YzQyqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGEwZWE5NzFhMDMzNzQ0ZTOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgiTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzc0YmY1YWJlZDE3MGNmNalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NDg1NTI0NDg4OTRjMDdlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYWJjYzdjYmFlMGMzYmJkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDQyNzk2NDBhOTAzZDNmMWWpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlksGFjMzcwNjhkNzNjODViM2Spa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFkYTZhYTQzMzdhMzQ5ZjbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkr2ZlMzA4ZDlmZjJkYzIwYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM0OWU5ZmY4YmVhN2E2OGOpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLA3OWRiNDhhOTkxYmEzMGU2pnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqQiMTAiqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiNzMwNGJlOWEzZjRlMDkyqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBlYzlmODk0NGUyZTRjNzM3qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2U4ZGUwYjcyNzVlNjYzNKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDZlZmIyZmMxOGJjMTg5MzOpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyODkzZjhkYjliNWI2OGFhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIEk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2MWU0Y2ZiYTE4MWQxYjg2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjQ5Y2Y2NzIzNDYyNjRlOalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksDE0NDAwZGJkYmEwNzYyYzSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NzVhZmNjMzk3ZGZhOTY3qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhODhjOTYxZWRiYTcwNDWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK81MTY0NDlmYTdmYTJiNTGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIHk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3YTZjZTlmMjZkMWM1YzQyqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGEwZWE5NzFhMDMzNzQ0ZTOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgiTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzc0YmY1YWJlZDE3MGNmNalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NDg1NTI0NDg4OTRjMDdlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYWJjYzdjYmFlMGMzYmJkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDQyNzk2NDBhOTAzZDNmMWWpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlksGNjMTBlYTFjMDcxYTE4NjKpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGIxYTJmM2I5NWY5ZDFiYjDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkr2ZlMzA4ZDlmZjJkYzIwYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM0OWU5ZmY4YmVhN2E2OGOpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLBkNWQzNGQxNDQ5YjA2NWFlpnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiOSKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGI3MzA0YmU5YTNmNGUwOTKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksGVjOWY4OTQ0ZTJlNGM3Mzepa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA3ZThkZTBiNzI3NWU2NjM0qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNmVmYjJmYzE4YmMxODkzM6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI4OTNmOGRiOWI1YjY4YWGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlksDYxZTRjZmJhMTgxZDFiODapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyNDljZjY3MjM0NjI2NGU5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTQ0MDBkYmRiYTA3NjJjNKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk3NWFmY2MzOTdkZmE5Njepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmE4OGM5NjFlZGJhNzA0NalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzUxNjQ0OWZhN2ZhMmI1MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDdhNmNlOWYyNmQxYzVjNDKpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTBlYTk3MWEwMzM3NDRlM6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvNzRiZjVhYmVkMTcwY2Y1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk0ODU1MjQ0ODg5NGMwN2Wpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhYmNjN2NiYWUwYzNiYmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNDI3OTY0MGE5MDNkM2YxZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjAxMmVlNWRlYmUxMzE0N6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjAxMDc5NjBiYzczNmZlMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvZmUzMDhkOWZmMmRjMjBhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzQ5ZTlmZjhiZWE3YTY4Y6lrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlksGQzNDdmM2IzNDQ4ZDZkNjCmc2NoZW1hwNkiYXBwbGljYXRpb24vdm5kLnBsdXRvLnRhYmxlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjczMDRiZTlhM2Y0ZTA5MqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWM5Zjg5NDRlMmU0YzczN6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDdlOGRlMGI3Mjc1ZTY2MzSpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2ZWZiMmZjMThiYzE4OTMzqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjg5M2Y4ZGI5YjViNjhhYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjFlNGNmYmExODFkMWI4NqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI0OWNmNjcyMzQ2MjY0ZTmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxNDQwMGRiZGJhMDc2MmM0qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc1YWZjYzM5N2RmYTk2N6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTg4Yzk2MWVkYmE3MDQ1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNTE2NDQ5ZmE3ZmEyYjUxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2E2Y2U5ZjI2ZDFjNWM0MqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBhMGVhOTcxYTAzMzc0NGUzqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZK83NGJmNWFiZWQxNzBjZjWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTQ4NTUyNDQ4ODk0YzA3ZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmFiY2M3Y2JhZTBjM2JiZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0Mjc5NjQwYTkwM2QzZjFlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBkZjI2NDJhNWQxMGNiZTcwqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOTkgGSpyJnZW4uMSKqdGV4dC9wbGFpbpICkqciYnVzLjQiqnRleHQvcGxhaW6SA5KqImJyYW5jaC4zIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1MDgwNDgxODFlNWY2ZmZm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK9mZTMwOGQ5ZmYyZGMyMGGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJzb3VyY2UiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAzNDllOWZmOGJlYTdhNjhjqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK/Il9tYXBfbWF0aDJlbmdfdm9sdGFnZV9zb3VyY2UhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sob2JqZWN0aWSwMmYzMmMxOGZmYzIxMDdiY6ZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyMmVhOGE5MmMyMjU5ZjE52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwiYnVzX2xvb2t1cCKqdGV4dC9wbGFpbpKFpnByZWZpeL9EaWN0e1N0cmluZywgRGljdHtTdHJpbmcsIEFueX19qGVsZW1lbnRzmpKSoyI4Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4NzlkYzY1YTBiOGMwZWM22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwM2FjOWVkY2RmMWU0NmRmYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDkxNzM2NDZjOWYzNzQzZGbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI1Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK4xZjA4ODc3YzhlYTc2ZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDRhOTUwZWMxMTE3YTkyMDnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI2Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK4zMTFiYzY3Y2IyYmJmZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjciqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI3Yzc4M2FjZWJkZjdmYTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCIxMCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNWQ2M2M4NDMzNzE4MGUxOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk3ZmRhNmQyMmM0Y2IwMmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxNzNmMTQ2YmFhY2ViNTZm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY3MmNjZGIxY2FhYTJhMTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJtdWx0aW5ldHdvcmsiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSpCJudyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5qSkqMiMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkrEiaXNfa3Jvbl9yZWR1Y2VkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6Skq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYmRkM2Q5NjVmOTA3NzA5OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkZmYwN2EzZDNkM2VmN2Zm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzNlNDc0ZTA4NTI3MDBiZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImdlbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOWZkZjFiZjViZDMwZGZiZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI1YTM3ODg2NjhhNGZjZTLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI0Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSsSJpc19rcm9uX3JlZHVjZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiOWIyOGUwNzcwZDk3Nzcw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4idGltZV9lbGFwc2VkIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGJkZmU5YWFkZjk1YmY3MTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzYxYzJjNDJlOTk2OTU4ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImdlbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjRjMTlkZGQ0NmUxZjNlMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGYzZTNjNDQ3ZTUyNWJjMDTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSsSJpc19rcm9uX3JlZHVjZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5MWFjYmEwNWEwZTEwZjM12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4idGltZV9lbGFwc2VkIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFhMzk4OTczZDFlYTU5YmTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjA5NmI4MzYzZThjOGNjN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImdlbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMmU0MzFjNDA1OWZkY2EwY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDg2NDNhNGMxMDllNjY4YjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI1Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSsSJpc19rcm9uX3JlZHVjZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3NDg0ODc2N2U2N2NkYTky2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4idGltZV9lbGFwc2VkIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDFlYTcyZWVlM2FkNjE0MmPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwODMyMzQ4ODYwM2E1OTgwYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImdlbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTY2ZWZkY2JjYTY1ZWY5OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQ4MzZkOWM5OGRjY2IxZWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSsSJpc19rcm9uX3JlZHVjZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2YzdhMjliOGQ2Nzg4MGY02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4idGltZV9lbGFwc2VkIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGRmMmI5NTdmM2JjYTYxN2LZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWIyNDdjODFiM2E4MDY1M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImdlbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjI1YWMyMmI2MjI4YWY1YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGRlZWQ2OGU5YmIzOWQyMTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI2Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSsSJpc19rcm9uX3JlZHVjZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK81NzlkNTU4ODg3OTdjZGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzk0ZDJkMzY3MDFlZGNmONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK45YTk3YzNmZTk0MzFiNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImdlbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZWE3NzcxMTJkMjczNTdlMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzlmMzk4ZTExMTQ1Yzg3MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjciqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrzM4YzZmNmI4MzZlYzBlYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0NDM0MWRhYzA1ZWUyMjU32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDRmYTZhY2JkOWNhYmVmZGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGQ2MDMwNjBhYTk4YjkyNGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhYWJmM2IzMmQyZGQwMTli2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQiMTAiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDdhNzcwYTY5NzE0NTg5YjXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWYwM2U5YTUzYTRhNzhlZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzNmRiNWFiZWViMTUzYjQx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1ODI0MDg4OGFjOGE5ZTQw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTZlNjdhMTMyYjJiNzVjOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYwMjgxMzgwM2NhMzg4NTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNWNlYTQ4ODRiNjI4YTg1MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2NDMzMGFjODQ1YzQzYjM32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK5hYWNhYTY3ZGE5YjYzZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDVhNjY4MTQyYjIyYjFmZGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI4Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSsSJpc19rcm9uX3JlZHVjZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK8xYTRmN2VlZmY5YjZmYmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDVmYTM5YzcyODQ5NTZlYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiNmFkZDgzZjZhYmQyNTU42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0ZWUxYThiYTFhMTg0NDVm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOTEyOGY0MDkxZmIwMjg1MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0YWQzZGQ2MjkzMDkzM2Jj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwiZGF0YV9tb2RlbCKqdGV4dC9wbGFpbpK7TUFUSEVNQVRJQ0FMOjpEYXRhTW9kZWwgPSAxqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDFjZTdmYWY2YjcyZGZkOTWkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FG/oyHsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4Bh8QOtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNTQyODA2OTYtYmVlYy00N2VlLTgxMTQtZWE5MzExYWNhOWViiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoFkzxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5UaGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIHRvIG5vdGljZSByaWdodCBhd2F5LiBGaXJzdCwgdGhlIGRhdGEgbW9kZWwgdHJhbnNmb3JtIGF1dG9tYXRpY2FsbHkgY29udmVydHMgdGhlIG1vZGVsIHRvIHBlci11bml0LiBTZWNvbmQsIHRoZXJlIGFyZSBhIGxvdCBvZiBlbXB0eSBjb21wb25lbnQgc2V0cywgd2hlcmVhcyBpbiB0aGUgPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+IG1vZGVsLCBvbmx5IGNvbXBvbmVudCB0eXBlcyB0aGF0IGhhZCBjb21wb25lbnRzIGluIHRoZW0gd2VyZSBsaXN0ZWQuIEluIHRoZSA8Y29kZT5NQVRIRU1BVElDQUw8L2NvZGU+IG1vZGVsIGNlcnRhaW4gY29tcG9uZW50IGRpY3Rpb25hcmllcyBhcmUgYWx3YXlzIGV4cGVjdGVkIHRvIGV4aXN0LCBhbmQgdGhlIDxjb2RlPmVuZzJtYXRoPC9jb2RlPiBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGUgdGhlc2UuPC9wPgo8cD5OZXh0LCB0aGVyZSBhcmUgYSBmZXcgdW51c2FsIGZpZWxkcywgc3VjaCBhcyA8Y29kZT4mcXVvdDtzZXR0aW5ncyZxdW90OzwvY29kZT4sIHdoaWNoIHByZXZpb3VzbHkgZGlkbiYjMzk7dCBleGlzdCBpbiB0aGUgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBtb2RlbC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgcGVyLXVuaXQgY29udmVyc2lvbiBzcGVjaWZpY2FsbHkgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uIEFsc28sIGlzIHRoZSA8Y29kZT4mcXVvdDttYXAmcXVvdDs8L2NvZGU+IGZpZWxkLCB3aGljaCBpcyBhIDxjb2RlPlZlY3RvcjwvY29kZT4gb2YgRGljdGlvbmFyaWVzIHRoYXQgZW5hYmxlIHRoZSBjb252ZXJzaW9uIGJhY2sgdG8gPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+IGZyb20gPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPi4gV2l0aG91dCB0aGlzIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gY29udmVydCBiYWNrLCBhbmQgaW4gZmFjdCBvbmx5IHRoZSBzb2x1dGlvbiBjYW4gYmUgY29udmVydGVkLCBiZWNhdXNlIHNvbWUgcHJvcGVydGllcyBhcmUgY29tYmluZWQgZGVzdHJ1Y3RpdmVseSBkdXJpbmcgdGhlIGNvbnZlcnNpb24gdG8gdGhlIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4gbW9kZWwsIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIHJldmVyc2UgZW5naW5lZXJlZC4gSG93ZXZlciwgc2luY2UgdGhlIGNvbnZlcnNpb24gdG8gPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBpcyBub3QgaW4tcGxhY2UsIHlvdSB3aWxsIGFsd2F5cyBoYXZlIGEgY29weSBvZiA8Y29kZT5lbmc8L2NvZGU+IGFsb25nc2lkZSA8Y29kZT5tYXRoPC9jb2RlPi48L3A+CjxwPkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBvbmUgb2YgdGhlIDxjb2RlPiZxdW90O21hcCZxdW90OzwvY29kZT4gZW50cmllczwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FG3jIBsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ1NDI4MDY5Ni1iZWVjLTQ3ZWUtODExNC1lYTkzMTFhY2E5ZWK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ACRdbtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkOGIwNjYwMzktZWQ2NS00NjE3LWI0MDQtODY5NTJkM2ZjNzhliqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSpCJ2YSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqktMC40ODQyMziqdGV4dC9wbGFpbpICkqgtMTIwLjI0M6p0ZXh0L3BsYWlukgOSpzEyMC4yNzSqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOTBhMTkzNzFkOWMwODVkMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSqDAuMjIyNTIxqnRleHQvcGxhaW6SApKoMC4yMjY3MjeqdGV4dC9wbGFpbpIDkqgwLjIyNTU3N6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyMTEwZDVlNzdhOWYwNjE32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDI4ZTE5YzkyMDBmNWM2YTSkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1E8K5pKsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ4YjA2NjAzOS1lZDY1LTQ2MTctYjQwNC04Njk1MmQzZmM3OGW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1bzLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGM1NWIyYzQyLTlkMjctMTFlYi0yNGNhLWU5MGE1NDcyZmZiYoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaAho8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgxPkludHJvZHVjdGlvbiB0byB0aGUgUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gRGF0YSBNb2RlbHM8L2gxPgo8cD5JbiB0aGlzIG5vdGVib29rIHdlIGludHJvZHVjZSB0aGUgZW5naW5lZXJpbmcgZGF0YSBtb2RlbCBhZGRlZCB0byBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiBpbiB2ZXJzaW9uIHYwLjkuMC4gV2Ugd2lsbCBnaXZlIHNldmVyYWwgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSB0aGlzIG5ldyBkYXRhIG1vZGVsIGRpcmVjdGx5LCBpbmNsdWRpbmcgbmV3IHRyYW5zZm9ybWF0aW9ucyB0aGF0IGhhdmUgYmVjb21lIGVhc2llciB3aXRoIGl0cyBpbnRyb2R1Y3Rpb24sIGhvdyB0byBjb252ZXJ0IGl0IHRvIHRoZSB0aGUgbG93ZXItbGV2ZWwgbWF0aGVtYXRpY2FsIG1vZGVsIHRoYXQgd2FzIHByZXZpb3VzbHkgdGhlIG9ubHkgdXNlciBpbnRlcmZhY2Ugd2Ugb2ZmZXJlZCwgYW5kIGhvdyB0byBnZXQgdmFyaW91cyB0eXBlcyBvZiByZXN1bHRzIHVzaW5nIHRoaXMgbmV3IG1vZGVsLjwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1EpI7UxsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRjNTViMmM0Mi05ZDI3LTExZWItMjRjYS1lOTBhNTQ3MmZmYmK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4FxCy/tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkN2U1ODExY2YtODZhMi00M2ZiLThjOTQtNDQwOTFmMzNjMDMxiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoCpDxkaXYgY2xhc3M9Im1hcmtkb3duIj48dWw+CjxsaT48cD48Y29kZT4mcXVvdDt2bSZxdW90OzwvY29kZT4gLSBzcGVjaWZpZXMgdGhlIGZpeGVkIHZvbHRhZ2UgbWFnbml0dWRlcyBwZXIgcGhhc2UgYXQgdGhlIGJ1czwvcD4KPC9saT4KPGxpPjxwPjxjb2RlPiZxdW90O3ZhJnF1b3Q7PC9jb2RlPiAtIHNwZWNpZmllcyB0aGUgZml4ZWQgcmVmZXJlbmNlIGFuZ2xlcyBwZXIgcGhhc2VzIGF0IHRoZSBidXM8L3A+CjwvbGk+CjxsaT48cD48Y29kZT4mcXVvdDtycyZxdW90OzwvY29kZT4gYW5kIDxjb2RlPiZxdW90O3hzJnF1b3Q7PC9jb2RlPiBzcGVjaWZpZXMgaW50ZXJuYWwgaW1wZWRhbmNlcyBvZiB0aGUgdm9sdGFnZSBzb3VyY2U8L3A+CjwvbGk+CjwvdWw+CjxoMz5JbXBvcnRpbmcgcmF3IGRzcyBwcm9wZXJ0aWVzPC9oMz4KPHA+SW4gY2FzZSB0aGVyZSBhcmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgeW91IHdhbnQgdG8gdXNlIGZyb20gZHNzLCBpdCBpcyBwb3NzaWJsZSB0byBpbXBvcnQgdGhvc2UgZGlyZWN0bHkgaW50byB0aGUgPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+ICYjNDA7YW5kIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4mIzQxOyBkYXRhIHN0cnVjdHVyZSB3aXRoIHRoZSA8Y29kZT5pbXBvcnRfYWxsPC9jb2RlPiBrZXl3b3JkIGFyZ3VtZW50PC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTBKPY6wcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDdlNTgxMWNmLTg2YTItNDNmYi04Yzk0LTQ0MDkxZjMzYzAzMblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgCqBOO1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQyN2Q1YTIzNy00YzJlLTRiMTQtYTA4Mi1mNDg0NzE1M2M4ZDWKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKwInZvbHRhZ2Vfc291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqCJzb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKoInFnX2J1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3ZDVlMzYxNDJmMmUxMjdi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicWciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTliNGQwMmU2N2RjYTI4Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInBnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrmQ0NGE1YzM2MWI5NTI52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicGdfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGJjOTNmMTUyMmQ5YWUxNGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwM2QzMTBiYTgzMTk0NmQ1MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlZTMxOWY4ZjkzOTU3ZWU02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqYicXVhZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqQicWYiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZGJjMmJlYzE2YmY4OGRkMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInF0Iqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU3M2U0YjEzZTJlZmE3ODPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJwdCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1NDU1ZWNhOTVkMWVmOGUy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicGYiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTBiYmUyZmI1NWVhZGVlZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjMmFmMzkxMDM0OGY3Mzll2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgib2hsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlJKSpCJxZiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkYjczYjBmMWViNWE4MGU52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicXQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDM2YzAwZTRiYjRiMDZmNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInB0Iqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrzVmNDIwZjVjMDViNDY0MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInBmIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRkZGYwMDM2ZDAzMTAzNjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTJjNjZmYTlmNGJkZWYxMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjZDg4Yjc3MDQ5ZmZjYzdh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKnInNiYXNlIqp0ZXh0L3BsYWlukqU1MDAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxMDdmZTJmZmQwMTE5ZWFj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqQibDIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKoInFkX2J1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiMmI3MzczZDgxNjg0YTM22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicGRfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDE5MmM5MjhjY2U1MzAxN2bZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjODE5NTczMDJjMmM3Y2Qz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicGQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmQyNmNhNzVmNjQ3NjRjMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2MDNhNzE0Y2YzOWVmMWQx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQibDMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKoInFkX2J1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK84ZmYwYTA5MmRmN2VhMDjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9idXMiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNmU3N2JkYjFmOGU5NTJiONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInFkIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGU5MTAyZWU5ZWUxYTNiOWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJwZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0ZTQ1OTEwY2I4ODUwMTQ22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDdiOWRhMzI1YWE2NTcyMTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqgicWRfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDVkYjUxM2NiNTc2M2Y5MDfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9idXMiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOGY3NmRlYTczYjA4NTQ5ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInFkIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDQyMzFmODI5YTA3YzllNjjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJwZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0NmY3NTYzOGFhMDc1OGRl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGZlNDQ4ZTZiYWZiMzM5OTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTEwZjlhNTBmNTQ5NWUwYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMWRkMWE5N2Q3NDIwOWQ4N9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGVlOTcxYzM0MTVhYjg5OTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDdkODIwN2RiZWUzMDFiYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwY2ZmYTA0NDBkODcxNThhM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGEwMGYyY2UxZjg5YmFmNGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjg1NDJhNTg5ZmRiMTNiZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpImxvYWRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKkInZhIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDkwYTE5MzcxZDljMDg1ZDLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ2bSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyMTEwZDVlNzdhOWYwNjE32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDI4ZTE5YzkyMDBmNWM2YTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDgyNGVhNGJkZjdjOWY4MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5YzkzOGE1YmVmZjY3MWMypG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRPCp6A7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMjdkNWEyMzctNGMyZS00YjE0LWEwODItZjQ4NDcxNTNjOGQ1uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXNO8W1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRkMGUwMmVlNS1mNTdjLTQyODYtOTQwZC1iMDEwOTdjODQwYmWKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gFNPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPllvdSBjYW4gc2VlIHRoYXQgdW5kZXIgdGhlIGFjdHVhbCBjb21wb25lbnQsIGluIHRoaXMgY2FzZSBhIDxjb2RlPiZxdW90O2xvYWQmcXVvdDs8L2NvZGU+LCB0aGF0IHRoZXJlIGlzIGEgPGNvZGU+JnF1b3Q7dGltZV9zZXJpZXMmcXVvdDs8L2NvZGU+IGRpY3Rpb25hcnkgdGhhdCBjb250YWlucyA8Y29kZT5FTkdJTkVFUklORzwvY29kZT4gbW9kZWwgdmFyaWFibGUgbmFtZXMgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIGlkZW50aWZpZXJzIG9mIGEgcm9vdC1sZXZlbCA8Y29kZT50aW1lX3NlcmllczwvY29kZT4gb2JqZWN0LDwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1Ew7VmbsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRkMGUwMmVlNS1mNTdjLTQyODYtOTQwZC1iMDEwOTdjODQwYmW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABHQ9tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkOGJhMDgxYjQtODQ0NC00OGUwLWFmY2UtMjA2NDlmN2ZkZDAxiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkZIBkqMwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDAzOTk2MmU5OTMzMjZlNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkZIBkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDI3ODQwYmRkNjdjN2MyNGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOUkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlukgSSoTSqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTg2NDkwZGY0OTBhOWFlN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORkgGSozAuMKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmMTliMTQ5NGZiZjY4MjY02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGM3MWIyMDAwYjQ4MGVjMmKkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1EwN7eusHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ4YmEwODFiNC04NDQ0LTQ4ZTAtYWZjZS0yMDY0OWY3ZmRkMDG5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1OhLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDJjMzU4ZDdhLTVkODQtNGY2Mi1hMTQ3LTU3N2JiNzc1YWM3ZoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZ/jxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5XZSBjYW4gc2VlIHRoYXQgJnF1b3Q7bm9sb2FkbG9zcyZxdW90OywgJnF1b3Q7cncmcXVvdDssIGFuZCAmcXVvdDtpbWFnJnF1b3Q7IGFyZSBub24temVybywgYnV0IGlmIHdlIGFwcGx5IHRoZSBtYWtlX2xvc3NsZXNzJiMzMzsgZnVuY3Rpb24gd2UgY2FuIHNlZSB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gemVybywgZWZmZWN0aXZlbHkgZWxpbWluYXRpbmcgdGhlIGxvc3NlczwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FGQRFJsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQyYzM1OGQ3YS01ZDg0LTRmNjItYTE0Ny01NzdiYjc3NWFjN2a5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4B2EDetXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZTIyYTdkM2UtM2YyMS00MWIwLWFiZjItMmM3MjNlODdjNTdliqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoBujxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+UGFyc2luZyBEYXRhPC9oMj4KPHA+SGVyZSB3ZSBnaXZlIHRoZSBmaXJzdCBleGFtcGxlIG9mIGhvdyB0byBwYXJzZSBkYXRhIGludG8gdGhlIDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBkYXRhIG1vZGVsIHN0cnVjdHVyZSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgZGF0YSBzdHJ1Y3R1cmUgdHlwZSB0aGF0IHRoZSB1c2VyIHdpbGwgc2VlIHdpdGhvdXQgcGFzc2luZyBhZGRpdGlvbmFsIGFyZ3VtZW50cywgYXMgd2UgZGVtb25zdHJhdGUgbGF0ZXIuPC9wPgo8cD5XZSBzdGFydCB3aXRoIGEgMyBidXMgdW5iYWxhbmNlZCBsb2FkIGNhc2UgcHJvdmlkZWQgYXMgYSBkc3MgZmlsZSBpbiB0aGUgPGNvZGU+dGVzdDwvY29kZT4gZm9sZGVyIG9mIHRoZSBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi5qbCByZXBvc2l0b3J5PC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUSm462ywcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGUyMmE3ZDNlLTNmMjEtNDFiMC1hYmYyLTJjNzIzZTg3YzU3ZblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAGdk+1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQyYThjMTUzNi1lZjVmLTRlMzctYjMwZS0xYmI3Mzk4MmQ3YjCKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gL+PGRpdiBjbGFzcz0ibWFya2Rvd24iPjx1bD4KPGxpPjxwPjxjb2RlPiZxdW90O3Rlcm1pbmFscyZxdW90OzwvY29kZT4gaW5kaWNhdGVzIHdoaWNoIHRlcm1pbmFscyBvbiB0aGUgYnVzIGhhdmUgYWN0aXZlIGNvbm5lY3Rpb25zPC9wPgo8L2xpPgo8bGk+PHA+PGNvZGU+JnF1b3Q7Z3JvdW5kZWQmcXVvdDs8L2NvZGU+IGluZGljYXRlcyB3aGljaCB0ZXJtaW5hbHMgYXJlIGdyb3VuZGVkPC9wPgo8L2xpPgo8bGk+PHA+PGNvZGU+JnF1b3Q7cmcmcXVvdDs8L2NvZGU+IGFuZCA8Y29kZT4mcXVvdDt4ZyZxdW90OzwvY29kZT4gaW5kaWNhdGUgdGhlIGdyb3VuZGluZyByZXNpc3RhbmNlIGFuZCByZWFjdGFuY2Ugb2YgdGhlIGdyb3VuZDwvcD4KPC9saT4KPGxpPjxwPjxjb2RlPiZxdW90O3N0YXR1cyZxdW90OzwvY29kZT4gaW5kaWNhdGVzIHdoZXRoZXIgYSBidXMgaXMgPGNvZGU+RU5BQkxFRDwvY29kZT4gb3IgPGNvZGU+RElTQUJMRUQ8L2NvZGU+LCBhbmQgaXMgc3BlY2lmaWVkIGZvciBldmVyeSBjb21wb25lbnQgaW4gdGhlIGVuZ2luZWVyaW5nIG1vZGVsPC9wPgo8L2xpPgo8L3VsPgo8cD5OZXh0LCB3ZSBsb29rIGF0IHRoZSA8Y29kZT4mcXVvdDtsaW5lJnF1b3Q7PC9jb2RlPiBjb21wb25lbnRzLCB3aGljaCBpcyBhIGdlbmVyaWMgbmFtZSBmb3IgYm90aCBvdmVyaGVhZCBsaW5lcyBhbmQgdW5kZXJncm91bmQgY2FibGVzLCB3aGljaCB3ZSBkbyBub3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGluIHRoZSBub21lbmNsYXR1cmU8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRMDgsG7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMmE4YzE1MzYtZWY1Zi00ZTM3LWIzMGUtMWJiNzM5ODJkN2IwuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAArVD7VwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MIqmcXVldWVkwqRsb2dzk4ikbGluZf+jbXNnktlJQ2lyY3VpdCBoYXMgYmVlbiByZXNldCB3aXRoIHRoZSAnY2xlYXInIG9uIGxpbmUgMSBpbiAndXRfdHJhbnNfMndfeXkuZHNzJ6p0ZXh0L3BsYWlup2NlbGxfaWTZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MKZrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl9kMjRhZWMwMKRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2VlDb21tYW5kICdjYWxjdm9sdGFnZWJhc2VzJyBvbiBsaW5lIDM1IGluICd1dF90cmFuc18yd195eS5kc3MnIGlzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nLqp0ZXh0L3BsYWlup2NlbGxfaWTZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MKZrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl83ODkyMTQ5NqRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2U5Db21tYW5kICdzb2x2ZScgb24gbGluZSAzOCBpbiAndXRfdHJhbnNfMndfeXkuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SQ3YTg2ZTI2ZC1mZGY2LTQxYjYtYjFkZC1kYzBjNGE4ZTlkNTCma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb6dydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5qSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKoInNvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukrAidnNvdXJjZS5zb3VyY2UiqnRleHQvcGxhaW6SkqQicnMiqnRleHQvcGxhaW6S2dU0w5c0IE1hdHJpeHtGbG9hdDY0fToKIDEuNjk3NjNlLTcgIDEuNTczMTllLTggIDEuNTczMTllLTggIDEuNTczMTllLTgKIDEuNTczMTllLTggIDEuNjk3NjNlLTcgIDEuNTczMTllLTggIDEuNTczMTllLTgKIDEuNTczMTllLTggIDEuNTczMTllLTggIDEuNjk3NjNlLTcgIDEuNTczMTllLTgKIDEuNTczMTllLTggIDEuNTczMTllLTggIDEuNTczMTllLTggIDEuNjk3NjNlLTeqdGV4dC9wbGFpbpKSpCJ2YSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjMmZmYzA0NDM4OWFmMzgy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGY1OGIwMzI4OWRiMTY2OGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ2bSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjNDkzOTMwMTNiYzI4YzAw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNzVhODA3MWU2N2VhMzgxZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlOTk2ZTljOTRmYzg0MTcz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibmFtZSKqdGV4dC9wbGFpbpKqInV0X3RyYW5zIqp0ZXh0L3BsYWlukpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKnImxpbmUyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzNzFmZTZhNjYyNTRlOGFm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMzM0OSAgMC4wMzQ5ICAwLjAzNDkKIDAuMDM0OSAgMC4zMzQ5ICAwLjAzNDkKIDAuMDM0OSAgMC4wMzQ5ICAwLjMzNDmqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzYmM4ZWY2NmViYTZmMjg02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZGZjNDY0MDdiMzlkZDliM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxpbmUxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjZjYxNjUwMTkyOTI2MGFm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2WYzw5czIE1hdHJpeHtGbG9hdDY0fToKICAyLjEzNDkgIC0wLjg2NTEgIC0wLjg2NTEKIC0wLjg2NTEgICAyLjEzNDkgIC0wLjg2NTEKIC0wLjg2NTEgIC0wLjg2NTEgICAyLjEzNDmqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkMGY1ZjBmYTE1ZmI0NmZj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjZkMTQ4YTVjMTdjNGIxOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiYTkzNmZhMzY5M2E1Mzc32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5SSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6SBJKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzODUxODAyOGEzM2U3MDgx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKvInNiYXNlX2RlZmF1bHQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4skRpY3R7U3RyaW5nLCBSZWFsfahlbGVtZW50c5GSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqc2LjM1MDg1qnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDJiZjU4YTcxNDNjMDg4MzHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNjAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5ODg2NDUwZGVhZGUzZmZh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZmlsZXMiqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzkZIBktkpIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL3V0X3RyYW5zXzJ3X3l5LmRzcyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNGFlN2NhNzcwOTAzYmYzONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKtInRyYW5zZm9ybWVyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpSJ0eDEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKqInBvbGFyaXR5Iqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiNjhjZjIxYWVjOGEyMTFm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic21fbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYyZDgwZTVlYjlhOTQ0NmLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ0bV9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkr2JhNmNlNGU4N2UyMTQ1NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4rVZlY3RvcntJbnQ2NH2oZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGVkMGU5YTk5OGU2NzBhZDjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ0bV9zZXQiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiNzU0OWYxYjYyNjZlNWI32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkidG1fc3RlcCKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRhZmQ1MzhmNmE0NDllYjDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxNjJkY2IyYzk2NTUxNDRj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzlmODU2NmQ5MzYwZTRhYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKnImxvYWQzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQzIqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlNDBjNDU0NGU5NjkxMjM32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGUwZTFmMjZhM2U1ZmI2N2TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SpTYuNTMxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjRkNGQxOWVjNjQ1YWJlZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQ2Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQ2Iqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjNmI2NGM2MjJlYjAyN2Rl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkr2UzNjk2NDMxOTA5MjRjMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKjMi4zqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGYwMTJhNTQ5YTlmMmFkM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQyIqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlZDYyNjEzMzdjMDliYjI42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDY4NTdlYWY0NGQ0YmZlMmbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SpTYuNTMxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzkxYjRlNDM2ZWQyYmNmZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQ1Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQ1Iqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1MjQzNWYxMmM2MjBhODg12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDJiYjFkNzQ3NTNmZmZiNGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SozIuM6p0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQ1ODI1ZjRkMDdhMDlhNjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJsb2FkMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqwibG9hZC5sb2FkMSKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwN2IxODU5YjM5N2NjNjU4YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkZmM3Nzk3NjNjMmEyYzkx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidm1fbm9tIqp0ZXh0L3BsYWlukqU2LjUzMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDFlZWI1ZWE3YmE2ZGZhYjPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJsb2FkNCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqwibG9hZC5sb2FkNCKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDc4YTJmMjk1MDczZmM5Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmMjBjMjc4ZGUwYWY3YTIw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidm1fbm9tIqp0ZXh0L3BsYWlukqMyLjOqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkMzRjZTlhNTIzMzEwYjdm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc1YjE2NTVlZTdmZWQ5YzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDVjNWJiYTA5ZGExZTBiODfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOGIwMDJjODQzNzY2ZTQzN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjYwNmI1YjA0OGE2MWZlYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDI3OGM4NmI5ZjA3ZmE5MTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjg5N2U1MWUwYWUwMzYxONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZTZlYzMxMjRlZjNjOTFhM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3ZTU0NjBkNjFlMGNlY2Nm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyYTBkM2E5ODUwYjMxZTM02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMWY0ZTZhOThlMDAwZmQ5ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4M2IyODQ3NDQxMTU2MjM32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTM4N2MxYTJlODczYjgxNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0YWJkYTkxNmI2ZGY4MmMx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzYTJlMGFlMmYwZjRiY2I52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjBkNGY0N2VlMzBlMWM3NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxMWQyNDI2N2RkNDBhOTFj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDRmN2VjOTk0YjU0MWU1Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxNGE4MDAzOWNhYjQ0MmI02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzMDI5M2E3YTVjZWMwMzkw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzg1NjNlOWEzMjEwZDNkYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2MDNmNzRkZjdhMWIxNjFl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzQ2YmJlODZjMjg3ZTE3YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKsImRhdGFfbW9kZWwiqnRleHQvcGxhaW6SukVOR0lORUVSSU5HOjpEYXRhTW9kZWwgPSAwqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk3OWE3NDc1ZTkwNzQ4MDKkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZaZlbmdfdXSybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FGNFUqsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ3YTg2ZTI2ZC1mZGY2LTQxYjYtYjFkZC1kYzBjNGE4ZTlkNTC5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc5dTNdFtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZjM0NThhNWMtNzBjNi00ZDBjLTgyNTMtNGZlYjBjODdlZTc2iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoBfDxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDM+VGltZSBTZXJpZXMgUGFyc2luZyBFeGFtcGxlPC9oMz4KPHA+SW4gdGhlIDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBtb2RlbCwgd2UgaGF2ZSBpbmNsdWRlZCB0aGUgPGNvZGU+dGltZV9zZXJpZXM8L2NvZGU+IGRhdGEgdHlwZSwgd2hpY2ggaG9sZHMgYWxsIHRpbWUgc2VyaWVzIGRhdGEgYW5kIGNhbiBiZSByZWZlcnJlZCB0byBzaW1pbGFyIHRvIDxjb2RlPiZxdW90O2xpbmVjb2RlJnF1b3Q7PC9jb2RlPiBhcyBkZW1vbnN0cmF0ZWQgYWJvdmUuPC9wPgo8cD5CZWxvdyB3ZSBjYW4gc2VlIGFuIGV4YW1wbGUgb2YgYSBwYXJzZSB0aGF0IGluY2x1ZGVzIHNvbWUgdGltZV9zZXJpZXMgY29tcG9uZW50czwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1EwXK91sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRmMzQ1OGE1Yy03MGM2LTRkMGMtODI1My00ZmViMGM4N2VlNza5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABm+rtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNTQ0MTA4ZDEtZDFhNy00ZGM2LTlhM2MtNmExMDAyNWNiOGEziqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoBmzxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDM+UnVubmluZyBUaW1lIFNlcmllcyBNb2RlbHM8L2gzPgo8cD5CeSBkZWZhdWx0LCA8Y29kZT50aW1lX3NlcmllczwvY29kZT4gb2JqZWN0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHJ1bm5pbmcgYSBtb2RlbC4gVG8gdXNlIHRoZSB0aW1lIHNlcmllcyBpbmZvcm1hdGlvbiB5b3Ugd2lsbCBuZWVkIHRvIGhhdmUgYSBtdWx0aW5ldHdvcmsgcHJvYmxlbSBzcGVjaWZpY2F0aW9uPC9wPgo8cD5JbiB0aGUgZXhhbXBsZSBiZWxvdyB3ZSB1c2UgYSB0ZXN0IGNhc2UsIHdoaWNoIGlzIG5vdCBleHBvcnRlZCBieSBkZWZhdWx0LCBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiBuYW1lc3BhY2U8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRRBt+prBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkNTQ0MTA4ZDEtZDFhNy00ZGM2LTlhM2MtNmExMDAyNWNiOGEzuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAYWm7VwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGYzMGNkMGQwLWIwZGEtNGY2My1hMjQ1LTU2OGE3NjNhOTNkOIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmgpG1pbWWqdGV4dC9wbGFpbqxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRKC/kbbBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZjMwY2QwZDAtYjBkYS00ZjYzLWEyNDUtNTY4YTc2M2E5M2Q4uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXPAAAAAZD7FTe1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ4OWRlODBkZi0xZGQwLTRmOTQtYTI3ZC03NDY5M2E5NzgwNTmKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXjZKE1hdGhPcHRJbnRlcmZhY2UuT3B0aW1pemVyV2l0aEF0dHJpYnV0ZXOoZWxlbWVudHOSkrVvcHRpbWl6ZXJfY29uc3RydWN0b3KSr0lwb3B0Lk9wdGltaXplcqp0ZXh0L3BsYWlukqZwYXJhbXOShaZwcmVmaXjZNlBhaXJ7TWF0aE9wdEludGVyZmFjZS5BYnN0cmFjdE9wdGltaXplckF0dHJpYnV0ZSwgQW55fahlbGVtZW50c5KSAZKDpHR5cGWkUGFpcqhvYmplY3RpZLA2ZTYxNGY0ZTU5YWQ0MWJhqWtleV92YWx1ZZKShaZwcmVmaXi1UmF3T3B0aW1pemVyQXR0cmlidXRlqGVsZW1lbnRzkZKkbmFtZZKlInRvbCKqdGV4dC9wbGFpbqR0eXBlpnN0cnVjdKxwcmVmaXhfc2hvcnS1UmF3T3B0aW1pemVyQXR0cmlidXRlqG9iamVjdGlksDczYTU2MGVlODA5NmVlZTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKmMS4wZS02qnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoOkdHlwZaRQYWlyqG9iamVjdGlksDdlZGUyMzYxNTMyN2I5MmGpa2V5X3ZhbHVlkpKFpnByZWZpeLVSYXdPcHRpbWl6ZXJBdHRyaWJ1dGWoZWxlbWVudHORkqRuYW1lkq0icHJpbnRfbGV2ZWwiqnRleHQvcGxhaW6kdHlwZaZzdHJ1Y3SscHJlZml4X3Nob3J0tVJhd09wdGltaXplckF0dHJpYnV0ZahvYmplY3RpZLA4MDJkYTgwNDA0Yjc1M2Rj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSoTCqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzYWRjNDdhZTA2YmI1Y2I52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaZzdHJ1Y3SscHJlZml4X3Nob3J0t09wdGltaXplcldpdGhBdHRyaWJ1dGVzqG9iamVjdGlksGZjMzc0N2FlYzI5YTdkYWSkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZaxpcG9wdF9zb2x2ZXKybGFzdF9ydW5fdGltZXN0YW1wy0HZM1EpuHrVsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ4OWRlODBkZi0xZGQwLTRmOTQtYTI3ZC03NDY5M2E5NzgwNTm5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4CXq8btXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkODNjZTQzNGMtMGY5Mi00NmE4LTg2NDgtMzIyMDg0MDQ0NjAwiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSpiJxdWFkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmJKSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKvInRfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOTkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5ZGM4NTM5ZjU0MTI2ZGIx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZl9idXMiqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKrImxpbmUucXVhZCKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJ0X2J1cyKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW6SkqoibGluZWNvZGUiqnRleHQvcGxhaW6SqSI0LzBxdWFkIqp0ZXh0L3BsYWlukpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOTkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzNGE3OWYwMTgxZDEwMDZm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDdjMzEzZGI1MzNiYzg3NWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJvaGxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOYkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5OSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDk5N2Y0ZjBmZDk4ZDU4MTLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrSJsaW5lLm9obGluZSKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJ0X2J1cyKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW6SkqoibGluZWNvZGUiqnRleHQvcGxhaW6SqCI1NTZtY20iqnRleHQvcGxhaW6Skq8iZl9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5OSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDMxZjlmYzQ0OGE4MjhmNWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGVkZGRlZDljNDRhN2E3NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3YWFjMTUzNTFiZTc1ZGZkpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRMD9iD7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkODNjZTQzNGMtMGY5Mi00NmE4LTg2NDgtMzIyMDg0MDQ0NjAwuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXNPoC1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ0NWMzMjBkZC1lMGIyLTQ2ZWMtYWYwOS1kODNlNTY1MjAyNmSKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHPcABKSkqoicG9sYXJpdHkiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOSkgGSoTGqdGV4dC9wbGFpbpICkqExqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI2OGNmMjFhZWM4YTIxMWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzbV9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5KSAZKlNTAwLjCqdGV4dC9wbGFpbpICkqU1MDAuMKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2MmQ4MGU1ZWI5YTk0NDZi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidG1fbGIiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkpIBkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSozAuOap0ZXh0L3BsYWlukgKSozAuOap0ZXh0L3BsYWlukgOSozAuOap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyN2M1NDc0NmNhNzJjZjE12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqMwLjmqdGV4dC9wbGFpbpICkqMwLjmqdGV4dC9wbGFpbpIDkqMwLjmqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjdjNTQ3NDZjYTcyY2YxNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK9iYTZjZTRlODdlMjE0NTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeK1WZWN0b3J7SW50NjR9qGVsZW1lbnRzkpIBkoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNjNDE0OTQ5YjIxMjljYTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDlmMjg4ZDc5NzdlMWU0YzXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZWQwZTlhOTk4ZTY3MGFkONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInRtX3NldCKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHOSkgGShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKkMS4wMqp0ZXh0L3BsYWlukgKSpDEuMDKqdGV4dC9wbGFpbpIDkqQxLjAyqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI1OWJiYjIxZDNhNTFiMzDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSpDAuOTeqdGV4dC9wbGFpbpICkqQwLjk3qnRleHQvcGxhaW6SA5KkMC45N6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlYjg3OTY2NTUxZjc2ZjAz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI3NTQ5ZjFiNjI2NmU1YjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJ0bV9zdGVwIqp0ZXh0L3BsYWlukoWmcHJlZml4r1ZlY3RvcntGbG9hdDY0fahlbGVtZW50c5KSAZKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqcwLjAzMTI1qnRleHQvcGxhaW6SApKnMC4wMzEyNap0ZXh0L3BsYWlukgOSpzAuMDMxMjWqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwM2IyMzQxMTc3NWI1OWYzMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKnMC4wMzEyNap0ZXh0L3BsYWlukgKSpzAuMDMxMjWqdGV4dC9wbGFpbpIDkqcwLjAzMTI1qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNiMjM0MTE3NzViNTlmMzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZGFmZDUzOGY2YTQ0OWViMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOSkgGSoyIxIqp0ZXh0L3BsYWlukgKSoyIyIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlZmIxNWVlMTEzYWNhMGU32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKFpnByZWZpeNkiUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uQ29ubkNvbmZpZ6hlbGVtZW50c5KSAZKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukgKSs1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmEyNzJhZTI0OGUxMTNhYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKsIm5vbG9hZGxvc3MiqnRleHQvcGxhaW6SozAuMKp0ZXh0L3BsYWlukpKmImNtYWciqnRleHQvcGxhaW6SozAuMKp0ZXh0L3BsYWlukpKlInhzYyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkZIBkqMwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDNlZmVjNmM5ODQwOGI3YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKxInRyYW5zZm9ybWVyLnR4MSKqdGV4dC9wbGFpbpKSpyJzbV91YiKqdGV4dC9wbGFpbpKlNzUwLjCqdGV4dC9wbGFpbpKSpCJydyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkpIBkqMwLjCqdGV4dC9wbGFpbpICkqMwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwY2M4YTE3MWE0ODZiZjg4YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInRtX2ZpeCKqdGV4dC9wbGFpbpKFpnByZWZpeKxWZWN0b3J7Qm9vbH2oZWxlbWVudHOSkgGShaZwcmVmaXikQm9vbKhlbGVtZW50c5OSAZKkdHJ1Zap0ZXh0L3BsYWlukgKSpHRydWWqdGV4dC9wbGFpbpIDkqR0cnVlqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGVmNDliYzMxMTM4YjVkYWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoWmcHJlZml4pEJvb2yoZWxlbWVudHOTkgGSpHRydWWqdGV4dC9wbGFpbpICkqR0cnVlqnRleHQvcGxhaW6SA5KkdHJ1Zap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlZjQ5YmMzMTEzOGI1ZGFi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDI1YWE2NzZhZmY5ZWNiOGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5KSAZKkMTEuMKp0ZXh0L3BsYWlukgKSozQuMKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlYjMwZDAzMDQwNWE3OWUw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidG1fdWIiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkpIBkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSozEuMap0ZXh0L3BsYWlukgKSozEuMap0ZXh0L3BsYWlukgOSozEuMap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzM2ZlODE4YmUyZjU1YmFm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqMxLjGqdGV4dC9wbGFpbpICkqMxLjGqdGV4dC9wbGFpbpIDkqMxLjGqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMzNmZTgxOGJlMmY1NWJhZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0MzJiNjU1Nzc2ZWJhOThk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDE2MmRjYjJjOTY1NTE0NGOkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FGVTffsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ0NWMzMjBkZC1lMGIyLTQ2ZWMtYWYwOS1kODNlNTY1MjAyNmS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1aPLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDVmNzJlY2VjLWJiM2YtNDIzMS05M2MxLTcxOWUzOGUxN2JlNIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZuDxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5Zb3Ugd2lsbCBub3RlIHRoZSBwcmVzZW5jZSBvZiA8Y29kZT4mcXVvdDtkc3MmcXVvdDs8L2NvZGU+IGRpY3Rpb25hcmllcyB1bmRlciBjb21wb25lbnRzLCBhbmQgPGNvZGU+JnF1b3Q7ZHNzX29wdGlvbnMmcXVvdDs8L2NvZGU+IGF0IHRoZSByb290IGxldmVsPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTBbUQGwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDVmNzJlY2VjLWJiM2YtNDIzMS05M2MxLTcxOWUzOGUxN2JlNLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAE2D21cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ1NjQyMDBlMC0yMDgwLTQ0ZGEtOGRiZi0zN2M1ZTNhMzg0MTKKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gEMPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPkhlcmUgeW91IGNhbiBzZWUgdGhhdCB0aGUgc29sdXRpb24gY29tZXMgYmFjayBvdXQgYnkgZGVmYXVsdCBpbnRvIHRoZSBzYW1lIGRhdGEgbW9kZWwgYXMgaXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdG8gdGhlIHJ1bl8gY29tbWFuZCwgYXMgd2VsbCBhcyBiZWluZyBpbiBTSSB1bml0cywgYXMgb3Bwb3NlZCB0byBwZXIgdW5pdCwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgdGhlIHNvbHZlLiBGb3IgZXhhbXBsZSw8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRPCqovbBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkNTY0MjAwZTAtMjA4MC00NGRhLThkYmYtMzdjNWUzYTM4NDEyuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAS1erVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGU4NTI3MTJjLWQwOWEtNDFlMS05Nzg1LTMwOGMyMTljN2FkOIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukq8ibG9hZHNoYXBlLmxzMSKqdGV4dC9wbGFpbpKSpiJ0aW1lIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOakgGSozEuMKp0ZXh0L3BsYWlukgKSozIuMKp0ZXh0L3BsYWlukgOSozMuMKp0ZXh0L3BsYWlukgSSozQuMKp0ZXh0L3BsYWlukgWSozUuMKp0ZXh0L3BsYWlukgaSozYuMKp0ZXh0L3BsYWlukgeSozcuMKp0ZXh0L3BsYWlukgiSozguMKp0ZXh0L3BsYWlukgmSozkuMKp0ZXh0L3BsYWlukgqSpDEwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODc2NDY3NjMzMTg2OGM0MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpInJlcGxhY2UiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6SkqgidmFsdWVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOakgGSpTAuMDA1qnRleHQvcGxhaW6SApKkMC4wMap0ZXh0L3BsYWlukgOSpTAuMDE1qnRleHQvcGxhaW6SBJKkMC4wMqp0ZXh0L3BsYWlukgWSpTAuMDI1qnRleHQvcGxhaW6SBpKkMC4wM6p0ZXh0L3BsYWlukgeSpTAuMDM1qnRleHQvcGxhaW6SCJKkMC4wNKp0ZXh0L3BsYWlukgmSpTAuMDQ1qnRleHQvcGxhaW6SCpKkMC4wNap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiZDc3NTFiOTFkYWM1ZmE02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgib2Zmc2V0Iqp0ZXh0L3BsYWlukqMwLjCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjhmMTg2MGNlZGJiZWRjZKRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTDuOaywcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGU4NTI3MTJjLWQwOWEtNDFlMS05Nzg1LTMwOGMyMTljN2FkOLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzUz1tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZjiqZxdWV1ZWTCpGxvZ3OTiKRsaW5l/6Ntc2eS2UtDaXJjdWl0IGhhcyBiZWVuIHJlc2V0IHdpdGggdGhlICdjbGVhcicgb24gbGluZSAxIGluICdjYXNlM191bmJhbGFuY2VkLmRzcyeqdGV4dC9wbGFpbqdjZWxsX2lk2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmOma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fZDI0YWVjMDCkZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlbQ29tbWFuZCAnY2FsY3ZvbHRhZ2ViYXNlcycgb24gbGluZSAzNSBpbiAnY2FzZTNfdW5iYWxhbmNlZC5kc3MnIGlzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nLqp0ZXh0L3BsYWlup2NlbGxfaWTZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl83ODkyMTQ5NqRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2VBDb21tYW5kICdzb2x2ZScgb24gbGluZSAzNyBpbiAnY2FzZTNfdW5iYWxhbmNlZC5kc3MnIGlzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nLqp0ZXh0L3BsYWlup2NlbGxfaWTZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl83ODkyMTQ5NqRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZvp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmpKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SsCJ2c291cmNlLnNvdXJjZSKqdGV4dC9wbGFpbpKSpCJycyKqdGV4dC9wbGFpbpLZ1TTDlzQgTWF0cml4e0Zsb2F0NjR9OgogNC4yNzY5MWUtOCAgMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgNC4yNzY5MWUtOCAgMy45NjM0MmUtOSAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgNC4yNzY5MWUtOCAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgNC4yNzY5MWUtOKp0ZXh0L3BsYWlukpKkInZhIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDUyNGVlMGZkNDE3MWNjMTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNzA5ZWZmM2E3ZmY3YThmY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGFiMTc0N2EyZjJmZWFhZDDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0OTk0M2NjYzJmNmI4ZjEw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDkxMDgyMGFmM2NiOWIxNjXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJuYW1lIqp0ZXh0L3BsYWlukq4iM2J1c19leGFtcGxlIqp0ZXh0L3BsYWlukpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKmInF1YWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOWRjODUzOWY1NDEyNmRiMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SqyJsaW5lLnF1YWQiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcidF9idXMiqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDdjMzEzZGI1MzNiYzg3NWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJvaGxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOTk3ZjRmMGZkOThkNTgxMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlukpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKtImxpbmUub2hsaW5lIqp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnInRfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4ZWRkZGVkOWM0NGE3YTc22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDdhYWMxNTM1MWJlNzVkZmTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGYxNTgwZThhZmVlZTQ4OWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkq8ic2Jhc2VfZGVmYXVsdCKqdGV4dC9wbGFpbpKlNTAwLjCqdGV4dC9wbGFpbpKSsCJ2YmFzZXNfZGVmYXVsdCKqdGV4dC9wbGFpbpKFpnByZWZpeLJEaWN0e1N0cmluZywgUmVhbH2oZWxlbWVudHORkpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKnMC4yMzA5NKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxMjdlYzZhZGJkY2VjZWRj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkrYidm9sdGFnZV9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpK0InBvd2VyX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkrAiYmFzZV9mcmVxdWVuY3kiqnRleHQvcGxhaW6SpDUwLjCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGI4NzUyYjFiYjk1NmM2YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZpbGVzIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5GSAZLZaiIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy8uLi90ZXN0L2RhdGEvb3BlbmRzcy9jYXNlM191bmJhbGFuY2VkLmRzcyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODYzNDQ2MGEyOWEzMzNkONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKkImwyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SqSJsb2FkLmwyIqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzZDIxZGI4ODk4NzRiZjU52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDM5MWFhMjU4OTU3M2M1MznZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SpzAuMjMwOTSqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhMTAyYjQ4ZTY1NDNlMjU32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQibDMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKpImxvYWQubDMiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYwZWE4NGIzZGZjNDg1M2LZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTNhZjg2OGFlOTEzNjc5Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKnMC4yMzA5NKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGE1ZGY2OWU1NmQ3MzQ1OTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqkibG9hZC5sMSKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTU5OTNiODc0OTI2OTIyZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0NWE0NjJhNWFkMDJhMGU32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidm1fbm9tIqp0ZXh0L3BsYWlukqcwLjIzMDk0qnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwM2I5YmU1YjI5OGYxYjI5NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2ZjhlZThmOTAwZDJiYjc52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTA4MjNhMDliYzA1OTVlMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYmMxNjkwNTU5MzJlM2I3MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwN2ViMDQzYTM5NWExZjE3NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyMzMyMWZlNWUxNjU2NmE52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDU1NGU1MTcxNDE4OTkzNGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDQwMzk5NjJlOTkzMzI2ZTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjc4NDBiZGQ2N2M3YzI0Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTg2NDkwZGY0OTBhOWFlN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGYxOWIxNDk0ZmJmNjgyNjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYzcxYjIwMDBiNDgwZWMyYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpImxvYWRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGZjZGY3NTFiMTI0ZWYwYWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTZmYzc2NTI0Njg4Zjg4YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYjY4MWZkNjkwNTQ1NjkzMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYwMDcxODNjNTg5ZTMzMTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjZkZjcyZWE3NDA5OTQxOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2NWNhNTc1OTcxZGY0Mjdh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoibGluZWNvZGUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKoIjU1Nm1jbSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqYiYl9mciKqdGV4dC9wbGFpbpLZYDPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMjUuNDY0OCAgLTAuMCAgICAgLTAuMAogLTAuMCAgICAgMjUuNDY0OCAgLTAuMAogLTAuMCAgICAgLTAuMCAgICAgMjUuNDY0OKp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktlKM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjEgICAwLjA0ICAwLjA0CiAwLjA0ICAwLjEgICAwLjA0CiAwLjA0ICAwLjA0ICAwLjGqdGV4dC9wbGFpbpKSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlNTYxOWUyODZmYTJjNzIy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMDU4MyAgMC4wMjMzICAwLjAyMzMKIDAuMDIzMyAgMC4wNTgzICAwLjAyMzMKIDAuMDIzMyAgMC4wMjMzICAwLjA1ODOqdGV4dC9wbGFpbpKSpiJiX3RvIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqYiZ190byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDJmZmJkMjg0MDQ3YzEyZjDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSI0LzBxdWFkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpiJiX2ZyIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqQicnMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMTE2NyAgMC4wNDY3ICAwLjA0NjcKIDAuMDQ2NyAgMC4xMTY3ICAwLjA0NjcKIDAuMDQ2NyAgMC4wNDY3ICAwLjExNjeqdGV4dC9wbGFpbpKSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxZWNhMWRkZGUyNzM0ZGRj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMDY2NyAgMC4wMjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wNjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wMjY3ICAwLjA2NjeqdGV4dC9wbGFpbpKSpiJiX3RvIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqYiZ190byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGZmYjc0OTEyMjQ0ZGE4M2TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjkzNWNkMWVmNzRiMmY0MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKsImRhdGFfbW9kZWwiqnRleHQvcGxhaW6SukVOR0lORUVSSU5HOjpEYXRhTW9kZWwgPSAwqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzczNDdjNzIzMmVmZDBjNaRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlo2VuZ7JsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTAj4qiwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y7lkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzwAAAAFwaIZotXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkYTViNzM2ZjktMjc3Ni00NzYwLWIwNzMtZDAyMDI3YmFlZjEziqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSryJzYmFzZV9kZWZhdWx0Iqp0ZXh0L3BsYWlukqU1MDAuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4skRpY3R7U3RyaW5nLCBSZWFsfahlbGVtZW50c5GSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqcwLjIzMDk0qnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDEyN2VjNmFkYmRjZWNlZGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNTAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0Yjg3NTJiMWJiOTU2YzZipG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRMCcWpbBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkYTViNzM2ZjktMjc3Ni00NzYwLWIwNzMtZDAyMDI3YmFlZjEzuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXNPbi1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQyYmY4MDJlMi1mNzY5LTQ4ZGItYWRlZi1hNWEwNjZjNTY1YzKKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52VQ8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+QWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgc3BlY2lmaWVkIGF0IHBhcnNlIGJ5PC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUaf2q2wcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDJiZjgwMmUyLWY3NjktNDhkYi1hZGVmLWE1YTA2NmM1NjVjMrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAD9a21cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ4ZDU3MDFkMS05ZTkxLTQzYjUtOTc1Yi1mYzhlMGUzMDZlOTmKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gJOPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMj5SdW5uaW5nIE9wdGltYWwgUG93ZXIgRmxvdzwvaDI+CjxwPkluIHRoaXMgc2VjdGlvbiB3ZSBpbnRyb2R1Y2UgaG93IHRvIHJ1biBhbiBvcHRpbWFsIHBvd2VyIGZsb3cgJiM0MDtvcGYmIzQxOyBpbiBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiBvbiBhbiBlbmdpbmVlcmluZyBkYXRhIG1vZGVsPC9wPgo8cD5JbiBvcmRlciB0byBydW4gYW4gT1BGIHByb2JsZW0geW91IHdpbGwgbmVlZDwvcD4KPG9sPgo8bGk+PHA+YSBkYXRhIG1vZGVsPC9wPgo8L2xpPgo8bGk+PHA+YSBmb3JtdWxhdGlvbjwvcD4KPC9saT4KPGxpPjxwPmEgc29sdmVyPC9wPgo8L2xpPgo8L29sPgo8cD5JbiB0aGVzZSBleGFtcGxlcyB3ZSB3aWxsIHVzZSB0aGUgPGNvZGU+ZW5nPC9jb2RlPiBtb2RlbCB3ZSB3b3JrZWQgd2l0aCBhYm92ZSwgdGhlIDxjb2RlPkFDUFVQb3dlck1vZGVsPC9jb2RlPiwgd2hpY2ggaXMgYSBBQyBwb3dlciBmbG93IGZvcm11bGF0aW9uIGluIHBvbGFyIGNvb3JkaW5hdGVzLCBhbmQgdGhlIDxjb2RlPmlwb3B0X3NvbHZlcjwvY29kZT4gd2UgYWxyZWFkeSBkZWZpbmVkIGFib3ZlPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTDu41iwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDhkNTcwMWQxLTllOTEtNDNiNS05NzViLWZjOGUwZTMwNmU5OblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgALtB21cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ3MjNmNGUyNi04MDY1LTRlMjItOGM1Yy1kZTMyZDJlNDJiNDeKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52VY8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+QWx0ZXJuYXRpdmVseSwgd2UgY2FuIGFwcGx5IHRoaXMgZnVuY3Rpb24gYXQgcGFyc2U8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRRlVmPLBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkNzIzZjRlMjYtODA2NS00ZTIyLThjNWMtZGUzMmQyZTQyYjQ3uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAR9OrVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGIxNTU5M2I5LWY3NzUtNDdhZi1hYTliLTQ5ODBhNDAyOGZhYYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqYiYl9mciKqdGV4dC9wbGFpbpLZYDPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMjUuNDY0OCAgLTAuMCAgICAgLTAuMAogLTAuMCAgICAgMjUuNDY0OCAgLTAuMAogLTAuMCAgICAgLTAuMCAgICAgMjUuNDY0OKp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktldM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjExNjcgIDAuMDQ2NyAgMC4wNDY3CiAwLjA0NjcgIDAuMTE2NyAgMC4wNDY3CiAwLjA0NjcgIDAuMDQ2NyAgMC4xMTY3qnRleHQvcGxhaW6SkqciY21fdWIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKlNjAwLjCqdGV4dC9wbGFpbpICkqU2MDAuMKp0ZXh0L3BsYWlukgOSpTYwMC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFlY2ExZGRkZTI3MzRkZGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4cyKqdGV4dC9wbGFpbpLZXTPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wNjY3ICAwLjAyNjcgIDAuMDI2NwogMC4wMjY3ICAwLjA2NjcgIDAuMDI2NwogMC4wMjY3ICAwLjAyNjcgIDAuMDY2N6p0ZXh0L3BsYWlukpKmImJfdG8iqnRleHQvcGxhaW6S2WAzw5czIE1hdHJpeHtGbG9hdDY0fToKIDI1LjQ2NDggIC0wLjAgICAgIC0wLjAKIC0wLjAgICAgIDI1LjQ2NDggIC0wLjAKIC0wLjAgICAgIC0wLjAgICAgIDI1LjQ2NDiqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6SkqYiZ19mciKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmZmI3NDkxMjI0NGRhODNkpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRMEI+HbBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkYjE1NTkzYjktZjc3NS00N2FmLWFhOWItNDk4MGE0MDI4ZmFhuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXNfiy1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQzNmNhMTdiYy1iNTYwLTQ4YzktOTg4Zi0yNTU3ODA0NzlkMDWKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOZkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKwInZzb3VyY2Uuc291cmNlIqp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktnVNMOXNCBNYXRyaXh7RmxvYXQ2NH06CiA0LjI3NjkxZS04ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05CiAzLjk2MzQyZS05ICA0LjI3NjkxZS04ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05CiAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICA0LjI3NjkxZS04ICAzLjk2MzQyZS05CiAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICA0LjI3NjkxZS04qnRleHQvcGxhaW6SkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5SSAZKjMC4wqnRleHQvcGxhaW6SApKmLTEyMC4wqnRleHQvcGxhaW6SA5KlMTIwLjCqdGV4dC9wbGFpbpIEkqMwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTI0ZWUwZmQ0MTcxY2MxNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDcwOWVmZjNhN2ZmN2E4ZmPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ2bSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzlJIBkqgwLjIyOTk5M6p0ZXh0L3BsYWlukgKSqDAuMjI5OTkzqnRleHQvcGxhaW6SA5KoMC4yMjk5OTOqdGV4dC9wbGFpbpIEkqMwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYWIxNzQ3YTJmMmZlYWFkMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhzIqp0ZXh0L3BsYWluktnlNMOXNCBNYXRyaXh7RmxvYXQ2NH06CiAgMS41NDE3OGUtNyAgLTEuMDQ0OTdlLTkgIC0xLjA0NDk3ZS05ICAtMS4wNDQ5N2UtOQogLTEuMDQ0OTdlLTkgICAxLjU0MTc4ZS03ICAtMS4wNDQ5N2UtOSAgLTEuMDQ0OTdlLTkKIC0xLjA0NDk3ZS05ICAtMS4wNDQ5N2UtOSAgIDEuNTQxNzhlLTcgIC0xLjA0NDk3ZS05CiAtMS4wNDQ5N2UtOSAgLTEuMDQ0OTdlLTkgIC0xLjA0NDk3ZS05ICAgMS41NDE3OGUtN6p0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKSryJjb25maWd1cmF0aW9uIqp0ZXh0L3BsYWlukrNXWUU6OkNvbm5Db25maWcgPSAwqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQ5OTQzY2NjMmY2YjhmMTCkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1EwR9snsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQzNmNhMTdiYy1iNTYwLTQ4YzktOTg4Zi0yNTU3ODA0NzlkMDW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1VjLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDFlNzkxMjYyLTI2MWQtNDc1Ni1iZWM0LWVkZWJlNDczMjcwMIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZrDxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5JbiB0aGVzZSBleGFtcGxlcyB3ZSB3aWxsIHVzZSB0aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbiBzb2x2ZXJzLCBzcGVjaWZpZWQgdXNpbmcgPGNvZGU+b3B0aW1pemVyX3dpdGhfYXR0cmlidXRlczwvY29kZT4gZnJvbSBKdU1QIHYwLjIxPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUSldPAywcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDFlNzkxMjYyLTI2MWQtNDc1Ni1iZWM0LWVkZWJlNDczMjcwMLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAEiVa1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQyY2RkNjgyYS1iOTdmLTQ5ZGMtODgyOS00N2U3MTQ2NDk3YjmKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5oKRtaW1lqnRleHQvcGxhaW6scm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUaelSmwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDJjZGQ2ODJhLWI5N2YtNDlkYy04ODI5LTQ3ZTcxNDY0OTdiOblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzh4dee61cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ3NDVmMzNiZi05OGQ3LTRiMjctOTVmZC1lYzZiZjVlM2Q1Y2aKpnF1ZXVlZMKkbG9nc5GIpGxpbmX/o21zZ5LaAYMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqClRoaXMgcHJvZ3JhbSBjb250YWlucyBJcG9wdCwgYSBsaWJyYXJ5IGZvciBsYXJnZS1zY2FsZSBub25saW5lYXIgb3B0aW1pemF0aW9uLgogSXBvcHQgaXMgcmVsZWFzZWQgYXMgb3BlbiBzb3VyY2UgY29kZSB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAoRVBMKS4KICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gdmlzaXQgaHR0cHM6Ly9naXRodWIuY29tL2NvaW4tb3IvSXBvcHQKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgqqdGV4dC9wbGFpbqdjZWxsX2lk2SQ3NDVmMzNiZi05OGQ3LTRiMjctOTVmZC1lYzZiZjVlM2Q1Y2ama3dhcmdzkKJpZLlNYWluX1BsdXRvUnVubmVyXzMwNDNkYjhjpGZpbGXZQi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUGx1dG8va3hlc28vc3JjL3J1bm5lci9QbHV0b1J1bm5lci5qbKVncm91cKtQbHV0b1J1bm5lcqVsZXZlbK5Mb2dMZXZlbCgtNTU1KadydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5iSkqwic29sdmVfdGltZSKqdGV4dC9wbGFpbpKlMS4xOTWqdGV4dC9wbGFpbpKSqyJvcHRpbWl6ZXIiqnRleHQvcGxhaW6SpyJJcG9wdCKqdGV4dC9wbGFpbpKStCJ0ZXJtaW5hdGlvbl9zdGF0dXMiqnRleHQvcGxhaW6S2SlMT0NBTExZX1NPTFZFRDo6VGVybWluYXRpb25TdGF0dXNDb2RlID0gNKp0ZXh0L3BsYWlukpKtImR1YWxfc3RhdHVzIqp0ZXh0L3BsYWluktkkRkVBU0lCTEVfUE9JTlQ6OlJlc3VsdFN0YXR1c0NvZGUgPSAxqnRleHQvcGxhaW6Skq8icHJpbWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZJEZFQVNJQkxFX1BPSU5UOjpSZXN1bHRTdGF0dXNDb2RlID0gMap0ZXh0L3BsYWlukpKrIm9iamVjdGl2ZSKqdGV4dC9wbGFpbpKpMC4wMjE0ODEyqnRleHQvcGxhaW6Skqoic29sdXRpb24iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKwInZvbHRhZ2Vfc291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqCJzb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNkMzEwYmE4MzE5NDZkNTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZWUzMTlmOGY5Mzk1N2VlNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKmInF1YWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGMyYWYzOTEwMzQ4ZjczOWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJvaGxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGEyYzY2ZmE5ZjRiZGVmMTLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2Q4OGI3NzA0OWZmY2M3YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpyJzYmFzZSKqdGV4dC9wbGFpbpKlNTAwLjCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTA3ZmUyZmZkMDExOWVhY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKkImwyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2MDNhNzE0Y2YzOWVmMWQx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQibDMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDdiOWRhMzI1YWE2NTcyMTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmU0NDhlNmJhZmIzMzk5ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlMTBmOWE1MGY1NDk1ZTBi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0N2Q4MjA3ZGJlZTMwMWJi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiODU0MmE1ODlmZGIxM2Jm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjhlMTljOTIwMGY1YzZhNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkODI0ZWE0YmRmN2M5Zjgx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDljOTM4YTViZWZmNjcxYzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJvYmplY3RpdmVfbGIiqnRleHQvcGxhaW6SpC1JbmaqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYWZhZjA2MDQ4NDc5NDBlZqRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlpnJlc3VsdLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTwog2uwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDc0NWYzM2JmLTk4ZDctNGIyNy05NWZkLWVjNmJmNWUzZDVjZrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzwAAAAnKU8AftXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkODY3ZDhkMWQtMDQyYS00MmVjLTg0M2UtNTZiOGJhMmRiOTZhiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpCJudyKqdGV4dC9wbGFpbpKFpnByZWZpeL9EaWN0e1N0cmluZywgRGljdHtTdHJpbmcsIEFueX19qGVsZW1lbnRzmpKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTA2NDQ4YmJmYjNhOTI1NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyMDg4NjhmODdiODVhYzUx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFjYWFiNjAxMTNjMTY4ZmPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI0Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGJiOTRjOTQ1MWQyN2UxYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzNjIyODNkYmE2YjlkOWNi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDcyYzQ4ODdiOWZmM2RmM2XZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTQyOWVhNjBlMmI2MjEwYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1ODE0MjNjNTZhOWQzMjFh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDZkOGU1YThlOTU4N2FiMTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI1Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTdkMjUyYjEwOTBhM2JmZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3MGFhMjIyMDliYzkzY2Q02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDVkNjY2YzE0NzUzOGI2MjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjgzOGVkZTc4YWVkZTc1ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0NmNlOTRiOGM4MTIzMzMx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGIxNDJmZDNkOWNmMWMzYjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI2Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWEwODE0MzJlZThkMjkzNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkMDg0YTdiMDViN2U1MzUy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDI2NGViOTg5ODcwOTRhOTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI3Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTNiY2UyNmYwMWY5ZmQ2MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1NmVhNWU5YWU4NDk1MWEx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDJhYzFkMmFhOGZlZjhkYTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCIxMCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGVhMDU1ZGNlMGU4ZGFjNjXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmYzM2RkZjdiOGRjNjRjY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0OWU4MWZiYmNlM2MxZWUz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiOSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDUyMWQzODNhNWVhOWRjNzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjQ4OTBjMGMyMzg2YzJjZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3ZmUyODVmMDNhMzEwOTdm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiOCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGNiMTUwZDU4NTA5NmI2MzbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTAzNTdhYmE1YWUwNDZhNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhY2U5MmM0Mjk0M2RhNGZm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDhiMWNjOTE3NTBhNGUzOGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjgwZDliY2YwYTg2YThmYaRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlqnNvbF9lbmdfbW6ybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FHCwJpsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ4NjdkOGQxZC0wNDJhLTQyZWMtODQzZS01NmI4YmEyZGI5NmG5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ADot1tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMmMzNzU4NzgtZjE2Yi00ODMzLTlhYWEtYjgyNmZiZTA1NmEyiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoD3DxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+TWF0aGVtYXRpY2FsIE1vZGVsPC9oMj4KPHA+SW4gdGhpcyBzZWN0aW9uIHdlIGludHJvZHVjZSB0aGUgbWF0aGVtYXRpY2FsIG1vZGVsLCB3aGljaCB3YXMgdGhlIHByZXZpb3VzIHVzZXItZmFjaW5nIG1vZGVsIGluIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLCBleHBsYWluIGhvdyBjb252ZXJzaW9ucyBiZXR3ZWVuIHRoZSBtb2RlbCBoYXBwZW4gaW4gcHJhY3RpY2UsIGFuZCBnaXZlIGFuIGV4YW1wbGUgb2YgaG93IHRvIGRvIHRoaXMgY29udmVyc2lvbiBtYW51YWxseTwvcD4KPHA+SW4gcHJhY3RpY2UsIHVubGVzcyB0aGUgdXNlciBpcyBpbnRlcmVzdGVkLCB0aGUgY29udmVyc2lvbiBiZXR3ZWVuIHRoZSA8Y29kZT5FTkdJTkVFUklORzwvY29kZT4gYW5kIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4gbW9kZWxzIHNob3VsZCBiZSBzZWVtbGVzcyBhbmQgaW52aXNpYmxlIHRvIHRoZSB1c2VyLiBCeSBwcm92aWRpbmcgYW4gPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+IG1vZGVsIHRvIGEgPGNvZGU+cnVuXzwvY29kZT4gY29tbWFuZCB0aGUgPGNvZGU+cnVuX21jX21vZGVsPC9jb2RlPiBjb21tYW5kIHdpbGwga25vdyB0byBjb252ZXJ0IHRoZSBtb2RlbCB0byA8Y29kZT5NQVRIRU1BVElDQUw8L2NvZGU+LCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gdGhlIGdlbmVyYXRlIHRoZSBKdU1QIG1vZGVsIHRoYXQgd2lsbCBhY3R1YWxseSBiZSBvcHRpbWl6ZWQuIFNpbWlsYXJseSwgdGhlIHNvbHV0aW9uIGdlbmVyYXRlZCBieSB0aGlzIG9wdGltaXphdGlvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIGJhY2sgdG8gdGhlIGZvcm1hdCBvZiB0aGUgPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+IG1vZGVsLjwvcD4KPHA+TGV0JiMzOTtzIGZpcnN0IHRha2UgYSBsb29rIGF0IGhvdyB0byBjb252ZXJ0IHRvIHRoZSA8Y29kZT5NQVRIRU1BVElDQUw8L2NvZGU+IG1vZGVsPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUbBSzCwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDJjMzc1ODc4LWYxNmItNDgzMy05YWFhLWI4MjZmYmUwNTZhMrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAHIWi1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ1NDVjOTI3MC0yNTdhLTQ2ZTgtOTcwZC02YTlmY2YwOWRjMTeKpnF1ZXVlZMKkbG9nc5OIpGxpbmX/o21zZ5LZS0NpcmN1aXQgaGFzIGJlZW4gcmVzZXQgd2l0aCB0aGUgJ2NsZWFyJyBvbiBsaW5lIDEgaW4gJ2Nhc2UzX3VuYmFsYW5jZWQuZHNzJ6p0ZXh0L3BsYWlup2NlbGxfaWTZJDU0NWM5MjcwLTI1N2EtNDZlOC05NzBkLTZhOWZjZjA5ZGMxN6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl9kMjRhZWMwMKRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2VtDb21tYW5kICdjYWxjdm9sdGFnZWJhc2VzJyBvbiBsaW5lIDM1IGluICdjYXNlM191bmJhbGFuY2VkLmRzcycgaXMgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcuqnRleHQvcGxhaW6nY2VsbF9pZNkkNTQ1YzkyNzAtMjU3YS00NmU4LTk3MGQtNmE5ZmNmMDlkYzE3pmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzc4OTIxNDk2pGZpbGXZUi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3NfcGFyc2UuamylZ3JvdXCpZHNzX3BhcnNlpWxldmVspEluZm+IpGxpbmX/o21zZ5LZUENvbW1hbmQgJ3NvbHZlJyBvbiBsaW5lIDM3IGluICdjYXNlM191bmJhbGFuY2VkLmRzcycgaXMgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcuqnRleHQvcGxhaW6nY2VsbF9pZNkkNTQ1YzkyNzAtMjU3YS00NmU4LTk3MGQtNmE5ZmNmMDlkYzE3pmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzc4OTIxNDk2pGZpbGXZUi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3NfcGFyc2UuamylZ3JvdXCpZHNzX3BhcnNlpWxldmVspEluZm+ncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHPcABKSkrEiaXNfa3Jvbl9yZWR1Y2VkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6Skq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5OSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDhhZGRmMWE4YWE0NGNlYzjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqMiNCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqwidm1fcGFpcl9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK9hYjc1ZTY0NTBjNDhjYWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6StyJ2b2x0YWdlX3NvdXJjZS5zb3VyY2UiqnRleHQvcGxhaW6SkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXikQm9vbKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTRmYzRkYWM5ZGQ1ZmNhM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmInZtaW4iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMzE1ODNiMzVmN2EzZmJkONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKsInZtX3BhaXJfdWIiqnRleHQvcGxhaW6ShaZwcmVmaXi1VHVwbGV7QW55LCBBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNWRmZDhjMGNmNzUwZDE0OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImJ1c19pIqp0ZXh0L3BsYWlukqE0qnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTI0Y2RkODFkOTMzMzYwNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKsInZtX3BhaXJfbGIiqnRleHQvcGxhaW6ShaZwcmVmaXi1VHVwbGV7QW55LCBBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNzhmZGUwMDYyZDVkNDlkM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pEJvb2yoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDg3MzBlZWJjMDI0ZTVjZTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJ2bV9wYWlyX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4tVR1cGxle0FueSwgQW55LCBSZWFsfahlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDczNGFiNmYzMjFmODAwYWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJidXNfaSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukpKqImJ1c190eXBlIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmEzZDZmMWYwYTJiZjkwYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKsInZtX3BhaXJfbGIiqnRleHQvcGxhaW6ShaZwcmVmaXi1VHVwbGV7QW55LCBBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzA5ZDIzYWMzYzlkYzc0NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pEJvb2yoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNiYjk4NTIzZWI1ZjllNjbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJ2bV9wYWlyX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4tVR1cGxle0FueSwgQW55LCBSZWFsfahlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYyNWNiYzZhMDAxY2YxY2bZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJidXNfaSKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SkqoiYnVzX3R5cGUiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4YTQwZGZkNjI5MzgxZThi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqwidm1fcGFpcl9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK81MjNlZmU3YzVhYzlmY2PZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKRCb29sqGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5ZmUxYWJjMWIzYWYwMjZj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwidm1fcGFpcl91YiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxOGJmYjdjNjZjZTQyY2Zk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciYnVzX2kiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSqiJidXNfdHlwZSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGMyZmI1NjY1OWFhY2E3ZjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzc4NzE4NTk4NGQwZWFlYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmIm5hbWUiqnRleHQvcGxhaW6SriIzYnVzX2V4YW1wbGUiqnRleHQvcGxhaW6SkqUibWFwIqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjczMDRiZTlhM2Y0ZTA5MqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWM5Zjg5NDRlMmU0YzczN6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDdlOGRlMGI3Mjc1ZTY2MzSpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2ZWZiMmZjMThiYzE4OTMzqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjg5M2Y4ZGI5YjViNjhhYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjFlNGNmYmExODFkMWI4NqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI0OWNmNjcyMzQ2MjY0ZTmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxNDQwMGRiZGJhMDc2MmM0qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc1YWZjYzM5N2RmYTk2N6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTg4Yzk2MWVkYmE3MDQ1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNTE2NDQ5ZmE3ZmEyYjUxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2E2Y2U5ZjI2ZDFjNWM0MqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBhMGVhOTcxYTAzMzc0NGUzqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZK83NGJmNWFiZWQxNzBjZjWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTQ4NTUyNDQ4ODk0YzA3ZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmFiY2M3Y2JhZTBjM2JiZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0Mjc5NjQwYTkwM2QzZjFlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZK82NDEwYWY0MDA2NjZlYmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU0ZGUxNGU1M2U1NzgyNDLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkr2ZlMzA4ZDlmZjJkYzIwYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM0OWU5ZmY4YmVhN2E2OGOpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLBkOGVmNmVhMGE1Y2I5ODUxpnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKvInNiYXNlX2RlZmF1bHQiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6SkrAidmJhc2VzX2RlZmF1bHQiqnRleHQvcGxhaW6ShaZwcmVmaXiyRGljdHtTdHJpbmcsIFJlYWx9qGVsZW1lbnRzkZKSoyIyIqp0ZXh0L3BsYWlukqcwLjIzMDk0qnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGY2NGY0MzdhODE4MTkzZGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6Skqcic2Jhc2UiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNTAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1ZDFiOTNiMGNmZjdkNjkx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpCJwZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiMjkxMzM1NGY5ZGYxMTcw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibW9kZWwiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwY2M1YjJmZjBhZDk5YmM2M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNodXRkb3duIqp0ZXh0L3BsYWlukqMwLjCqdGV4dC9wbGFpbpKSqSJzdGFydHVwIqp0ZXh0L3BsYWlukqMwLjCqdGV4dC9wbGFpbpKSryJjb25maWd1cmF0aW9uIqp0ZXh0L3BsYWlukrNXWUU6OkNvbm5Db25maWcgPSAwqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmI4MWVlNWQwYjliNGVjM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmODI4NTQ1NjA2MTM5Y2Fk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgiYnJhbmNoIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpiJicl9yIqp0ZXh0L3BsYWluktluM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAxLjA5NDA2ICAgMC40Mzc4MTIgIDAuNDM3ODEyCiAwLjQzNzgxMiAgMS4wOTQwNiAgIDAuNDM3ODEyCiAwLjQzNzgxMiAgMC40Mzc4MTIgIDEuMDk0MDaqdGV4dC9wbGFpbpKSqCJyYXRlX2EiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNWQ5YTAyYTFjZmYxODUxZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGU0ZmRlZDFlZGVkOGFhMTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJyYXRlX2IiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDcwMDlmMGJhMmJlYmMwM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmIm5hbWUiqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlukpKmImJyX3giqnRleHQvcGxhaW6S2W8zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuNjI1MzEyICAwLjI1MDMxMiAgMC4yNTAzMTIKIDAuMjUwMzEyICAwLjYyNTMxMiAgMC4yNTAzMTIKIDAuMjUwMzEyICAwLjI1MDMxMiAgMC42MjUzMTKqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyOWI1ZWZjMTY4MjQ0YmRi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqYiYnJfciKqdGV4dC9wbGFpbpLZWzPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC45Mzc1ICAwLjM3NSAgIDAuMzc1CiAwLjM3NSAgIDAuOTM3NSAgMC4zNzUKIDAuMzc1ICAgMC4zNzUgICAwLjkzNzWqdGV4dC9wbGFpbpKSqCJyYXRlX2EiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOGI1NWYwODFhYjY5MThjMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDkyNDYwNjE3Yjk2ODJjOGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJyYXRlX2IiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTBjYTJkNzAzNjUxOTI0ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmIm5hbWUiqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW6SkqYiYnJfeCKqdGV4dC9wbGFpbpLZbzPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC41NDY1NjIgIDAuMjE4NDM3ICAwLjIxODQzNwogMC4yMTg0MzcgIDAuNTQ2NTYyICAwLjIxODQzNwogMC4yMTg0MzcgIDAuMjE4NDM3ICAwLjU0NjU2Mqp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGUwYWVkNWMwNTYyZjM3NjLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6StyJ2b2x0YWdlX3NvdXJjZS5zb3VyY2UiqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNGIyMTA1YTZhYjI0ZjJhZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqE0qnRleHQvcGxhaW6SkqYiYnJfciKqdGV4dC9wbGFpbpLZgTPDlzMgTWF0cml4e0Zsb2F0NjR9OgogNC4wMDk2MWUtNyAgMy43MTU3MWUtOCAgMy43MTU3MWUtOAogMy43MTU3MWUtOCAgNC4wMDk2MWUtNyAgMy43MTU3MWUtOAogMy43MTU3MWUtOCAgMy43MTU3MWUtOCAgNC4wMDk2MWUtN6p0ZXh0L3BsYWlukpKmImJfZnIiqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbpKSqyJicl9zdGF0dXMiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzYjI2ZWQyZjhhZTkzNWVm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDdhYzE3NjlkMGIzMWQ1ZjXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJzdG9yYWdlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSuYjAxY2YzMTcyMzEzY2LZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzd2l0Y2giqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOQpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlNzdhMmUyMzY0YTUzZTA02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4iaXNfcHJvamVjdGVkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6SkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSrCJkYXRhX21vZGVsIqp0ZXh0L3BsYWlukrtNQVRIRU1BVElDQUw6OkRhdGFNb2RlbCA9IDGqdGV4dC9wbGFpbpKSpyJzaHVudCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5CkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGQxZGQ3OTU3Mzk3ZGUxNDjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJ0cmFuc2Zvcm1lciKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5CkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNiYWJlYzg2OGQwOGMwODnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJidXNfbG9va3VwIqp0ZXh0L3BsYWlukoWmcHJlZml4sERpY3R7QW55LCBJbnQ2NH2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDIwYjhiZjhkZDYyYWUxMzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsb2FkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTJjZWFhYTYxOTdiMWY5YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImNvbmZpZ3VyYXRpb24iqnRleHQvcGxhaW6Ss1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6SkqQicWQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjkzNGM0Zjc0NzY4YTYxOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU2OTc5NGM1ZTFmZDViMTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNWM0NDY1ZWRhYzY2N2JmZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImNvbmZpZ3VyYXRpb24iqnRleHQvcGxhaW6Ss1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6SkqQicWQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzk0ZWM4MmEwNzljYzc2ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDdiYmYzZWRlOGM0YzJmZTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvNmIwNjYwYzgxM2U4Y2U02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4Yjg5ZWE5ZThjMTMwZWRl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvZTZiNWQzM2IxYTViZGRj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGNkZDVhMDM4YjE2ZGYyYWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwN2I1Mjc4NTUwYzY1N2MyOaRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUblhQGwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDU0NWM5MjcwLTI1N2EtNDZlOC05NzBkLTZhOWZjZjA5ZGMxN7lkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgB7YPe1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRmZGE0MjBhMS1lNTYzLTRhNDEtODRkNC0yYTU3MGJmMTYzYWWKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gRPPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMz5NdWx0aW5ldHdvcmtzPC9oMz4KPHA+SW4gdGhpcyBzdWJzZWN0aW9uIHdlIGNvdmVyIHBhcnNpbmcgaW50byBhIG11bHRpbmV0d29yayBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggaXMgYSBzdHJ1Y3R1cmUgdGhhdCBvbmx5IGV4aXN0cyBpbiB0aGUgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBtb2RlbDwvcD4KPHA+Rm9yIHRob3NlIHVuZmFtaWxpYXIsIHRoZSBJbmZyYXN0cnVjdHVyZU1vZGVscyBmYW1pbHkgb2YgcGFja2FnZXMgaGFzIGEgZmVhdHVyZSBjYWxsZWQgbXVsdGluZXR3b3Jrcywgd2hpY2ggaXMgdXNlZnVsIGZvciwgYW1vbmcgb3RoZXIgdGhpbmdzLCBydW5uaW5nIG9wdGltaXphdGlvbiBwcm9ibGVtcyBvbiB0aW1lIHNlcmllcyB0eXBlIHByb2JsZW1zLjwvcD4KPHA+TXVsdGluZXR3b3JrIGRhdGEgc3RydWN0dXJlcyBhcmUgZm9ybWF0dGVkIGxpa2Ugc288L3A+CjxwcmU+PGNvZGUgY2xhc3M9Imxhbmd1YWdlLWp1bGlhIj5tbiAmIzYxOyBEaWN0JiMxMjM7U3RyaW5nLEFueSYjMTI1OyYjNDA7CiAgICAmcXVvdDttdWx0aW5ldHdvcmsmcXVvdDsgJiM2MTsmZ3Q7IHRydWUsCiAgICAmcXVvdDtudyZxdW90OyAmIzYxOyZndDsgRGljdCYjMTIzO1N0cmluZyxBbnkmIzEyNTsmIzQwOwogICAgICAgICZxdW90OzEmcXVvdDsgJiM2MTsmZ3Q7IERpY3QmIzEyMztTdHJpbmcsQW55JiMxMjU7JiM0MDsKICAgICAgICAgICAgJnF1b3Q7YnVzJnF1b3Q7ICYjNjE7Jmd0OyBEaWN0JiMxMjM7U3RyaW5nLEFueSYjMTI1OyYjNDA7JiM0MTssCiAgICAgICAgICAgIC4uLgogICAgICAgICYjNDE7LAogICAgICAgIC4uLgogICAgJiM0MTssCiAgICAuLi4KJiM0MTs8L2NvZGU+PC9wcmU+CjxwPlRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgbXVsdGluZXR3b3JrIHN0cnVjdHVyZSBmcm9tIGFuIGVuZ2luZWVyaW5nIG1vZGVsIHRoYXQgY29udGFpbnMgPGNvZGU+dGltZV9zZXJpZXM8L2NvZGU+IGVsZW1lbnRzLCB3ZSBjYW4gdXNlIHRoZSA8Y29kZT5tdWx0aW5ldHdvcms8L2NvZGU+IGtleXdvcmQgYXJndW1lbnQgaW4gPGNvZGU+dHJhbnNmb3JtX2RhdGFfbW9kZWw8L2NvZGU+PC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUboO/ewcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGZkYTQyMGExLWU1NjMtNGE0MS04NGQ0LTJhNTcwYmYxNjNhZblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAIq/C1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRjODg0ZmQ1Yi00ZWNiLTQwMmItYjIyOC0wMWI5YTYxZGI4YmaKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gLXPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPkRpZmZlcmVudCBpbmZvcm1hdGlvbiBhbmQgd2FybmluZyBtZXNzYWdlcyB3aWxsIGJlIGdpdmVuIGRlcGVuZGluZyBvbiB0aGUgaW5wdXQgZmlsZS4gSW4gdGhlIGNhc2UgYWJvdmUsIHRoZXNlIG1lc3NhZ2VzIGFsbCByZWxhdGVkIHRvIHZhcmlvdXMgcGFyc2Ugbm90aWZpY2F0aW9ucyB0aGF0IGFyaXNlIGR1cmluZyBhIHBhcnNlIG9mIGEgZHNzIGZpbGUsIGFuZCBjYW4gYmUgc2FmZWx5IGlnbm9yZWQ8L3A+CjxwPlRoZSByZXN1bHRpbmcgZGF0YSBzdHJ1Y3R1cmUgaXMgYSBKdWxpYSBkaWN0aW9uYXJ5LiBUaGUgZmlyc3Qgbm90YWJsZSBmaWVsZCBpcyA8Y29kZT4mcXVvdDtkYXRhX21vZGVsJnF1b3Q7PC9jb2RlPiB3aGljaCBzcGVjaWZpZXMgd2hpY2ggZGF0YSBtb2RlbCB0aGlzIGRhdGEgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvLCBpbiB0aGlzIGNhc2UgPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+LiBUaGlzIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIGFuIDxjb2RlPkVudW08L2NvZGU+IG9mIHR5cGUgPGNvZGU+RGF0YU1vZGVsPC9jb2RlPjwvcD4KPHA+VGhlIG5leHQgbm90YWJsZSBmaWVsZCBpcyA8Y29kZT4mcXVvdDtzZXR0aW5ncyZxdW90OzwvY29kZT4sIHdoaWNoIGNvbnRhaW5zIHNvbWUgaW1wb3J0YW50IGRlZmF1bHQvc3RhcnRpbmcgdmFsdWVzIGZvciB0aGUgZGlzdHJpYnV0aW9uIG5ldHdvcms8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRMCRzR7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkYzg4NGZkNWItNGVjYi00MDJiLWIyMjgtMDFiOWE2MWRiOGJmuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAbKSrVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDI5YThhNTYwLTdkNWUtNDkyOS04NzdhLTJkYWIxNzMwOTk2OIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaA108ZGl2IGNsYXNzPSJtYXJrZG93biI+PHVsPgo8bGk+PHA+PGNvZGU+JnF1b3Q7c2Jhc2VfZGVmYXVsdCZxdW90OzwvY29kZT4gaXMgdGhlIHN0YXJ0aW5nIHZhbHVlIGZvciB0aGUgcG93ZXIgYmFzZSw8L3A+CjwvbGk+CjxsaT48cD48Y29kZT4mcXVvdDt2YmFzZXNfZGVmYXVsdCZxdW90OzwvY29kZT4gaXMgdGhlIHN0YXJ0aW5nIHZvbHRhZ2UgYmFzZSBmb3IgdGhlIGNhc2UsIGFuZCBtdWx0aXBsZSB2b2x0YWdlIGJhc2VzIGNhbiBiZSBzcGVjaWZpZWQsIHdoaWNoIHdvdWxkIGJlIHVzZWZ1bCBpbiBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGUgaXNvbGF0ZWQgaXNsYW5kcyB3aXRoIHRoZWlyIG93biBnZW5lcmF0aW9uLDwvcD4KPC9saT4KPGxpPjxwPjxjb2RlPiZxdW90O3ZvbHRhZ2Vfc2NhbGVfZmFjdG9yJnF1b3Q7PC9jb2RlPiBpcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBhbGwgdm9sdGFnZSB2YWx1ZXMsIHdoaWNoIGluIHRoZSBjYXNlIG9mIE9wZW5EU1MgaXMgaW4ga1YgYnkgZGVmYXVsdDwvcD4KPC9saT4KPGxpPjxwPjxjb2RlPiZxdW90O3Bvd2VyX3NjYWxlX2ZhY3RvciZxdW90OzwvY29kZT4gaXMgYSBzY2FsaW5nIGZhY3RvciBmb3IgYWxsIHBvd2VyIHZhbHVlczwvcD4KPC9saT4KPGxpPjxwPjxjb2RlPiZxdW90O2Jhc2VfZnJlcXVlbmN5JnF1b3Q7PC9jb2RlPiBpcyB0aGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIG5ldHdvcmsgaW4gSHosIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93IGZvciBtaXhlZCBmcmVxdWVuY3kgbmV0d29ya3M8L3A+CjwvbGk+CjwvdWw+CjxwPk5leHQgd2UgbG9vayBhdCB0aGUgPGNvZGU+JnF1b3Q7YnVzJnF1b3Q7PC9jb2RlPiBjb21wb25lbnRzPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTAupNewcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDI5YThhNTYwLTdkNWUtNDkyOS04NzdhLTJkYWIxNzMwOTk2OLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgEIPPe1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ3NjNhMTUwNC1mOTI3LTRkZmMtYTA0Mi1hYzY2MzI0NzA4YTmKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOYkpKsInNvbHZlX3RpbWUiqnRleHQvcGxhaW6SqjAuMDA4NTM4MDGqdGV4dC9wbGFpbpKSqyJvcHRpbWl6ZXIiqnRleHQvcGxhaW6SpyJJcG9wdCKqdGV4dC9wbGFpbpKStCJ0ZXJtaW5hdGlvbl9zdGF0dXMiqnRleHQvcGxhaW6S2SlMT0NBTExZX1NPTFZFRDo6VGVybWluYXRpb25TdGF0dXNDb2RlID0gNKp0ZXh0L3BsYWlukpKtImR1YWxfc3RhdHVzIqp0ZXh0L3BsYWluktkkRkVBU0lCTEVfUE9JTlQ6OlJlc3VsdFN0YXR1c0NvZGUgPSAxqnRleHQvcGxhaW6Skq8icHJpbWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZJEZFQVNJQkxFX1BPSU5UOjpSZXN1bHRTdGF0dXNDb2RlID0gMap0ZXh0L3BsYWlukpKrIm9iamVjdGl2ZSKqdGV4dC9wbGFpbpKpMC4wMjE0ODEyqnRleHQvcGxhaW6Skqoic29sdXRpb24iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKwInZvbHRhZ2Vfc291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqCJzb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDUzODJjOTM5NjBjNDU4MGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTIzZDRjNGFmZTM5M2Y1NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKmInF1YWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDU2MTc1MjU3ZTVlY2M4MGbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJvaGxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNhYzBlNjY0MmYzZmY1MzDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzA5ZWI5ODQ5YWZjZDc3MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpyJzYmFzZSKqdGV4dC9wbGFpbpKlNTAwLjCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTQyMTBiYTE4MjAxMjExMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKkImwyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3NWExMGEzODI1MDA0OGJi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQibDMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFjZjRhZDExOTNhNzg3MDXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwN2M3MDM5NTViMjlmZGU5YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4MDQzMjc1MzNhNDVhYjA52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkYmZmYjhlN2YxYmRlMWI12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyYjAxOGYyNTBmYzE5MTcy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjg3OGU3NzQyYWIwMmFjMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhZGUzZjY3ZjE1ODYyNTFj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGM0MDEyMTU1YzFjMTA0ODXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJvYmplY3RpdmVfbGIiqnRleHQvcGxhaW6SpC1JbmaqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDkxNWEwMzI0YmU5MWQ4Y6RtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlqXJlc3VsdF9wdbJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTwxefKwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDc2M2ExNTA0LWY5MjctNGRmYy1hMDQyLWFjNjYzMjQ3MDhhOblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgEosgG1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQyZTRmZTAwMC00NDljLTRmYzAtODcwNy00YzUxYWM1MGFiMDOKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gMNPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPldlIGNhbiBzZWUgdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSBWZWN0b3JzIGZvciA8Y29kZT4mcXVvdDtwZF9ub20mcXVvdDs8L2NvZGU+IGFuZCA8Y29kZT4mcXVvdDtxZF9ub20mcXVvdDs8L2NvZGU+IGFyZSBvbmx5IG9uZSwgYWx0aG91Z2ggdGhlIG51bWJlciBvZiB0ZXJtaW5hbHMgbGlzdGVkIGluIDxjb2RlPiZxdW90O2Nvbm5lY3Rpb25zJnF1b3Q7PC9jb2RlPiBpcyB0d28uIFRoaXMgaXMgYmVjYXVzZSB0aGUgY29ubmVjdGlvbiBpcyBXWUUsIGFuZCB0aGVyZWZvcmUgdGhlIGZpbmFsIGNvbm5lY3Rpb24gaXMgYSBncm91bmRlZCBuZXV0cmFsPC9wPgo8cD5IZXJlIHdlIGFyZSBhbHNvIGludHJvZHVjZWQgdG8gdHdvIG5ldyBFbnVtcywgPGNvZGU+V1lFPC9jb2RlPiwgd2hpY2ggZ2l2ZXMgdGhlIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiwgYW5kIDxjb2RlPk5PPC9jb2RlPiB1bmRlciBkaXNwYXRjaGFibGUsIHdoaWNoIGluZGljYXRlcyB0aGF0IGlmIHRoaXMgY2FzZSB3ZXJlIHVzZWQgaW4gYW4gTUxEIHByb2JsZW0sIDxlbT5pLmUuPC9lbT4gd2l0aCA8Y29kZT5ydW5fbWNfbWxkPC9jb2RlPiB0aGF0IHRoaXMgbG9hZCB3b3VsZCBub3QgYmUgc2hlZGRhYmxlLjwvcD4KPHA+RmluYWxseSwgd2Ugc2hvdyB0aGUgZ2VuZXJhdGlvbiBzb3VyY2UgZm9yIHRoaXMgY2FzZSwgd2hpY2ggaW4gb3BlbmRzcyBpcyBhIHZvbHRhZ2Ugc291cmNlIG5hbWVkIDxjb2RlPiZxdW90O3NvdXJjZSZxdW90OzwvY29kZT48L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRMEJxP7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMmU0ZmUwMDAtNDQ5Yy00ZmMwLTg3MDctNGM1MWFjNTBhYjAzuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAfs67VwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDBlYmE0MDNlLWMyYmEtNGFmMy04ZGNjLWZlMTRhM2MyMmJkN4qmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZuTxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5UaGlzIGZlYXR1cmUgaXMgdXNlZnVsIGZvciBidWlsZGluZyBtdWx0aW5ldHdvcmsgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCB3aWxsIGJlIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUgc2VjdGlvbiBvbiB0aGUgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBtb2RlbDwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1Ew7pM+sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQwZWJhNDAzZS1jMmJhLTRhZjMtOGRjYy1mZTE0YTNjMjJiZDe5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABJdmtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMTJiYTAyZmYtOTFkZC00MzU1LWFkMmItZjNjYTNiNjFlMzE4iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoDxjxkaXYgY2xhc3M9Im1hcmtkb3duIj48cHJlPjxjb2RlIGNsYXNzPSJsYW5ndWFnZS1NaW4gMC41IDBfcGdfMSYjOTE7MSYjOTM7ICYjNDM7IDAuNSAwX3BnXzEmIzkxOzImIzkzOyAmIzQzOyAwLjUgMF9wZ18xJiM5MTszJiM5MzsiPlN1YmplY3QgdG8KIDBfJiM0MDszLDQsMiYjNDE7X3AmIzkxOzEmIzkzOyAtIDBfcGdfMSYjOTE7MSYjOTM7ICYjNjE7IDAuMAogMF8mIzQwOzMsNCwyJiM0MTtfcCYjOTE7MiYjOTM7IC0gMF9wZ18xJiM5MTsyJiM5MzsgJiM2MTsgMC4wCiAwXyYjNDA7Myw0LDImIzQxO19wJiM5MTszJiM5MzsgLSAwX3BnXzEmIzkxOzMmIzkzOyAmIzYxOyAwLjAKIDBfJiM0MDsyLDIsMSYjNDE7X3AmIzkxOzEmIzkzOyAtIDBfJiM0MDszLDQsMiYjNDE7X3AmIzkxOzEmIzkzOyAmIzYxOyAwLjAKIDBfJiM0MDsyLDIsMSYjNDE7X3AmIzkxOzImIzkzOyAtIDBfJiM0MDszLDQsMiYjNDE7X3AmIzkxOzImIzkzOyAmIzYxOyAwLjAKIDBfJiM0MDsyLDIsMSYjNDE7X3AmIzkxOzMmIzkzOyAtIDBfJiM0MDszLDQsMiYjNDE7X3AmIzkxOzMmIzkzOyAmIzYxOyAwLjAKIC0wXyYjNDA7MSwxLDMmIzQxO19wJiM5MTsxJiM5MzsgJiM2MTsgLTAuMDE4MDAwMDAwMDAwMDAwMDAyCiAtMF8mIzQwOzEsMSwzJiM0MTtfcCYjOTE7MiYjOTM7ICYjNjE7IC0wLjAxMgogLTBfJiM0MDsxLDEsMyYjNDE7X3AmIzkxOzMmIzkzOyAmIzYxOyAtMC4wMTIKIC0wXyYjNDA7MiwyLDEmIzQxO19wJiM5MTsxJiM5MzsgJiM0MzsgMF8mIzQwOzEsMSwzJiM0MTtfcCYjOTE7MSYjOTM7ICYjNjE7IDAuMAogLTBfJiM0MDsyLDIsMSYjNDE7X3AmIzkxOzImIzkzOyAmIzQzOyAwXyYjNDA7MSwxLDMmIzQxO19wJiM5MTsyJiM5MzsgJiM2MTsgMC4wCiAtMF8mIzQwOzIsMiwxJiM0MTtfcCYjOTE7MyYjOTM7ICYjNDM7IDBfJiM0MDsxLDEsMyYjNDE7X3AmIzkxOzMmIzkzOyAmIzYxOyAwLjA8L2NvZGU+PC9wcmU+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRSD0Ob7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMTJiYTAyZmYtOTFkZC00MzU1LWFkMmItZjNjYTNiNjFlMzE4uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOHwIyprVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGU3YjU4OGU5LWZiNWYtNDM4My1iNWM2LWJjZTllZDhmNWE2MIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKpLTAuNDg0MjM4qnRleHQvcGxhaW6SApKoLTEyMC4yNDOqdGV4dC9wbGFpbpIDkqcxMjAuMjc0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDkzNWFkZjI3NjA3NDRjNDnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ2bSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqgwLjk2MzU0Nqp0ZXh0L3BsYWlukgKSqDAuOTgxNzU3qnRleHQvcGxhaW6SA5KoMC45NzY3NzmqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvYzg2YTQzMDUyY2Q4ODRk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGY4NzhlNzc0MmFiMDJhYzGkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1E8Mpk5sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRlN2I1ODhlOS1mYjVmLTQzODMtYjVjNi1iY2U5ZWQ4ZjVhNjC5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1clLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDA3ZmM1YTFiLTRhOWUtNGExMC1iZjdhLWQyNjgyNzY5YWM5N4qmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaARk8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPkNvbmNsdXNpb248L2gyPgo8cD5UaGlzIGNvbmNsdWRlcyB0aGUgaW50cm9kdWN0aW9uIHRvIHRoZSA8Y29kZT5FTkdJTkVFUklORzwvY29kZT4gZGF0YSBtb2RlbCBhbmQgY29udmVyc2lvbiB0byB0aGUgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBtb2RlbC4gV2UgaG9wZSB0aGF0IHlvdSB3aWxsIGZpbmQgdGhpcyBuZXcgZGF0YSBtb2RlbCBhYnN0cmFjdGlvbiBlYXN5IHRvIHVzZSBhbmQgc2ltcGxlIHRvIHVuZGVyc3RhbmQ8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRSD13krBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMDdmYzVhMWItNGE5ZS00YTEwLWJmN2EtZDI2ODI3NjlhYzk3uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAATg1bVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGUzZmUwYTVlLTk0MzEtNDUzZC1iN2U1LTgyMWRlNjI0YTRlZoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5iSkqwic29sdmVfdGltZSKqdGV4dC9wbGFpbpKqMC4wMDg5OTE5Nqp0ZXh0L3BsYWlukpKrIm9wdGltaXplciKqdGV4dC9wbGFpbpKnIklwb3B0Iqp0ZXh0L3BsYWlukpK0InRlcm1pbmF0aW9uX3N0YXR1cyKqdGV4dC9wbGFpbpLZKUxPQ0FMTFlfU09MVkVEOjpUZXJtaW5hdGlvblN0YXR1c0NvZGUgPSA0qnRleHQvcGxhaW6Skq0iZHVhbF9zdGF0dXMiqnRleHQvcGxhaW6S2SRGRUFTSUJMRV9QT0lOVDo6UmVzdWx0U3RhdHVzQ29kZSA9IDGqdGV4dC9wbGFpbpKSryJwcmltYWxfc3RhdHVzIqp0ZXh0L3BsYWluktkkRkVBU0lCTEVfUE9JTlQ6OlJlc3VsdFN0YXR1c0NvZGUgPSAxqnRleHQvcGxhaW6Skqsib2JqZWN0aXZlIqp0ZXh0L3BsYWlukqkwLjAyMTQ4MTKqdGV4dC9wbGFpbpKSqiJzb2x1dGlvbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5iSkqgiYnJhbmNoIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlOGQxMTM4MDRlNzYyMjI52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjA3NDQ5MTFkZGE5ZWY4NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGYzZGEwYzkyNjQ4NzQ4ZDXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGNiOTVmNzE5NjM0MTRkMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImdlbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTg1ZGQxMmFhZDhmOTVlMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjMzFkZjZhMjAzMGZlZWFk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkrUibXVsdGlpbmZyYXN0cnVjdHVyZSKqdGV4dC9wbGFpbpKlZmFsc2WqdGV4dC9wbGFpbpKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkq8ic2Jhc2VfZGVmYXVsdCKqdGV4dC9wbGFpbpKlNTAwLjCqdGV4dC9wbGFpbpKSsCJ2YmFzZXNfZGVmYXVsdCKqdGV4dC9wbGFpbpKFpnByZWZpeLJEaWN0e1N0cmluZywgUmVhbH2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk2MGMzYjQ3MmI2YjdlZDjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6Skqcic2Jhc2UiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNTAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK9kYmQ4ZWZkOWFiZDllYWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJtdWx0aW5ldHdvcmsiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6SkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTBlMWVlYmUxZTk2ZDFmN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDZmMGYyMGJiNWFmMWM5NzXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0MGRmMTg5ZDdlOTE5ZDM22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQxMWM1ZmIxZmYwYzI1ODfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKjIjQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFlYjNlMmM4NWEzYmEzN2HZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlMGI5NWJmNjNlNDZkNDg52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNzc2MWZmNmJlYjk4MWRhMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGNmOTAzOTY1MWJmNGEyM2bZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYmY1Y2E2ZTZmYjhkM2JhYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDZkNTU2MjRjZDc2YzNiYzjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJvYmplY3RpdmVfbGIiqnRleHQvcGxhaW6SpC1JbmaqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDY3YWE4YzA4OWM4NzA5NKRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlq3Jlc3VsdF9tYXRosmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRRwJHjbBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZTNmZTBhNWUtOTQzMS00NTNkLWI3ZTUtODIxZGU2MjRhNGVmuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAX76bbVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDc4NWExYzM5LWFhNTYtNDI0NC1iN2I5LTMxZDdhMzFiNzNjM4qmcXVldWVkwqRsb2dzkYikbGluZf+jbXNnktlyYXNzdW1pbmcgdGltZSBpcyBpbiBob3VycyBmb3IgdGltZV9lbGFwc2VkIGluZmVyZW5jZS4gaWYgdGhpcyBpcyBpbmNvcnJlY3QsIG1hbnVhbGx5IGFkanVzdCB3aXRoIHNldF90aW1lX2VsYXBzZWQhqnRleHQvcGxhaW6nY2VsbF9pZNkkNzg1YTFjMzktYWE1Ni00MjQ0LWI3YjktMzFkN2EzMWI3M2Mzpmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzAzNjEzMzlmpGZpbGXZWS9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2RhdGFfbW9kZWwvbXVsdGluZXR3b3JrLmpspWdyb3VwrG11bHRpbmV0d29ya6VsZXZlbKRJbmZvp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSpiJuYW1lIqp0ZXh0L3BsYWlukq4iM2J1c19leGFtcGxlIqp0ZXh0L3BsYWlukpKlIm1hcCKqdGV4dC9wbGFpbpKFpnByZWZpeNknRGljdHtTdHJpbmcsIFZlY3RvcntEaWN0e1N0cmluZywgQW55fX19qGVsZW1lbnRzmpKSoyI4Iqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjczMDRiZTlhM2Y0ZTA5MqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWM5Zjg5NDRlMmU0YzczN6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDdlOGRlMGI3Mjc1ZTY2MzSpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2ZWZiMmZjMThiYzE4OTMzqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjg5M2Y4ZGI5YjViNjhhYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjFlNGNmYmExODFkMWI4NqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI0OWNmNjcyMzQ2MjY0ZTmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxNDQwMGRiZGJhMDc2MmM0qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc1YWZjYzM5N2RmYTk2N6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTg4Yzk2MWVkYmE3MDQ1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNTE2NDQ5ZmE3ZmEyYjUxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2E2Y2U5ZjI2ZDFjNWM0MqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBhMGVhOTcxYTAzMzc0NGUzqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZK83NGJmNWFiZWQxNzBjZjWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTQ4NTUyNDQ4ODk0YzA3ZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmFiY2M3Y2JhZTBjM2JiZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0Mjc5NjQwYTkwM2QzZjFlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAzMDQ1MTc2YzJmNjYyNTA1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOTkgGSpyJnZW4uMSKqdGV4dC9wbGFpbpICkqciYnVzLjQiqnRleHQvcGxhaW6SA5KqImJyYW5jaC4zIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3OGYwZjZlOGYwY2RkMjVj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK9mZTMwOGQ5ZmYyZGMyMGGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJzb3VyY2UiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAzNDllOWZmOGJlYTdhNjhjqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK/Il9tYXBfbWF0aDJlbmdfdm9sdGFnZV9zb3VyY2UhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sob2JqZWN0aWSwMTY2ZDNjOGM5ZTMyYmFlMKZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0kpKjIjQiqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiNzMwNGJlOWEzZjRlMDkyqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBlYzlmODk0NGUyZTRjNzM3qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2U4ZGUwYjcyNzVlNjYzNKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDZlZmIyZmMxOGJjMTg5MzOpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyODkzZjhkYjliNWI2OGFhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIEk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2MWU0Y2ZiYTE4MWQxYjg2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjQ5Y2Y2NzIzNDYyNjRlOalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksDE0NDAwZGJkYmEwNzYyYzSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NzVhZmNjMzk3ZGZhOTY3qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhODhjOTYxZWRiYTcwNDWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK81MTY0NDlmYTdmYTJiNTGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIHk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3YTZjZTlmMjZkMWM1YzQyqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGEwZWE5NzFhMDMzNzQ0ZTOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgiTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzc0YmY1YWJlZDE3MGNmNalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NDg1NTI0NDg4OTRjMDdlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYWJjYzdjYmFlMGMzYmJkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDQyNzk2NDBhOTAzZDNmMWWpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlksGM1ZGE3NGU2ZThmZTg3NmKpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGMwYWQzMjliYWQxYWFjNDLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkr2ZlMzA4ZDlmZjJkYzIwYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM0OWU5ZmY4YmVhN2E2OGOpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLAyNWE3MGQ3MGJjODExMDRjpnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiMSKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGI3MzA0YmU5YTNmNGUwOTKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksGVjOWY4OTQ0ZTJlNGM3Mzepa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA3ZThkZTBiNzI3NWU2NjM0qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNmVmYjJmYzE4YmMxODkzM6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI4OTNmOGRiOWI1YjY4YWGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlksDYxZTRjZmJhMTgxZDFiODapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyNDljZjY3MjM0NjI2NGU5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTQ0MDBkYmRiYTA3NjJjNKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk3NWFmY2MzOTdkZmE5Njepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmE4OGM5NjFlZGJhNzA0NalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzUxNjQ0OWZhN2ZhMmI1MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDdhNmNlOWYyNmQxYzVjNDKpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTBlYTk3MWEwMzM3NDRlM6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvNzRiZjVhYmVkMTcwY2Y1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk0ODU1MjQ0ODg5NGMwN2Wpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhYmNjN2NiYWUwYzNiYmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNDI3OTY0MGE5MDNkM2YxZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTcyMjc2MzlmYTNhNjAzMalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmRkZjBlNGI4N2U4MTI0Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvZmUzMDhkOWZmMmRjMjBhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzQ5ZTlmZjhiZWE3YTY4Y6lrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlksDhjYmM0MmI2OGFiM2IzZWWmc2NoZW1hwNkiYXBwbGljYXRpb24vdm5kLnBsdXRvLnRhYmxlK29iamVjdJKSoyI1Iqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjczMDRiZTlhM2Y0ZTA5MqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWM5Zjg5NDRlMmU0YzczN6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDdlOGRlMGI3Mjc1ZTY2MzSpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2ZWZiMmZjMThiYzE4OTMzqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjg5M2Y4ZGI5YjViNjhhYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjFlNGNmYmExODFkMWI4NqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI0OWNmNjcyMzQ2MjY0ZTmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxNDQwMGRiZGJhMDc2MmM0qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc1YWZjYzM5N2RmYTk2N6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTg4Yzk2MWVkYmE3MDQ1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNTE2NDQ5ZmE3ZmEyYjUxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2E2Y2U5ZjI2ZDFjNWM0MqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBhMGVhOTcxYTAzMzc0NGUzqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZK83NGJmNWFiZWQxNzBjZjWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTQ4NTUyNDQ4ODk0YzA3ZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmFiY2M3Y2JhZTBjM2JiZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0Mjc5NjQwYTkwM2QzZjFlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAzYWRiZDM3NjNiNDVmNDM0qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOTkgGSpyJnZW4uMSKqdGV4dC9wbGFpbpICkqciYnVzLjQiqnRleHQvcGxhaW6SA5KqImJyYW5jaC4zIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2ZTYzODlmOGZjZDUwNzE22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK9mZTMwOGQ5ZmYyZGMyMGGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJzb3VyY2UiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAzNDllOWZmOGJlYTdhNjhjqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK/Il9tYXBfbWF0aDJlbmdfdm9sdGFnZV9zb3VyY2UhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sob2JqZWN0aWSwNzdlYTcxMGI2MTAzYzA1OKZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiNzMwNGJlOWEzZjRlMDkyqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBlYzlmODk0NGUyZTRjNzM3qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2U4ZGUwYjcyNzVlNjYzNKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDZlZmIyZmMxOGJjMTg5MzOpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyODkzZjhkYjliNWI2OGFhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIEk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2MWU0Y2ZiYTE4MWQxYjg2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjQ5Y2Y2NzIzNDYyNjRlOalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksDE0NDAwZGJkYmEwNzYyYzSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NzVhZmNjMzk3ZGZhOTY3qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhODhjOTYxZWRiYTcwNDWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK81MTY0NDlmYTdmYTJiNTGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIHk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3YTZjZTlmMjZkMWM1YzQyqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGEwZWE5NzFhMDMzNzQ0ZTOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgiTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzc0YmY1YWJlZDE3MGNmNalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5NDg1NTI0NDg4OTRjMDdlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYWJjYzdjYmFlMGMzYmJkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDQyNzk2NDBhOTAzZDNmMWWpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlksGNjYTk5MjBmNzcwMmI1YzKpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRkM2Y4MmJiMzYwMTAwYWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkr2ZlMzA4ZDlmZjJkYzIwYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM0OWU5ZmY4YmVhN2E2OGOpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLBiMjk4NTdlMmQ2NjIwMGU2pnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiNiKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGI3MzA0YmU5YTNmNGUwOTKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksGVjOWY4OTQ0ZTJlNGM3Mzepa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA3ZThkZTBiNzI3NWU2NjM0qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNmVmYjJmYzE4YmMxODkzM6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI4OTNmOGRiOWI1YjY4YWGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlksDYxZTRjZmJhMTgxZDFiODapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyNDljZjY3MjM0NjI2NGU5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTQ0MDBkYmRiYTA3NjJjNKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk3NWFmY2MzOTdkZmE5Njepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmE4OGM5NjFlZGJhNzA0NalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzUxNjQ0OWZhN2ZhMmI1MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDdhNmNlOWYyNmQxYzVjNDKpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTBlYTk3MWEwMzM3NDRlM6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvNzRiZjVhYmVkMTcwY2Y1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk0ODU1MjQ0ODg5NGMwN2Wpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhYmNjN2NiYWUwYzNiYmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNDI3OTY0MGE5MDNkM2YxZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwY2I2YjM1YjZhMjgzMmZjNKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmFkNTM3MWY2NzQyMTk5MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvZmUzMDhkOWZmMmRjMjBhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzQ5ZTlmZjhiZWE3YTY4Y6lrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlksGIxNzU2YTljZDQzYzlhM2Gmc2NoZW1hwNkiYXBwbGljYXRpb24vdm5kLnBsdXRvLnRhYmxlK29iamVjdJKSoyI3Iqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjczMDRiZTlhM2Y0ZTA5MqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWM5Zjg5NDRlMmU0YzczN6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDdlOGRlMGI3Mjc1ZTY2MzSpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2ZWZiMmZjMThiYzE4OTMzqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjg5M2Y4ZGI5YjViNjhhYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjFlNGNmYmExODFkMWI4NqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI0OWNmNjcyMzQ2MjY0ZTmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxNDQwMGRiZGJhMDc2MmM0qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc1YWZjYzM5N2RmYTk2N6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTg4Yzk2MWVkYmE3MDQ1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNTE2NDQ5ZmE3ZmEyYjUxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2E2Y2U5ZjI2ZDFjNWM0MqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBhMGVhOTcxYTAzMzc0NGUzqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZK83NGJmNWFiZWQxNzBjZjWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTQ4NTUyNDQ4ODk0YzA3ZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmFiY2M3Y2JhZTBjM2JiZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0Mjc5NjQwYTkwM2QzZjFlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBkNWEyZDBkYzFlYmI3ZWFkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOTkgGSpyJnZW4uMSKqdGV4dC9wbGFpbpICkqciYnVzLjQiqnRleHQvcGxhaW6SA5KqImJyYW5jaC4zIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjYmJiMDNkODBjNmVjOTgw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK9mZTMwOGQ5ZmYyZGMyMGGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJzb3VyY2UiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAzNDllOWZmOGJlYTdhNjhjqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK/Il9tYXBfbWF0aDJlbmdfdm9sdGFnZV9zb3VyY2UhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sob2JqZWN0aWSwNGFiOTdhZjg4NmJkMjEwZqZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0kpKkIjEwIqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjczMDRiZTlhM2Y0ZTA5MqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWM5Zjg5NDRlMmU0YzczN6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDdlOGRlMGI3Mjc1ZTY2MzSpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2ZWZiMmZjMThiYzE4OTMzqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjg5M2Y4ZGI5YjViNjhhYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjFlNGNmYmExODFkMWI4NqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI0OWNmNjcyMzQ2MjY0ZTmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxNDQwMGRiZGJhMDc2MmM0qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc1YWZjYzM5N2RmYTk2N6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTg4Yzk2MWVkYmE3MDQ1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNTE2NDQ5ZmE3ZmEyYjUxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2E2Y2U5ZjI2ZDFjNWM0MqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBhMGVhOTcxYTAzMzc0NGUzqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZK83NGJmNWFiZWQxNzBjZjWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTQ4NTUyNDQ4ODk0YzA3ZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmFiY2M3Y2JhZTBjM2JiZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0Mjc5NjQwYTkwM2QzZjFlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZK9kNWU4ZGZiNTA2NzMwNDSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDY5OGY1OTVjNDY5MjA3MDLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkr2ZlMzA4ZDlmZjJkYzIwYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM0OWU5ZmY4YmVhN2E2OGOpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLAxZDMzZGZlNGFiYWUzMGU4pnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiOSKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGI3MzA0YmU5YTNmNGUwOTKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksGVjOWY4OTQ0ZTJlNGM3Mzepa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA3ZThkZTBiNzI3NWU2NjM0qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNmVmYjJmYzE4YmMxODkzM6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI4OTNmOGRiOWI1YjY4YWGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYTdiMTI1MDMwZTUzMTZiqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlksDYxZTRjZmJhMTgxZDFiODapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyNDljZjY3MjM0NjI2NGU5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTQ0MDBkYmRiYTA3NjJjNKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk3NWFmY2MzOTdkZmE5Njepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmE4OGM5NjFlZGJhNzA0NalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzUxNjQ0OWZhN2ZhMmI1MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDRkYTEwMDc2MzMwZWRhNjipa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDdhNmNlOWYyNmQxYzVjNDKpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTBlYTk3MWEwMzM3NDRlM6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvNzRiZjVhYmVkMTcwY2Y1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk0ODU1MjQ0ODg5NGMwN2Wpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDIwNmMxMDk5NGY0M2ExNmapa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhYmNjN2NiYWUwYzNiYmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNDI3OTY0MGE5MDNkM2YxZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGE2ODUwZjFkMmQ4YWFiNKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNGRhNTUxNzIwZTJkNGZmYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvZmUzMDhkOWZmMmRjMjBhqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzQ5ZTlmZjhiZWE3YTY4Y6lrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlksGFmZGZlY2U0NTBmZWVjMTmmc2NoZW1hwNkiYXBwbGljYXRpb24vdm5kLnBsdXRvLnRhYmxlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjczMDRiZTlhM2Y0ZTA5MqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWM5Zjg5NDRlMmU0YzczN6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDdlOGRlMGI3Mjc1ZTY2MzSpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA2ZWZiMmZjMThiYzE4OTMzqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjg5M2Y4ZGI5YjViNjhhYalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRhN2IxMjUwMzBlNTMxNmKpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjFlNGNmYmExODFkMWI4NqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDI0OWNmNjcyMzQ2MjY0ZTmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGE3YjEyNTAzMGU1MzE2YqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxNDQwMGRiZGJhMDc2MmM0qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc1YWZjYzM5N2RmYTk2N6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0ZGExMDA3NjMzMGVkYTY4qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTg4Yzk2MWVkYmE3MDQ1qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNTE2NDQ5ZmE3ZmEyYjUxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNGRhMTAwNzYzMzBlZGE2OKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2E2Y2U5ZjI2ZDFjNWM0MqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBhMGVhOTcxYTAzMzc0NGUzqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZK83NGJmNWFiZWQxNzBjZjWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTQ4NTUyNDQ4ODk0YzA3ZalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMjA2YzEwOTk0ZjQzYTE2ZqlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmFiY2M3Y2JhZTBjM2JiZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA0Mjc5NjQwYTkwM2QzZjFlqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAyMDZjMTA5OTRmNDNhMTZmqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAyM2I4M2RjZGUwZjQ4OTdiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOTkgGSpyJnZW4uMSKqdGV4dC9wbGFpbpICkqciYnVzLjQiqnRleHQvcGxhaW6SA5KqImJyYW5jaC4zIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3MmJiMmYzNTkxMjI2YjVm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK9mZTMwOGQ5ZmYyZGMyMGGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJzb3VyY2UiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAzNDllOWZmOGJlYTdhNjhjqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK/Il9tYXBfbWF0aDJlbmdfdm9sdGFnZV9zb3VyY2UhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sob2JqZWN0aWSvOTk1MDA1MzA1OTIyZTdkpnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGQ3YjFiZWMyMmUzY2VjZjXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJidXNfbG9va3VwIqp0ZXh0L3BsYWlukoWmcHJlZml4v0RpY3R7U3RyaW5nLCBEaWN0e1N0cmluZywgQW55fX2oZWxlbWVudHOakpKjIjgiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDZmZmU1NjgwZGVkNjcxNjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI0Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmNjQ5ZDlmNmViNmQxNzIy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvMTIwYzQ2ODAxMWFlYTRj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDk4ZTVmOTUzMWY1YjFmYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGZjZGY5N2VhZjg5N2Q4N2HZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI2Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1MGE1NmY3NTIwMjNkNWQx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTQ0OWIyYTQ0NzZjNGU0MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkIjEwIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhYmMyY2Q5YTU2NWU4YjQ22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiOSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmIxNTQyOGVmNTAzNWRjYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGVmZTVmOTBiZGVhNTY1NDDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwN2FhYzAxODNmNDMxNzg0MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuIm11bHRpbmV0d29yayKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKkIm53Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmpKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSsSJpc19rcm9uX3JlZHVjZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzM2JkZThiODkzMjdjMDRl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4idGltZV9lbGFwc2VkIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDllYzgwNGE3NjkyMjA0MmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmQwNDhhOTFhNTlhOWJiZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImdlbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwM2FlZDRmOTVhMTg1MWExY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU0Y2FhM2EzZjUyNzAzYWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI0Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSsSJpc19rcm9uX3JlZHVjZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmZDE1OGRjMGE1ZWMwYzli2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4idGltZV9lbGFwc2VkIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGE4N2VjM2Y3N2NhOTY0MmXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOWUxNWFhMzg2N2JiNTk1MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImdlbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvMjE3NWU2MmFmZGI2OTVm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDg3MGEwMGVkYzcxMzBjNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDVmZTlmMmNmNmJmZTQ0MGbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYzc5NmFiNjJiYWYxNDkwY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3ZmFkMGUwMmFhZWEyZmU12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1NGRiYmE0OGQ1NzliNWRl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDQ2M2Y0MjFkNDU4MmU0YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFlN2E5ODUyNWQ1MTM3MzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOThhZjQ5NjQ1ZDZjMjMzNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzMjg3Mzc2OTEwOWVmMWEz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK81ODg1YmJkMzczOTZkMzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5MjYwNzJjOWQwNTFiOGYz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkrEiaXNfa3Jvbl9yZWR1Y2VkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6Skq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYmI1NGFkNDY5MTI1YzUxMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhMWY5NWJmNzYzNTliNjdh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDJiNGEzMTk5ODIyMzIyMDjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFhNzc2MDA2NzQ1Njc0NGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0MWE4NmI3ZmFlZTI4Nzg42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkrEiaXNfa3Jvbl9yZWR1Y2VkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6Skq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjZkMTQwYjNkZjQ3ZDU0ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjNjNiOWI5NGE3MmFkMTYw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNkY2M1NTRiMjcyYTAyNjPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDYyYWQwZmM5ZTAyMTNhMTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2NGM2OTVhYjc1MWU2ZjA32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkrEiaXNfa3Jvbl9yZWR1Y2VkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6Skq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwN2VjMjYwOWRmMjg2ZTZiNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4MjE3YzhjMDEwZTMxMzg02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY2NWViYzUxZjg0ZWFhYjjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDYzYmIzYzk0NDM1N2Q5ZGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlZDg4NWE0MzA2YTIyNDY42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQiMTAiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGY0NTU3ZmRjNWMxMDJhY2PZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWUwMWU4MTBiMTE4ZTQ2MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1NjgxYTg1NzU4OTRjNDZi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4NTE5ZTYwNDdlNDhiZjMy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2UzMGMwNjE0N2YzOTJmNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDJlOGU5MWFkNGZmNzZhMzXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTQ5MDY2YzNiYzRjYTIwZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxZGQzZGZlZTY3MzljNGVl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmMWMxMGQ2NjU2YWYwYmNj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZGQwZjBmNzBlNWFmYjk1MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjgiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRjNjQ0NTkzYjdiNTU3MTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYzQxNGJkMmRmYTFlZWIwONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4MzhiNWIyN2IyYTM2NmNm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4NDJkY2MwM2ZhNGI1Mjc52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmY5OWYyNTMwYWMzZThiMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlZDUwNDcwNjg2MmRhZmMz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwiZGF0YV9tb2RlbCKqdGV4dC9wbGFpbpK7TUFUSEVNQVRJQ0FMOjpEYXRhTW9kZWwgPSAxqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGJkMTgwNWMwMjVjMjczY2akbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZadtYXRoX21usmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRRvQvurBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkNzg1YTFjMzktYWE1Ni00MjQ0LWI3YjktMzFkN2EzMWI3M2MzuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOBCO2HLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDJmOWMzZjY0LTNlNWQtNDIzZi05MzllLThkOTZiZDE5ZTdmZYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5iSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzk5IBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOWRjODUzOWY1NDEyNmRiMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SqyJsaW5lLnF1YWQiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcidF9idXMiqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlukpKqImxpbmVjb2RlIqp0ZXh0L3BsYWlukqkiNC8wcXVhZCKqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzk5IBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMzRhNzlmMDE4MWQxMDA2ZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3YzMxM2RiNTMzYmM4NzVlpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRMECIM7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMmY5YzNmNjQtM2U1ZC00MjNmLTkzOWUtOGQ5NmJkMTllN2ZluWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXNgbC1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYzaKpnF1ZXVlZMKkbG9nc5SIpGxpbmX/o21zZ5LZSUNpcmN1aXQgaGFzIGJlZW4gcmVzZXQgd2l0aCB0aGUgJ2NsZWFyJyBvbiBsaW5lIDEgaW4gJ2Nhc2UzX2JhbGFuY2VkLmRzcyeqdGV4dC9wbGFpbqdjZWxsX2lk2SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYzama3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fZDI0YWVjMDCkZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlZQ29tbWFuZCAnY2FsY3ZvbHRhZ2ViYXNlcycgb24gbGluZSAzNiBpbiAnY2FzZTNfYmFsYW5jZWQuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYzama3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlOQ29tbWFuZCAnc29sdmUnIG9uIGxpbmUgMzggaW4gJ2Nhc2UzX2JhbGFuY2VkLmRzcycgaXMgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcuqnRleHQvcGxhaW6nY2VsbF9pZNkkNTQyZTU5MmYtOGY3NS00MWY5LThmOTgtNTM3M2I0MzFmY2M2pmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzc4OTIxNDk2pGZpbGXZUi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3NfcGFyc2UuamylZ3JvdXCpZHNzX3BhcnNlpWxldmVspEluZm+IpGxpbmX/o21zZ5LZXWJhc2VtdmE9MTAwIGlzIHRoZSBkZWZhdWx0IHZhbHVlLCB5b3UgbWF5IHdhbnQgdG8gYWRqdXN0IHNiYXNlX2RlZmF1bHQgZm9yIGJldHRlciBjb252ZXJnZW5jZap0ZXh0L3BsYWlup2NlbGxfaWTZJDU0MmU1OTJmLThmNzUtNDFmOS04Zjk4LTUzNzNiNDMxZmNjNqZrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl9hZjAyMTAwMKRmaWxl2VAvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzMmVuZy5qbKVncm91cKdkc3MyZW5npWxldmVspEluZm+ncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHObkpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOUkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlukgSSoTSqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvOGEyZWY3NmIwNGRhZDky2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZmU0N2ZiOGQ5ODM1NjIwMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZWI3YWU1NjZmMjliMzA4ZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOGNiNWE3NDQzMjNjZmEyM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyYmY2NWQxN2YzOTIyM2M42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDUzYjAxNDVkNDhiMTFmNDLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRmODMyMGJkNWRlMzE3NTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvYmI2ZDE4MGI2NGE3ZWYz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxYTgxZGZmMWNkZDU2YWI02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOTIzNTlhMjJjMzQ4MGUyMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0ZGQ2MjZhYmJjZmQ0ZWZm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjlkZTM3YTY3Mjk5ZDM2NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkZWVmYmJlMTVjYmNkZDM12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3Yjk2MWQwNjhmZmU1MTUw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjFiMjI4Yzk4MjQxYmYxMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3OWY1NTU1ZTE1M2JhNTVm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDE2MTk3MWRhY2Q4M2QwZmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJuYW1lIqp0ZXh0L3BsYWlukq4iM2J1c19leGFtcGxlIqp0ZXh0L3BsYWlukpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSryJzYmFzZV9kZWZhdWx0Iqp0ZXh0L3BsYWlukqgxMDAwMDAuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4skRpY3R7U3RyaW5nLCBSZWFsfahlbGVtZW50c5GSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqcwLjIzMDk0qnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc4NWU5NDI3MTIwYzcyYmTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNTAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3ZDFmNjM1OWExZDZhZDgy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZmlsZXMiqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzkZIBktkpIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL2Nhc2UzX2JhbGFuY2VkLmRzcyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODdiNjA0YjgyYjExOGNlZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKtInRpbWVfc2VyaWVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpSJsczEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKvImxvYWRzaGFwZS5sczEiqnRleHQvcGxhaW6SkqYidGltZSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4NzY0Njc2MzMxODY4YzQx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkicmVwbGFjZSKqdGV4dC9wbGFpbpKlZmFsc2WqdGV4dC9wbGFpbpKSqCJ2YWx1ZXMiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYmQ3NzUxYjkxZGFjNWZhNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoIm9mZnNldCKqdGV4dC9wbGFpbpKjMC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY4ZjE4NjBjZWRiYmVkY2TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNzVlNWY5M2Y4N2Y1NDIxMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKwInZvbHRhZ2Vfc291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqCJzb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKwInZzb3VyY2Uuc291cmNlIqp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktnVNMOXNCBNYXRyaXh7RmxvYXQ2NH06CiA0LjI3NjkxZS04ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05CiAzLjk2MzQyZS05ICA0LjI3NjkxZS04ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05CiAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICA0LjI3NjkxZS04ICAzLjk2MzQyZS05CiAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICAzLjk2MzQyZS05ICA0LjI3NjkxZS04qnRleHQvcGxhaW6SkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzM3MzlhMjYyNWVmMDFhYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0OTM3YzFmZWIxNzc1NGQ12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQidm0iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjI2ZDVmZWEwM2UyOTU2OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFmMjdjODFmZjcyNDMyOGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNWM2YTZlYTU1MWE5NzA2NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKmInF1YWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzRhOTBkOTVhYWU5MzkzOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SqyJsaW5lLnF1YWQiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcidF9idXMiqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDIyZWJjNDZkNjc2ZTlmYzfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJvaGxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYjExOTkzOGQ4M2NiMjM4ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlukpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKtImxpbmUub2hsaW5lIqp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnInRfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhNWIzZWE5MGVjZmZkYWM02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGQ5YWVjZTljZDRmNGMwMDPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJkYXRhX21vZGVsIqp0ZXh0L3BsYWlukrpFTkdJTkVFUklORzo6RGF0YU1vZGVsID0gMKp0ZXh0L3BsYWlukpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKkImwyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNzcwZjVkMzAwNmVkODNhM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInBkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmZmEzMWNkMjllMTQ2NjRi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSryJjb25maWd1cmF0aW9uIqp0ZXh0L3BsYWlukrNXWUU6OkNvbm5Db25maWcgPSAwqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmFlMTBhNGU2ZTkwY2MyNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkImwzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSuYTMwODA0MWExNzRhOTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDRmYTgzOTJjOGMxM2E0ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW6Skq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFiMzVjYjM2ZWYzYzg5NWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRlMTk2MzEzMzUwMTk1ZGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvYzZmNGY1MWI3YWI4NzNk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSryJjb25maWd1cmF0aW9uIqp0ZXh0L3BsYWlukrNXWUU6OkNvbm5Db25maWcgPSAwqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjZlZWZmODU4NmFjZTQ4MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhY2RjZDZhOGYyODhlNjBj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoibGluZWNvZGUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKoIjU1Nm1jbSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqYiYl9mciKqdGV4dC9wbGFpbpLZYDPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMjUuNDY0OCAgLTAuMCAgICAgLTAuMAogLTAuMCAgICAgMjUuNDY0OCAgLTAuMAogLTAuMCAgICAgLTAuMCAgICAgMjUuNDY0OKp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktlKM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjEgICAwLjA0ICAwLjA0CiAwLjA0ICAwLjEgICAwLjA0CiAwLjA0ICAwLjA0ICAwLjGqdGV4dC9wbGFpbpKSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0NWMxNzExMzJjZDIxZjhl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMDU4MyAgMC4wMjMzICAwLjAyMzMKIDAuMDIzMyAgMC4wNTgzICAwLjAyMzMKIDAuMDIzMyAgMC4wMjMzICAwLjA1ODOqdGV4dC9wbGFpbpKSpiJiX3RvIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqYiZ190byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQ1N2Y4YjEyYWM0ZTRmNWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSI0LzBxdWFkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpiJiX2ZyIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqQicnMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMTE2NyAgMC4wNDY3ICAwLjA0NjcKIDAuMDQ2NyAgMC4xMTY3ICAwLjA0NjcKIDAuMDQ2NyAgMC4wNDY3ICAwLjExNjeqdGV4dC9wbGFpbpKSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxOTQwMTcwNTUzYzQzZDdi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMDY2NyAgMC4wMjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wNjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wMjY3ICAwLjA2NjeqdGV4dC9wbGFpbpKSpiJiX3RvIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqYiZ190byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGEwZjkxMWRhNjMzNjFlZTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjE4MGQ2YTMwNDUyZTkxNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkNTQ2NjlkZWQyM2NhMjZmpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWWmZW5nX3Rzsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRMOzsbLBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkNTQyZTU5MmYtOGY3NS00MWY5LThmOTgtNTM3M2I0MzFmY2M2uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOfac8ZLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDc0ODM2YjJjLWRiNjctNDQzNS1hNTUyLWJhNWMzZTkzZTQzZoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GSAZKjMC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGEzODdjMWEyZTg3M2I4MTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GSAZKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0YWJkYTkxNmI2ZGY4MmMx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNhMmUwYWUyZjBmNGJjYjnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ2bV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzlJIBkqcyLjU0MDM0qnRleHQvcGxhaW6SApKnMi41NDAzNKp0ZXh0L3BsYWlukgOSpzIuNTQwMzSqdGV4dC9wbGFpbpIEkqNJbmaqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTlmZTdmODRlNjk4OTkyNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnInZtX2xiIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOUkgGSpzIuMDc4NDaqdGV4dC9wbGFpbpICkqcyLjA3ODQ2qnRleHQvcGxhaW6SA5KnMi4wNzg0Nqp0ZXh0L3BsYWlukgSSozAuMKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkOTQ4NWRiM2U1MmM0ZjE52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GSAZKjMC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYwZDRmNDdlZTMwZTFjNzXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTFkMjQyNjdkZDQwYTkxY6RtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUafrd6wcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDc0ODM2YjJjLWRiNjctNDQzNS1hNTUyLWJhNWMzZTkzZTQzZrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzVTEtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNWU1ZGQyNGMtOTViNS00OTUxLTg1NDctMTNlMjBiYjBmZWVjiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keaCkbWltZap0ZXh0L3BsYWlurHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FGU56QsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ1ZTVkZDI0Yy05NWI1LTQ5NTEtODU0Ny0xM2UyMGJiMGZlZWO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4NHIfptXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkM2Q4Njk4OWEtYTRkYi00NzY2LWFlYzctYWJjOWEyNWZmZGU4iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoETzxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+RW5naW5lZXJpbmcgTW9kZWwgVHJhbnNmb3JtYXRpb25zPC9oMj4KPHA+T25lIG9mIHRoZSBwb3dlciB0aGluZ3MgYWJvdXQgdGhlIGVuZ2luZWVyaW5nIG1vZGVsIGlzIHRoYXQgZGF0YSB0cmFuc2Zvcm1hdGlvbnMgYXJlIG11Y2ggbW9yZSBzaW1wbGUuIEhlcmUgd2UgaWxsdXN0cmF0ZSB0d28gZXhhbXBsZXMgdGhhdCBhcmUgY3VycmVudGx5IGluY2x1ZGVkIGluIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLCBidXQgd3JpdGluZyB5b3VyIG93biBkYXRhIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9ucyB3aWxsIGJlIHRyaXZpYWwsIGFzIHdlIHdpbGwgc2hvdy48L3A+CjxwPjxzdHJvbmc+Tm90ZTwvc3Ryb25nPjogSW4gdjAuOSwgPGNvZGU+YXBwbHlfa3Jvbl9yZWR1Y3Rpb24mIzMzOzwvY29kZT4gYW5kIDxjb2RlPmFwcGx5X3BoYXNlX3Byb2plY3Rpb24mIzMzOzwvY29kZT4gYXJlIGFwcGxpZWQgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyA8Y29kZT5rcm9uX3JlZHVjZSYjNjE7ZmFsc2U8L2NvZGU+IGFuZCA8Y29kZT5waGFzZV9wcm9qZWN0JiM2MTtmYWxzZTwvY29kZT4sIHJlc3BlY3RpdmVseSBpbiA8Y29kZT5wYXJzZV9maWxlPC9jb2RlPiBvciA8Y29kZT50cmFuc2Zvcm1fZGF0YV9tb2RlbDwvY29kZT4uPC9wPgo8cD5GaXJzdCwgdGhlcmUgYXJlIHNldmVyYWwgb2JqZWN0cyB0aGF0IGhhdmUgbG9zcyBtb2RlbHMgYnkgZGVmYXVsdCB3aGVuIHBhcnNpbmcgZnJvbSBkc3MgZmlsZXMsIHN1Y2ggYXMgdm9sdGFnZSBzb3VyY2VzLCB0cmFuc2Zvcm1lcnMsIGFuZCBzd2l0Y2hlcy4gVG8gcmVtb3ZlIHRoZXNlIGxvc3MgbW9kZWxzLCB0aGVyZWZvcmUgbWFraW5nIHRoZXNlIGNvbXBvbmVudHMgbG9zc2xlc3MsIHdlIGNhbiB1c2UgdGhlIGluY2x1ZGVkIDxjb2RlPm1ha2VfbG9zc2VzcyYjMzM7PC9jb2RlPiBmdW5jdGlvbi4gSGVyZSB3ZSB1c2UgYSBiYXNpYyAyLXdpbmRpbmcgd3llLXd5ZSBjb25uZWN0ZWQgdHJhbnNmb3JtZXIgY2FzZSBmcm9tIDxjb2RlPnRlc3Q8L2NvZGU+IHRvIGlsbHVzdHJhdGUgdGhpczwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FFyKVdsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQzZDg2OTg5YS1hNGRiLTQ3NjYtYWVjNy1hYmM5YTI1ZmZkZTi5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ACNlAtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZGU5MmJjMjAtYjEyNS00ZjNkLTkzMGEtYjFkYTYzZDVjZWY1iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoB0DxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+SW1wb3J0czwvaDI+CjxwPkFsbCBjb21tYW5kcyBpbiB0aGlzIGRvY3VtZW50IHdpdGggbm8gcGFja2FnZSBuYW1lc3BhY2Ugc3BlY2lmaWVkIGFyZSBkaXJlY3RseSBleHBvcnRlZCBieSBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiBvciBhbHJlYWR5IGF2YWlsYWJsZSBpbiBKdWxpYSBiYXNlLiBBbnkgY29tbWFuZHMgdGhhdCBhcmUgb25seSBhdmFpYWJsZSB2aWEgYW4gZXh0ZXJuYWwgcGFja2FnZSB3aWxsIGJlIHNwZWNpZmllZCBieSBpbmNsdWRpbmcgYnkgdXNpbmcgPGNvZGU+aW1wb3J0PC9jb2RlPiwgd2hpY2ggd2lsbCByZXF1aXJlIHNwZWNpZnlpbmcgdGhlIG9yaWdpbmF0aW5nIHBhY2thZ2UgYmVmb3JlIHRoZSBjb21tYW5kLCA8ZW0+ZS5nLjwvZW0+IDxjb2RlPklwb3B0Lk9wdGltaXplcjwvY29kZT4gYXMgeW91IHdpbGwgc2VlIGJlbG93LjwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1EpKqQjsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRkZTkyYmMyMC1iMTI1LTRmM2QtOTMwYS1iMWRhNjNkNWNlZjW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4CMaNltXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZGI0ZDllYjktZTEyMC00NDg5LWEzYzItNDhjNDNmMmEzYzNiiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoC/zxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+QnVpbGRpbmcgdGhlIEp1TVAgTW9kZWw8L2gyPgo8cD5JbiBzb21lIGNhc2VzIHRoZSB1c2VyIHdpbGwgd2FudCB0byBkaXJlY3RseSBidWlsZCB0aGUgSnVNUCBtb2RlbCwgd2hpY2ggd291bGQgdHJhZGl0aW9uYWxseSBiZSBkb25lIHdpdGggPGNvZGU+aW5zdGFudGlhdGVfbW9kZWw8L2NvZGU+IGZyb20gUG93ZXJNb2RlbHMuIEluIG9yZGVyIHRvIGZhY2lsaXRhdGUgdXNpbmcgdGhlIDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBtb2RlbCB3ZSBoYXZlIGludHJvZHVjZWQgPGNvZGU+aW5zdGFudGlhdGVfbWNfbW9kZWw8L2NvZGU+IHRvIGFpZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgSnVNUCBtb2RlbC4gPGNvZGU+aW5zdGFudGlhdGVfbWNfbW9kZWw8L2NvZGU+IHdpbGwgYXV0b21hdGljYWxseSBjb252ZXJ0IHRoZSBkYXRhIG1vZGVsIHRvIE1BVEhFTUFUSUNBTCBpZiBuZWNlc3NhcnkgJiM0MDtub3RpZnlpbmcgdGhlIHVzZXIgb2YgdGhlIGNvbnZlcnNpb24mIzQxOywgYW5kIHBhc3MgdGhlIE1BVEhFTUFUSUNBTCBtb2RlbCBvZmYgdG8gUG93ZXJNb2RlbHMmIzM5OyA8Y29kZT5pbnN0YW50aWF0ZV9tb2RlbDwvY29kZT4gd2l0aCA8Y29kZT5yZWZfYWRkX2FyY3NfdHJhbnNmb3JtZXImIzMzOzwvY29kZT4gaW4gPGNvZGU+cmVmX2V4dGVuc2lvbnM8L2NvZGU+LCB3aGljaCBpcyBhIHJlcXVpcmVkIHJlZiBleHRlbnNpb24gZm9yIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLjwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FHC2hasHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRkYjRkOWViOS1lMTIwLTQ0ODktYTNjMi00OGM0M2YyYTNjM2K5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ACDFItXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkOWFjNmIwZWQtNThhOC00MDc5LWFhOWYtZDcwMDI0ZjRkNGI0iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTA4MjNhMDliYzA1OTVlMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYmMxNjkwNTU5MzJlM2I3MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5OSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDdlYjA0M2EzOTVhMWYxNzbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjMzMjFmZTVlMTY1NjZhOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1NTRlNTE3MTQxODk5MzRl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkZIBkqMwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDAzOTk2MmU5OTMzMjZlNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkZIBkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDI3ODQwYmRkNjdjN2MyNGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOUkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlukgSSoTSqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTg2NDkwZGY0OTBhOWFlN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORkgGSozAuMKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmMTliMTQ5NGZiZjY4MjY02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGM3MWIyMDAwYjQ4MGVjMmLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkZIBkqMwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZmNkZjc1MWIxMjRlZjBhY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkZIBkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDE2ZmM3NjUyNDY4OGY4OGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOUkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlukgSSoTSqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYjY4MWZkNjkwNTQ1NjkzMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORkgGSozAuMKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2MDA3MTgzYzU4OWUzMzE12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDI2ZGY3MmVhNzQwOTk0MTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjVjYTU3NTk3MWRmNDI3YaRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTAy3cKwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDlhYzZiMGVkLTU4YTgtNDA3OS1hYTlmLWQ3MDAyNGY0ZDRiNLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzT+stXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkODk4NDY4NzgtZWJmYy00OWE1LTkxZWYtNzYyZjY5MmJhNWVhiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoC4zxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5XZSBjYW4gc2VlIHRoZXJlIGFyZSB0aHJlZSBidXNlcyBpbiB0aGlzIHN5c3RlbSwgaWRlbnRpZmllZCBieSBpZHMgPGNvZGU+JnF1b3Q7cHJpbWFyeSZxdW90OzwvY29kZT4sIDxjb2RlPiZxdW90O3NvdXJjZWJ1cyZxdW90OzwvY29kZT4sIGFuZCA8Y29kZT4mcXVvdDtsb2FkYnVzJnF1b3Q7PC9jb2RlPi48L3A+CjxwPjxzdHJvbmc+Tk9URTwvc3Ryb25nPjogSW4gSnVsaWEsIG9yZGVyIG9mIERpY3Rpb25hcnkga2V5cyBpcyBub3QgZml4ZWQsIG5vciBkb2VzIGl0IHJldGFpbiB0aGUgb3JkZXIgaW4gd2hpY2ggaXQgd2FzIHBhcnNlZCBsaWtlIDxlbT5lLmcuPC9lbT4gPGNvZGU+VmVjdG9yczwvY29kZT4uPC9wPgo8cD5JZGVudGlmeWluZyBjb21wb25lbnRzIGJ5IG5vbi1pbnRlZ2VyIG5hbWVzIGlzIGEgbmV3IGZlYXR1cmUgb2YgdGhlIDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBtb2RlbCwgYW5kIG1ha2VzIG5ldHdvcmsgZGVidWdnaW5nIG1vcmUgc3RyYWlnaHRmb3J3YXJkLjwvcD4KPHA+PHN0cm9uZz5OT1RFPC9zdHJvbmc+OiBhbGwgbmFtZXMgYXJlIGNvbnZlcnRlZCB0byBsb3dlcmNhc2Ugb24gcGFyc2UgZnJvbSB0aGUgb3JpZ2luYXRpbmcgZHNzIGZpbGUuPC9wPgo8cD5FYWNoIGJ1cyBjb21wb25lbnQgaGFzIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBpbiB0aGUgPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+IG1vZGVsPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTA0hx6wcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDg5ODQ2ODc4LWViZmMtNDlhNS05MWVmLTc2MmY2OTJiYTVlYblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAJyFG1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRmMmZhNzc5ZS1mNjJkLTQwNTMtYjA1NS1lOWYwYWVlNmMzZjeKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOYkpKsInNvbHZlX3RpbWUiqnRleHQvcGxhaW6SqDAuMjAzNDg1qnRleHQvcGxhaW6Skqsib3B0aW1pemVyIqp0ZXh0L3BsYWlukqciSXBvcHQiqnRleHQvcGxhaW6SkrQidGVybWluYXRpb25fc3RhdHVzIqp0ZXh0L3BsYWluktkpTE9DQUxMWV9TT0xWRUQ6OlRlcm1pbmF0aW9uU3RhdHVzQ29kZSA9IDSqdGV4dC9wbGFpbpKSrSJkdWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZJEZFQVNJQkxFX1BPSU5UOjpSZXN1bHRTdGF0dXNDb2RlID0gMap0ZXh0L3BsYWlukpKvInByaW1hbF9zdGF0dXMiqnRleHQvcGxhaW6S2SRGRUFTSUJMRV9QT0lOVDo6UmVzdWx0U3RhdHVzQ29kZSA9IDGqdGV4dC9wbGFpbpKSqyJvYmplY3RpdmUiqnRleHQvcGxhaW6SqTAuMDIxMTMwNap0ZXh0L3BsYWlukpKqInNvbHV0aW9uIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5NDEyYTU3YzVmODIwZDIz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDE0YzRlNjYzNjBlNjdlMzfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSpiJxdWFkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK9mNGMzN2E4ZDVmNjI4MzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJvaGxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk3YzljY2NmZTZmMTQ1ZGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTVhOTg5OGFlMmIwYjk5MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpyJzYmFzZSKqdGV4dC9wbGFpbpKlNTAwLjCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOWUyMDA0NmFmMzlkNjY4Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKkImwyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3YjUwNzllNTJkZmRlMzY52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQibDMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGJiZjczM2NlMmY0YjRhZmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwODcwYjYyYjdjNTczOWNhMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiOTlkYTZjZjJhOTgxMjg02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjM2ZhZDgxYmJmNTJmYWYx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxNTIyOThmYWUxYTFjYWFh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNzQ0NDFlZjAxZmU0ZTg5ZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkMDgxYjM1OTU4NjAwMzdj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkr2NhZWUzNjhkMGY2M2UyNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuIm9iamVjdGl2ZV9sYiKqdGV4dC9wbGFpbpKkLUluZqp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzNGJhOGRkYmEyMGNlZmFmpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWWpcmVzdWx0X2Jmsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRRBsCcbBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZjJmYTc3OWUtZjYyZC00MDUzLWIwNTUtZTlmMGFlZTZjM2Y3uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXPAAAAB1v3CFi1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ4MmU5MzMwYi0yZTk0LTQyYTEtYjU2ZC00MzA2NzRiMTEyNDGKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHPcABKSkqoicG9sYXJpdHkiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOSkgGSoTGqdGV4dC9wbGFpbpICkqExqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI2OGNmMjFhZWM4YTIxMWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzbV9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5KSAZKlNTAwLjCqdGV4dC9wbGFpbpICkqU1MDAuMKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2MmQ4MGU1ZWI5YTk0NDZi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidG1fbGIiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkpIBkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSozAuOap0ZXh0L3BsYWlukgKSozAuOap0ZXh0L3BsYWlukgOSozAuOap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyN2M1NDc0NmNhNzJjZjE12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqMwLjmqdGV4dC9wbGFpbpICkqMwLjmqdGV4dC9wbGFpbpIDkqMwLjmqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjdjNTQ3NDZjYTcyY2YxNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK9iYTZjZTRlODdlMjE0NTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeK1WZWN0b3J7SW50NjR9qGVsZW1lbnRzkpIBkoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNjNDE0OTQ5YjIxMjljYTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDlmMjg4ZDc5NzdlMWU0YzXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZWQwZTlhOTk4ZTY3MGFkONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInRtX3NldCKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHOSkgGShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKkMS4wMqp0ZXh0L3BsYWlukgKSpDEuMDKqdGV4dC9wbGFpbpIDkqQxLjAyqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI1OWJiYjIxZDNhNTFiMzDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSpDAuOTeqdGV4dC9wbGFpbpICkqQwLjk3qnRleHQvcGxhaW6SA5KkMC45N6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlYjg3OTY2NTUxZjc2ZjAz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI3NTQ5ZjFiNjI2NmU1YjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJ0bV9zdGVwIqp0ZXh0L3BsYWlukoWmcHJlZml4r1ZlY3RvcntGbG9hdDY0fahlbGVtZW50c5KSAZKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqcwLjAzMTI1qnRleHQvcGxhaW6SApKnMC4wMzEyNap0ZXh0L3BsYWlukgOSpzAuMDMxMjWqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwM2IyMzQxMTc3NWI1OWYzMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKnMC4wMzEyNap0ZXh0L3BsYWlukgKSpzAuMDMxMjWqdGV4dC9wbGFpbpIDkqcwLjAzMTI1qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNiMjM0MTE3NzViNTlmMzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZGFmZDUzOGY2YTQ0OWViMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOSkgGSoyIxIqp0ZXh0L3BsYWlukgKSoyIyIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlZmIxNWVlMTEzYWNhMGU32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKFpnByZWZpeNkiUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uQ29ubkNvbmZpZ6hlbGVtZW50c5KSAZKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukgKSs1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmEyNzJhZTI0OGUxMTNhYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKsIm5vbG9hZGxvc3MiqnRleHQvcGxhaW6SpDAuMDWqdGV4dC9wbGFpbpKSpiJjbWFnIqp0ZXh0L3BsYWlukqQwLjExqnRleHQvcGxhaW6SkqUieHNjIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORkgGSpDAuMDWqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwM2RiNTUyYmEzMDVkZmRkY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKxInRyYW5zZm9ybWVyLnR4MSKqdGV4dC9wbGFpbpKSpyJzbV91YiKqdGV4dC9wbGFpbpKlNzUwLjCqdGV4dC9wbGFpbpKSpCJydyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkpIBkqQwLjAxqnRleHQvcGxhaW6SApKkMC4wMqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjOWNlYzg3ZDkyYTE1ZTNj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidG1fZml4Iqp0ZXh0L3BsYWlukoWmcHJlZml4rFZlY3RvcntCb29sfahlbGVtZW50c5KSAZKFpnByZWZpeKRCb29sqGVsZW1lbnRzk5IBkqR0cnVlqnRleHQvcGxhaW6SApKkdHJ1Zap0ZXh0L3BsYWlukgOSpHRydWWqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZWY0OWJjMzExMzhiNWRhYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKShaZwcmVmaXikQm9vbKhlbGVtZW50c5OSAZKkdHJ1Zap0ZXh0L3BsYWlukgKSpHRydWWqdGV4dC9wbGFpbpIDkqR0cnVlqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGVmNDliYzMxMTM4YjVkYWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjVhYTY3NmFmZjllY2I4YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkpIBkqQxMS4wqnRleHQvcGxhaW6SApKjNC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGViMzBkMDMwNDA1YTc5ZTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ0bV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHOSkgGShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKjMS4xqnRleHQvcGxhaW6SApKjMS4xqnRleHQvcGxhaW6SA5KjMS4xqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDMzZmU4MThiZTJmNTViYWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSozEuMap0ZXh0L3BsYWlukgKSozEuMap0ZXh0L3BsYWlukgOSozEuMap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzM2ZlODE4YmUyZjU1YmFm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDQzMmI2NTU3NzZlYmE5OGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTYyZGNiMmM5NjU1MTQ0Y6RtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUY+smywcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDgyZTkzMzBiLTJlOTQtNDJhMS1iNTZkLTQzMDY3NGIxMTI0MblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzVJttXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZGRlMmRhNTktNjNmYS00NTQ5LTg4MjktNDkxZTVmM2M2NzVliqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoBqzxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDM+VHJhbnNmb3JtYXRpb25zIG9uIE11bHRpbmV0d29ya3M8L2gzPgo8cD5UcmFuc2Zvcm1hdGlvbnMgb24gTXVsdGluZXR3b3JrcyBzaG91bGQgaGFwcGVuIDxzdHJvbmc+YmVmb3JlPC9zdHJvbmc+IHRoZSBuZXR3b3JrIGlzIGNvbnZlcnRlZCBpbnRvIGEgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBkYXRhIG1vZGVsLCBzbyB0aGF0IHRoZXkgY2FuIGdlbmVyYWxseSBmb2xsb3cgdGhlIHNhbWUgcGF0dGVybiBhcyBzaG93biBhYm92ZSBhbmQgY2FuIGJlIHNlZW4gaW4gdGhlIDxjb2RlPm1ha2VfbG9zc2xlc3MmIzMzOzwvY29kZT4gYW5kIDxjb2RlPmFwcGx5X3ZvbHRhZ2VfYm91bmRzJiMzMzs8L2NvZGU+IGZ1bmN0aW9ucyBhbHJlYWR5IGluIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUbBFrGwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGRkZTJkYTU5LTYzZmEtNDU0OS04ODI5LTQ5MWU1ZjNjNjc1ZblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAGfbu1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRmYjgxZDNjMS1hNDdiLTQ2ZDktYjQ2My0xNzY2MDIyYmUxMTSKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gEEPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPlRoZSByZXN1bHQgb2YgPGNvZGU+c29sdmVfbWNfb3BmPC9jb2RlPiB3aWxsIGJlIHZlcnkgZmFtaWxpYXIgdG8gdGhvc2Ugd2hvIGFyZSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggUG93ZXJNb2RlbHMgYW5kIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLiBUaGUgbm90YWJsZSBkaWZmZXJlbmNlIHdpbGwgYmUgaW4gdGhlIDxjb2RlPiZxdW90O3NvbHV0aW9uJnF1b3Q7PC9jb2RlPiBkaWN0aW9uYXJ5PC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUTwo82uwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGZiODFkM2MxLWE0N2ItNDZkOS1iNDYzLTE3NjYwMjJiZTExNLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAEpEm1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRmMDcwZGJiYy0xYTU1LTQ4ZjItYWEyMS0yMTE5ZWI1NzNiNWKKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKmInF1YWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOZkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5OSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDIxOTdmMjY1ZTFmN2YwOTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW6Skqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqsibGluZS5xdWFkIqp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnInRfYnVzIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSqiJsaW5lY29kZSKqdGV4dC9wbGFpbpKpIjQvMHF1YWQiqnRleHQvcGxhaW6Skq8iZl9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5OSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU1ZjQ2ZGEzNGFiMGVmNGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJkc3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqYibmFtZSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW6SkqYiYnVzMSKqdGV4dC9wbGFpbpKvInByaW1hcnkuMS4yLjMiqnRleHQvcGxhaW6SkqoibGluZWNvZGUiqnRleHQvcGxhaW6SqSI0LzBxdWFkIqp0ZXh0L3BsYWlukpKmImJ1czIiqnRleHQvcGxhaW6SryJsb2FkYnVzLjEuMi4zIqp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK80ODVlY2E2MjdkM2MxMjnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNWZiOGNjOTk1ZTNhM2I2ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoIm9obGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5mSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzk5IBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmVhNTkyYzU3YzEyZTQyYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlukpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKtImxpbmUub2hsaW5lIqp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnInRfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbpKSqiJsaW5lY29kZSKqdGV4dC9wbGFpbpKoIjU1Nm1jbSKqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzk5IBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwY2NkZTE2YTdiODgzZjJhOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImRzcyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlukpKmImJ1czEiqnRleHQvcGxhaW6SsSJzb3VyY2VidXMuMS4yLjMiqnRleHQvcGxhaW6SkqoibGluZWNvZGUiqnRleHQvcGxhaW6SqCI1NTZtY20iqnRleHQvcGxhaW6SkqYiYnVzMiKqdGV4dC9wbGFpbpKvInByaW1hcnkuMS4yLjMiqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzJmNDkzZDBhNGIwZGNiYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3YWM2OTg5NDE0NTRlYzVi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU3ZWU5NGE1NmVhNTIyNTikbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1EwXE4jsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRmMDcwZGJiYy0xYTU1LTQ4ZjItYWEyMS0yMTE5ZWI1NzNiNWK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc06/LVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGEwOWRlOGFiLWMxZTEtNGM5Zi05ZDg2LTQyNjhjZTUwM2NhZYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZqzxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5JZiBmb3Igc29tZSByZWFzb24geW91IHdhbnQgdG8gcmV0dXJuIHRoZSByZXN1bHQgaW4gcGVyLXVuaXQgcmF0aGVyIHRoYW4gU0ksIHlvdSBjYW4gc3BlY2lmeSB0aGlzIGluIHRoZSA8Y29kZT5zb2x2ZV88L2NvZGU+IGNvbW1hbmQgYnk8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRPCvHybBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkYTA5ZGU4YWItYzFlMS00YzlmLTlkODYtNDI2OGNlNTAzY2FluWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAQOSrVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGI4ZTAxY2UyLWQ3ZjctNGM3My04MjMwLTlmZGVlY2FiMmM0ZYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaAaQ8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGg0PlJ1bm5pbmcgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBNdWx0aW5ldHdvcmtzPC9oND4KPHA+QXMgd2l0aCB0aGUgPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+IGV4YW1wbGUgb2YgcnVubmluZyBhIG11bHRpbmV0d29yayBwcm9ibGVtLCB5b3Ugd2lsbCBuZWVkIGEgbXVsdGluZXR3b3JrIHByb2JsZW0gc3BlY2lmaWNhdGlvbiwgYW5kIGFzIHdpdGggdGhlIHByZXZpb3VzIHNpbmdsZSA8Y29kZT5NQVRIRU1BVElDQUw8L2NvZGU+IG5ldHdvcmsgZXhhbXBsZSBhYm92ZSwgd2Ugb25seSBvYnRhaW4gdGhlIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4gc29sdXRpb24sIGFuZCBjYW4gdHJhbnNmb3JtIHRoZSBzb2x1dGlvbiBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgYmVmb3JlPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUcGyBWwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGI4ZTAxY2UyLWQ3ZjctNGM3My04MjMwLTlmZGVlY2FiMmM0ZblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgCZu1S1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRhYzk0ZTU1Ni1iNTQ0LTRjYTYtODdiZC1mZjJkN2E3NDE0ZTeKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52UMiL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvLi4ipG1pbWWqdGV4dC9wbGFpbqxyb290YXNzaWduZWWocG1kX3BhdGiybGFzdF9ydW5fdGltZXN0YW1wy0HZM1EpXMlDsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRhYzk0ZTU1Ni1iNTQ0LTRjYTYtODdiZC1mZjJkN2E3NDE0ZTe5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc3woLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGFlOGRhZjZjLTQwNTUtNDk3ZS05MDVjLWQ2ZDVhNjM3M2FkM4qmcXVldWVkwqRsb2dzkYikbGluZf+jbXNnktlyYXNzdW1pbmcgdGltZSBpcyBpbiBob3VycyBmb3IgdGltZV9lbGFwc2VkIGluZmVyZW5jZS4gaWYgdGhpcyBpcyBpbmNvcnJlY3QsIG1hbnVhbGx5IGFkanVzdCB3aXRoIHNldF90aW1lX2VsYXBzZWQhqnRleHQvcGxhaW6nY2VsbF9pZNkkYWU4ZGFmNmMtNDA1NS00OTdlLTkwNWMtZDZkNWE2MzczYWQzpmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzAzNjEzMzlmpGZpbGXZWS9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2RhdGFfbW9kZWwvbXVsdGluZXR3b3JrLmpspWdyb3VwrG11bHRpbmV0d29ya6VsZXZlbKRJbmZvp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmJKSrCJzb2x2ZV90aW1lIqp0ZXh0L3BsYWlukqowLjAwMjE0NTA1qnRleHQvcGxhaW6Skqsib3B0aW1pemVyIqp0ZXh0L3BsYWlukqciSXBvcHQiqnRleHQvcGxhaW6SkrQidGVybWluYXRpb25fc3RhdHVzIqp0ZXh0L3BsYWluktkpTE9DQUxMWV9TT0xWRUQ6OlRlcm1pbmF0aW9uU3RhdHVzQ29kZSA9IDSqdGV4dC9wbGFpbpKSrSJkdWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZJEZFQVNJQkxFX1BPSU5UOjpSZXN1bHRTdGF0dXNDb2RlID0gMap0ZXh0L3BsYWlukpKvInByaW1hbF9zdGF0dXMiqnRleHQvcGxhaW6S2SRGRUFTSUJMRV9QT0lOVDo6UmVzdWx0U3RhdHVzQ29kZSA9IDGqdGV4dC9wbGFpbpKSqyJvYmplY3RpdmUiqnRleHQvcGxhaW6SpzAuMDA0OTWqdGV4dC9wbGFpbpKSqiJzb2x1dGlvbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqQibnciqnRleHQvcGxhaW6ShaZwcmVmaXi/RGljdHtTdHJpbmcsIERpY3R7U3RyaW5nLCBBbnl9fahlbGVtZW50c5eSkqMiMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmYzYzE5ZDlkYTBmZjU0ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk4YzMxODAyMmQxZGNhZjLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxYzBhZTMwMTMzYWQ5OGM22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNWYxYjdmMDYzOWNlZDVkYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDkwM2NiNzViOWMxMTM5ZDnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI2Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyZGY3N2FkNDU3ODZkMTVj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGMwZjkyYjUxM2I2ZjY0ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiODg5MGRjOGVjYTk3MWM32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4ib2JqZWN0aXZlX2xiIqp0ZXh0L3BsYWlukqQtSW5mqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI1NWM3ODFiZTY3MTI1ZDGkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZalyZXN1bHRfbW6ybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FFyC1isHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRhZThkYWY2Yy00MDU1LTQ5N2UtOTA1Yy1kNmQ1YTYzNzNhZDO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc8AAAABi4OUBrVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDY2NjIyM2Q1LTgwMmEtNDE2NC04ODJjLThhYjFhMTMxOWQ2ZIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaATU8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgzPlJ1bm5pbmcgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBtb2RlbHM8L2gzPgo8cD5UaGVyZSBpcyB2ZXJ5IGxpdHRsZSBkaWZmZXJlbmNlIGZyb20gdGhlIHVzZXIgcG9pbnQtb2YtdmlldyBpbiBydW5uaW5nIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4gbW9kZWxzIG90aGVyIHRoYW4gdGhlIHJlc3VsdHMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgdGhlIGZvcm1hdCBvZiB0aGUgPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+IG1vZGVsPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUb/BZawcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDY2NjIyM2Q1LTgwMmEtNDE2NC04ODJjLThhYjFhMTMxOWQ2ZLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAF1V+1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ0MDIwZDY3YS00YTllLTQwMzAtYjdjZC1lNWQ2MGU3ODQ5NWOKpnF1ZXVlZMKkbG9nc5OIpGxpbmX/o21zZ5LZSUNpcmN1aXQgaGFzIGJlZW4gcmVzZXQgd2l0aCB0aGUgJ2NsZWFyJyBvbiBsaW5lIDEgaW4gJ3V0X3RyYW5zXzJ3X3l5LmRzcyeqdGV4dC9wbGFpbqdjZWxsX2lk2SQ0MDIwZDY3YS00YTllLTQwMzAtYjdjZC1lNWQ2MGU3ODQ5NWOma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fZDI0YWVjMDCkZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlZQ29tbWFuZCAnY2FsY3ZvbHRhZ2ViYXNlcycgb24gbGluZSAzNSBpbiAndXRfdHJhbnNfMndfeXkuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SQ0MDIwZDY3YS00YTllLTQwMzAtYjdjZC1lNWQ2MGU3ODQ5NWOma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlOQ29tbWFuZCAnc29sdmUnIG9uIGxpbmUgMzggaW4gJ3V0X3RyYW5zXzJ3X3l5LmRzcycgaXMgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcuqnRleHQvcGxhaW6nY2VsbF9pZNkkNDAyMGQ2N2EtNGE5ZS00MDMwLWI3Y2QtZTVkNjBlNzg0OTVjpmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzc4OTIxNDk2pGZpbGXZUi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3NfcGFyc2UuamylZ3JvdXCpZHNzX3BhcnNlpWxldmVspEluZm+ncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOakpKwInZvbHRhZ2Vfc291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqCJzb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKwInZzb3VyY2Uuc291cmNlIqp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktllNMOXNCBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbpKSpCJ2YSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmNjdjNmE0NTFlMmQxODBm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGZiZmRjMGVjYTkyZmUwNmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ2bSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4NWE2NzFhZWJjODEyMzgw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzZhYTQzY2EyNTFmNmQwMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2ZjIzZmJkZjk2MTMwYjI22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibmFtZSKqdGV4dC9wbGFpbpKqInV0X3RyYW5zIqp0ZXh0L3BsYWlukpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKnImxpbmUyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1ZTc2YmY3M2Y0NDAzOTMz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkMmQxYzRiOTVjZjY5Mzc02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYzIwYzJhZTgzYjZjMmQ5YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxpbmUxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyZDIyMGJhYzExOTk1Yzlj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2Uszw5czIE1hdHJpeHtGbG9hdDY0fToKICAwLjAgIC0wLjAgIC0wLjAKIC0wLjAgICAwLjAgIC0wLjAKIC0wLjAgIC0wLjAgICAwLjCqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1ZmQ1Y2M0MmY3MDIxNTFk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYWJlOTEyOWE4ZjI3Njk1ZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3OGEwNmIzODI4OTMzMGQ32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5SSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6SBJKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5ZDAyYmUyMGViMzliOWFj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKvInNiYXNlX2RlZmF1bHQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4skRpY3R7U3RyaW5nLCBSZWFsfahlbGVtZW50c5GSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqc2LjM1MDg1qnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk0Nzg3OWFjNjA0ZWJkZTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNjAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5Mjk3Nzg5MjVjOGI0ZjBi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZmlsZXMiqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzkZIBktkpIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL3V0X3RyYW5zXzJ3X3l5LmRzcyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTZmOTI3MTE2Y2NkOTZlYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKtInRyYW5zZm9ybWVyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpSJ0eDEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKqInBvbGFyaXR5Iqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhY2VjMjE2ZjkxNDkwMmRk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic21fbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGJiYjJkYzY3YWVkNTg3OGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ0bV9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDMxNTk2NDg4MDE1ZGUwZmTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeK1WZWN0b3J7SW50NjR9qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiODhiNDRiNTBmY2ZiNmU52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidG1fc2V0Iqp0ZXh0L3BsYWlukoWmcHJlZml4r1ZlY3RvcntGbG9hdDY0fahlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzdiYjNjZDFhZTI5ZjhiYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpInRtX3N0ZXAiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3OTI2ZjZkZDkxMDcxZmRm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTUzMmU4MmJlMWQ2OGEzY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmYWZjZDU2MzJkNmEwNjg32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqcibG9hZDMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDMiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDkzNDMxZjg5YzU3ZWRiZmLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYjQxZjY4MTgyMDAyNmZhMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKlNi41MzGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkNWE2ODc4MTYzMTBmMGM42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibG9hZDYiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDYiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGFkMmRlN2QxNzk1MWQxNGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjgxZjcyYWEyODAzMmFiMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKjMi4zqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDMxZmI4MjE1ZTA2NTA2MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQyIqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhZjM2NGRkMDdkNTM3OTMw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGU0ZmUwNzk1ODFjMDNiYzDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SpTYuNTMxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOTVlZTJhNjU2M2ExNGI3NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQ1Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQ1Iqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4ZWQ3NGQ3OGJjOWVmNWE52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGViOGMxYjQ4OGVkZTQ4NTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SozIuM6p0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDhiMDVhMDMxY2RkMGYzYjbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJsb2FkMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqwibG9hZC5sb2FkMSKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjI5YTJiZDY4NDNkOGJhZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkNDFiOTQ1NGUwMDEyNjg32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidm1fbm9tIqp0ZXh0L3BsYWlukqU2LjUzMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY5YTQ1ZTZiMGIxMTkxYznZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJsb2FkNCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqwibG9hZC5sb2FkNCKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmJmNzNiZjhmNmY5MTRlN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjZmVhNjZiNDU3OWU5MDRl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidm1fbm9tIqp0ZXh0L3BsYWlukqMyLjOqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5OTgxOTYxZTZhY2NmMzgz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDllMzU5ZWU5NzQyZmQ4YjnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGEzY2Y0YjY0NjVhZmQyMjDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjkxZGJmYTBmMDRjYjliMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwN2E5NGM1ZjdhY2Y3NTJlMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnInZtX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRmY2I3OGViZmQ5MGIyZTLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ2bV9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0MGNiNjMxODNmOTBhMDc52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwODQyMTgyYjRiZmE3MzUzMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTk2MzFmOTg3MGM4M2JjMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmMWYzMmJmZDgxZTg1ZDQ52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1MTNlNDI1NWRhMzVmYjQz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYWFkNDg1MTA3M2JhMDE1ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkOTZlZjEwMDZhNDJlMDk22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOGUyOGZmYjMzYTU4MGEzZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiOTlhOTI4OTExM2IyYWQ52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzZGQ2NWUxYWIzNmExYWFk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidm1fdWIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjk4YWQwNDAxMTBmZDA1MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnInZtX2xiIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGE5ZmI1ZDZhOTFmMGI1ODDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiNzljOWZiYmE2OWUzOTRk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZTgwZTdhYjJlZTI1NTllY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlYTE1NTVkZTcyMzMxYTgz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxZjgwOGJjZTc2YmU4NjE52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidm1fdWIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvNzM3NzYwYzRjNjYxMjZh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidm1fbGIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjk1NzMwZTI5MGE1NWFlZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGY5MjA4NTI1MjlhNGNlZGbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDFkZjU5Yzk1YjIyZTk2NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKsImRhdGFfbW9kZWwiqnRleHQvcGxhaW6SukVOR0lORUVSSU5HOjpEYXRhTW9kZWwgPSAwqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDUxNjkxZGI1ZGEzMzQwMGKkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZM1FGwJ84sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ0MDIwZDY3YS00YTllLTQwMzAtYjdjZC1lNWQ2MGU3ODQ5NWO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4XhSlNtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMDUzNjAxNjMtNGE2Zi00MWRhLThmYWUtMDcwZTMyN2MyNjA1iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlJKSqCJxZ19idXMiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODRjMGI1NTQ4NTYwN2NkM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInFnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDdlODM3M2RjZjhlNWQ3NWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJwZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlNmJjYmE0MzQ5NTg2OWZm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicGdfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGJlY2QwODdhZjk3OTBhYWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYWIwNWYyYzhkMWViNDNmZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhNDk3NGJjNmM1MGRmZWFi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqYicXVhZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqQicWYiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjgxZTg1ZDM0YzFiZWUzMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInF0Iqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDE1NDdmMTkzYTY2ZWJiZGLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJwdCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxNjk2NGRkZWE5MGI4MGFk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicGYiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTg0MjQ3ZTk0YzYzNTA5ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4ZjNhNmMyYTlhNTQxYjRi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgib2hsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlJKSpCJxZiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK9jYjRkZmJkMTU0ODg0N2XZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJxdCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyZmY5NGI3MjViZDE2MTAw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicHQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMWE4YzRlM2FiMGY3NmY4MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInBmIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGFlYTI1ZDlmNTkyMzg5OGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwODA1Yzc1Y2ZmYzk4MzQzMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0NGEzZTU5NTg1MjcwZTg22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKnInNiYXNlIqp0ZXh0L3BsYWlukqU1MDAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyYzVlOWQ5ZDU0OWI3NWNh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqQibDIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKoInFkX2J1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzNzk0OTAzMWExNjk0ZWU02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicGRfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRhY2ZkZWVlZTdkZmM2YjjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjYTg1MDM0MzQ3NGEzMTNk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicGQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODA0YTEzOTRiMmNjZDRhOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzNDUzOGZjNjY0ODY4MDU42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQibDMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKoInFkX2J1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2ODVjYWY0YTAyZjIyYTA02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicGRfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGIzMzAyZDBiMTg5OGU4NjnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkZjQ0N2M4M2YwYzFiNjZh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicGQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjg1YjkwNGU4MmVmYmIxYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyNDgwYTk5YzQ0ZTA5M2Qw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQibDEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKoInFkX2J1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0MGRmMjJkNTMzZjZhNDcz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicGRfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDVkZDE2Njk5ZWRkYmNhYjDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmYzhjMDE4N2FiNTExNjEx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicGQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjdjZTdjNjU4MWQ2MGQzMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK8xOWMyMTM4ZmYxNzg4ZGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNzlhOGVmZTE2ZjMxMzVjOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODA0Y2I3YWZmYzc4OTk3MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRkYzJiMTdmOTc2NDhlY2XZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjliYmIyOTZjZjU1YTJhMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMzc1NmQ4YWFlYThjZWMwOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrzU5NTBlNWEwNzA5MzdlMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5NjQ2YzRiNzI4NmJiYTI02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTE0NTU4YWYxZTY5Y2NkNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDM4NWYzMTlmNmM5ZDhjMGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmYzYjk5ZWNkYTU1ZGQ0NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhMDViN2QzNzNjOTY0YzU02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGNiMGQxMGVjMTFmOTdiNzWkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZadzb2xfZW5nsmxhc3RfcnVuX3RpbWVzdGFtcMtB2TNRRwSzV7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMDUzNjAxNjMtNGE2Zi00MWRhLThmYWUtMDcwZTMyN2MyNjA1uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAF/x4LVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDFkYzA2MDA3LWI0MTMtNGNiYi1iNDNiLTJjNzk1NWVjYjZkMoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTAxZDBmZTRiZjdiYmQxZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImZyb20iqnRleHQvcGxhaW6SqCJzb3VyY2UiqnRleHQvcGxhaW6SkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYWZlNzM2NmFkZjEwMGRhN6RtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdkzUUbfx3GwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDFkYzA2MDA3LWI0MTMtNGNiYi1iNDNiLTJjNzk1NWVjYjZkMrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgCS9Cq1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTCq3N0YXR1c190cmVlhKRuYW1lqG5vdGVib29rqHN1YnRhc2tzhKZzYXZpbmeEpG5hbWWmc2F2aW5nqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRKD6+06pzdGFydGVkX2F0y0HZM1EoPq5LqXdvcmtzcGFjZYSkbmFtZal3b3Jrc3BhY2Woc3VidGFza3OCrGluaXRfcHJvY2Vzc4SkbmFtZaxpbml0X3Byb2Nlc3Ooc3VidGFza3OEoTSEpG5hbWWhNKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUSYmEDiqc3RhcnRlZF9hdMtB2TNRJVXObKExhKRuYW1loTGoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1ElSLhWqnN0YXJ0ZWRfYXTLQdkzUSTPqkyhMoSkbmFtZaEyqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRJVSF6KpzdGFydGVkX2F0y0HZM1ElSLhroTOEpG5hbWWhM6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUSVVzk+qc3RhcnRlZF9hdMtB2TNRJVSGBatmaW5pc2hlZF9hdMtB2TNRJiYQRapzdGFydGVkX2F0y0HZM1Ekz6m9rmNyZWF0ZV9wcm9jZXNzhKRuYW1lrmNyZWF0ZV9wcm9jZXNzqHN1YnRhc2tzgqExhKRuYW1loTGoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EjnP6XqnN0YXJ0ZWRfYXTLQdkzUSKXJ1uhMoSkbmFtZaEyqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRJM+pYapzdGFydGVkX2F0y0HZM1EjnP6sq2ZpbmlzaGVkX2F0y0HZM1Ekz6lQqnN0YXJ0ZWRfYXTLQdkzUSKXJw+rZmluaXNoZWRfYXTLQdkzUSYmEE2qc3RhcnRlZF9hdMtB2TNRIpcm8qNwa2eEpG5hbWWjcGtnqHN1YnRhc2tzhKxpbnN0YW50aWF0ZTGEpG5hbWWsaW5zdGFudGlhdGUxqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRIpfVNKpzdGFydGVkX2F0y0HZM1Eil1jqqGFuYWx5c2lzhKRuYW1lqGFuYWx5c2lzqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRIpbMQqpzdGFydGVkX2F0y0HZM1EilkGnqnByZWNvbXBpbGWEpG5hbWWqcHJlY29tcGlsZahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUSQwIqOqc3RhcnRlZF9hdMtB2TNRIqVISadyZXNvbHZlhKRuYW1lp3Jlc29sdmWoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EipUgoqnN0YXJ0ZWRfYXTLQdkzUSKX1TmrZmluaXNoZWRfYXTLQdkzUSQwIsmqc3RhcnRlZF9hdMtB2TNRIpZBlqNydW6EpG5hbWWjcnVuqHN1YnRhc2tzgrByZXNvbHZlX3RvcG9sb2d5hKRuYW1lsHJlc29sdmVfdG9wb2xvZ3moc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EoP77bqnN0YXJ0ZWRfYXTLQdkzUSg+6MmoZXZhbHVhdGWEpG5hbWWoZXZhbHVhdGWoc3VidGFza3PeAEyiMzKEpG5hbWWiMzKoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1E8KPOyqnN0YXJ0ZWRfYXTLQdkzUTwohGaiMjmEpG5hbWWiMjmoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1Ew7pNsqnN0YXJ0ZWRfYXTLQdkzUTDuOgShMYSkbmFtZaExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRKSO1mqpzdGFydGVkX2F0y0HZM1EoQEnpojEyhKRuYW1lojEyqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRMDSHYqpzdGFydGVkX2F0y0HZM1EwMt5yojU0hKRuYW1lojU0qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRp/a4KpzdGFydGVkX2F0y0HZM1FGn65LojIwhKRuYW1lojIwqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRMEfbkKpzdGFydGVkX2F0y0HZM1EwQnGfojMwhKRuYW1lojMwqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRMO7jl6pzdGFydGVkX2F0y0HZM1Ew7pOSoTKEpG5hbWWhMqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUSkqpIOqc3RhcnRlZF9hdMtB2TNRKSO13aE2hKRuYW1loTaoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EpuOurqnN0YXJ0ZWRfYXTLQdkzUSm4e3yiNDeEpG5hbWWiNDeoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FGU575qnN0YXJ0ZWRfYXTLQdkzUUZBEfWiNzSEpG5hbWWiNzSoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FICU0OqnN0YXJ0ZWRfYXTLQdkzUUcLaPGiNDGEpG5hbWWiNDGoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FEG37lqnN0YXJ0ZWRfYXTLQdkzUUQbAyqiNjWEpG5hbWWiNjWoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FG/oz4qnN0YXJ0ZWRfYXTLQdkzUUb0MJiiNTOEpG5hbWWiNTOoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FGn64dqnN0YXJ0ZWRfYXTLQdkzUUaeld2iNTGEpG5hbWWiNTGoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FGc29QqnN0YXJ0ZWRfYXTLQdkzUUZzC+miMjeEpG5hbWWiMjeoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1Ew7VoIqnN0YXJ0ZWRfYXTLQdkzUTDs7WOiNzWEpG5hbWWiNzWoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FIPQ7YqnN0YXJ0ZWRfYXTLQdkzUUgJTVmiNDKEpG5hbWWiNDKoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FFyC3HqnN0YXJ0ZWRfYXTLQdkzUUQbfxOiMzOEpG5hbWWiMzOoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1E8Knp9qnN0YXJ0ZWRfYXTLQdkzUTwo8+CiMjiEpG5hbWWiMjioc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1Ew7jneqnN0YXJ0ZWRfYXTLQdkzUTDtWleiNzCEpG5hbWWiNzCoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FHBshQqnN0YXJ0ZWRfYXTLQdkzUUcEs9miNTKEpG5hbWWiNTKoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FGnpWWqnN0YXJ0ZWRfYXTLQdkzUUZzb3KiNTCEpG5hbWWiNTCoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FGcwuzqnN0YXJ0ZWRfYXTLQdkzUUZVZqqiMTSEpG5hbWWiMTSoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EwOCxJqnN0YXJ0ZWRfYXTLQdkzUTA3uDWiNjOEpG5hbWWiNjOoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FG6DxoqnN0YXJ0ZWRfYXTLQdkzUUblhbahN4SkbmFtZaE3qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRMCPjP6pzdGFydGVkX2F0y0HZM1EpuOvdojU3hKRuYW1lojU3qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRsFLiKpzdGFydGVkX2F0y0HZM1FGwRceoTiEpG5hbWWhOKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUTAkc5Oqc3RhcnRlZF9hdMtB2TNRMCPjiqI2NISkbmFtZaI2NKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUUb0MB+qc3RhcnRlZF9hdMtB2TNRRug8sKIyNoSkbmFtZaIyNqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUTDs7NCqc3RhcnRlZF9hdMtB2TNRMFyvwKIxMISkbmFtZaIxMKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUTAupUyqc3RhcnRlZF9hdMtB2TNRMCcXUKIxOYSkbmFtZaIxOahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUTBCcXaqc3RhcnRlZF9hdMtB2TNRMEI+kqI2OYSkbmFtZaI2OahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUUcEs5Kqc3RhcnRlZF9hdMtB2TNRRwKqtKI2MISkbmFtZaI2MKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUUbfx6Sqc3RhcnRlZF9hdMtB2TNRRt4yoKIyNISkbmFtZaIyNKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUTBcTlWqc3RhcnRlZF9hdMtB2TNRMFtRbqE0hKRuYW1loTSoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EpXTxTqnN0YXJ0ZWRfYXTLQdkzUSlcygiiNTiEpG5hbWWiNTioc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FG3b7GqnN0YXJ0ZWRfYXTLQdkzUUbBS62iMjWEpG5hbWWiMjWoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EwXK+fqnN0YXJ0ZWRfYXTLQdkzUTBcTneiMjOEpG5hbWWiMjOoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EwW1FAqnN0YXJ0ZWRfYXTLQdkzUTBa60qiMjKEpG5hbWWiMjKoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EwWusHqnN0YXJ0ZWRfYXTLQdkzUTBKPfOiMTGEpG5hbWWiMTGoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EwMt4zqnN0YXJ0ZWRfYXTLQdkzUTAupZSiMzWEpG5hbWWiMzWoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1E8K5p4qnN0YXJ0ZWRfYXTLQdkzUTwqqTeiMTOEpG5hbWWiMTOoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EwN7f+qnN0YXJ0ZWRfYXTLQdkzUTA0h5CiNDmEpG5hbWWiNDmoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FGVWZ7qnN0YXJ0ZWRfYXTLQdkzUUZVOD+iNTmEpG5hbWWiNTmoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FG3jJEqnN0YXJ0ZWRfYXTLQdkzUUbdvwqiNjGEpG5hbWWiNjGoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FG3/OVqnN0YXJ0ZWRfYXTLQdkzUUbfx8miMTWEpG5hbWWiMTWoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EwP2J4qnN0YXJ0ZWRfYXTLQdkzUTA4LHOiNjeEpG5hbWWiNjeoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FHAkfcqnN0YXJ0ZWRfYXTLQdkzUUb/BeqiNjKEpG5hbWWiNjKoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FG5YVuqnN0YXJ0ZWRfYXTLQdkzUUbf87qiNDOEpG5hbWWiNDOoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1FFyKWYqnN0YXJ0ZWRfYXTLQdkzUUXILgqhNYSkbmFtZaE1qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRKbh7OapzdGFydGVkX2F0y0HZM1EpXTyGojE2hKRuYW1lojE2qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRMECIe6pzdGFydGVkX2F0y0HZM1EwP2K/ojMxhKRuYW1lojMxqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRPCiEFqpzdGFydGVkX2F0y0HZM1Ew7uPzojM5hKRuYW1lojM5qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRPDLIfqpzdGFydGVkX2F0y0HZM1E8Mpm/ojQwhKRuYW1lojQwqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRBsC0apzdGFydGVkX2F0y0HZM1E8MsifojQ2hKRuYW1lojQ2qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRkERuqpzdGFydGVkX2F0y0HZM1FGPrMcojM4hKRuYW1lojM4qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRPDKZgKpzdGFydGVkX2F0y0HZM1E8MXqeojIxhKRuYW1lojIxqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRMEo9yapzdGFydGVkX2F0y0HZM1EwR9vXojcyhKRuYW1lojcyqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRwsCn6pzdGFydGVkX2F0y0HZM1FHCOYqojM0hKRuYW1lojM0qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRPCqo9KpzdGFydGVkX2F0y0HZM1E8KnqrojQ0hKRuYW1lojQ0qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRjRViqpzdGFydGVkX2F0y0HZM1FFyKXGojQ1hKRuYW1lojQ1qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRj6y3apzdGFydGVkX2F0y0HZM1FGNFXaojY4hKRuYW1lojY4qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRwKqi6pzdGFydGVkX2F0y0HZM1FHAkgbojU2hKRuYW1lojU2qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRsEW8KpzdGFydGVkX2F0y0HZM1FGwJ/gojU1hKRuYW1lojU1qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRsCfnapzdGFydGVkX2F0y0HZM1FGn9sBojM2hKRuYW1lojM2qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRPCvH96pzdGFydGVkX2F0y0HZM1E8K5qeojY2hKRuYW1lojY2qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRv8FxKpzdGFydGVkX2F0y0HZM1FG/o07ojc2hKRuYW1lojc2qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRSD130apzdGFydGVkX2F0y0HZM1FIPQ85ojE3hKRuYW1lojE3qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRMEDTSqpzdGFydGVkX2F0y0HZM1EwQIipojcxhKRuYW1lojcxqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRwjl2qpzdGFydGVkX2F0y0HZM1FHBsiTojM3hKRuYW1lojM3qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRPDF6W6pzdGFydGVkX2F0y0HZM1E8K8hHojQ4hKRuYW1lojQ4qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRRlU4GapzdGFydGVkX2F0y0HZM1FGU588ojE4hKRuYW1lojE4qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2TNRMEI+ZKpzdGFydGVkX2F0y0HZM1EwQNOEoTmEpG5hbWWhOahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUTAnFwmqc3RhcnRlZF9hdMtB2TNRMCRzwaI3M4SkbmFtZaI3M6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdkzUUcLaJiqc3RhcnRlZF9hdMtB2TNRRwsC4qEzhKRuYW1loTOoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZM1EpXMm4qnN0YXJ0ZWRfYXTLQdkzUSkqpMarZmluaXNoZWRfYXTLQdkzUUg9qCKqc3RhcnRlZF9hdMtB2TNRKD++4KtmaW5pc2hlZF9hdMtB2TNRSD2oHqpzdGFydGVkX2F0y0HZM1EoPuirq2ZpbmlzaGVkX2F0wKpzdGFydGVkX2F0y0HZM1Eik4mxsWNlbGxfZGVwZW5kZW5jaWVz3gBN2SQ1YWI2Y2QxNi0zYzI0LTRmNjAtYmRmMi03ZjQ4YjNlMjUwODWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ1YWI2Y2QxNi0zYzI0LTRmNjAtYmRmMi03ZjQ4YjNlMjUwODW0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ5Njc1N2RkZS01MmJlLTQ5MzAtOWJkZC05MzAzYmI3MTVlNTWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ5Njc1N2RkZS01MmJlLTQ5MzAtOWJkZC05MzAzYmI3MTVlNTW0ZG93bnN0cmVhbV9jZWxsc19tYXCBrnJlc3VsdF9tYXRoX21ukdkkODY3ZDhkMWQtMDQyYS00MmVjLTg0M2UtNTZiOGJhMmRiOTZhsnVwc3RyZWFtX2NlbGxzX21hcIWsaXBvcHRfc29sdmVykdkkODlkZTgwZGYtMWRkMC00Zjk0LWEyN2QtNzQ2OTNhOTc4MDU5t1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9ukdkkZjMwY2QwZDAtYjBkYS00ZjYzLWEyNDUtNTY4YTc2M2E5M2Q4p21hdGhfbW6R2SQ3ODVhMWMzOS1hYTU2LTQyNDQtYjdiOS0zMWQ3YTMxYjczYzOuTkZBVVBvd2VyTW9kZWyQ2ShQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi5fc29sdmVfbW5fbWNfb3BikNkkMDI2MDg4ZjctYjFkZi00NjQ3LWFkODEtNTJjNmM4ZWE3OTQ0hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkMDI2MDg4ZjctYjFkZi00NjQ3LWFkODEtNTJjNmM4ZWE3OTQ0tGRvd25zdHJlYW1fY2VsbHNfbWFwgadlbmdfYWxskdkkZjA3MGRiYmMtMWE1NS00OGYyLWFhMjEtMjExOWViNTczYjVisnVwc3RyZWFtX2NlbGxzX21hcIGqcGFyc2VfZmlsZZDZJGYwNmI5NTkyLTBlMTYtNGZkMS1iZjZlLTYyNGVjMGNkYjhmYoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGYwNmI5NTkyLTBlMTYtNGZkMS1iZjZlLTYyNGVjMGNkYjhmYrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGIxZTU1MjYzLTljNzYtNDNiMi1iOTFjLTExNWIyZjA4MDE4MoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGIxZTU1MjYzLTljNzYtNDNiMi1iOTFjLTExNWIyZjA4MDE4MrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDQ2MDNiYzU2LWM0MDItNDhhZi05NzE1LTA3MjJlNDJkOTBmN4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDQ2MDNiYzU2LWM0MDItNDhhZi05NzE1LTA3MjJlNDJkOTBmN7Rkb3duc3RyZWFtX2NlbGxzX21hcIGmcG1fZW5nkdkkMTJiYTAyZmYtOTFkZC00MzU1LWFkMmItZjNjYTNiNjFlMzE4snVwc3RyZWFtX2NlbGxzX21hcIS0aW5zdGFudGlhdGVfbWNfbW9kZWyQrk5GQVVQb3dlck1vZGVskKxidWlsZF9tY19vcGaQo2VuZ5HZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y9kkNThmODA2NTEtNGE0NC00NzgxLWE2YzAtYTA1NmVjNzZiMDdlhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNThmODA2NTEtNGE0NC00NzgxLWE2YzAtYTA1NmVjNzZiMDdltGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCqnBhcnNlX2ZpbGWQrm1ha2VfbG9zc2xlc3MhkNkkOTZhNjViZGMtN2VlNC00ZTlmLTk0ZjUtOGE4M2Y3NTEyZmU5hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkOTZhNjViZGMtN2VlNC00ZTlmLTk0ZjUtOGE4M2Y3NTEyZmU5tGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkYTczNDhmYzgtYjI1ZS00ZWNmLTlmZTYtMzE0MDM2YjdkZjljhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkYTczNDhmYzgtYjI1ZS00ZWNmLTlmZTYtMzE0MDM2YjdkZjljtGRvd25zdHJlYW1fY2VsbHNfbWFwgaRtYXRok9kkMWRjMDYwMDctYjQxMy00Y2JiLWI0M2ItMmM3OTU1ZWNiNmQy2SRlM2ZlMGE1ZS05NDMxLTQ1M2QtYjdlNS04MjFkZTYyNGE0ZWbZJDA1MzYwMTYzLTRhNmYtNDFkYS04ZmFlLTA3MGUzMjdjMjYwNbJ1cHN0cmVhbV9jZWxsc19tYXCCo2VuZ5HZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y7R0cmFuc2Zvcm1fZGF0YV9tb2RlbJDZJGY4ODJmMDcwLTc0YWYtNGYzYi05YWQxLWJkN2FkNDUzNzc4ZoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGY4ODJmMDcwLTc0YWYtNGYzYi05YWQxLWJkN2FkNDUzNzc4ZrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGFkNDhiM2FkLWVkZTEtNDEwOS05NjQ3LTAwN2MxZDhkMTk2Y4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGFkNDhiM2FkLWVkZTEtNDEwOS05NjQ3LTAwN2MxZDhkMTk2Y7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqxNQVRIRU1BVElDQUyQqnBhcnNlX2ZpbGWQ2SQ1NDI4MDY5Ni1iZWVjLTQ3ZWUtODExNC1lYTkzMTFhY2E5ZWKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ1NDI4MDY5Ni1iZWVjLTQ3ZWUtODExNC1lYTkzMTFhY2E5ZWK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ4YjA2NjAzOS1lZDY1LTQ2MTctYjQwNC04Njk1MmQzZmM3OGWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ4YjA2NjAzOS1lZDY1LTQ2MTctYjQwNC04Njk1MmQzZmM3OGW0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGmcmVzdWx0kdkkNzQ1ZjMzYmYtOThkNy00YjI3LTk1ZmQtZWM2YmY1ZTNkNWNm2SRjNTViMmM0Mi05ZDI3LTExZWItMjRjYS1lOTBhNTQ3MmZmYmKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRjNTViMmM0Mi05ZDI3LTExZWItMjRjYS1lOTBhNTQ3MmZmYmK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ3ZTU4MTFjZi04NmEyLTQzZmItOGM5NC00NDA5MWYzM2MwMzGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ3ZTU4MTFjZi04NmEyLTQzZmItOGM5NC00NDA5MWYzM2MwMzG0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQyN2Q1YTIzNy00YzJlLTRiMTQtYTA4Mi1mNDg0NzE1M2M4ZDWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQyN2Q1YTIzNy00YzJlLTRiMTQtYTA4Mi1mNDg0NzE1M2M4ZDW0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGmcmVzdWx0kdkkNzQ1ZjMzYmYtOThkNy00YjI3LTk1ZmQtZWM2YmY1ZTNkNWNm2SRkMGUwMmVlNS1mNTdjLTQyODYtOTQwZC1iMDEwOTdjODQwYmWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRkMGUwMmVlNS1mNTdjLTQyODYtOTQwZC1iMDEwOTdjODQwYmW0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ4YmEwODFiNC04NDQ0LTQ4ZTAtYWZjZS0yMDY0OWY3ZmRkMDGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ4YmEwODFiNC04NDQ0LTQ4ZTAtYWZjZS0yMDY0OWY3ZmRkMDG0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGjZW5nkdkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZj2SQyYzM1OGQ3YS01ZDg0LTRmNjItYTE0Ny01NzdiYjc3NWFjN2aEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQyYzM1OGQ3YS01ZDg0LTRmNjItYTE0Ny01NzdiYjc3NWFjN2a0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRlMjJhN2QzZS0zZjIxLTQxYjAtYWJmMi0yYzcyM2U4N2M1N2WEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRlMjJhN2QzZS0zZjIxLTQxYjAtYWJmMi0yYzcyM2U4N2M1N2W0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQyYThjMTUzNi1lZjVmLTRlMzctYjMwZS0xYmI3Mzk4MmQ3YjCEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQyYThjMTUzNi1lZjVmLTRlMzctYjMwZS0xYmI3Mzk4MmQ3YjC0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ3YTg2ZTI2ZC1mZGY2LTQxYjYtYjFkZC1kYzBjNGE4ZTlkNTCEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ3YTg2ZTI2ZC1mZGY2LTQxYjYtYjFkZC1kYzBjNGE4ZTlkNTC0ZG93bnN0cmVhbV9jZWxsc19tYXCBpmVuZ191dJXZJDgyZTkzMzBiLTJlOTQtNDJhMS1iNTZkLTQzMDY3NGIxMTI0MdkkNWU1ZGQyNGMtOTViNS00OTUxLTg1NDctMTNlMjBiYjBmZWVj2SQ0NWMzMjBkZC1lMGIyLTQ2ZWMtYWYwOS1kODNlNTY1MjAyNmTZJDJjZGQ2ODJhLWI5N2YtNDlkYy04ODI5LTQ3ZTcxNDY0OTdiOdkkNzQ4MzZiMmMtZGI2Ny00NDM1LWE1NTItYmE1YzNlOTNlNDNmsnVwc3RyZWFtX2NlbGxzX21hcIGqcGFyc2VfZmlsZZDZJGYzNDU4YTVjLTcwYzYtNGQwYy04MjUzLTRmZWIwYzg3ZWU3NoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGYzNDU4YTVjLTcwYzYtNGQwYy04MjUzLTRmZWIwYzg3ZWU3NrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDU0NDEwOGQxLWQxYTctNGRjNi05YTNjLTZhMTAwMjVjYjhhM4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDU0NDEwOGQxLWQxYTctNGRjNi05YTNjLTZhMTAwMjVjYjhhM7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGYzMGNkMGQwLWIwZGEtNGY2My1hMjQ1LTU2OGE3NjNhOTNkOIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMHp2NlbGxfaWTZJGYzMGNkMGQwLWIwZGEtNGY2My1hMjQ1LTU2OGE3NjNhOTNkOLRkb3duc3RyZWFtX2NlbGxzX21hcIK3UG93ZXJNb2RlbHNEaXN0cmlidXRpb26T2SRhYzk0ZTU1Ni1iNTQ0LTRjYTYtODdiZC1mZjJkN2E3NDE0ZTfZJGFlOGRhZjZjLTQwNTUtNDk3ZS05MDVjLWQ2ZDVhNjM3M2FkM9kkOTY3NTdkZGUtNTJiZS00OTMwLTliZGQtOTMwM2JiNzE1ZTU1pUlwb3B0kdkkODlkZTgwZGYtMWRkMC00Zjk0LWEyN2QtNzQ2OTNhOTc4MDU5snVwc3RyZWFtX2NlbGxzX21hcIDZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1OYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1ObRkb3duc3RyZWFtX2NlbGxzX21hcIGsaXBvcHRfc29sdmVyltkkNzQ1ZjMzYmYtOThkNy00YjI3LTk1ZmQtZWM2YmY1ZTNkNWNm2SQ3NjNhMTUwNC1mOTI3LTRkZmMtYTA0Mi1hYzY2MzI0NzA4YTnZJGYyZmE3NzllLWY2MmQtNDA1My1iMDU1LWU5ZjBhZWU2YzNmN9kkYWU4ZGFmNmMtNDA1NS00OTdlLTkwNWMtZDZkNWE2MzczYWQz2SRlM2ZlMGE1ZS05NDMxLTQ1M2QtYjdlNS04MjFkZTYyNGE0ZWbZJDk2NzU3ZGRlLTUyYmUtNDkzMC05YmRkLTkzMDNiYjcxNWU1NbJ1cHN0cmVhbV9jZWxsc19tYXCDpUlwb3B0kdkkZjMwY2QwZDAtYjBkYS00ZjYzLWEyNDUtNTY4YTc2M2E5M2Q4oj0+kLlvcHRpbWl6ZXJfd2l0aF9hdHRyaWJ1dGVzkNkkODNjZTQzNGMtMGY5Mi00NmE4LTg2NDgtMzIyMDg0MDQ0NjAwhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkODNjZTQzNGMtMGY5Mi00NmE4LTg2NDgtMzIyMDg0MDQ0NjAwtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCBo2VuZ5HZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y9kkNDVjMzIwZGQtZTBiMi00NmVjLWFmMDktZDgzZTU2NTIwMjZkhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNDVjMzIwZGQtZTBiMi00NmVjLWFmMDktZDgzZTU2NTIwMjZktGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCBpmVuZ191dJHZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MNkkNWY3MmVjZWMtYmIzZi00MjMxLTkzYzEtNzE5ZTM4ZTE3YmU0hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNWY3MmVjZWMtYmIzZi00MjMxLTkzYzEtNzE5ZTM4ZTE3YmU0tGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkNTY0MjAwZTAtMjA4MC00NGRhLThkYmYtMzdjNWUzYTM4NDEyhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNTY0MjAwZTAtMjA4MC00NGRhLThkYmYtMzdjNWUzYTM4NDEytGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkZTg1MjcxMmMtZDA5YS00MWUxLTk3ODUtMzA4YzIxOWM3YWQ4hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZTg1MjcxMmMtZDA5YS00MWUxLTk3ODUtMzA4YzIxOWM3YWQ4tGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCBpmVuZ190c5HZJDU0MmU1OTJmLThmNzUtNDFmOS04Zjk4LTUzNzNiNDMxZmNjNtkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZjhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZjtGRvd25zdHJlYW1fY2VsbHNfbWFwgaNlbmec2SRhNWI3MzZmOS0yNzc2LTQ3NjAtYjA3My1kMDIwMjdiYWVmMTPZJDlhYzZiMGVkLTU4YTgtNDA3OS1hYTlmLWQ3MDAyNGY0ZDRiNNkkOGJhMDgxYjQtODQ0NC00OGUwLWFmY2UtMjA2NDlmN2ZkZDAx2SQ4M2NlNDM0Yy0wZjkyLTQ2YTgtODY0OC0zMjIwODQwNDQ2MDDZJDJmOWMzZjY0LTNlNWQtNDIzZi05MzllLThkOTZiZDE5ZTdmZdkkYjE1NTkzYjktZjc3NS00N2FmLWFhOWItNDk4MGE0MDI4ZmFh2SQzNmNhMTdiYy1iNTYwLTQ4YzktOTg4Zi0yNTU3ODA0NzlkMDXZJDc0NWYzM2JmLTk4ZDctNGIyNy05NWZkLWVjNmJmNWUzZDVjZtkkNzYzYTE1MDQtZjkyNy00ZGZjLWEwNDItYWM2NjMyNDcwOGE52SRmMmZhNzc5ZS1mNjJkLTQwNTMtYjA1NS1lOWYwYWVlNmMzZjfZJGE3MzQ4ZmM4LWIyNWUtNGVjZi05ZmU2LTMxNDAzNmI3ZGY5Y9kkNDYwM2JjNTYtYzQwMi00OGFmLTk3MTUtMDcyMmU0MmQ5MGY3snVwc3RyZWFtX2NlbGxzX21hcIKqcGFyc2VfZmlsZZCocG1kX3BhdGiR2SRhYzk0ZTU1Ni1iNTQ0LTRjYTYtODdiZC1mZjJkN2E3NDE0ZTfZJGE1YjczNmY5LTI3NzYtNDc2MC1iMDczLWQwMjAyN2JhZWYxM4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGE1YjczNmY5LTI3NzYtNDc2MC1iMDczLWQwMjAyN2JhZWYxM7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaNlbmeR2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmPZJDJiZjgwMmUyLWY3NjktNDhkYi1hZGVmLWE1YTA2NmM1NjVjMoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDJiZjgwMmUyLWY3NjktNDhkYi1hZGVmLWE1YTA2NmM1NjVjMrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDhkNTcwMWQxLTllOTEtNDNiNS05NzViLWZjOGUwZTMwNmU5OYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDhkNTcwMWQxLTllOTEtNDNiNS05NzViLWZjOGUwZTMwNmU5ObRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDcyM2Y0ZTI2LTgwNjUtNGUyMi04YzVjLWRlMzJkMmU0MmI0N4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDcyM2Y0ZTI2LTgwNjUtNGUyMi04YzVjLWRlMzJkMmU0MmI0N7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGIxNTU5M2I5LWY3NzUtNDdhZi1hYTliLTQ5ODBhNDAyOGZhYYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGIxNTU5M2I5LWY3NzUtNDdhZi1hYTliLTQ5ODBhNDAyOGZhYbRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaNlbmeR2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmPZJDM2Y2ExN2JjLWI1NjAtNDhjOS05ODhmLTI1NTc4MDQ3OWQwNYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDM2Y2ExN2JjLWI1NjAtNDhjOS05ODhmLTI1NTc4MDQ3OWQwNbRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaNlbmeR2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmPZJDFlNzkxMjYyLTI2MWQtNDc1Ni1iZWM0LWVkZWJlNDczMjcwMIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDFlNzkxMjYyLTI2MWQtNDc1Ni1iZWM0LWVkZWJlNDczMjcwMLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDJjZGQ2ODJhLWI5N2YtNDlkYy04ODI5LTQ3ZTcxNDY0OTdiOYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDJjZGQ2ODJhLWI5N2YtNDlkYy04ODI5LTQ3ZTcxNDY0OTdiObRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqZlbmdfdXSR2SQ3YTg2ZTI2ZC1mZGY2LTQxYjYtYjFkZC1kYzBjNGE4ZTlkNTC1YXBwbHlfdm9sdGFnZV9ib3VuZHMhkNkkNzQ1ZjMzYmYtOThkNy00YjI3LTk1ZmQtZWM2YmY1ZTNkNWNmhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNzQ1ZjMzYmYtOThkNy00YjI3LTk1ZmQtZWM2YmY1ZTNkNWNmtGRvd25zdHJlYW1fY2VsbHNfbWFwgaZyZXN1bHSS2SQyN2Q1YTIzNy00YzJlLTRiMTQtYTA4Mi1mNDg0NzE1M2M4ZDXZJDhiMDY2MDM5LWVkNjUtNDYxNy1iNDA0LTg2OTUyZDNmYzc4ZbJ1cHN0cmVhbV9jZWxsc19tYXCErGlwb3B0X3NvbHZlcpHZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1Oa5BQ1BVUG93ZXJNb2RlbJCjZW5nkdkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZjrHNvbHZlX21jX29wZpDZJDg2N2Q4ZDFkLTA0MmEtNDJlYy04NDNlLTU2YjhiYTJkYjk2YYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDg2N2Q4ZDFkLTA0MmEtNDJlYy04NDNlLTU2YjhiYTJkYjk2YbRkb3duc3RyZWFtX2NlbGxzX21hcIGqc29sX2VuZ19tbpCydXBzdHJlYW1fY2VsbHNfbWFwg6dtYXRoX21ukdkkNzg1YTFjMzktYWE1Ni00MjQ0LWI3YjktMzFkN2EzMWI3M2MzsnRyYW5zZm9ybV9zb2x1dGlvbpCucmVzdWx0X21hdGhfbW6R2SQ5Njc1N2RkZS01MmJlLTQ5MzAtOWJkZC05MzAzYmI3MTVlNTXZJDJjMzc1ODc4LWYxNmItNDgzMy05YWFhLWI4MjZmYmUwNTZhMoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDJjMzc1ODc4LWYxNmItNDgzMy05YWFhLWI4MjZmYmUwNTZhMrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDU0NWM5MjcwLTI1N2EtNDZlOC05NzBkLTZhOWZjZjA5ZGMxN4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDU0NWM5MjcwLTI1N2EtNDZlOC05NzBkLTZhOWZjZjA5ZGMxN7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqxNQVRIRU1BVElDQUyQqnBhcnNlX2ZpbGWQ2SRmZGE0MjBhMS1lNTYzLTRhNDEtODRkNC0yYTU3MGJmMTYzYWWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRmZGE0MjBhMS1lNTYzLTRhNDEtODRkNC0yYTU3MGJmMTYzYWW0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRjODg0ZmQ1Yi00ZWNiLTQwMmItYjIyOC0wMWI5YTYxZGI4YmaEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRjODg0ZmQ1Yi00ZWNiLTQwMmItYjIyOC0wMWI5YTYxZGI4Yma0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQyOWE4YTU2MC03ZDVlLTQ5MjktODc3YS0yZGFiMTczMDk5NjiEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQyOWE4YTU2MC03ZDVlLTQ5MjktODc3YS0yZGFiMTczMDk5Nji0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ3NjNhMTUwNC1mOTI3LTRkZmMtYTA0Mi1hYzY2MzI0NzA4YTmEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ3NjNhMTUwNC1mOTI3LTRkZmMtYTA0Mi1hYzY2MzI0NzA4YTm0ZG93bnN0cmVhbV9jZWxsc19tYXCBqXJlc3VsdF9wdZHZJGU3YjU4OGU5LWZiNWYtNDM4My1iNWM2LWJjZTllZDhmNWE2MLJ1cHN0cmVhbV9jZWxsc19tYXCErGlwb3B0X3NvbHZlcpHZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1Oa5BQ1BVUG93ZXJNb2RlbJCjZW5nkdkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZjrHNvbHZlX21jX29wZpDZJDJlNGZlMDAwLTQ0OWMtNGZjMC04NzA3LTRjNTFhYzUwYWIwM4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDJlNGZlMDAwLTQ0OWMtNGZjMC04NzA3LTRjNTFhYzUwYWIwM7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDBlYmE0MDNlLWMyYmEtNGFmMy04ZGNjLWZlMTRhM2MyMmJkN4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDBlYmE0MDNlLWMyYmEtNGFmMy04ZGNjLWZlMTRhM2MyMmJkN7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDEyYmEwMmZmLTkxZGQtNDM1NS1hZDJiLWYzY2EzYjYxZTMxOIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDEyYmEwMmZmLTkxZGQtNDM1NS1hZDJiLWYzY2EzYjYxZTMxOLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwg6J8PpCoTWFya2Rvd26QpnBtX2VuZ5HZJDQ2MDNiYzU2LWM0MDItNDhhZi05NzE1LTA3MjJlNDJkOTBmN9kkZTdiNTg4ZTktZmI1Zi00MzgzLWI1YzYtYmNlOWVkOGY1YTYwhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZTdiNTg4ZTktZmI1Zi00MzgzLWI1YzYtYmNlOWVkOGY1YTYwtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCBqXJlc3VsdF9wdZHZJDc2M2ExNTA0LWY5MjctNGRmYy1hMDQyLWFjNjYzMjQ3MDhhOdkkMDdmYzVhMWItNGE5ZS00YTEwLWJmN2EtZDI2ODI3NjlhYzk3hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkMDdmYzVhMWItNGE5ZS00YTEwLWJmN2EtZDI2ODI3NjlhYzk3tGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkZTNmZTBhNWUtOTQzMS00NTNkLWI3ZTUtODIxZGU2MjRhNGVmhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZTNmZTBhNWUtOTQzMS00NTNkLWI3ZTUtODIxZGU2MjRhNGVmtGRvd25zdHJlYW1fY2VsbHNfbWFwgatyZXN1bHRfbWF0aJHZJDA1MzYwMTYzLTRhNmYtNDFkYS04ZmFlLTA3MGUzMjdjMjYwNbJ1cHN0cmVhbV9jZWxsc19tYXCErGlwb3B0X3NvbHZlcpHZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1OaRtYXRokdkkYTczNDhmYzgtYjI1ZS00ZWNmLTlmZTYtMzE0MDM2YjdkZjljrkFDUFVQb3dlck1vZGVskKxzb2x2ZV9tY19vcGaQ2SQ3ODVhMWMzOS1hYTU2LTQyNDQtYjdiOS0zMWQ3YTMxYjczYzOEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ3ODVhMWMzOS1hYTU2LTQyNDQtYjdiOS0zMWQ3YTMxYjczYzO0ZG93bnN0cmVhbV9jZWxsc19tYXCBp21hdGhfbW6S2SQ5Njc1N2RkZS01MmJlLTQ5MzAtOWJkZC05MzAzYmI3MTVlNTXZJDg2N2Q4ZDFkLTA0MmEtNDJlYy04NDNlLTU2YjhiYTJkYjk2YbJ1cHN0cmVhbV9jZWxsc19tYXCCpmVuZ190c5HZJDU0MmU1OTJmLThmNzUtNDFmOS04Zjk4LTUzNzNiNDMxZmNjNrR0cmFuc2Zvcm1fZGF0YV9tb2RlbJDZJDJmOWMzZjY0LTNlNWQtNDIzZi05MzllLThkOTZiZDE5ZTdmZYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDJmOWMzZjY0LTNlNWQtNDIzZi05MzllLThkOTZiZDE5ZTdmZbRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaNlbmeR2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmPZJDU0MmU1OTJmLThmNzUtNDFmOS04Zjk4LTUzNzNiNDMxZmNjNoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDU0MmU1OTJmLThmNzUtNDFmOS04Zjk4LTUzNzNiNDMxZmNjNrRkb3duc3RyZWFtX2NlbGxzX21hcIGmZW5nX3Rzk9kkZTg1MjcxMmMtZDA5YS00MWUxLTk3ODUtMzA4YzIxOWM3YWQ42SRhZThkYWY2Yy00MDU1LTQ5N2UtOTA1Yy1kNmQ1YTYzNzNhZDPZJDc4NWExYzM5LWFhNTYtNDI0NC1iN2I5LTMxZDdhMzFiNzNjM7J1cHN0cmVhbV9jZWxsc19tYXCBqnBhcnNlX2ZpbGWQ2SQ3NDgzNmIyYy1kYjY3LTQ0MzUtYTU1Mi1iYTVjM2U5M2U0M2aEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ3NDgzNmIyYy1kYjY3LTQ0MzUtYTU1Mi1iYTVjM2U5M2U0M2a0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGmZW5nX3V0kdkkN2E4NmUyNmQtZmRmNi00MWI2LWIxZGQtZGMwYzRhOGU5ZDUw2SQ1ZTVkZDI0Yy05NWI1LTQ5NTEtODU0Ny0xM2UyMGJiMGZlZWOEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ1ZTVkZDI0Yy05NWI1LTQ5NTEtODU0Ny0xM2UyMGJiMGZlZWO0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKmZW5nX3V0kdkkN2E4NmUyNmQtZmRmNi00MWI2LWIxZGQtZGMwYzRhOGU5ZDUwrm1ha2VfbG9zc2xlc3MhkNkkM2Q4Njk4OWEtYTRkYi00NzY2LWFlYzctYWJjOWEyNWZmZGU4hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkM2Q4Njk4OWEtYTRkYi00NzY2LWFlYzctYWJjOWEyNWZmZGU4tGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkZGU5MmJjMjAtYjEyNS00ZjNkLTkzMGEtYjFkYTYzZDVjZWY1hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZGU5MmJjMjAtYjEyNS00ZjNkLTkzMGEtYjFkYTYzZDVjZWY1tGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkZGI0ZDllYjktZTEyMC00NDg5LWEzYzItNDhjNDNmMmEzYzNihLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZGI0ZDllYjktZTEyMC00NDg5LWEzYzItNDhjNDNmMmEzYzNitGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkOWFjNmIwZWQtNThhOC00MDc5LWFhOWYtZDcwMDI0ZjRkNGI0hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkOWFjNmIwZWQtNThhOC00MDc5LWFhOWYtZDcwMDI0ZjRkNGI0tGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCBo2VuZ5HZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y9kkODk4NDY4NzgtZWJmYy00OWE1LTkxZWYtNzYyZjY5MmJhNWVhhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkODk4NDY4NzgtZWJmYy00OWE1LTkxZWYtNzYyZjY5MmJhNWVhtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkZjJmYTc3OWUtZjYyZC00MDUzLWIwNTUtZTlmMGFlZTZjM2Y3hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZjJmYTc3OWUtZjYyZC00MDUzLWIwNTUtZTlmMGFlZTZjM2Y3tGRvd25zdHJlYW1fY2VsbHNfbWFwgalyZXN1bHRfYmaQsnVwc3RyZWFtX2NlbGxzX21hcISsaXBvcHRfc29sdmVykdkkODlkZTgwZGYtMWRkMC00Zjk0LWEyN2QtNzQ2OTNhOTc4MDU5o2VuZ5HZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y7NTT0NOTFBVQkZQb3dlck1vZGVskKxzb2x2ZV9tY19vcGaQ2SQ4MmU5MzMwYi0yZTk0LTQyYTEtYjU2ZC00MzA2NzRiMTEyNDGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ4MmU5MzMwYi0yZTk0LTQyYTEtYjU2ZC00MzA2NzRiMTEyNDG0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGmZW5nX3V0kdkkN2E4NmUyNmQtZmRmNi00MWI2LWIxZGQtZGMwYzRhOGU5ZDUw2SRkZGUyZGE1OS02M2ZhLTQ1NDktODgyOS00OTFlNWYzYzY3NWWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRkZGUyZGE1OS02M2ZhLTQ1NDktODgyOS00OTFlNWYzYzY3NWW0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRmYjgxZDNjMS1hNDdiLTQ2ZDktYjQ2My0xNzY2MDIyYmUxMTSEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRmYjgxZDNjMS1hNDdiLTQ2ZDktYjQ2My0xNzY2MDIyYmUxMTS0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRmMDcwZGJiYy0xYTU1LTQ4ZjItYWEyMS0yMTE5ZWI1NzNiNWKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRmMDcwZGJiYy0xYTU1LTQ4ZjItYWEyMS0yMTE5ZWI1NzNiNWK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGnZW5nX2FsbJHZJDAyNjA4OGY3LWIxZGYtNDY0Ny1hZDgxLTUyYzZjOGVhNzk0NNkkYTA5ZGU4YWItYzFlMS00YzlmLTlkODYtNDI2OGNlNTAzY2FlhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkYTA5ZGU4YWItYzFlMS00YzlmLTlkODYtNDI2OGNlNTAzY2FltGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkYjhlMDFjZTItZDdmNy00YzczLTgyMzAtOWZkZWVjYWIyYzRlhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkYjhlMDFjZTItZDdmNy00YzczLTgyMzAtOWZkZWVjYWIyYzRltGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkYWM5NGU1NTYtYjU0NC00Y2E2LTg3YmQtZmYyZDdhNzQxNGU3hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkYWM5NGU1NTYtYjU0NC00Y2E2LTg3YmQtZmYyZDdhNzQxNGU3tGRvd25zdHJlYW1fY2VsbHNfbWFwgahwbWRfcGF0aJHZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y7J1cHN0cmVhbV9jZWxsc19tYXCEt1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9ukdkkZjMwY2QwZDAtYjBkYS00ZjYzLWEyNDUtNTY4YTc2M2E5M2Q4p2Rpcm5hbWWQqGpvaW5wYXRokKZwYXRob2aQ2SRhZThkYWY2Yy00MDU1LTQ5N2UtOTA1Yy1kNmQ1YTYzNzNhZDOEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRhZThkYWY2Yy00MDU1LTQ5N2UtOTA1Yy1kNmQ1YTYzNzNhZDO0ZG93bnN0cmVhbV9jZWxsc19tYXCBqXJlc3VsdF9tbpCydXBzdHJlYW1fY2VsbHNfbWFwhaxpcG9wdF9zb2x2ZXKR2SQ4OWRlODBkZi0xZGQwLTRmOTQtYTI3ZC03NDY5M2E5NzgwNTm3UG93ZXJNb2RlbHNEaXN0cmlidXRpb26R2SRmMzBjZDBkMC1iMGRhLTRmNjMtYTI0NS01NjhhNzYzYTkzZDimZW5nX3RzkdkkNTQyZTU5MmYtOGY3NS00MWY5LThmOTgtNTM3M2I0MzFmY2M2rk5GQVVQb3dlck1vZGVskNkoUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uX3NvbHZlX21uX21jX29wYpDZJDY2NjIyM2Q1LTgwMmEtNDE2NC04ODJjLThhYjFhMTMxOWQ2ZIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDY2NjIyM2Q1LTgwMmEtNDE2NC04ODJjLThhYjFhMTMxOWQ2ZLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDQwMjBkNjdhLTRhOWUtNDAzMC1iN2NkLWU1ZDYwZTc4NDk1Y4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDQwMjBkNjdhLTRhOWUtNDAzMC1iN2NkLWU1ZDYwZTc4NDk1Y7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwhLVhcHBseV92b2x0YWdlX2JvdW5kcyGQqnBhcnNlX2ZpbGWQrm1ha2VfbG9zc2xlc3MhkKI9PpDZJDA1MzYwMTYzLTRhNmYtNDFkYS04ZmFlLTA3MGUzMjdjMjYwNYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDA1MzYwMTYzLTRhNmYtNDFkYS04ZmFlLTA3MGUzMjdjMjYwNbRkb3duc3RyZWFtX2NlbGxzX21hcIGnc29sX2VuZ5CydXBzdHJlYW1fY2VsbHNfbWFwg6RtYXRokdkkYTczNDhmYzgtYjI1ZS00ZWNmLTlmZTYtMzE0MDM2YjdkZjljq3Jlc3VsdF9tYXRokdkkZTNmZTBhNWUtOTQzMS00NTNkLWI3ZTUtODIxZGU2MjRhNGVmsnRyYW5zZm9ybV9zb2x1dGlvbpDZJDFkYzA2MDA3LWI0MTMtNGNiYi1iNDNiLTJjNzk1NWVjYjZkMoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDFkYzA2MDA3LWI0MTMtNGNiYi1iNDNiLTJjNzk1NWVjYjZkMrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqRtYXRokdkkYTczNDhmYzgtYjI1ZS00ZWNmLTlmZTYtMzE0MDM2YjdkZjljo2VuZJC0Y2VsbF9leGVjdXRpb25fb3JkZXLcAE3ZJGYzMGNkMGQwLWIwZGEtNGY2My1hMjQ1LTU2OGE3NjNhOTNkONkkYzU1YjJjNDItOWQyNy0xMWViLTI0Y2EtZTkwYTU0NzJmZmJi2SRkZTkyYmMyMC1iMTI1LTRmM2QtOTMwYS1iMWRhNjNkNWNlZjXZJGFjOTRlNTU2LWI1NDQtNGNhNi04N2JkLWZmMmQ3YTc0MTRlN9kkMWU3OTEyNjItMjYxZC00NzU2LWJlYzQtZWRlYmU0NzMyNzAw2SQ4OWRlODBkZi0xZGQwLTRmOTQtYTI3ZC03NDY5M2E5NzgwNTnZJGUyMmE3ZDNlLTNmMjEtNDFiMC1hYmYyLTJjNzIzZTg3YzU3ZdkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZj2SRjODg0ZmQ1Yi00ZWNiLTQwMmItYjIyOC0wMWI5YTYxZGI4YmbZJGE1YjczNmY5LTI3NzYtNDc2MC1iMDczLWQwMjAyN2JhZWYxM9kkMjlhOGE1NjAtN2Q1ZS00OTI5LTg3N2EtMmRhYjE3MzA5OTY42SQ5YWM2YjBlZC01OGE4LTQwNzktYWE5Zi1kNzAwMjRmNGQ0YjTZJDg5ODQ2ODc4LWViZmMtNDlhNS05MWVmLTc2MmY2OTJiYTVlYdkkOGJhMDgxYjQtODQ0NC00OGUwLWFmY2UtMjA2NDlmN2ZkZDAx2SQyYThjMTUzNi1lZjVmLTRlMzctYjMwZS0xYmI3Mzk4MmQ3YjDZJDgzY2U0MzRjLTBmOTItNDZhOC04NjQ4LTMyMjA4NDA0NDYwMNkkMmY5YzNmNjQtM2U1ZC00MjNmLTkzOWUtOGQ5NmJkMTllN2Zl2SRmMDZiOTU5Mi0wZTE2LTRmZDEtYmY2ZS02MjRlYzBjZGI4ZmLZJGIxNTU5M2I5LWY3NzUtNDdhZi1hYTliLTQ5ODBhNDAyOGZhYdkkMmU0ZmUwMDAtNDQ5Yy00ZmMwLTg3MDctNGM1MWFjNTBhYjAz2SQzNmNhMTdiYy1iNTYwLTQ4YzktOTg4Zi0yNTU3ODA0NzlkMDXZJDdlNTgxMWNmLTg2YTItNDNmYi04Yzk0LTQ0MDkxZjMzYzAzMdkkMDI2MDg4ZjctYjFkZi00NjQ3LWFkODEtNTJjNmM4ZWE3OTQ02SQ1ZjcyZWNlYy1iYjNmLTQyMzEtOTNjMS03MTllMzhlMTdiZTTZJGYwNzBkYmJjLTFhNTUtNDhmMi1hYTIxLTIxMTllYjU3M2I1YtkkZjM0NThhNWMtNzBjNi00ZDBjLTgyNTMtNGZlYjBjODdlZTc22SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYzbZJGQwZTAyZWU1LWY1N2MtNDI4Ni05NDBkLWIwMTA5N2M4NDBiZdkkZTg1MjcxMmMtZDA5YS00MWUxLTk3ODUtMzA4YzIxOWM3YWQ42SQwZWJhNDAzZS1jMmJhLTRhZjMtOGRjYy1mZTE0YTNjMjJiZDfZJDhkNTcwMWQxLTllOTEtNDNiNS05NzViLWZjOGUwZTMwNmU5OdkkNzQ1ZjMzYmYtOThkNy00YjI3LTk1ZmQtZWM2YmY1ZTNkNWNm2SRmYjgxZDNjMS1hNDdiLTQ2ZDktYjQ2My0xNzY2MDIyYmUxMTTZJDI3ZDVhMjM3LTRjMmUtNGIxNC1hMDgyLWY0ODQ3MTUzYzhkNdkkNTY0MjAwZTAtMjA4MC00NGRhLThkYmYtMzdjNWUzYTM4NDEy2SQ4YjA2NjAzOS1lZDY1LTQ2MTctYjQwNC04Njk1MmQzZmM3OGXZJGEwOWRlOGFiLWMxZTEtNGM5Zi05ZDg2LTQyNjhjZTUwM2NhZdkkNzYzYTE1MDQtZjkyNy00ZGZjLWEwNDItYWM2NjMyNDcwOGE52SRlN2I1ODhlOS1mYjVmLTQzODMtYjVjNi1iY2U5ZWQ4ZjVhNjDZJGY4ODJmMDcwLTc0YWYtNGYzYi05YWQxLWJkN2FkNDUzNzc4ZtkkZjJmYTc3OWUtZjYyZC00MDUzLWIwNTUtZTlmMGFlZTZjM2Y32SQ1NDQxMDhkMS1kMWE3LTRkYzYtOWEzYy02YTEwMDI1Y2I4YTPZJGFlOGRhZjZjLTQwNTUtNDk3ZS05MDVjLWQ2ZDVhNjM3M2FkM9kkM2Q4Njk4OWEtYTRkYi00NzY2LWFlYzctYWJjOWEyNWZmZGU42SQ3YTg2ZTI2ZC1mZGY2LTQxYjYtYjFkZC1kYzBjNGE4ZTlkNTDZJDgyZTkzMzBiLTJlOTQtNDJhMS1iNTZkLTQzMDY3NGIxMTI0MdkkMmMzNThkN2EtNWQ4NC00ZjYyLWExNDctNTc3YmI3NzVhYzdm2SQ1ZTVkZDI0Yy05NWI1LTQ5NTEtODU0Ny0xM2UyMGJiMGZlZWPZJDQ1YzMyMGRkLWUwYjItNDZlYy1hZjA5LWQ4M2U1NjUyMDI2ZNkkNzIzZjRlMjYtODA2NS00ZTIyLThjNWMtZGUzMmQyZTQyYjQ32SQ1OGY4MDY1MS00YTQ0LTQ3ODEtYTZjMC1hMDU2ZWM3NmIwN2XZJGIxZTU1MjYzLTljNzYtNDNiMi1iOTFjLTExNWIyZjA4MDE4MtkkMmNkZDY4MmEtYjk3Zi00OWRjLTg4MjktNDdlNzE0NjQ5N2I52SQ3NDgzNmIyYy1kYjY3LTQ0MzUtYTU1Mi1iYTVjM2U5M2U0M2bZJDJiZjgwMmUyLWY3NjktNDhkYi1hZGVmLWE1YTA2NmM1NjVjMtkkNDAyMGQ2N2EtNGE5ZS00MDMwLWI3Y2QtZTVkNjBlNzg0OTVj2SRkZGUyZGE1OS02M2ZhLTQ1NDktODgyOS00OTFlNWYzYzY3NWXZJDJjMzc1ODc4LWYxNmItNDgzMy05YWFhLWI4MjZmYmUwNTZhMtkkYTczNDhmYzgtYjI1ZS00ZWNmLTlmZTYtMzE0MDM2YjdkZjlj2SQ1NDI4MDY5Ni1iZWVjLTQ3ZWUtODExNC1lYTkzMTFhY2E5ZWLZJDFkYzA2MDA3LWI0MTMtNGNiYi1iNDNiLTJjNzk1NWVjYjZkMtkkOTZhNjViZGMtN2VlNC00ZTlmLTk0ZjUtOGE4M2Y3NTEyZmU52SQ1NDVjOTI3MC0yNTdhLTQ2ZTgtOTcwZC02YTlmY2YwOWRjMTfZJGZkYTQyMGExLWU1NjMtNGE0MS04NGQ0LTJhNTcwYmYxNjNhZdkkNzg1YTFjMzktYWE1Ni00MjQ0LWI3YjktMzFkN2EzMWI3M2Mz2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmPZJDY2NjIyM2Q1LTgwMmEtNDE2NC04ODJjLThhYjFhMTMxOWQ2ZNkkZTNmZTBhNWUtOTQzMS00NTNkLWI3ZTUtODIxZGU2MjRhNGVm2SQ1YWI2Y2QxNi0zYzI0LTRmNjAtYmRmMi03ZjQ4YjNlMjUwODXZJDA1MzYwMTYzLTRhNmYtNDFkYS04ZmFlLTA3MGUzMjdjMjYwNdkkYjhlMDFjZTItZDdmNy00YzczLTgyMzAtOWZkZWVjYWIyYzRl2SQ5Njc1N2RkZS01MmJlLTQ5MzAtOWJkZC05MzAzYmI3MTVlNTXZJDg2N2Q4ZDFkLTA0MmEtNDJlYy04NDNlLTU2YjhiYTJkYjk2YdkkZGI0ZDllYjktZTEyMC00NDg5LWEzYzItNDhjNDNmMmEzYzNi2SQ0NjAzYmM1Ni1jNDAyLTQ4YWYtOTcxNS0wNzIyZTQyZDkwZjfZJDEyYmEwMmZmLTkxZGQtNDM1NS1hZDJiLWYzY2EzYjYxZTMxONkkMDdmYzVhMWItNGE5ZS00YTEwLWJmN2EtZDI2ODI3NjlhYzk3tGxhc3RfaG90X3JlbG9hZF90aW1lywAAAAAAAAAAqXNob3J0cGF0aLhUaGUgRW5naW5lZXJpbmcgTW9kZWwuamyucHJvY2Vzc19zdGF0dXOlcmVhZHmkcGF0aNkhZXhhbXBsZXMvVGhlIEVuZ2luZWVyaW5nIE1vZGVsLmpsrmxhc3Rfc2F2ZV90aW1ly0HZM1EoPq4UqmNlbGxfb3JkZXLcAE3ZJGM1NWIyYzQyLTlkMjctMTFlYi0yNGNhLWU5MGE1NDcyZmZiYtkkZGU5MmJjMjAtYjEyNS00ZjNkLTkzMGEtYjFkYTYzZDVjZWY12SRmMzBjZDBkMC1iMGRhLTRmNjMtYTI0NS01NjhhNzYzYTkzZDjZJGFjOTRlNTU2LWI1NDQtNGNhNi04N2JkLWZmMmQ3YTc0MTRlN9kkMWU3OTEyNjItMjYxZC00NzU2LWJlYzQtZWRlYmU0NzMyNzAw2SQ4OWRlODBkZi0xZGQwLTRmOTQtYTI3ZC03NDY5M2E5NzgwNTnZJGUyMmE3ZDNlLTNmMjEtNDFiMC1hYmYyLTJjNzIzZTg3YzU3ZdkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZj2SRjODg0ZmQ1Yi00ZWNiLTQwMmItYjIyOC0wMWI5YTYxZGI4YmbZJGE1YjczNmY5LTI3NzYtNDc2MC1iMDczLWQwMjAyN2JhZWYxM9kkMjlhOGE1NjAtN2Q1ZS00OTI5LTg3N2EtMmRhYjE3MzA5OTY42SQ5YWM2YjBlZC01OGE4LTQwNzktYWE5Zi1kNzAwMjRmNGQ0YjTZJDg5ODQ2ODc4LWViZmMtNDlhNS05MWVmLTc2MmY2OTJiYTVlYdkkOGJhMDgxYjQtODQ0NC00OGUwLWFmY2UtMjA2NDlmN2ZkZDAx2SQyYThjMTUzNi1lZjVmLTRlMzctYjMwZS0xYmI3Mzk4MmQ3YjDZJDgzY2U0MzRjLTBmOTItNDZhOC04NjQ4LTMyMjA4NDA0NDYwMNkkMmY5YzNmNjQtM2U1ZC00MjNmLTkzOWUtOGQ5NmJkMTllN2Zl2SRmMDZiOTU5Mi0wZTE2LTRmZDEtYmY2ZS02MjRlYzBjZGI4ZmLZJGIxNTU5M2I5LWY3NzUtNDdhZi1hYTliLTQ5ODBhNDAyOGZhYdkkMmU0ZmUwMDAtNDQ5Yy00ZmMwLTg3MDctNGM1MWFjNTBhYjAz2SQzNmNhMTdiYy1iNTYwLTQ4YzktOTg4Zi0yNTU3ODA0NzlkMDXZJDdlNTgxMWNmLTg2YTItNDNmYi04Yzk0LTQ0MDkxZjMzYzAzMdkkMDI2MDg4ZjctYjFkZi00NjQ3LWFkODEtNTJjNmM4ZWE3OTQ02SQ1ZjcyZWNlYy1iYjNmLTQyMzEtOTNjMS03MTllMzhlMTdiZTTZJGYwNzBkYmJjLTFhNTUtNDhmMi1hYTIxLTIxMTllYjU3M2I1YtkkZjM0NThhNWMtNzBjNi00ZDBjLTgyNTMtNGZlYjBjODdlZTc22SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYzbZJGQwZTAyZWU1LWY1N2MtNDI4Ni05NDBkLWIwMTA5N2M4NDBiZdkkZTg1MjcxMmMtZDA5YS00MWUxLTk3ODUtMzA4YzIxOWM3YWQ42SQwZWJhNDAzZS1jMmJhLTRhZjMtOGRjYy1mZTE0YTNjMjJiZDfZJDhkNTcwMWQxLTllOTEtNDNiNS05NzViLWZjOGUwZTMwNmU5OdkkNzQ1ZjMzYmYtOThkNy00YjI3LTk1ZmQtZWM2YmY1ZTNkNWNm2SRmYjgxZDNjMS1hNDdiLTQ2ZDktYjQ2My0xNzY2MDIyYmUxMTTZJDI3ZDVhMjM3LTRjMmUtNGIxNC1hMDgyLWY0ODQ3MTUzYzhkNdkkNTY0MjAwZTAtMjA4MC00NGRhLThkYmYtMzdjNWUzYTM4NDEy2SQ4YjA2NjAzOS1lZDY1LTQ2MTctYjQwNC04Njk1MmQzZmM3OGXZJGEwOWRlOGFiLWMxZTEtNGM5Zi05ZDg2LTQyNjhjZTUwM2NhZdkkNzYzYTE1MDQtZjkyNy00ZGZjLWEwNDItYWM2NjMyNDcwOGE52SRlN2I1ODhlOS1mYjVmLTQzODMtYjVjNi1iY2U5ZWQ4ZjVhNjDZJGY4ODJmMDcwLTc0YWYtNGYzYi05YWQxLWJkN2FkNDUzNzc4ZtkkZjJmYTc3OWUtZjYyZC00MDUzLWIwNTUtZTlmMGFlZTZjM2Y32SQ1NDQxMDhkMS1kMWE3LTRkYzYtOWEzYy02YTEwMDI1Y2I4YTPZJGFlOGRhZjZjLTQwNTUtNDk3ZS05MDVjLWQ2ZDVhNjM3M2FkM9kkM2Q4Njk4OWEtYTRkYi00NzY2LWFlYzctYWJjOWEyNWZmZGU42SQ3YTg2ZTI2ZC1mZGY2LTQxYjYtYjFkZC1kYzBjNGE4ZTlkNTDZJDgyZTkzMzBiLTJlOTQtNDJhMS1iNTZkLTQzMDY3NGIxMTI0MdkkMmMzNThkN2EtNWQ4NC00ZjYyLWExNDctNTc3YmI3NzVhYzdm2SQ1ZTVkZDI0Yy05NWI1LTQ5NTEtODU0Ny0xM2UyMGJiMGZlZWPZJDQ1YzMyMGRkLWUwYjItNDZlYy1hZjA5LWQ4M2U1NjUyMDI2ZNkkNzIzZjRlMjYtODA2NS00ZTIyLThjNWMtZGUzMmQyZTQyYjQ32SQ1OGY4MDY1MS00YTQ0LTQ3ODEtYTZjMC1hMDU2ZWM3NmIwN2XZJGIxZTU1MjYzLTljNzYtNDNiMi1iOTFjLTExNWIyZjA4MDE4MtkkMmNkZDY4MmEtYjk3Zi00OWRjLTg4MjktNDdlNzE0NjQ5N2I52SQ3NDgzNmIyYy1kYjY3LTQ0MzUtYTU1Mi1iYTVjM2U5M2U0M2bZJDJiZjgwMmUyLWY3NjktNDhkYi1hZGVmLWE1YTA2NmM1NjVjMtkkNDAyMGQ2N2EtNGE5ZS00MDMwLWI3Y2QtZTVkNjBlNzg0OTVj2SRkZGUyZGE1OS02M2ZhLTQ1NDktODgyOS00OTFlNWYzYzY3NWXZJDJjMzc1ODc4LWYxNmItNDgzMy05YWFhLWI4MjZmYmUwNTZhMtkkYTczNDhmYzgtYjI1ZS00ZWNmLTlmZTYtMzE0MDM2YjdkZjlj2SQ1NDI4MDY5Ni1iZWVjLTQ3ZWUtODExNC1lYTkzMTFhY2E5ZWLZJDFkYzA2MDA3LWI0MTMtNGNiYi1iNDNiLTJjNzk1NWVjYjZkMtkkOTZhNjViZGMtN2VlNC00ZTlmLTk0ZjUtOGE4M2Y3NTEyZmU52SQ1NDVjOTI3MC0yNTdhLTQ2ZTgtOTcwZC02YTlmY2YwOWRjMTfZJGZkYTQyMGExLWU1NjMtNGE0MS04NGQ0LTJhNTcwYmYxNjNhZdkkNzg1YTFjMzktYWE1Ni00MjQ0LWI3YjktMzFkN2EzMWI3M2Mz2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmPZJDY2NjIyM2Q1LTgwMmEtNDE2NC04ODJjLThhYjFhMTMxOWQ2ZNkkZTNmZTBhNWUtOTQzMS00NTNkLWI3ZTUtODIxZGU2MjRhNGVm2SQ1YWI2Y2QxNi0zYzI0LTRmNjAtYmRmMi03ZjQ4YjNlMjUwODXZJDA1MzYwMTYzLTRhNmYtNDFkYS04ZmFlLTA3MGUzMjdjMjYwNdkkYjhlMDFjZTItZDdmNy00YzczLTgyMzAtOWZkZWVjYWIyYzRl2SQ5Njc1N2RkZS01MmJlLTQ5MzAtOWJkZC05MzAzYmI3MTVlNTXZJDg2N2Q4ZDFkLTA0MmEtNDJlYy04NDNlLTU2YjhiYTJkYjk2YdkkZGI0ZDllYjktZTEyMC00NDg5LWEzYzItNDhjNDNmMmEzYzNi2SQ0NjAzYmM1Ni1jNDAyLTQ4YWYtOTcxNS0wNzIyZTQyZDkwZjfZJDEyYmEwMmZmLTkxZGQtNDM1NS1hZDJiLWYzY2EzYjYxZTMxONkkMDdmYzVhMWItNGE5ZS00YTEwLWJmN2EtZDI2ODI3NjlhYzk3sXB1Ymxpc2hlZF9vYmplY3RzgKVuYnBrZ4iyaW5zdGFsbGVkX3ZlcnNpb25zgrdQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbqYwLjE0LjelSXBvcHSlMS4yLjCwdGVybWluYWxfb3V0cHV0c4O3UG93ZXJNb2RlbHNEaXN0cmlidXRpb27aB10bWzMzbRtbMW3ilIwgG1syMm0bWzM5bRtbMzNtG1sxbVdhcm5pbmc6IBtbMjJtG1szOW1UaGUgYWN0aXZlIG1hbmlmZXN0IGZpbGUgYXQgYC90bXAvamxfNDFDQWxPL01hbmlmZXN0LnRvbWxgIGhhcyBhbiBvbGQgZm9ybWF0IHRoYXQgaXMgYmVpbmcgbWFpbnRhaW5lZC4KG1szM20bWzFt4pSCIBtbMjJtG1szOW1UbyB1cGRhdGUgdG8gdGhlIG5ldyBmb3JtYXQsIHdoaWNoIGlzIHN1cHBvcnRlZCBieSBKdWxpYSB2ZXJzaW9ucyDiiaUgMS42LjIsIHJ1biBgaW1wb3J0IFBrZzsgUGtnLnVwZ3JhZGVfbWFuaWZlc3QoKWAgd2hpY2ggd2lsbCB1cGdyYWRlIHRoZSBmb3JtYXQgd2l0aG91dCByZS1yZXNvbHZpbmcuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdGhlbiByZWNvcmQgdGhlIGp1bGlhIHZlcnNpb24gcmUtcmVzb2x2ZSB3aXRoIGBQa2cucmVzb2x2ZSgpYCBhbmQgaWYgdGhlcmUgYXJlIHJlc29sdmUgY29uZmxpY3RzIGNvbnNpZGVyIGBQa2cudXBkYXRlKClgLgobWzMzbRtbMW3ilJQgG1syMm0bWzM5bRtbOTBtQCBQa2cuVHlwZXMgL29wdC9ob3N0ZWR0b29sY2FjaGUvanVsaWEvMS45LjIveDY0L3NoYXJlL2p1bGlhL3N0ZGxpYi92MS45L1BrZy9zcmMvbWFuaWZlc3Quamw6MzE2G1szOW0KCkluc3RhbnRpYXRpbmcuLi4KG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGlzIGFuIG9sZGVyIGZvcm1hdCB3aXRoIG5vIGp1bGlhIHZlcnNpb24gZW50cnkuIERlcGVuZGVuY2llcyBtYXkgaGF2ZSBiZWVuIHJlc29sdmVkIHdpdGggYSBkaWZmZXJlbnQganVsaWEgdmVyc2lvbi4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgL3RtcC9qbF80MUNBbE8vTWFuaWZlc3QudG9tbDowG1szOW0KClJlc29sdmluZy4uLgobWzMybRtbMW0gIE5vIENoYW5nZXMbWzIybRtbMzltIHRvIGAvdG1wL2psXzQxQ0FsTy9Qcm9qZWN0LnRvbWxgChtbMzJtG1sxbSAgICBVcGRhdGluZxtbMjJtG1szOW0gYC90bXAvamxfNDFDQWxPL01hbmlmZXN0LnRvbWxgCiAgG1s5MG1bNDRjZmU5NWFdIBtbMzltG1s5M23ihpEgUGtnIHYxLjguMCDih5IgdjEuOS4yG1szOW0KICAbWzkwbVsxMDc0NWIxNl0gG1szOW0bWzkzbX4gU3RhdGlzdGljcyDih5IgdjEuOS4wG1szOW0KICAbWzkwbVtmYTI2N2YxZl0gG1szOW0bWzkzbeKGkSBUT01MIHYxLjAuMCDih5IgdjEuMC4zG1szOW0KICAbWzkwbVthNGU1NjlhNl0gG1szOW0bWzk1beKGkyBUYXIgdjEuMTAuMSDih5IgdjEuMTAuMBtbMzltCiAgG1s5MG1bZTY2ZTAwNzhdIBtbMzltG1s5M23ihpEgQ29tcGlsZXJTdXBwb3J0TGlicmFyaWVzX2psbCB2MS4wLjErMCDih5IgdjEuMC41KzAbWzM5bQogIBtbOTBtW2M4ZmZkOWMzXSAbWzM5bRtbOTNt4oaRIE1iZWRUTFNfamxsIHYyLjI4LjArMCDih5IgdjIuMjguMiswG1szOW0KICAbWzkwbVsxNGEzNjA2ZF0gG1szOW0bWzkzbeKGkSBNb3ppbGxhQ0FDZXJ0c19qbGwgdjIwMjIuMi4xIOKHkiB2MjAyMi4xMC4xMRtbMzltCiAgG1s5MG1bNDUzNjYyOWFdIBtbMzltG1s5M23ihpEgT3BlbkJMQVNfamxsIHYwLjMuMjArMCDih5IgdjAuMy4yMSs0G1szOW0KICAbWzkwbVtiZWE4N2Q0YV0gG1szOW0bWzkybSsgU3VpdGVTcGFyc2VfamxsIHY1LjEwLjErNhtbMzltCiAgG1s5MG1bODM3NzVhNThdIBtbMzltG1s5M23ihpEgWmxpYl9qbGwgdjEuMi4xMiszIOKHkiB2MS4yLjEzKzAbWzM5bQogIBtbOTBtWzhlODUwYjkwXSAbWzM5bRtbOTNt4oaRIGxpYmJsYXN0cmFtcG9saW5lX2psbCB2NS4xLjErMCDih5IgdjUuOC4wKzAbWzM5bQoKUHJlY29tcGlsaW5nLi4uChtbMzJtG1sxbSAgQWN0aXZhdGluZxtbMjJtG1szOW0gcHJvamVjdCBhdCBgL3RtcC9qbF80MUNBbE9gqm5icGtnX3N5bmPaB10bWzMzbRtbMW3ilIwgG1syMm0bWzM5bRtbMzNtG1sxbVdhcm5pbmc6IBtbMjJtG1szOW1UaGUgYWN0aXZlIG1hbmlmZXN0IGZpbGUgYXQgYC90bXAvamxfNDFDQWxPL01hbmlmZXN0LnRvbWxgIGhhcyBhbiBvbGQgZm9ybWF0IHRoYXQgaXMgYmVpbmcgbWFpbnRhaW5lZC4KG1szM20bWzFt4pSCIBtbMjJtG1szOW1UbyB1cGRhdGUgdG8gdGhlIG5ldyBmb3JtYXQsIHdoaWNoIGlzIHN1cHBvcnRlZCBieSBKdWxpYSB2ZXJzaW9ucyDiiaUgMS42LjIsIHJ1biBgaW1wb3J0IFBrZzsgUGtnLnVwZ3JhZGVfbWFuaWZlc3QoKWAgd2hpY2ggd2lsbCB1cGdyYWRlIHRoZSBmb3JtYXQgd2l0aG91dCByZS1yZXNvbHZpbmcuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdGhlbiByZWNvcmQgdGhlIGp1bGlhIHZlcnNpb24gcmUtcmVzb2x2ZSB3aXRoIGBQa2cucmVzb2x2ZSgpYCBhbmQgaWYgdGhlcmUgYXJlIHJlc29sdmUgY29uZmxpY3RzIGNvbnNpZGVyIGBQa2cudXBkYXRlKClgLgobWzMzbRtbMW3ilJQgG1syMm0bWzM5bRtbOTBtQCBQa2cuVHlwZXMgL29wdC9ob3N0ZWR0b29sY2FjaGUvanVsaWEvMS45LjIveDY0L3NoYXJlL2p1bGlhL3N0ZGxpYi92MS45L1BrZy9zcmMvbWFuaWZlc3Quamw6MzE2G1szOW0KCkluc3RhbnRpYXRpbmcuLi4KG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGlzIGFuIG9sZGVyIGZvcm1hdCB3aXRoIG5vIGp1bGlhIHZlcnNpb24gZW50cnkuIERlcGVuZGVuY2llcyBtYXkgaGF2ZSBiZWVuIHJlc29sdmVkIHdpdGggYSBkaWZmZXJlbnQganVsaWEgdmVyc2lvbi4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgL3RtcC9qbF80MUNBbE8vTWFuaWZlc3QudG9tbDowG1szOW0KClJlc29sdmluZy4uLgobWzMybRtbMW0gIE5vIENoYW5nZXMbWzIybRtbMzltIHRvIGAvdG1wL2psXzQxQ0FsTy9Qcm9qZWN0LnRvbWxgChtbMzJtG1sxbSAgICBVcGRhdGluZxtbMjJtG1szOW0gYC90bXAvamxfNDFDQWxPL01hbmlmZXN0LnRvbWxgCiAgG1s5MG1bNDRjZmU5NWFdIBtbMzltG1s5M23ihpEgUGtnIHYxLjguMCDih5IgdjEuOS4yG1szOW0KICAbWzkwbVsxMDc0NWIxNl0gG1szOW0bWzkzbX4gU3RhdGlzdGljcyDih5IgdjEuOS4wG1szOW0KICAbWzkwbVtmYTI2N2YxZl0gG1szOW0bWzkzbeKGkSBUT01MIHYxLjAuMCDih5IgdjEuMC4zG1szOW0KICAbWzkwbVthNGU1NjlhNl0gG1szOW0bWzk1beKGkyBUYXIgdjEuMTAuMSDih5IgdjEuMTAuMBtbMzltCiAgG1s5MG1bZTY2ZTAwNzhdIBtbMzltG1s5M23ihpEgQ29tcGlsZXJTdXBwb3J0TGlicmFyaWVzX2psbCB2MS4wLjErMCDih5IgdjEuMC41KzAbWzM5bQogIBtbOTBtW2M4ZmZkOWMzXSAbWzM5bRtbOTNt4oaRIE1iZWRUTFNfamxsIHYyLjI4LjArMCDih5IgdjIuMjguMiswG1szOW0KICAbWzkwbVsxNGEzNjA2ZF0gG1szOW0bWzkzbeKGkSBNb3ppbGxhQ0FDZXJ0c19qbGwgdjIwMjIuMi4xIOKHkiB2MjAyMi4xMC4xMRtbMzltCiAgG1s5MG1bNDUzNjYyOWFdIBtbMzltG1s5M23ihpEgT3BlbkJMQVNfamxsIHYwLjMuMjArMCDih5IgdjAuMy4yMSs0G1szOW0KICAbWzkwbVtiZWE4N2Q0YV0gG1szOW0bWzkybSsgU3VpdGVTcGFyc2VfamxsIHY1LjEwLjErNhtbMzltCiAgG1s5MG1bODM3NzVhNThdIBtbMzltG1s5M23ihpEgWmxpYl9qbGwgdjEuMi4xMiszIOKHkiB2MS4yLjEzKzAbWzM5bQogIBtbOTBtWzhlODUwYjkwXSAbWzM5bRtbOTNt4oaRIGxpYmJsYXN0cmFtcG9saW5lX2psbCB2NS4xLjErMCDih5IgdjUuOC4wKzAbWzM5bQoKUHJlY29tcGlsaW5nLi4uChtbMzJtG1sxbSAgQWN0aXZhdGluZxtbMjJtG1szOW0gcHJvamVjdCBhdCBgL3RtcC9qbF80MUNBbE9gpUlwb3B02gddG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGF0IGAvdG1wL2psXzQxQ0FsTy9NYW5pZmVzdC50b21sYCBoYXMgYW4gb2xkIGZvcm1hdCB0aGF0IGlzIGJlaW5nIG1haW50YWluZWQuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdXBkYXRlIHRvIHRoZSBuZXcgZm9ybWF0LCB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgSnVsaWEgdmVyc2lvbnMg4omlIDEuNi4yLCBydW4gYGltcG9ydCBQa2c7IFBrZy51cGdyYWRlX21hbmlmZXN0KClgIHdoaWNoIHdpbGwgdXBncmFkZSB0aGUgZm9ybWF0IHdpdGhvdXQgcmUtcmVzb2x2aW5nLgobWzMzbRtbMW3ilIIgG1syMm0bWzM5bVRvIHRoZW4gcmVjb3JkIHRoZSBqdWxpYSB2ZXJzaW9uIHJlLXJlc29sdmUgd2l0aCBgUGtnLnJlc29sdmUoKWAgYW5kIGlmIHRoZXJlIGFyZSByZXNvbHZlIGNvbmZsaWN0cyBjb25zaWRlciBgUGtnLnVwZGF0ZSgpYC4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgUGtnLlR5cGVzIC9vcHQvaG9zdGVkdG9vbGNhY2hlL2p1bGlhLzEuOS4yL3g2NC9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuOS9Qa2cvc3JjL21hbmlmZXN0LmpsOjMxNhtbMzltCgpJbnN0YW50aWF0aW5nLi4uChtbMzNtG1sxbeKUjCAbWzIybRtbMzltG1szM20bWzFtV2FybmluZzogG1syMm0bWzM5bVRoZSBhY3RpdmUgbWFuaWZlc3QgZmlsZSBpcyBhbiBvbGRlciBmb3JtYXQgd2l0aCBubyBqdWxpYSB2ZXJzaW9uIGVudHJ5LiBEZXBlbmRlbmNpZXMgbWF5IGhhdmUgYmVlbiByZXNvbHZlZCB3aXRoIGEgZGlmZmVyZW50IGp1bGlhIHZlcnNpb24uChtbMzNtG1sxbeKUlCAbWzIybRtbMzltG1s5MG1AIC90bXAvamxfNDFDQWxPL01hbmlmZXN0LnRvbWw6MBtbMzltCgpSZXNvbHZpbmcuLi4KG1szMm0bWzFtICBObyBDaGFuZ2VzG1syMm0bWzM5bSB0byBgL3RtcC9qbF80MUNBbE8vUHJvamVjdC50b21sYAobWzMybRtbMW0gICAgVXBkYXRpbmcbWzIybRtbMzltIGAvdG1wL2psXzQxQ0FsTy9NYW5pZmVzdC50b21sYAogIBtbOTBtWzQ0Y2ZlOTVhXSAbWzM5bRtbOTNt4oaRIFBrZyB2MS44LjAg4oeSIHYxLjkuMhtbMzltCiAgG1s5MG1bMTA3NDViMTZdIBtbMzltG1s5M21+IFN0YXRpc3RpY3Mg4oeSIHYxLjkuMBtbMzltCiAgG1s5MG1bZmEyNjdmMWZdIBtbMzltG1s5M23ihpEgVE9NTCB2MS4wLjAg4oeSIHYxLjAuMxtbMzltCiAgG1s5MG1bYTRlNTY5YTZdIBtbMzltG1s5NW3ihpMgVGFyIHYxLjEwLjEg4oeSIHYxLjEwLjAbWzM5bQogIBtbOTBtW2U2NmUwMDc4XSAbWzM5bRtbOTNt4oaRIENvbXBpbGVyU3VwcG9ydExpYnJhcmllc19qbGwgdjEuMC4xKzAg4oeSIHYxLjAuNSswG1szOW0KICAbWzkwbVtjOGZmZDljM10gG1szOW0bWzkzbeKGkSBNYmVkVExTX2psbCB2Mi4yOC4wKzAg4oeSIHYyLjI4LjIrMBtbMzltCiAgG1s5MG1bMTRhMzYwNmRdIBtbMzltG1s5M23ihpEgTW96aWxsYUNBQ2VydHNfamxsIHYyMDIyLjIuMSDih5IgdjIwMjIuMTAuMTEbWzM5bQogIBtbOTBtWzQ1MzY2MjlhXSAbWzM5bRtbOTNt4oaRIE9wZW5CTEFTX2psbCB2MC4zLjIwKzAg4oeSIHYwLjMuMjErNBtbMzltCiAgG1s5MG1bYmVhODdkNGFdIBtbMzltG1s5Mm0rIFN1aXRlU3BhcnNlX2psbCB2NS4xMC4xKzYbWzM5bQogIBtbOTBtWzgzNzc1YTU4XSAbWzM5bRtbOTNt4oaRIFpsaWJfamxsIHYxLjIuMTIrMyDih5IgdjEuMi4xMyswG1szOW0KICAbWzkwbVs4ZTg1MGI5MF0gG1szOW0bWzkzbeKGkSBsaWJibGFzdHJhbXBvbGluZV9qbGwgdjUuMS4xKzAg4oeSIHY1LjguMCswG1szOW0KClByZWNvbXBpbGluZy4uLgobWzMybRtbMW0gIEFjdGl2YXRpbmcbWzIybRtbMzltIHByb2plY3QgYXQgYC90bXAvamxfNDFDQWxPYKdlbmFibGVkw7dyZXN0YXJ0X3JlY29tbWVuZGVkX21zZ8C0cmVzdGFydF9yZXF1aXJlZF9tc2fArWJ1c3lfcGFja2FnZXOQr2luc3RhbGxfdGltZV9uc88AAAABcC/buqxpbnN0YW50aWF0ZWTDq2NlbGxfaW5wdXRz3gBN2SQ1YWI2Y2QxNi0zYzI0LTRmNjAtYmRmMi03ZjQ4YjNlMjUwODWEp2NlbGxfaWTZJDVhYjZjZDE2LTNjMjQtNGY2MC1iZGYyLTdmNDhiM2UyNTA4NaRjb2Rl2X5tZCIiIgpJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG1hbnVhbGx5IGNvbnZlcnQgdGhlIHNvbHV0aW9uIGJhY2sgdG8gdGhlIGBFTkdJTkVFUklOR2AgZm9ybWF0LCBwcm92aWRlZCB5b3UgaGF2ZSB0aGUgX19tYXBfXwoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDk2NzU3ZGRlLTUyYmUtNDkzMC05YmRkLTkzMDNiYjcxNWU1NYSnY2VsbF9pZNkkOTY3NTdkZGUtNTJiZS00OTMwLTliZGQtOTMwM2JiNzE1ZTU1pGNvZGXZYHJlc3VsdF9tYXRoX21uID0gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uX3NvbHZlX21uX21jX29wYihtYXRoX21uLCBORkFVUG93ZXJNb2RlbCwgaXBvcHRfc29sdmVyKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkMDI2MDg4ZjctYjFkZi00NjQ3LWFkODEtNTJjNmM4ZWE3OTQ0hKdjZWxsX2lk2SQwMjYwODhmNy1iMWRmLTQ2NDctYWQ4MS01MmM2YzhlYTc5NDSkY29kZdlSZW5nX2FsbCA9IHBhcnNlX2ZpbGUoIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL2Nhc2UzX3VuYmFsYW5jZWQuZHNzIjsgaW1wb3J0X2FsbD10cnVlKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkZjA2Yjk1OTItMGUxNi00ZmQxLWJmNmUtNjI0ZWMwY2RiOGZihKdjZWxsX2lk2SRmMDZiOTU5Mi0wZTE2LTRmZDEtYmY2ZS02MjRlYzBjZGI4ZmKkY29kZdoDRG1kIiIiCkFnYWluLCB3ZSBzZWUgY29tcG9uZW50cyBpZGVudGlmaWVkIGJ5IHRoZWlyIE9wZW5EU1MgbmFtZXMuIEEgYCJsaW5lImAgaXMgYW4gZWRnZSBvYmplY3QsIHdoaWNoIHdpbGwgYWx3YXlzIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgoKLSBgImZfYnVzImAKLSBgInRfYnVzImAKLSBgImZfY29ubmVjdGlvbnMiYCAtIGxpc3Qgb2YgdGVybWluYWxzIHRvIHdoaWNoIHRoZSBsaW5lIGlzIGNvbm5lY3RlZCBvbiB0aGUgZnJvbS1zaWRlCi0gYCJ0X2Nvbm5lY3Rpb25zImAgLSBsaXN0IG9mIHRlcm1pbmFscyB0byB3aGljaCB0aGUgbGluZSBpcyBjb25uZWN0ZWQgb24gdGhlIHRvLXNpZGUKCkhlcmUgd2UgYXJlIGFsc28gaW50cm9kdWNlZCB0byB0d28gaW1wb3J0YW50IGNvbmNlcHRzLCB0aGUgYCJzb3VyY2VfaWQiYCwgd2hpY2ggaXMgYW4gZWFzeSB3YXkgdG8gaWRlbnRpZnkgZnJvbSB3aGVyZSBhbiBvYmplY3Qgb3JpZ2luYXRlcyBpbiB0aGUgZHNzIGZpbGUsIGFuZCBhIGRhdGEgdHlwZSBlbGVtZW50LCBwb2ludGVkIHRvIGJ5IGAibGluZWNvZGUiYCBpbiB0aGlzIGNhc2UuCgpBIGRhdGEgdHlwZSBlbGVtZW50IGlzIGFuIGVsZW1lbnQgdGhhdCBkb2VzIG5vdCByZXByZXNlbnQgYSByZWFsIGVuZ2luZWVyaW5nIG9iamVjdCwgYnV0IG9ubHkgY29udGFpbnMgZGF0YSB0aGF0IG9uZSBvZiB0aG9zZSByZWFsIG9iamVjdHMgY2FuIHJlZmVyIHRvLCBpbiB0aGlzIGNhc2UgYSBsaW5lY29kZSwgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gbGlrZSBsaW5lIHJlc2lzdGFuY2UvcmVhY3RhbmNlIGFuZCBjb25kdWN0YW5jZS9zdXNjZXB0YW5jZS4KIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRiMWU1NTI2My05Yzc2LTQzYjItYjkxYy0xMTViMmYwODAxODKEp2NlbGxfaWTZJGIxZTU1MjYzLTljNzYtNDNiMi1iOTFjLTExNWIyZjA4MDE4MqRjb2Rl2gErbWQiIiIKQW5vdGhlciB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbiBpbmNsdWRlZCBpbiBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiBpcyB0aGUgYGFwcGx5X3ZvbHRhZ2VfYm91bmRzIWAgZnVuY3Rpb24sIHdoaWNoIHdpbGwgYXBwbHkgc29tZSB2b2x0YWdlIGJvdW5kcyBpbiBTSSB1bml0cywgZ2l2ZW4gc29tZSBwZXJjZW50IHZhbHVlLCBfZS5nLl8gaWYgd2Ugd2FudCB0aGUgbG93ZXIgYm91bmQgb24gdm9sdGFnZSB0byBiZSBgMC45YCBhbmQgdXBwZXIgYm91bmQgYDEuMWAgYWZ0ZXIgcGVyLXVuaXQgY29udmVyc2lvbgoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDQ2MDNiYzU2LWM0MDItNDhhZi05NzE1LTA3MjJlNDJkOTBmN4SnY2VsbF9pZNkkNDYwM2JjNTYtYzQwMi00OGFmLTk3MTUtMDcyMmU0MmQ5MGY3pGNvZGXZQHBtX2VuZyA9IGluc3RhbnRpYXRlX21jX21vZGVsKGVuZywgTkZBVVBvd2VyTW9kZWwsIGJ1aWxkX21jX29wZimobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDU4ZjgwNjUxLTRhNDQtNDc4MS1hNmMwLWEwNTZlYzc2YjA3ZYSnY2VsbF9pZNkkNThmODA2NTEtNGE0NC00NzgxLWE2YzAtYTA1NmVjNzZiMDdlpGNvZGXZV3BhcnNlX2ZpbGUoIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL3V0X3RyYW5zXzJ3X3l5LmRzcyI7IHRyYW5zZm9ybWF0aW9ucz1bbWFrZV9sb3NzbGVzcyFdKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkOTZhNjViZGMtN2VlNC00ZTlmLTk0ZjUtOGE4M2Y3NTEyZmU5hKdjZWxsX2lk2SQ5NmE2NWJkYy03ZWU0LTRlOWYtOTRmNS04YTgzZjc1MTJmZTmkY29kZdmPbWQiIiIKQWx0ZXJuYXRpdmVseSwgdGhlIGBNQVRIRU1BVElDQUxgIG1vZGVsIGNhbiBiZSByZXR1cm5lZCBkaXJlY3RseSBmcm9tIHRoZSBgcGFyc2VfZmlsZWAgY29tbWFuZCB3aXRoIHRoZSBgZGF0YV9tb2RlbGAga2V5d29yZCBhcmd1bWVudAoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGE3MzQ4ZmM4LWIyNWUtNGVjZi05ZmU2LTMxNDAzNmI3ZGY5Y4SnY2VsbF9pZNkkYTczNDhmYzgtYjI1ZS00ZWNmLTlmZTYtMzE0MDM2YjdkZjljpGNvZGXZIG1hdGggPSB0cmFuc2Zvcm1fZGF0YV9tb2RlbChlbmcpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SRmODgyZjA3MC03NGFmLTRmM2ItOWFkMS1iZDdhZDQ1Mzc3OGaEp2NlbGxfaWTZJGY4ODJmMDcwLTc0YWYtNGYzYi05YWQxLWJkN2FkNDUzNzc4ZqRjb2Rl2fJtZCIiIgojIyMgQnJhbmNoIEZsb3cgZm9ybXVsYXRpb25zCgpQcmV2aW91c2x5LCB0byB1c2UgYSBicmFuY2ggZmxvdyBmb3JtdWxhdGlvbiwgc3VjaCBhcyBgU09DTkxQVUJGUG93ZXJNb2RlbGAsIGl0IHdhcyByZXF1aXJlZCB0byB1c2UgYSBkaWZmZXJlbnQgYHNvbHZlX2AgY29tbWFuZCwgYnV0IG5vdywgYnkgdXNpbmcgbXVsdGlwbGUgZGlzcGF0Y2ggd2UgaGF2ZSBzaW1wbGlmaWVkIHRoaXMgZm9yIHRoZSB1c2VyCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkYWQ0OGIzYWQtZWRlMS00MTA5LTk2NDctMDA3YzFkOGQxOTZjhKdjZWxsX2lk2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmOkY29kZdlhcGFyc2VfZmlsZSgiLi4vdGVzdC9kYXRhL29wZW5kc3MvY2FzZTNfYmFsYW5jZWQuZHNzIjsgbXVsdGluZXR3b3JrPXRydWUsIGRhdGFfbW9kZWw9TUFUSEVNQVRJQ0FMKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkNTQyODA2OTYtYmVlYy00N2VlLTgxMTQtZWE5MzExYWNhOWVihKdjZWxsX2lk2SQ1NDI4MDY5Ni1iZWVjLTQ3ZWUtODExNC1lYTkzMTFhY2E5ZWKkY29kZdoEsW1kIiIiClRoZXJlIGFyZSBhIGNvdXBsZSBvZiB0aGluZ3MgdG8gbm90aWNlIHJpZ2h0IGF3YXkuIEZpcnN0LCB0aGUgZGF0YSBtb2RlbCB0cmFuc2Zvcm0gYXV0b21hdGljYWxseSBjb252ZXJ0cyB0aGUgbW9kZWwgdG8gcGVyLXVuaXQuIFNlY29uZCwgdGhlcmUgYXJlIGEgbG90IG9mIGVtcHR5IGNvbXBvbmVudCBzZXRzLCB3aGVyZWFzIGluIHRoZSBgRU5HSU5FRVJJTkdgIG1vZGVsLCBvbmx5IGNvbXBvbmVudCB0eXBlcyB0aGF0IGhhZCBjb21wb25lbnRzIGluIHRoZW0gd2VyZSBsaXN0ZWQuIEluIHRoZSBgTUFUSEVNQVRJQ0FMYCBtb2RlbCBjZXJ0YWluIGNvbXBvbmVudCBkaWN0aW9uYXJpZXMgYXJlIGFsd2F5cyBleHBlY3RlZCB0byBleGlzdCwgYW5kIHRoZSBgZW5nMm1hdGhgIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdpbGwgYXV0b21hdGljYWxseSBwb3B1bGF0ZSB0aGVzZS4KCk5leHQsIHRoZXJlIGFyZSBhIGZldyB1bnVzYWwgZmllbGRzLCBzdWNoIGFzIGAic2V0dGluZ3MiYCwgd2hpY2ggcHJldmlvdXNseSBkaWRuJ3QgZXhpc3QgaW4gdGhlIGBNQVRIRU1BVElDQUxgIG1vZGVsLiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBwZXItdW5pdCBjb252ZXJzaW9uIHNwZWNpZmljYWxseSBpbiBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi4gQWxzbywgaXMgdGhlIGAibWFwImAgZmllbGQsIHdoaWNoIGlzIGEgYFZlY3RvcmAgb2YgRGljdGlvbmFyaWVzIHRoYXQgZW5hYmxlIHRoZSBjb252ZXJzaW9uIGJhY2sgdG8gYEVOR0lORUVSSU5HYCBmcm9tIGBNQVRIRU1BVElDQUxgLiBXaXRob3V0IHRoaXMgaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0byBjb252ZXJ0IGJhY2ssIGFuZCBpbiBmYWN0IG9ubHkgdGhlIHNvbHV0aW9uIGNhbiBiZSBjb252ZXJ0ZWQsIGJlY2F1c2Ugc29tZSBwcm9wZXJ0aWVzIGFyZSBjb21iaW5lZCBkZXN0cnVjdGl2ZWx5IGR1cmluZyB0aGUgY29udmVyc2lvbiB0byB0aGUgYE1BVEhFTUFUSUNBTGAgbW9kZWwsIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIHJldmVyc2UgZW5naW5lZXJlZC4gSG93ZXZlciwgc2luY2UgdGhlIGNvbnZlcnNpb24gdG8gYE1BVEhFTUFUSUNBTGAgaXMgbm90IGluLXBsYWNlLCB5b3Ugd2lsbCBhbHdheXMgaGF2ZSBhIGNvcHkgb2YgYGVuZ2AgYWxvbmdzaWRlIGBtYXRoYC4KCkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBvbmUgb2YgdGhlIGAibWFwImAgZW50cmllcwoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDhiMDY2MDM5LWVkNjUtNDYxNy1iNDA0LTg2OTUyZDNmYzc4ZYSnY2VsbF9pZNkkOGIwNjYwMzktZWQ2NS00NjE3LWI0MDQtODY5NTJkM2ZjNzhlpGNvZGXZJHJlc3VsdFsic29sdXRpb24iXVsiYnVzIl1bImxvYWRidXMiXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkYzU1YjJjNDItOWQyNy0xMWViLTI0Y2EtZTkwYTU0NzJmZmJihKdjZWxsX2lk2SRjNTViMmM0Mi05ZDI3LTExZWItMjRjYS1lOTBhNTQ3MmZmYmKkY29kZdoB+m1kIiIiCiMgSW50cm9kdWN0aW9uIHRvIHRoZSBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiBEYXRhIE1vZGVscwoKSW4gdGhpcyBub3RlYm9vayB3ZSBpbnRyb2R1Y2UgdGhlIGVuZ2luZWVyaW5nIGRhdGEgbW9kZWwgYWRkZWQgdG8gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gaW4gdmVyc2lvbiB2MC45LjAuIFdlIHdpbGwgZ2l2ZSBzZXZlcmFsIGV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhpcyBuZXcgZGF0YSBtb2RlbCBkaXJlY3RseSwgaW5jbHVkaW5nIG5ldyB0cmFuc2Zvcm1hdGlvbnMgdGhhdCBoYXZlIGJlY29tZSBlYXNpZXIgd2l0aCBpdHMgaW50cm9kdWN0aW9uLCBob3cgdG8gY29udmVydCBpdCB0byB0aGUgdGhlIGxvd2VyLWxldmVsIG1hdGhlbWF0aWNhbCBtb2RlbCB0aGF0IHdhcyBwcmV2aW91c2x5IHRoZSBvbmx5IHVzZXIgaW50ZXJmYWNlIHdlIG9mZmVyZWQsIGFuZCBob3cgdG8gZ2V0IHZhcmlvdXMgdHlwZXMgb2YgcmVzdWx0cyB1c2luZyB0aGlzIG5ldyBtb2RlbC4KIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQ3ZTU4MTFjZi04NmEyLTQzZmItOGM5NC00NDA5MWYzM2MwMzGEp2NlbGxfaWTZJDdlNTgxMWNmLTg2YTItNDNmYi04Yzk0LTQ0MDkxZjMzYzAzMaRjb2Rl2gHSbWQiIiIKLSBgInZtImAgLSBzcGVjaWZpZXMgdGhlIGZpeGVkIHZvbHRhZ2UgbWFnbml0dWRlcyBwZXIgcGhhc2UgYXQgdGhlIGJ1cwotIGAidmEiYCAtIHNwZWNpZmllcyB0aGUgZml4ZWQgcmVmZXJlbmNlIGFuZ2xlcyBwZXIgcGhhc2VzIGF0IHRoZSBidXMKLSBgInJzImAgYW5kIGAieHMiYCBzcGVjaWZpZXMgaW50ZXJuYWwgaW1wZWRhbmNlcyBvZiB0aGUgdm9sdGFnZSBzb3VyY2UKCiMjIyBJbXBvcnRpbmcgcmF3IGRzcyBwcm9wZXJ0aWVzCgpJbiBjYXNlIHRoZXJlIGFyZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdGhhdCB5b3Ugd2FudCB0byB1c2UgZnJvbSBkc3MsIGl0IGlzIHBvc3NpYmxlIHRvIGltcG9ydCB0aG9zZSBkaXJlY3RseSBpbnRvIHRoZSBgRU5HSU5FRVJJTkdgIChhbmQgYE1BVEhFTUFUSUNBTGApIGRhdGEgc3RydWN0dXJlIHdpdGggdGhlIGBpbXBvcnRfYWxsYCBrZXl3b3JkIGFyZ3VtZW50CiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkMjdkNWEyMzctNGMyZS00YjE0LWEwODItZjQ4NDcxNTNjOGQ1hKdjZWxsX2lk2SQyN2Q1YTIzNy00YzJlLTRiMTQtYTA4Mi1mNDg0NzE1M2M4ZDWkY29kZbJyZXN1bHRbInNvbHV0aW9uIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJGQwZTAyZWU1LWY1N2MtNDI4Ni05NDBkLWIwMTA5N2M4NDBiZYSnY2VsbF9pZNkkZDBlMDJlZTUtZjU3Yy00Mjg2LTk0MGQtYjAxMDk3Yzg0MGJlpGNvZGXZ821kIiIiCllvdSBjYW4gc2VlIHRoYXQgdW5kZXIgdGhlIGFjdHVhbCBjb21wb25lbnQsIGluIHRoaXMgY2FzZSBhIGAibG9hZCJgLCB0aGF0IHRoZXJlIGlzIGEgYCJ0aW1lX3NlcmllcyJgIGRpY3Rpb25hcnkgdGhhdCBjb250YWlucyBgRU5HSU5FRVJJTkdgIG1vZGVsIHZhcmlhYmxlIG5hbWVzIGFuZCByZWZlcmVuY2VzIHRvIHRoZSBpZGVudGlmaWVycyBvZiBhIHJvb3QtbGV2ZWwgYHRpbWVfc2VyaWVzYCBvYmplY3QsCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkOGJhMDgxYjQtODQ0NC00OGUwLWFmY2UtMjA2NDlmN2ZkZDAxhKdjZWxsX2lk2SQ4YmEwODFiNC04NDQ0LTQ4ZTAtYWZjZS0yMDY0OWY3ZmRkMDGkY29kZbdlbmdbImJ1cyJdWyJzb3VyY2VidXMiXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkMmMzNThkN2EtNWQ4NC00ZjYyLWExNDctNTc3YmI3NzVhYzdmhKdjZWxsX2lk2SQyYzM1OGQ3YS01ZDg0LTRmNjItYTE0Ny01NzdiYjc3NWFjN2akY29kZdnCbWQiIiIKV2UgY2FuIHNlZSB0aGF0ICJub2xvYWRsb3NzIiwgInJ3IiwgYW5kICJpbWFnIiBhcmUgbm9uLXplcm8sIGJ1dCBpZiB3ZSBhcHBseSB0aGUgbWFrZV9sb3NzbGVzcyEgZnVuY3Rpb24gd2UgY2FuIHNlZSB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gemVybywgZWZmZWN0aXZlbHkgZWxpbWluYXRpbmcgdGhlIGxvc3NlcwoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGUyMmE3ZDNlLTNmMjEtNDFiMC1hYmYyLTJjNzIzZTg3YzU3ZYSnY2VsbF9pZNkkZTIyYTdkM2UtM2YyMS00MWIwLWFiZjItMmM3MjNlODdjNTdlpGNvZGXaAX9tZCIiIgojIyBQYXJzaW5nIERhdGEKCkhlcmUgd2UgZ2l2ZSB0aGUgZmlyc3QgZXhhbXBsZSBvZiBob3cgdG8gcGFyc2UgZGF0YSBpbnRvIHRoZSBgRU5HSU5FRVJJTkdgIGRhdGEgbW9kZWwgc3RydWN0dXJlLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBkYXRhIHN0cnVjdHVyZSB0eXBlIHRoYXQgdGhlIHVzZXIgd2lsbCBzZWUgd2l0aG91dCBwYXNzaW5nIGFkZGl0aW9uYWwgYXJndW1lbnRzLCBhcyB3ZSBkZW1vbnN0cmF0ZSBsYXRlci4KCldlIHN0YXJ0IHdpdGggYSAzIGJ1cyB1bmJhbGFuY2VkIGxvYWQgY2FzZSBwcm92aWRlZCBhcyBhIGRzcyBmaWxlIGluIHRoZSBgdGVzdGAgZm9sZGVyIG9mIHRoZSBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi5qbCByZXBvc2l0b3J5CiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkMmE4YzE1MzYtZWY1Zi00ZTM3LWIzMGUtMWJiNzM5ODJkN2IwhKdjZWxsX2lk2SQyYThjMTUzNi1lZjVmLTRlMzctYjMwZS0xYmI3Mzk4MmQ3YjCkY29kZdoCCm1kIiIiCi0gYCJ0ZXJtaW5hbHMiYCBpbmRpY2F0ZXMgd2hpY2ggdGVybWluYWxzIG9uIHRoZSBidXMgaGF2ZSBhY3RpdmUgY29ubmVjdGlvbnMKLSBgImdyb3VuZGVkImAgaW5kaWNhdGVzIHdoaWNoIHRlcm1pbmFscyBhcmUgZ3JvdW5kZWQKLSBgInJnImAgYW5kIGAieGciYCBpbmRpY2F0ZSB0aGUgZ3JvdW5kaW5nIHJlc2lzdGFuY2UgYW5kIHJlYWN0YW5jZSBvZiB0aGUgZ3JvdW5kCi0gYCJzdGF0dXMiYCBpbmRpY2F0ZXMgd2hldGhlciBhIGJ1cyBpcyBgRU5BQkxFRGAgb3IgYERJU0FCTEVEYCwgYW5kIGlzIHNwZWNpZmllZCBmb3IgZXZlcnkgY29tcG9uZW50IGluIHRoZSBlbmdpbmVlcmluZyBtb2RlbAoKTmV4dCwgd2UgbG9vayBhdCB0aGUgYCJsaW5lImAgY29tcG9uZW50cywgd2hpY2ggaXMgYSBnZW5lcmljIG5hbWUgZm9yIGJvdGggb3ZlcmhlYWQgbGluZXMgYW5kIHVuZGVyZ3JvdW5kIGNhYmxlcywgd2hpY2ggd2UgZG8gbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbiB0aGUgbm9tZW5jbGF0dXJlCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkN2E4NmUyNmQtZmRmNi00MWI2LWIxZGQtZGMwYzRhOGU5ZDUwhKdjZWxsX2lk2SQ3YTg2ZTI2ZC1mZGY2LTQxYjYtYjFkZC1kYzBjNGE4ZTlkNTCkY29kZdk+ZW5nX3V0ID0gcGFyc2VfZmlsZSgiLi4vdGVzdC9kYXRhL29wZW5kc3MvdXRfdHJhbnNfMndfeXkuZHNzIimobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJGYzNDU4YTVjLTcwYzYtNGQwYy04MjUzLTRmZWIwYzg3ZWU3NoSnY2VsbF9pZNkkZjM0NThhNWMtNzBjNi00ZDBjLTgyNTMtNGZlYjBjODdlZTc2pGNvZGXaAS1tZCIiIgojIyMgVGltZSBTZXJpZXMgUGFyc2luZyBFeGFtcGxlCgpJbiB0aGUgYEVOR0lORUVSSU5HYCBtb2RlbCwgd2UgaGF2ZSBpbmNsdWRlZCB0aGUgYHRpbWVfc2VyaWVzYCBkYXRhIHR5cGUsIHdoaWNoIGhvbGRzIGFsbCB0aW1lIHNlcmllcyBkYXRhIGFuZCBjYW4gYmUgcmVmZXJyZWQgdG8gc2ltaWxhciB0byBgImxpbmVjb2RlImAgYXMgZGVtb25zdHJhdGVkIGFib3ZlLgoKQmVsb3cgd2UgY2FuIHNlZSBhbiBleGFtcGxlIG9mIGEgcGFyc2UgdGhhdCBpbmNsdWRlcyBzb21lIHRpbWVfc2VyaWVzIGNvbXBvbmVudHMKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQ1NDQxMDhkMS1kMWE3LTRkYzYtOWEzYy02YTEwMDI1Y2I4YTOEp2NlbGxfaWTZJDU0NDEwOGQxLWQxYTctNGRjNi05YTNjLTZhMTAwMjVjYjhhM6Rjb2Rl2gFsbWQiIiIKIyMjIFJ1bm5pbmcgVGltZSBTZXJpZXMgTW9kZWxzCgpCeSBkZWZhdWx0LCBgdGltZV9zZXJpZXNgIG9iamVjdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiBydW5uaW5nIGEgbW9kZWwuIFRvIHVzZSB0aGUgdGltZSBzZXJpZXMgaW5mb3JtYXRpb24geW91IHdpbGwgbmVlZCB0byBoYXZlIGEgbXVsdGluZXR3b3JrIHByb2JsZW0gc3BlY2lmaWNhdGlvbgoKSW4gdGhlIGV4YW1wbGUgYmVsb3cgd2UgdXNlIGEgdGVzdCBjYXNlLCB3aGljaCBpcyBub3QgZXhwb3J0ZWQgYnkgZGVmYXVsdCwgYW5kIHRoZXJlZm9yZSByZXF1aXJlcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gbmFtZXNwYWNlCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkZjMwY2QwZDAtYjBkYS00ZjYzLWEyNDUtNTY4YTc2M2E5M2Q4hKdjZWxsX2lk2SRmMzBjZDBkMC1iMGRhLTRmNjMtYTI0NS01NjhhNzYzYTkzZDikY29kZdk1YmVnaW4KCXVzaW5nIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uCgl1c2luZyBJcG9wdAplbmSobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1OYSnY2VsbF9pZNkkODlkZTgwZGYtMWRkMC00Zjk0LWEyN2QtNzQ2OTNhOTc4MDU5pGNvZGXZWGlwb3B0X3NvbHZlciA9IG9wdGltaXplcl93aXRoX2F0dHJpYnV0ZXMoSXBvcHQuT3B0aW1pemVyLCAidG9sIj0+MWUtNiwgInByaW50X2xldmVsIj0+MCmobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDgzY2U0MzRjLTBmOTItNDZhOC04NjQ4LTMyMjA4NDA0NDYwMISnY2VsbF9pZNkkODNjZTQzNGMtMGY5Mi00NmE4LTg2NDgtMzIyMDg0MDQ0NjAwpGNvZGWrZW5nWyJsaW5lIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDQ1YzMyMGRkLWUwYjItNDZlYy1hZjA5LWQ4M2U1NjUyMDI2ZISnY2VsbF9pZNkkNDVjMzIwZGQtZTBiMi00NmVjLWFmMDktZDgzZTU2NTIwMjZkpGNvZGW8ZW5nX3V0WyJ0cmFuc2Zvcm1lciJdWyJ0eDEiXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkNWY3MmVjZWMtYmIzZi00MjMxLTkzYzEtNzE5ZTM4ZTE3YmU0hKdjZWxsX2lk2SQ1ZjcyZWNlYy1iYjNmLTQyMzEtOTNjMS03MTllMzhlMTdiZTSkY29kZdl0bWQiIiIKWW91IHdpbGwgbm90ZSB0aGUgcHJlc2VuY2Ugb2YgYCJkc3MiYCBkaWN0aW9uYXJpZXMgdW5kZXIgY29tcG9uZW50cywgYW5kIGAiZHNzX29wdGlvbnMiYCBhdCB0aGUgcm9vdCBsZXZlbAoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDU2NDIwMGUwLTIwODAtNDRkYS04ZGJmLTM3YzVlM2EzODQxMoSnY2VsbF9pZNkkNTY0MjAwZTAtMjA4MC00NGRhLThkYmYtMzdjNWUzYTM4NDEypGNvZGXZ8m1kIiIiCkhlcmUgeW91IGNhbiBzZWUgdGhhdCB0aGUgc29sdXRpb24gY29tZXMgYmFjayBvdXQgYnkgZGVmYXVsdCBpbnRvIHRoZSBzYW1lIGRhdGEgbW9kZWwgYXMgaXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdG8gdGhlIHJ1bl8gY29tbWFuZCwgYXMgd2VsbCBhcyBiZWluZyBpbiBTSSB1bml0cywgYXMgb3Bwb3NlZCB0byBwZXIgdW5pdCwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgdGhlIHNvbHZlLiBGb3IgZXhhbXBsZSwKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRlODUyNzEyYy1kMDlhLTQxZTEtOTc4NS0zMDhjMjE5YzdhZDiEp2NlbGxfaWTZJGU4NTI3MTJjLWQwOWEtNDFlMS05Nzg1LTMwOGMyMTljN2FkOKRjb2RlvGVuZ190c1sidGltZV9zZXJpZXMiXVsibHMxIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y4SnY2VsbF9pZNkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZjpGNvZGXZRGVuZyA9IHBhcnNlX2ZpbGUoIiRwbWRfcGF0aC90ZXN0L2RhdGEvb3BlbmRzcy9jYXNlM191bmJhbGFuY2VkLmRzcyIpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SRhNWI3MzZmOS0yNzc2LTQ3NjAtYjA3My1kMDIwMjdiYWVmMTOEp2NlbGxfaWTZJGE1YjczNmY5LTI3NzYtNDc2MC1iMDczLWQwMjAyN2JhZWYxM6Rjb2Rlr2VuZ1sic2V0dGluZ3MiXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkMmJmODAyZTItZjc2OS00OGRiLWFkZWYtYTVhMDY2YzU2NWMyhKdjZWxsX2lk2SQyYmY4MDJlMi1mNzY5LTQ4ZGItYWRlZi1hNWEwNjZjNTY1YzKkY29kZdk0bWQiQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgc3BlY2lmaWVkIGF0IHBhcnNlIGJ5IqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkOGQ1NzAxZDEtOWU5MS00M2I1LTk3NWItZmM4ZTBlMzA2ZTk5hKdjZWxsX2lk2SQ4ZDU3MDFkMS05ZTkxLTQzYjUtOTc1Yi1mYzhlMGUzMDZlOTmkY29kZdoBxm1kIiIiCiMjIFJ1bm5pbmcgT3B0aW1hbCBQb3dlciBGbG93CgpJbiB0aGlzIHNlY3Rpb24gd2UgaW50cm9kdWNlIGhvdyB0byBydW4gYW4gb3B0aW1hbCBwb3dlciBmbG93IChvcGYpIGluIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIG9uIGFuIGVuZ2luZWVyaW5nIGRhdGEgbW9kZWwKCkluIG9yZGVyIHRvIHJ1biBhbiBPUEYgcHJvYmxlbSB5b3Ugd2lsbCBuZWVkCgoxLiBhIGRhdGEgbW9kZWwKMi4gYSBmb3JtdWxhdGlvbgozLiBhIHNvbHZlcgoKSW4gdGhlc2UgZXhhbXBsZXMgd2Ugd2lsbCB1c2UgdGhlIGBlbmdgIG1vZGVsIHdlIHdvcmtlZCB3aXRoIGFib3ZlLCB0aGUgYEFDUFVQb3dlck1vZGVsYCwgd2hpY2ggaXMgYSBBQyBwb3dlciBmbG93IGZvcm11bGF0aW9uIGluIHBvbGFyIGNvb3JkaW5hdGVzLCBhbmQgdGhlIGBpcG9wdF9zb2x2ZXJgIHdlIGFscmVhZHkgZGVmaW5lZCBhYm92ZQoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDcyM2Y0ZTI2LTgwNjUtNGUyMi04YzVjLWRlMzJkMmU0MmI0N4SnY2VsbF9pZNkkNzIzZjRlMjYtODA2NS00ZTIyLThjNWMtZGUzMmQyZTQyYjQ3pGNvZGXZNm1kIkFsdGVybmF0aXZlbHksIHdlIGNhbiBhcHBseSB0aGlzIGZ1bmN0aW9uIGF0IHBhcnNlIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkYjE1NTkzYjktZjc3NS00N2FmLWFhOWItNDk4MGE0MDI4ZmFhhKdjZWxsX2lk2SRiMTU1OTNiOS1mNzc1LTQ3YWYtYWE5Yi00OTgwYTQwMjhmYWGkY29kZbplbmdbImxpbmVjb2RlIl1bIjQvMHF1YWQiXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkMzZjYTE3YmMtYjU2MC00OGM5LTk4OGYtMjU1NzgwNDc5ZDA1hKdjZWxsX2lk2SQzNmNhMTdiYy1iNTYwLTQ4YzktOTg4Zi0yNTU3ODA0NzlkMDWkY29kZb9lbmdbInZvbHRhZ2Vfc291cmNlIl1bInNvdXJjZSJdqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQxZTc5MTI2Mi0yNjFkLTQ3NTYtYmVjNC1lZGViZTQ3MzI3MDCEp2NlbGxfaWTZJDFlNzkxMjYyLTI2MWQtNDc1Ni1iZWM0LWVkZWJlNDczMjcwMKRjb2Rl2YFtZCJJbiB0aGVzZSBleGFtcGxlcyB3ZSB3aWxsIHVzZSB0aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbiBzb2x2ZXJzLCBzcGVjaWZpZWQgdXNpbmcgYG9wdGltaXplcl93aXRoX2F0dHJpYnV0ZXNgIGZyb20gSnVNUCB2MC4yMSKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDJjZGQ2ODJhLWI5N2YtNDlkYy04ODI5LTQ3ZTcxNDY0OTdiOYSnY2VsbF9pZNkkMmNkZDY4MmEtYjk3Zi00OWRjLTg4MjktNDdlNzE0NjQ5N2I5pGNvZGXZM2FwcGx5X3ZvbHRhZ2VfYm91bmRzIShlbmdfdXQ7IHZtX2xiPTAuOSwgdm1fdWI9MS4xKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkNzQ1ZjMzYmYtOThkNy00YjI3LTk1ZmQtZWM2YmY1ZTNkNWNmhKdjZWxsX2lk2SQ3NDVmMzNiZi05OGQ3LTRiMjctOTVmZC1lYzZiZjVlM2Q1Y2akY29kZdk4cmVzdWx0ID0gc29sdmVfbWNfb3BmKGVuZywgQUNQVVBvd2VyTW9kZWwsIGlwb3B0X3NvbHZlcimobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDg2N2Q4ZDFkLTA0MmEtNDJlYy04NDNlLTU2YjhiYTJkYjk2YYSnY2VsbF9pZNkkODY3ZDhkMWQtMDQyYS00MmVjLTg0M2UtNTZiOGJhMmRiOTZhpGNvZGXZRHNvbF9lbmdfbW4gPSB0cmFuc2Zvcm1fc29sdXRpb24ocmVzdWx0X21hdGhfbW5bInNvbHV0aW9uIl0sIG1hdGhfbW4pqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQyYzM3NTg3OC1mMTZiLTQ4MzMtOWFhYS1iODI2ZmJlMDU2YTKEp2NlbGxfaWTZJDJjMzc1ODc4LWYxNmItNDgzMy05YWFhLWI4MjZmYmUwNTZhMqRjb2Rl2gNVbWQiIiIKIyMgTWF0aGVtYXRpY2FsIE1vZGVsCgpJbiB0aGlzIHNlY3Rpb24gd2UgaW50cm9kdWNlIHRoZSBtYXRoZW1hdGljYWwgbW9kZWwsIHdoaWNoIHdhcyB0aGUgcHJldmlvdXMgdXNlci1mYWNpbmcgbW9kZWwgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24sIGV4cGxhaW4gaG93IGNvbnZlcnNpb25zIGJldHdlZW4gdGhlIG1vZGVsIGhhcHBlbiBpbiBwcmFjdGljZSwgYW5kIGdpdmUgYW4gZXhhbXBsZSBvZiBob3cgdG8gZG8gdGhpcyBjb252ZXJzaW9uIG1hbnVhbGx5CgpJbiBwcmFjdGljZSwgdW5sZXNzIHRoZSB1c2VyIGlzIGludGVyZXN0ZWQsIHRoZSBjb252ZXJzaW9uIGJldHdlZW4gdGhlIGBFTkdJTkVFUklOR2AgYW5kIGBNQVRIRU1BVElDQUxgIG1vZGVscyBzaG91bGQgYmUgc2VlbWxlc3MgYW5kIGludmlzaWJsZSB0byB0aGUgdXNlci4gQnkgcHJvdmlkaW5nIGFuIGBFTkdJTkVFUklOR2AgbW9kZWwgdG8gYSBgcnVuX2AgY29tbWFuZCB0aGUgYHJ1bl9tY19tb2RlbGAgY29tbWFuZCB3aWxsIGtub3cgdG8gY29udmVydCB0aGUgbW9kZWwgdG8gYE1BVEhFTUFUSUNBTGAsIHdoaWNoIHdpbGwgYmUgdXNlZCB0byB0aGUgZ2VuZXJhdGUgdGhlIEp1TVAgbW9kZWwgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIG9wdGltaXplZC4gU2ltaWxhcmx5LCB0aGUgc29sdXRpb24gZ2VuZXJhdGVkIGJ5IHRoaXMgb3B0aW1pemF0aW9uIHdpbGwgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgZm9ybWF0IG9mIHRoZSBgRU5HSU5FRVJJTkdgIG1vZGVsLgoKTGV0J3MgZmlyc3QgdGFrZSBhIGxvb2sgYXQgaG93IHRvIGNvbnZlcnQgdG8gdGhlIGBNQVRIRU1BVElDQUxgIG1vZGVsCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkNTQ1YzkyNzAtMjU3YS00NmU4LTk3MGQtNmE5ZmNmMDlkYzE3hKdjZWxsX2lk2SQ1NDVjOTI3MC0yNTdhLTQ2ZTgtOTcwZC02YTlmY2YwOWRjMTekY29kZdlQcGFyc2VfZmlsZSgiLi4vdGVzdC9kYXRhL29wZW5kc3MvY2FzZTNfdW5iYWxhbmNlZC5kc3MiOyBkYXRhX21vZGVsPU1BVEhFTUFUSUNBTCmobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJGZkYTQyMGExLWU1NjMtNGE0MS04NGQ0LTJhNTcwYmYxNjNhZYSnY2VsbF9pZNkkZmRhNDIwYTEtZTU2My00YTQxLTg0ZDQtMmE1NzBiZjE2M2FlpGNvZGXaA0JtZCIiIgojIyMgTXVsdGluZXR3b3JrcwoKSW4gdGhpcyBzdWJzZWN0aW9uIHdlIGNvdmVyIHBhcnNpbmcgaW50byBhIG11bHRpbmV0d29yayBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggaXMgYSBzdHJ1Y3R1cmUgdGhhdCBvbmx5IGV4aXN0cyBpbiB0aGUgYE1BVEhFTUFUSUNBTGAgbW9kZWwKCkZvciB0aG9zZSB1bmZhbWlsaWFyLCB0aGUgSW5mcmFzdHJ1Y3R1cmVNb2RlbHMgZmFtaWx5IG9mIHBhY2thZ2VzIGhhcyBhIGZlYXR1cmUgY2FsbGVkIG11bHRpbmV0d29ya3MsIHdoaWNoIGlzIHVzZWZ1bCBmb3IsIGFtb25nIG90aGVyIHRoaW5ncywgcnVubmluZyBvcHRpbWl6YXRpb24gcHJvYmxlbXMgb24gdGltZSBzZXJpZXMgdHlwZSBwcm9ibGVtcy4KCk11bHRpbmV0d29yayBkYXRhIHN0cnVjdHVyZXMgYXJlIGZvcm1hdHRlZCBsaWtlIHNvCgpgYGBqdWxpYQptbiA9IERpY3R7U3RyaW5nLEFueX0oCiAgICAibXVsdGluZXR3b3JrIiA9PiB0cnVlLAogICAgIm53IiA9PiBEaWN0e1N0cmluZyxBbnl9KAogICAgICAgICIxIiA9PiBEaWN0e1N0cmluZyxBbnl9KAogICAgICAgICAgICAiYnVzIiA9PiBEaWN0e1N0cmluZyxBbnl9KCksCiAgICAgICAgICAgIC4uLgogICAgICAgICksCiAgICAgICAgLi4uCiAgICApLAogICAgLi4uCikKYGBgCgpUbyBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIG11bHRpbmV0d29yayBzdHJ1Y3R1cmUgZnJvbSBhbiBlbmdpbmVlcmluZyBtb2RlbCB0aGF0IGNvbnRhaW5zIGB0aW1lX3Nlcmllc2AgZWxlbWVudHMsIHdlIGNhbiB1c2UgdGhlIGBtdWx0aW5ldHdvcmtgIGtleXdvcmQgYXJndW1lbnQgaW4gYHRyYW5zZm9ybV9kYXRhX21vZGVsYAoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGM4ODRmZDViLTRlY2ItNDAyYi1iMjI4LTAxYjlhNjFkYjhiZoSnY2VsbF9pZNkkYzg4NGZkNWItNGVjYi00MDJiLWIyMjgtMDFiOWE2MWRiOGJmpGNvZGXaAmZtZCIiIgpEaWZmZXJlbnQgaW5mb3JtYXRpb24gYW5kIHdhcm5pbmcgbWVzc2FnZXMgd2lsbCBiZSBnaXZlbiBkZXBlbmRpbmcgb24gdGhlIGlucHV0IGZpbGUuIEluIHRoZSBjYXNlIGFib3ZlLCB0aGVzZSBtZXNzYWdlcyBhbGwgcmVsYXRlZCB0byB2YXJpb3VzIHBhcnNlIG5vdGlmaWNhdGlvbnMgdGhhdCBhcmlzZSBkdXJpbmcgYSBwYXJzZSBvZiBhIGRzcyBmaWxlLCBhbmQgY2FuIGJlIHNhZmVseSBpZ25vcmVkCgpUaGUgcmVzdWx0aW5nIGRhdGEgc3RydWN0dXJlIGlzIGEgSnVsaWEgZGljdGlvbmFyeS4gVGhlIGZpcnN0IG5vdGFibGUgZmllbGQgaXMgYCJkYXRhX21vZGVsImAgd2hpY2ggc3BlY2lmaWVzIHdoaWNoIGRhdGEgbW9kZWwgdGhpcyBkYXRhIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0bywgaW4gdGhpcyBjYXNlIGBFTkdJTkVFUklOR2AuIFRoaXMgdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYEVudW1gIG9mIHR5cGUgYERhdGFNb2RlbGAKClRoZSBuZXh0IG5vdGFibGUgZmllbGQgaXMgYCJzZXR0aW5ncyJgLCB3aGljaCBjb250YWlucyBzb21lIGltcG9ydGFudCBkZWZhdWx0L3N0YXJ0aW5nIHZhbHVlcyBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBuZXR3b3JrCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkMjlhOGE1NjAtN2Q1ZS00OTI5LTg3N2EtMmRhYjE3MzA5OTY4hKdjZWxsX2lk2SQyOWE4YTU2MC03ZDVlLTQ5MjktODc3YS0yZGFiMTczMDk5NjikY29kZdoCcG1kIiIiCi0gYCJzYmFzZV9kZWZhdWx0ImAgaXMgdGhlIHN0YXJ0aW5nIHZhbHVlIGZvciB0aGUgcG93ZXIgYmFzZSwKLSBgInZiYXNlc19kZWZhdWx0ImAgaXMgdGhlIHN0YXJ0aW5nIHZvbHRhZ2UgYmFzZSBmb3IgdGhlIGNhc2UsIGFuZCBtdWx0aXBsZSB2b2x0YWdlIGJhc2VzIGNhbiBiZSBzcGVjaWZpZWQsIHdoaWNoIHdvdWxkIGJlIHVzZWZ1bCBpbiBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGUgaXNvbGF0ZWQgaXNsYW5kcyB3aXRoIHRoZWlyIG93biBnZW5lcmF0aW9uLAotIGAidm9sdGFnZV9zY2FsZV9mYWN0b3IiYCBpcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBhbGwgdm9sdGFnZSB2YWx1ZXMsIHdoaWNoIGluIHRoZSBjYXNlIG9mIE9wZW5EU1MgaXMgaW4ga1YgYnkgZGVmYXVsdAotIGAicG93ZXJfc2NhbGVfZmFjdG9yImAgaXMgYSBzY2FsaW5nIGZhY3RvciBmb3IgYWxsIHBvd2VyIHZhbHVlcwotIGAiYmFzZV9mcmVxdWVuY3kiYCBpcyB0aGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIG5ldHdvcmsgaW4gSHosIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93IGZvciBtaXhlZCBmcmVxdWVuY3kgbmV0d29ya3MKCk5leHQgd2UgbG9vayBhdCB0aGUgYCJidXMiYCBjb21wb25lbnRzCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkNzYzYTE1MDQtZjkyNy00ZGZjLWEwNDItYWM2NjMyNDcwOGE5hKdjZWxsX2lk2SQ3NjNhMTUwNC1mOTI3LTRkZmMtYTA0Mi1hYzY2MzI0NzA4YTmkY29kZdlKcmVzdWx0X3B1ID0gc29sdmVfbWNfb3BmKGVuZywgQUNQVVBvd2VyTW9kZWwsIGlwb3B0X3NvbHZlcjsgbWFrZV9zaT1mYWxzZSmobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDJlNGZlMDAwLTQ0OWMtNGZjMC04NzA3LTRjNTFhYzUwYWIwM4SnY2VsbF9pZNkkMmU0ZmUwMDAtNDQ5Yy00ZmMwLTg3MDctNGM1MWFjNTBhYjAzpGNvZGXaAmttZCIiIgpXZSBjYW4gc2VlIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgVmVjdG9ycyBmb3IgYCJwZF9ub20iYCBhbmQgYCJxZF9ub20iYCBhcmUgb25seSBvbmUsIGFsdGhvdWdoIHRoZSBudW1iZXIgb2YgdGVybWluYWxzIGxpc3RlZCBpbiBgImNvbm5lY3Rpb25zImAgaXMgdHdvLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNvbm5lY3Rpb24gaXMgV1lFLCBhbmQgdGhlcmVmb3JlIHRoZSBmaW5hbCBjb25uZWN0aW9uIGlzIGEgZ3JvdW5kZWQgbmV1dHJhbAoKSGVyZSB3ZSBhcmUgYWxzbyBpbnRyb2R1Y2VkIHRvIHR3byBuZXcgRW51bXMsIGBXWUVgLCB3aGljaCBnaXZlcyB0aGUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uLCBhbmQgYE5PYCB1bmRlciBkaXNwYXRjaGFibGUsIHdoaWNoIGluZGljYXRlcyB0aGF0IGlmIHRoaXMgY2FzZSB3ZXJlIHVzZWQgaW4gYW4gTUxEIHByb2JsZW0sIF9pLmUuXyB3aXRoIGBydW5fbWNfbWxkYCB0aGF0IHRoaXMgbG9hZCB3b3VsZCBub3QgYmUgc2hlZGRhYmxlLgoKRmluYWxseSwgd2Ugc2hvdyB0aGUgZ2VuZXJhdGlvbiBzb3VyY2UgZm9yIHRoaXMgY2FzZSwgd2hpY2ggaW4gb3BlbmRzcyBpcyBhIHZvbHRhZ2Ugc291cmNlIG5hbWVkIGAic291cmNlImAKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQwZWJhNDAzZS1jMmJhLTRhZjMtOGRjYy1mZTE0YTNjMjJiZDeEp2NlbGxfaWTZJDBlYmE0MDNlLWMyYmEtNGFmMy04ZGNjLWZlMTRhM2MyMmJkN6Rjb2Rl2ZRtZCIiIgpUaGlzIGZlYXR1cmUgaXMgdXNlZnVsIGZvciBidWlsZGluZyBtdWx0aW5ldHdvcmsgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCB3aWxsIGJlIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUgc2VjdGlvbiBvbiB0aGUgYE1BVEhFTUFUSUNBTGAgbW9kZWwKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQxMmJhMDJmZi05MWRkLTQzNTUtYWQyYi1mM2NhM2I2MWUzMTiEp2NlbGxfaWTZJDEyYmEwMmZmLTkxZGQtNDM1NS1hZDJiLWYzY2EzYjYxZTMxOKRjb2Rl2SkiYGBgJChwbV9lbmcubW9kZWwpYGBgIiB8PiBNYXJrZG93bi5wYXJzZahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkZTdiNTg4ZTktZmI1Zi00MzgzLWI1YzYtYmNlOWVkOGY1YTYwhKdjZWxsX2lk2SRlN2I1ODhlOS1mYjVmLTQzODMtYjVjNi1iY2U5ZWQ4ZjVhNjCkY29kZdkncmVzdWx0X3B1WyJzb2x1dGlvbiJdWyJidXMiXVsibG9hZGJ1cyJdqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQwN2ZjNWExYi00YTllLTRhMTAtYmY3YS1kMjY4Mjc2OWFjOTeEp2NlbGxfaWTZJDA3ZmM1YTFiLTRhOWUtNGExMC1iZjdhLWQyNjgyNzY5YWM5N6Rjb2Rl2eRtZCIiIgojIyBDb25jbHVzaW9uCgpUaGlzIGNvbmNsdWRlcyB0aGUgaW50cm9kdWN0aW9uIHRvIHRoZSBgRU5HSU5FRVJJTkdgIGRhdGEgbW9kZWwgYW5kIGNvbnZlcnNpb24gdG8gdGhlIGBNQVRIRU1BVElDQUxgIG1vZGVsLiBXZSBob3BlIHRoYXQgeW91IHdpbGwgZmluZCB0aGlzIG5ldyBkYXRhIG1vZGVsIGFic3RyYWN0aW9uIGVhc3kgdG8gdXNlIGFuZCBzaW1wbGUgdG8gdW5kZXJzdGFuZAoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGUzZmUwYTVlLTk0MzEtNDUzZC1iN2U1LTgyMWRlNjI0YTRlZoSnY2VsbF9pZNkkZTNmZTBhNWUtOTQzMS00NTNkLWI3ZTUtODIxZGU2MjRhNGVmpGNvZGXZPnJlc3VsdF9tYXRoID0gc29sdmVfbWNfb3BmKG1hdGgsIEFDUFVQb3dlck1vZGVsLCBpcG9wdF9zb2x2ZXIpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ3ODVhMWMzOS1hYTU2LTQyNDQtYjdiOS0zMWQ3YTMxYjczYzOEp2NlbGxfaWTZJDc4NWExYzM5LWFhNTYtNDI0NC1iN2I5LTMxZDdhMzFiNzNjM6Rjb2Rl2TltYXRoX21uID0gdHJhbnNmb3JtX2RhdGFfbW9kZWwoZW5nX3RzOyBtdWx0aW5ldHdvcms9dHJ1ZSmobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDJmOWMzZjY0LTNlNWQtNDIzZi05MzllLThkOTZiZDE5ZTdmZYSnY2VsbF9pZNkkMmY5YzNmNjQtM2U1ZC00MjNmLTkzOWUtOGQ5NmJkMTllN2ZlpGNvZGWzZW5nWyJsaW5lIl1bInF1YWQiXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkNTQyZTU5MmYtOGY3NS00MWY5LThmOTgtNTM3M2I0MzFmY2M2hKdjZWxsX2lk2SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYzakY29kZdlTZW5nX3RzID0gcGFyc2VfZmlsZSgiLi4vdGVzdC9kYXRhL29wZW5kc3MvY2FzZTNfYmFsYW5jZWQuZHNzIjsgdGltZV9zZXJpZXM9ImRhaWx5IimobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDc0ODM2YjJjLWRiNjctNDQzNS1hNTUyLWJhNWMzZTkzZTQzZoSnY2VsbF9pZNkkNzQ4MzZiMmMtZGI2Ny00NDM1LWE1NTItYmE1YzNlOTNlNDNmpGNvZGWyZW5nX3V0WyJidXMiXVsiMiJdqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ1ZTVkZDI0Yy05NWI1LTQ5NTEtODU0Ny0xM2UyMGJiMGZlZWOEp2NlbGxfaWTZJDVlNWRkMjRjLTk1YjUtNDk1MS04NTQ3LTEzZTIwYmIwZmVlY6Rjb2Rltm1ha2VfbG9zc2xlc3MhKGVuZ191dCmobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDNkODY5ODlhLWE0ZGItNDc2Ni1hZWM3LWFiYzlhMjVmZmRlOISnY2VsbF9pZNkkM2Q4Njk4OWEtYTRkYi00NzY2LWFlYzctYWJjOWEyNWZmZGU4pGNvZGXaA6ttZCIiIgojIyBFbmdpbmVlcmluZyBNb2RlbCBUcmFuc2Zvcm1hdGlvbnMKCk9uZSBvZiB0aGUgcG93ZXIgdGhpbmdzIGFib3V0IHRoZSBlbmdpbmVlcmluZyBtb2RlbCBpcyB0aGF0IGRhdGEgdHJhbnNmb3JtYXRpb25zIGFyZSBtdWNoIG1vcmUgc2ltcGxlLiBIZXJlIHdlIGlsbHVzdHJhdGUgdHdvIGV4YW1wbGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbmNsdWRlZCBpbiBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiwgYnV0IHdyaXRpbmcgeW91ciBvd24gZGF0YSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgd2lsbCBiZSB0cml2aWFsLCBhcyB3ZSB3aWxsIHNob3cuCgpfX05vdGVfXzogSW4gdjAuOSwgYGFwcGx5X2tyb25fcmVkdWN0aW9uIWAgYW5kIGBhcHBseV9waGFzZV9wcm9qZWN0aW9uIWAgYXJlIGFwcGxpZWQgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyBga3Jvbl9yZWR1Y2U9ZmFsc2VgIGFuZCBgcGhhc2VfcHJvamVjdD1mYWxzZWAsIHJlc3BlY3RpdmVseSBpbiBgcGFyc2VfZmlsZWAgb3IgYHRyYW5zZm9ybV9kYXRhX21vZGVsYC4KCkZpcnN0LCB0aGVyZSBhcmUgc2V2ZXJhbCBvYmplY3RzIHRoYXQgaGF2ZSBsb3NzIG1vZGVscyBieSBkZWZhdWx0IHdoZW4gcGFyc2luZyBmcm9tIGRzcyBmaWxlcywgc3VjaCBhcyB2b2x0YWdlIHNvdXJjZXMsIHRyYW5zZm9ybWVycywgYW5kIHN3aXRjaGVzLiBUbyByZW1vdmUgdGhlc2UgbG9zcyBtb2RlbHMsIHRoZXJlZm9yZSBtYWtpbmcgdGhlc2UgY29tcG9uZW50cyBsb3NzbGVzcywgd2UgY2FuIHVzZSB0aGUgaW5jbHVkZWQgYG1ha2VfbG9zc2VzcyFgIGZ1bmN0aW9uLiBIZXJlIHdlIHVzZSBhIGJhc2ljIDItd2luZGluZyB3eWUtd3llIGNvbm5lY3RlZCB0cmFuc2Zvcm1lciBjYXNlIGZyb20gYHRlc3RgIHRvIGlsbHVzdHJhdGUgdGhpcwoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGRlOTJiYzIwLWIxMjUtNGYzZC05MzBhLWIxZGE2M2Q1Y2VmNYSnY2VsbF9pZNkkZGU5MmJjMjAtYjEyNS00ZjNkLTkzMGEtYjFkYTYzZDVjZWY1pGNvZGXaAZRtZCIiIgojIyBJbXBvcnRzCgpBbGwgY29tbWFuZHMgaW4gdGhpcyBkb2N1bWVudCB3aXRoIG5vIHBhY2thZ2UgbmFtZXNwYWNlIHNwZWNpZmllZCBhcmUgZGlyZWN0bHkgZXhwb3J0ZWQgYnkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gb3IgYWxyZWFkeSBhdmFpbGFibGUgaW4gSnVsaWEgYmFzZS4gQW55IGNvbW1hbmRzIHRoYXQgYXJlIG9ubHkgYXZhaWFibGUgdmlhIGFuIGV4dGVybmFsIHBhY2thZ2Ugd2lsbCBiZSBzcGVjaWZpZWQgYnkgaW5jbHVkaW5nIGJ5IHVzaW5nIGBpbXBvcnRgLCB3aGljaCB3aWxsIHJlcXVpcmUgc3BlY2lmeWluZyB0aGUgb3JpZ2luYXRpbmcgcGFja2FnZSBiZWZvcmUgdGhlIGNvbW1hbmQsIF9lLmcuXyBgSXBvcHQuT3B0aW1pemVyYCBhcyB5b3Ugd2lsbCBzZWUgYmVsb3cuCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkZGI0ZDllYjktZTEyMC00NDg5LWEzYzItNDhjNDNmMmEzYzNihKdjZWxsX2lk2SRkYjRkOWViOS1lMTIwLTQ0ODktYTNjMi00OGM0M2YyYTNjM2KkY29kZdoCg21kIiIiCiMjIEJ1aWxkaW5nIHRoZSBKdU1QIE1vZGVsCgpJbiBzb21lIGNhc2VzIHRoZSB1c2VyIHdpbGwgd2FudCB0byBkaXJlY3RseSBidWlsZCB0aGUgSnVNUCBtb2RlbCwgd2hpY2ggd291bGQgdHJhZGl0aW9uYWxseSBiZSBkb25lIHdpdGggYGluc3RhbnRpYXRlX21vZGVsYCBmcm9tIFBvd2VyTW9kZWxzLiBJbiBvcmRlciB0byBmYWNpbGl0YXRlIHVzaW5nIHRoZSBgRU5HSU5FRVJJTkdgIG1vZGVsIHdlIGhhdmUgaW50cm9kdWNlZCBgaW5zdGFudGlhdGVfbWNfbW9kZWxgIHRvIGFpZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgSnVNUCBtb2RlbC4gYGluc3RhbnRpYXRlX21jX21vZGVsYCB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCB0aGUgZGF0YSBtb2RlbCB0byBNQVRIRU1BVElDQUwgaWYgbmVjZXNzYXJ5IChub3RpZnlpbmcgdGhlIHVzZXIgb2YgdGhlIGNvbnZlcnNpb24pLCBhbmQgcGFzcyB0aGUgTUFUSEVNQVRJQ0FMIG1vZGVsIG9mZiB0byBQb3dlck1vZGVscycgYGluc3RhbnRpYXRlX21vZGVsYCB3aXRoIGByZWZfYWRkX2FyY3NfdHJhbnNmb3JtZXIhYCBpbiBgcmVmX2V4dGVuc2lvbnNgLCB3aGljaCBpcyBhIHJlcXVpcmVkIHJlZiBleHRlbnNpb24gZm9yIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLgoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDlhYzZiMGVkLTU4YTgtNDA3OS1hYTlmLWQ3MDAyNGY0ZDRiNISnY2VsbF9pZNkkOWFjNmIwZWQtNThhOC00MDc5LWFhOWYtZDcwMDI0ZjRkNGI0pGNvZGWqZW5nWyJidXMiXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkODk4NDY4NzgtZWJmYy00OWE1LTkxZWYtNzYyZjY5MmJhNWVhhKdjZWxsX2lk2SQ4OTg0Njg3OC1lYmZjLTQ5YTUtOTFlZi03NjJmNjkyYmE1ZWGkY29kZdoCMG1kIiIiCldlIGNhbiBzZWUgdGhlcmUgYXJlIHRocmVlIGJ1c2VzIGluIHRoaXMgc3lzdGVtLCBpZGVudGlmaWVkIGJ5IGlkcyBgInByaW1hcnkiYCwgYCJzb3VyY2VidXMiYCwgYW5kIGAibG9hZGJ1cyJgLgoKX19OT1RFX186IEluIEp1bGlhLCBvcmRlciBvZiBEaWN0aW9uYXJ5IGtleXMgaXMgbm90IGZpeGVkLCBub3IgZG9lcyBpdCByZXRhaW4gdGhlIG9yZGVyIGluIHdoaWNoIGl0IHdhcyBwYXJzZWQgbGlrZSBfZS5nLl8gYFZlY3RvcnNgLgoKSWRlbnRpZnlpbmcgY29tcG9uZW50cyBieSBub24taW50ZWdlciBuYW1lcyBpcyBhIG5ldyBmZWF0dXJlIG9mIHRoZSBgRU5HSU5FRVJJTkdgIG1vZGVsLCBhbmQgbWFrZXMgbmV0d29yayBkZWJ1Z2dpbmcgbW9yZSBzdHJhaWdodGZvcndhcmQuCgpfX05PVEVfXzogYWxsIG5hbWVzIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIG9uIHBhcnNlIGZyb20gdGhlIG9yaWdpbmF0aW5nIGRzcyBmaWxlLgoKRWFjaCBidXMgY29tcG9uZW50IGhhcyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgaW4gdGhlIGBFTkdJTkVFUklOR2AgbW9kZWwKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRmMmZhNzc5ZS1mNjJkLTQwNTMtYjA1NS1lOWYwYWVlNmMzZjeEp2NlbGxfaWTZJGYyZmE3NzllLWY2MmQtNDA1My1iMDU1LWU5ZjBhZWU2YzNmN6Rjb2Rl2UByZXN1bHRfYmYgPSBzb2x2ZV9tY19vcGYoZW5nLCBTT0NOTFBVQkZQb3dlck1vZGVsLCBpcG9wdF9zb2x2ZXIpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ4MmU5MzMwYi0yZTk0LTQyYTEtYjU2ZC00MzA2NzRiMTEyNDGEp2NlbGxfaWTZJDgyZTkzMzBiLTJlOTQtNDJhMS1iNTZkLTQzMDY3NGIxMTI0MaRjb2RlvGVuZ191dFsidHJhbnNmb3JtZXIiXVsidHgxIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJGRkZTJkYTU5LTYzZmEtNDU0OS04ODI5LTQ5MWU1ZjNjNjc1ZYSnY2VsbF9pZNkkZGRlMmRhNTktNjNmYS00NTQ5LTg4MjktNDkxZTVmM2M2NzVlpGNvZGXaAVdtZCIiIgojIyMgVHJhbnNmb3JtYXRpb25zIG9uIE11bHRpbmV0d29ya3MKClRyYW5zZm9ybWF0aW9ucyBvbiBNdWx0aW5ldHdvcmtzIHNob3VsZCBoYXBwZW4gX19iZWZvcmVfXyB0aGUgbmV0d29yayBpcyBjb252ZXJ0ZWQgaW50byBhIGBNQVRIRU1BVElDQUxgIGRhdGEgbW9kZWwsIHNvIHRoYXQgdGhleSBjYW4gZ2VuZXJhbGx5IGZvbGxvdyB0aGUgc2FtZSBwYXR0ZXJuIGFzIHNob3duIGFib3ZlIGFuZCBjYW4gYmUgc2VlbiBpbiB0aGUgYG1ha2VfbG9zc2xlc3MhYCBhbmQgYGFwcGx5X3ZvbHRhZ2VfYm91bmRzIWAgZnVuY3Rpb25zIGFscmVhZHkgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24KIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRmYjgxZDNjMS1hNDdiLTQ2ZDktYjQ2My0xNzY2MDIyYmUxMTSEp2NlbGxfaWTZJGZiODFkM2MxLWE0N2ItNDZkOS1iNDYzLTE3NjYwMjJiZTExNKRjb2Rl2cptZCIiIgpUaGUgcmVzdWx0IG9mIGBzb2x2ZV9tY19vcGZgIHdpbGwgYmUgdmVyeSBmYW1pbGlhciB0byB0aG9zZSB3aG8gYXJlIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBQb3dlck1vZGVscyBhbmQgUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uIFRoZSBub3RhYmxlIGRpZmZlcmVuY2Ugd2lsbCBiZSBpbiB0aGUgYCJzb2x1dGlvbiJgIGRpY3Rpb25hcnkKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRmMDcwZGJiYy0xYTU1LTQ4ZjItYWEyMS0yMTE5ZWI1NzNiNWKEp2NlbGxfaWTZJGYwNzBkYmJjLTFhNTUtNDhmMi1hYTIxLTIxMTllYjU3M2I1YqRjb2Rlr2VuZ19hbGxbImxpbmUiXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkYTA5ZGU4YWItYzFlMS00YzlmLTlkODYtNDI2OGNlNTAzY2FlhKdjZWxsX2lk2SRhMDlkZThhYi1jMWUxLTRjOWYtOWQ4Ni00MjY4Y2U1MDNjYWWkY29kZdmGbWQiIiIKSWYgZm9yIHNvbWUgcmVhc29uIHlvdSB3YW50IHRvIHJldHVybiB0aGUgcmVzdWx0IGluIHBlci11bml0IHJhdGhlciB0aGFuIFNJLCB5b3UgY2FuIHNwZWNpZnkgdGhpcyBpbiB0aGUgYHNvbHZlX2AgY29tbWFuZCBieQoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGI4ZTAxY2UyLWQ3ZjctNGM3My04MjMwLTlmZGVlY2FiMmM0ZYSnY2VsbF9pZNkkYjhlMDFjZTItZDdmNy00YzczLTgyMzAtOWZkZWVjYWIyYzRlpGNvZGXaAVttZCIiIgojIyMjIFJ1bm5pbmcgYE1BVEhFTUFUSUNBTGAgTXVsdGluZXR3b3JrcwoKQXMgd2l0aCB0aGUgYEVOR0lORUVSSU5HYCBleGFtcGxlIG9mIHJ1bm5pbmcgYSBtdWx0aW5ldHdvcmsgcHJvYmxlbSwgeW91IHdpbGwgbmVlZCBhIG11bHRpbmV0d29yayBwcm9ibGVtIHNwZWNpZmljYXRpb24sIGFuZCBhcyB3aXRoIHRoZSBwcmV2aW91cyBzaW5nbGUgYE1BVEhFTUFUSUNBTGAgbmV0d29yayBleGFtcGxlIGFib3ZlLCB3ZSBvbmx5IG9idGFpbiB0aGUgYE1BVEhFTUFUSUNBTGAgc29sdXRpb24sIGFuZCBjYW4gdHJhbnNmb3JtIHRoZSBzb2x1dGlvbiBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgYmVmb3JlCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkYWM5NGU1NTYtYjU0NC00Y2E2LTg3YmQtZmYyZDdhNzQxNGU3hKdjZWxsX2lk2SRhYzk0ZTU1Ni1iNTQ0LTRjYTYtODdiZC1mZjJkN2E3NDE0ZTekY29kZdlDcG1kX3BhdGggPSBqb2lucGF0aChkaXJuYW1lKHBhdGhvZihQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbikpLCAiLi4iKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkYWU4ZGFmNmMtNDA1NS00OTdlLTkwNWMtZDZkNWE2MzczYWQzhKdjZWxsX2lk2SRhZThkYWY2Yy00MDU1LTQ5N2UtOTA1Yy1kNmQ1YTYzNzNhZDOkY29kZdlacmVzdWx0X21uID0gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uX3NvbHZlX21uX21jX29wYihlbmdfdHMsIE5GQVVQb3dlck1vZGVsLCBpcG9wdF9zb2x2ZXIpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ2NjYyMjNkNS04MDJhLTQxNjQtODgyYy04YWIxYTEzMTlkNmSEp2NlbGxfaWTZJDY2NjIyM2Q1LTgwMmEtNDE2NC04ODJjLThhYjFhMTMxOWQ2ZKRjb2Rl2fZtZCIiIgojIyMgUnVubmluZyBgTUFUSEVNQVRJQ0FMYCBtb2RlbHMKClRoZXJlIGlzIHZlcnkgbGl0dGxlIGRpZmZlcmVuY2UgZnJvbSB0aGUgdXNlciBwb2ludC1vZi12aWV3IGluIHJ1bm5pbmcgYE1BVEhFTUFUSUNBTGAgbW9kZWxzIG90aGVyIHRoYW4gdGhlIHJlc3VsdHMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgdGhlIGZvcm1hdCBvZiB0aGUgYEVOR0lORUVSSU5HYCBtb2RlbAoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDQwMjBkNjdhLTRhOWUtNDAzMC1iN2NkLWU1ZDYwZTc4NDk1Y4SnY2VsbF9pZNkkNDAyMGQ2N2EtNGE5ZS00MDMwLWI3Y2QtZTVkNjBlNzg0OTVjpGNvZGXZjHBhcnNlX2ZpbGUoIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL3V0X3RyYW5zXzJ3X3l5LmRzcyI7IHRyYW5zZm9ybWF0aW9ucz1bbWFrZV9sb3NzbGVzcyEsIChhcHBseV92b2x0YWdlX2JvdW5kcyEsICJ2bV9sYiI9PjAuOSwgInZtX3ViIj0+MS4xKV0pqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQwNTM2MDE2My00YTZmLTQxZGEtOGZhZS0wNzBlMzI3YzI2MDWEp2NlbGxfaWTZJDA1MzYwMTYzLTRhNmYtNDFkYS04ZmFlLTA3MGUzMjdjMjYwNaRjb2Rl2Ttzb2xfZW5nID0gdHJhbnNmb3JtX3NvbHV0aW9uKHJlc3VsdF9tYXRoWyJzb2x1dGlvbiJdLCBtYXRoKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkMWRjMDYwMDctYjQxMy00Y2JiLWI0M2ItMmM3OTU1ZWNiNmQyhKdjZWxsX2lk2SQxZGMwNjAwNy1iNDEzLTRjYmItYjQzYi0yYzc5NTVlY2I2ZDKkY29kZbBtYXRoWyJtYXAiXVtlbmRdqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTCq25vdGVib29rX2lk2SQ3MjZhZjVjZS0zMmY1LTExZWUtMTQwNC0xYmJmNWVhYmY1MmWraW5fdGVtcF9kaXLCqG1ldGFkYXRhgA=="; +window.pluto_statefile = "data:;base64,3gARpWJvbmRzgKxjZWxsX3Jlc3VsdHPeAE3ZJDVhYjZjZDE2LTNjMjQtNGY2MC1iZGYyLTdmNDhiM2UyNTA4NYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZsDxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG1hbnVhbGx5IGNvbnZlcnQgdGhlIHNvbHV0aW9uIGJhY2sgdG8gdGhlIDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBmb3JtYXQsIHByb3ZpZGVkIHlvdSBoYXZlIHRoZSA8c3Ryb25nPm1hcDwvc3Ryb25nPjwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiG8eMZsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ1YWI2Y2QxNi0zYzI0LTRmNjAtYmRmMi03ZjQ4YjNlMjUwODW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABVTctXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkOTY3NTdkZGUtNTJiZS00OTMwLTliZGQtOTMwM2JiNzE1ZTU1iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmJKSrCJzb2x2ZV90aW1lIqp0ZXh0L3BsYWlukqowLjAwMjE5MTA3qnRleHQvcGxhaW6Skqsib3B0aW1pemVyIqp0ZXh0L3BsYWlukqciSXBvcHQiqnRleHQvcGxhaW6SkrQidGVybWluYXRpb25fc3RhdHVzIqp0ZXh0L3BsYWluktkpTE9DQUxMWV9TT0xWRUQ6OlRlcm1pbmF0aW9uU3RhdHVzQ29kZSA9IDSqdGV4dC9wbGFpbpKSrSJkdWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZJEZFQVNJQkxFX1BPSU5UOjpSZXN1bHRTdGF0dXNDb2RlID0gMap0ZXh0L3BsYWlukpKvInByaW1hbF9zdGF0dXMiqnRleHQvcGxhaW6S2SRGRUFTSUJMRV9QT0lOVDo6UmVzdWx0U3RhdHVzQ29kZSA9IDGqdGV4dC9wbGFpbpKSqyJvYmplY3RpdmUiqnRleHQvcGxhaW6SpzAuMDA0OTWqdGV4dC9wbGFpbpKSqiJzb2x1dGlvbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkrUibXVsdGlpbmZyYXN0cnVjdHVyZSKqdGV4dC9wbGFpbpKlZmFsc2WqdGV4dC9wbGFpbpKSriJtdWx0aW5ldHdvcmsiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSpCJudyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqMiMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMmFlMjlmYmIxYTIyNDVkNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDhiNTZlMWQ5NWIwYzBlMWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4MTNjMDEyNGM3MzI0MGYz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGRjNDNhYjlkZmU3NGRhZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDVlYmIxM2I4ODFkNDI4NjPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI2Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiODQwOWEyZWI0ZGY3MmUy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmVjMDA1YjEyMWRlZTc4Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3Yjg2ZmQ4Y2JiNmNkZTAz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4ib2JqZWN0aXZlX2xiIqp0ZXh0L3BsYWlukqQtSW5mqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzI0MTRkZWM0OTNjYTA1NKRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlrnJlc3VsdF9tYXRoX21usmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhvhMjLBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkOTY3NTdkZGUtNTJiZS00OTMwLTliZGQtOTMwM2JiNzE1ZTU1uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAKIj/bVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDAyNjA4OGY3LWIxZGYtNDY0Ny1hZDgxLTUyYzZjOGVhNzk0NIqmcXVldWVkwqRsb2dzk4ikbGluZf+jbXNnktlLQ2lyY3VpdCBoYXMgYmVlbiByZXNldCB3aXRoIHRoZSAnY2xlYXInIG9uIGxpbmUgMSBpbiAnY2FzZTNfdW5iYWxhbmNlZC5kc3MnqnRleHQvcGxhaW6nY2VsbF9pZNkkMDI2MDg4ZjctYjFkZi00NjQ3LWFkODEtNTJjNmM4ZWE3OTQ0pmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uX2QyNGFlYzAwpGZpbGXZUi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3NfcGFyc2UuamylZ3JvdXCpZHNzX3BhcnNlpWxldmVspEluZm+IpGxpbmX/o21zZ5LZW0NvbW1hbmQgJ2NhbGN2b2x0YWdlYmFzZXMnIG9uIGxpbmUgMzUgaW4gJ2Nhc2UzX3VuYmFsYW5jZWQuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SQwMjYwODhmNy1iMWRmLTQ2NDctYWQ4MS01MmM2YzhlYTc5NDSma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlQQ29tbWFuZCAnc29sdmUnIG9uIGxpbmUgMzcgaW4gJ2Nhc2UzX3VuYmFsYW5jZWQuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SQwMjYwODhmNy1iMWRmLTQ2NDctYWQ4MS01MmM2YzhlYTc5NDSma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb6dydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5uSkq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5SSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6SBJKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjNGE4NjVhMGM1NTI0NmRm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDY0Njk2MjA3YjY3ZjVkZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNzdlZjQ4MzFiZWI5Njg4ZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZGQyM2M3N2Q4ZjdiNTg5ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2N2ExOGMzMzFlMWRlMzE22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGQ5MjU4YTcxMDcyNWVjNDPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDkwZjRjZDE3ZWUzZTVmMGLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwN2I3NWNlMWU0MzQwNWZiY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvZTUxZWViY2YxZDdhODc22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTkyM2Y5OWExZTljYjlkN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1YjM3ZDVkNjBiNGE2MDU32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjU3YmEwYTQxNzNmYzVjMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjMTMxMWJjZmNlYTk4ZjQ22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxODQ3ZmQzZTg1YzNmMmM12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwM2RmNGQzZGZjODMyMzQyMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2MDc4NzFmNzE1Y2I5ZDVk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNjYmM5YTg2NGU1M2U3ZGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJuYW1lIqp0ZXh0L3BsYWlukq4iM2J1c19leGFtcGxlIqp0ZXh0L3BsYWlukpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSryJzYmFzZV9kZWZhdWx0Iqp0ZXh0L3BsYWlukqU1MDAuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4skRpY3R7U3RyaW5nLCBSZWFsfahlbGVtZW50c5GSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqcwLjIzMDk0qnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDM3NjYxMmI2YzNhZTBmNmTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNTAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2ZmExNWU5NGI0MjU0NmE42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZmlsZXMiqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzkZIBktkrIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL2Nhc2UzX3VuYmFsYW5jZWQuZHNzIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0Yzg5YTY2MzY3ZWU1MTVi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq0iZHNzX29wdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKuInZvbHRhZ2ViYXNlcyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkZIBkqMwLjSqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTFkNzg3ODI3MjgxNjkyOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKxImRlZmF1bHRiYXNlZnJlcSKqdGV4dC9wbGFpbpKkNTAuMKp0ZXh0L3BsYWlukpKrInRvbGVyYW5jZSKqdGV4dC9wbGFpbpKmMS4wZS02qnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc4YWQzOTlkNDYzZjJkNTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SsCJ2c291cmNlLnNvdXJjZSKqdGV4dC9wbGFpbpKSpCJycyKqdGV4dC9wbGFpbpLZ1TTDlzQgTWF0cml4e0Zsb2F0NjR9OgogNC4yNzY5MWUtOCAgMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgNC4yNzY5MWUtOCAgMy45NjM0MmUtOSAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgNC4yNzY5MWUtOCAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgNC4yNzY5MWUtOKp0ZXh0L3BsYWlukpKkInZhIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQ3YWYzZWFhNmI1ZmZjYjLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMzEzZDRhMzQ5ZTdiZjhiZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGU1YTIyNGMxMDc0NWE0ZGbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxZGExNzRhZjEwNzcyZGI22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc5OTU0N2VkNDg1ZWQ3ZGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSpiJxdWFkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKvInRfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDllMjI4NmJmOTE3MTE5NzHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW6Skqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqsibGluZS5xdWFkIqp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnInRfYnVzIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1MzM3NmM0ZDdiOWFiZmYy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgib2hsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKvInRfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDlkY2U2YzUzMTBjOWU1MzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrSJsaW5lLm9obGluZSKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJ0X2J1cyKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2E1MjhiMTY2OWQ1YWNhNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4YmM0NDdhN2VjYjRhYWNl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwiZGF0YV9tb2RlbCKqdGV4dC9wbGFpbpK6RU5HSU5FRVJJTkc6OkRhdGFNb2RlbCA9IDCqdGV4dC9wbGFpbpKSpiJsb2FkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSpCJsMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQxODg5YjkzZjg0MjJkMGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMzI2NGJjNmViMTE2NGNjMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW6Skq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDZhMTY2YmNmMjk1ZGFiNTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDc0YmE2YzY4M2VhNTMxZGbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMzA5ODNkMDgyZDgxYWQxMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW6Skq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGIwYjNhNmVkMzY5N2FlYjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRjZjVkODk5NmYxYzU4NzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzExNDJmNjQ0ZTdkYjAzN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW6Skq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzZmZDMwNGFlMzJhZTVhMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0ZWM1ZjlmODcyYmM1ZDRj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoibGluZWNvZGUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKoIjU1Nm1jbSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqYiYl9mciKqdGV4dC9wbGFpbpLZYDPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMjUuNDY0OCAgLTAuMCAgICAgLTAuMAogLTAuMCAgICAgMjUuNDY0OCAgLTAuMAogLTAuMCAgICAgLTAuMCAgICAgMjUuNDY0OKp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktlKM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjEgICAwLjA0ICAwLjA0CiAwLjA0ICAwLjEgICAwLjA0CiAwLjA0ICAwLjA0ICAwLjGqdGV4dC9wbGFpbpKSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiMTlkNjU2MzM4MTVjYzkw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMDU4MyAgMC4wMjMzICAwLjAyMzMKIDAuMDIzMyAgMC4wNTgzICAwLjAyMzMKIDAuMDIzMyAgMC4wMjMzICAwLjA1ODOqdGV4dC9wbGFpbpKSpiJiX3RvIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqYiZ190byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDlmYzBiMzcxOTQ1YzY4NjXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSI0LzBxdWFkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpiJiX2ZyIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqQicnMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMTE2NyAgMC4wNDY3ICAwLjA0NjcKIDAuMDQ2NyAgMC4xMTY3ICAwLjA0NjcKIDAuMDQ2NyAgMC4wNDY3ICAwLjExNjeqdGV4dC9wbGFpbpKSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiODg1ZTg2OWM2Mzg1NGU12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMDY2NyAgMC4wMjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wNjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wMjY3ICAwLjA2NjeqdGV4dC9wbGFpbpKSpiJiX3RvIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqYiZ190byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFiMWFkM2Y1MmI2MjJiYTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDUwZjM0ZWJkZjRhY2YzM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2ZDE2NTAyYTJmMGYyZTQzpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWWnZW5nX2FsbLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHIjhuSwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDAyNjA4OGY3LWIxZGYtNDY0Ny1hZDgxLTUyYzZjOGVhNzk0NLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgb7EVO1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRmMDZiOTU5Mi0wZTE2LTRmZDEtYmY2ZS02MjRlYzBjZGI4ZmKKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gRDPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPkFnYWluLCB3ZSBzZWUgY29tcG9uZW50cyBpZGVudGlmaWVkIGJ5IHRoZWlyIE9wZW5EU1MgbmFtZXMuIEEgPGNvZGU+JnF1b3Q7bGluZSZxdW90OzwvY29kZT4gaXMgYW4gZWRnZSBvYmplY3QsIHdoaWNoIHdpbGwgYWx3YXlzIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOjwvcD4KPHVsPgo8bGk+PHA+PGNvZGU+JnF1b3Q7Zl9idXMmcXVvdDs8L2NvZGU+PC9wPgo8L2xpPgo8bGk+PHA+PGNvZGU+JnF1b3Q7dF9idXMmcXVvdDs8L2NvZGU+PC9wPgo8L2xpPgo8bGk+PHA+PGNvZGU+JnF1b3Q7Zl9jb25uZWN0aW9ucyZxdW90OzwvY29kZT4gLSBsaXN0IG9mIHRlcm1pbmFscyB0byB3aGljaCB0aGUgbGluZSBpcyBjb25uZWN0ZWQgb24gdGhlIGZyb20tc2lkZTwvcD4KPC9saT4KPGxpPjxwPjxjb2RlPiZxdW90O3RfY29ubmVjdGlvbnMmcXVvdDs8L2NvZGU+IC0gbGlzdCBvZiB0ZXJtaW5hbHMgdG8gd2hpY2ggdGhlIGxpbmUgaXMgY29ubmVjdGVkIG9uIHRoZSB0by1zaWRlPC9wPgo8L2xpPgo8L3VsPgo8cD5IZXJlIHdlIGFyZSBhbHNvIGludHJvZHVjZWQgdG8gdHdvIGltcG9ydGFudCBjb25jZXB0cywgdGhlIDxjb2RlPiZxdW90O3NvdXJjZV9pZCZxdW90OzwvY29kZT4sIHdoaWNoIGlzIGFuIGVhc3kgd2F5IHRvIGlkZW50aWZ5IGZyb20gd2hlcmUgYW4gb2JqZWN0IG9yaWdpbmF0ZXMgaW4gdGhlIGRzcyBmaWxlLCBhbmQgYSBkYXRhIHR5cGUgZWxlbWVudCwgcG9pbnRlZCB0byBieSA8Y29kZT4mcXVvdDtsaW5lY29kZSZxdW90OzwvY29kZT4gaW4gdGhpcyBjYXNlLjwvcD4KPHA+QSBkYXRhIHR5cGUgZWxlbWVudCBpcyBhbiBlbGVtZW50IHRoYXQgZG9lcyBub3QgcmVwcmVzZW50IGEgcmVhbCBlbmdpbmVlcmluZyBvYmplY3QsIGJ1dCBvbmx5IGNvbnRhaW5zIGRhdGEgdGhhdCBvbmUgb2YgdGhvc2UgcmVhbCBvYmplY3RzIGNhbiByZWZlciB0bywgaW4gdGhpcyBjYXNlIGEgbGluZWNvZGUsIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGxpa2UgbGluZSByZXNpc3RhbmNlL3JlYWN0YW5jZSBhbmQgY29uZHVjdGFuY2Uvc3VzY2VwdGFuY2UuPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHILY5mwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGYwNmI5NTkyLTBlMTYtNGZkMS1iZjZlLTYyNGVjMGNkYjhmYrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgALYCi1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRiMWU1NTI2My05Yzc2LTQzYjItYjkxYy0xMTViMmYwODAxODKKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gFxPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPkFub3RoZXIgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gaW5jbHVkZWQgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gaXMgdGhlIDxjb2RlPmFwcGx5X3ZvbHRhZ2VfYm91bmRzJiMzMzs8L2NvZGU+IGZ1bmN0aW9uLCB3aGljaCB3aWxsIGFwcGx5IHNvbWUgdm9sdGFnZSBib3VuZHMgaW4gU0kgdW5pdHMsIGdpdmVuIHNvbWUgcGVyY2VudCB2YWx1ZSwgPGVtPmUuZy48L2VtPiBpZiB3ZSB3YW50IHRoZSBsb3dlciBib3VuZCBvbiB2b2x0YWdlIHRvIGJlIDxjb2RlPjAuOTwvY29kZT4gYW5kIHVwcGVyIGJvdW5kIDxjb2RlPjEuMTwvY29kZT4gYWZ0ZXIgcGVyLXVuaXQgY29udmVyc2lvbjwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiGbCRbsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRiMWU1NTI2My05Yzc2LTQzYjItYjkxYy0xMTViMmYwODAxODK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABYCctXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNDYwM2JjNTYtYzQwMi00OGFmLTk3MTUtMDcyMmU0MmQ5MGY3iqZxdWV1ZWTCpGxvZ3ORiKRsaW5l/6Ntc2eS2UtDb252ZXJ0aW5nIEVOR0lORUVSSU5HIGRhdGEgbW9kZWwgdG8gTUFUSEVNQVRJQ0FMIGZpcnN0IHRvIGJ1aWxkIEp1TVAgbW9kZWyqdGV4dC9wbGFpbqdjZWxsX2lk2SQ0NjAzYmM1Ni1jNDAyLTQ4YWYtOTcxNS0wNzIyZTQyZDkwZjema3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fMzkzNDJjZmWkZmlsZdlNL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvcHJvYi9jb21tb24uamylZ3JvdXCmY29tbW9upWxldmVspEluZm+ncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXiuTkZBVVBvd2VyTW9kZWyoZWxlbWVudHOakqVtb2RlbJLaAQBBIEp1TVAgTW9kZWwKTWluaW1pemF0aW9uIHByb2JsZW0gd2l0aDoKVmFyaWFibGVzOiAxMgpPYmplY3RpdmUgZnVuY3Rpb24gdHlwZTogSnVNUC5BZmZFeHByCmBKdU1QLkFmZkV4cHJgLWluLWBNYXRoT3B0SW50ZXJmYWNlLkVxdWFsVG97RmxvYXQ2NH1gOiAxMiBjb25zdHJhaW50cwpNb2RlbCBtb2RlOiBBVVRPTUFUSUMKQ2FjaGluZ09wdGltaXplciBzdGF0ZTogTk9fT1BUSU1JWkVSClNvbHZlciBuYW1lOiBObyBvcHRpbWl6ZXIgYXR0YWNoZWQuqnRleHQvcGxhaW6SpGRhdGGShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHObkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOTkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhZjM4MzQwZWEyMWVjNDEy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4idGltZV9lbGFwc2VkIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKjIjQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI1ZWYxZTc5MmY5MDM3MGLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4NzIxYmVhOWQxZmRjMGQ12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTdmNjM0NDc5M2E2OGUxMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDM4MGMwMGRmYjNjYjExZGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYzk3ODI1MGJkNmFhMTM4NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmIm5hbWUiqnRleHQvcGxhaW6SriIzYnVzX2V4YW1wbGUiqnRleHQvcGxhaW6SkqUibWFwIqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmEyYzcyYjI1NGFiMWMyZalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWZkYTE4N2Y3NmFmYjI0ZqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk3ODVhODIyM2UwZTYzNDGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA1NmNhZmQ5Y2QzOTc5MDI5qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNzcyZWE2MjUyMzA5MGRjqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIEk5KDpHR5cGWkUGFpcqhvYmplY3RpZK84NzQ4ZWQ2ZTFhOThhY2Kpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAzNmFhOTUwNWFhZjUyZGE3qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZmQ3NjkwNWI4MmQ3ZTJmZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRkZjk2N2IwMzhmYjBlYTGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTg5Zjk5YTY3N2ExMzQzNqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDVjYTY0ZGM1NjIwNjc0NGapa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYjI3MzA1YTFmYjdjN2YwqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIHk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxMDU2NTlkYTE2NTVmYzU5qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDYyMTVjMTExMTYzMmE5MTCpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgiTkoOkdHlwZaRQYWlyqG9iamVjdGlksDdjZjJiMTg0MTc5MGRmM2Spa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZTYxMjZiNWVkMDIwNTgzOalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjU5MjE3ZDk0MjNhZjE3Y6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA3MWZjMzM2YjI0MGVhYmMyqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA1OTEyYTQ1NTE1Yzc3YTBmqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOTkgGSpyJnZW4uMSKqdGV4dC9wbGFpbpICkqciYnVzLjQiqnRleHQvcGxhaW6SA5KqImJyYW5jaC4zIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5YjQ5MzU1MmZhM2U1MDM32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5YTA1Y2VkZTcxOWJjZmZiqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZmZjNzg2YTg2ZGJiZmVlNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlkrzZjMGM4ZDQ3YzFlZWEzZKZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSryJzYmFzZV9kZWZhdWx0Iqp0ZXh0L3BsYWlukqU1MDAuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4skRpY3R7U3RyaW5nLCBSZWFsfahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTczOWE2M2ExMjIxNzgxMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpK2InZvbHRhZ2Vfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSpyJzYmFzZSKqdGV4dC9wbGFpbpKlNTAwLjCqdGV4dC9wbGFpbpKStCJwb3dlcl9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpKwImJhc2VfZnJlcXVlbmN5Iqp0ZXh0L3BsYWlukqQ1MC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGY5MTVkY2EwYjVlNWJjYTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNmNjBiYjkzYzI3MzYyM2XZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTEzNDhkZDg4NjI0ZjVkOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoImJyYW5jaCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvNjM4NjcxNDUwMjNiOGIw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTFlZmM2MzBlNzkyOTFlMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGIzMTI2YjMzYTlkMGJhMzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjFiNDIyMzkwNzI0MWRmMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpInN0b3JhZ2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOQpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0NTE1NGRlM2NkZTY3NDZh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjNiNmZkMWI4YjI3Y2YyZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kqdzZXR0aW5nkoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYzY5YTZlNmI1MWQ1MGNkM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kqhzb2x1dGlvbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5CkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY4YTYyMWY3MTRmYzgxODTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKjcmVmkoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkZKSozppdKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkZKSpDpwbWSqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N5bWJvbCwgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYzcyNjliZWY1MmVkZjU0YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmNjRlNWRhYzMxM2QyYzQw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGVkNDg4ODQ5OWYzMWNjZDfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKjdmFykoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkpKSpDpkZXCqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N5bWJvbCwgQW55fahlbGVtZW50c5CkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNlYjYxMWExNDIwY2IwOGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSozppdKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkZKSpDpwbWSqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N5bWJvbCwgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDM5YWQ3YWE0YmQ2MDMxZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmYTI0ZmY3ZmI4ZWE1Zjhm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDdlOGQ3OTNhNDFiYjgxYTLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKjY29ukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkpKSpDpkZXCqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N5bWJvbCwgQW55fahlbGVtZW50c5CkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGQ4ZTJhZTBmNzU3NGMyNzfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSozppdKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkZKSpDpwbWSqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N5bWJvbCwgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOTMxYjY3Mjc2OWU2MWU0MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiZWY3Y2IwZjQxOWVmMGY32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGM4Nzg1MTBkZDRhMDAzZTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKjc29skoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkpKSpDpkZXCqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N5bWJvbCwgQW55fahlbGVtZW50c5CkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGRhMjVjNWIwNzdmYmZjZGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSozppdKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkZKSpDpwbWSqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N5bWJvbCwgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGU0MDRlNThlMDMxMjNjZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjMjU3MDY0MWM4NWU3N2I42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDE0MDY1YTQ4ZWJiZDIxYjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKoc29sX3Byb2OShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHOSkpKkOmRlcKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTRiMjQ2Njg4ZDE1MDdmZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjOml0qnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHORkpKkOnBtZKp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3ltYm9sLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5N2U2OTIxY2YzN2Q2MmVi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDVmYTZlZWZjODJmZTI3OTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwN2Q3MmE0NzYzZTk1OTk2ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kqNleHSShaZwcmVmaXixRGljdHtTeW1ib2wsIEFueX2oZWxlbWVudHOQpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzOWFlYzM3OGI3ZmRiZDEw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaZzdHJ1Y3SscHJlZml4X3Nob3J0rk5GQVVQb3dlck1vZGVsqG9iamVjdGlksDJiZjEzZThiOWM2ZGI5ZWWkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZaZwbV9lbmeybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiH4q4dsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ0NjAzYmM1Ni1jNDAyLTQ4YWYtOTcxNS0wNzIyZTQyZDkwZje5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc6iL34btXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNThmODA2NTEtNGE0NC00NzgxLWE2YzAtYTA1NmVjNzZiMDdliqZxdWV1ZWTCpGxvZ3OTiKRsaW5l/6Ntc2eS2UlDaXJjdWl0IGhhcyBiZWVuIHJlc2V0IHdpdGggdGhlICdjbGVhcicgb24gbGluZSAxIGluICd1dF90cmFuc18yd195eS5kc3MnqnRleHQvcGxhaW6nY2VsbF9pZNkkNThmODA2NTEtNGE0NC00NzgxLWE2YzAtYTA1NmVjNzZiMDdlpmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uX2QyNGFlYzAwpGZpbGXZUi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3NfcGFyc2UuamylZ3JvdXCpZHNzX3BhcnNlpWxldmVspEluZm+IpGxpbmX/o21zZ5LZWUNvbW1hbmQgJ2NhbGN2b2x0YWdlYmFzZXMnIG9uIGxpbmUgMzUgaW4gJ3V0X3RyYW5zXzJ3X3l5LmRzcycgaXMgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcuqnRleHQvcGxhaW6nY2VsbF9pZNkkNThmODA2NTEtNGE0NC00NzgxLWE2YzAtYTA1NmVjNzZiMDdlpmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzc4OTIxNDk2pGZpbGXZUi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3NfcGFyc2UuamylZ3JvdXCpZHNzX3BhcnNlpWxldmVspEluZm+IpGxpbmX/o21zZ5LZTkNvbW1hbmQgJ3NvbHZlJyBvbiBsaW5lIDM4IGluICd1dF90cmFuc18yd195eS5kc3MnIGlzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nLqp0ZXh0L3BsYWlup2NlbGxfaWTZJDU4ZjgwNjUxLTRhNDQtNDc4MS1hNmMwLWEwNTZlYzc2YjA3ZaZrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl83ODkyMTQ5NqRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZvp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmpKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SsCJ2c291cmNlLnNvdXJjZSKqdGV4dC9wbGFpbpKSpCJycyKqdGV4dC9wbGFpbpLZZTTDlzQgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6SkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYmY1NDk4YzMzMTY5YzU0N9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK83OGVkZGVjNDFkZDQ3MTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ2bSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyY2FjYWY2NzhjMTlmMzY22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDRmZTYxMmZlZTg1MTIyMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5MDk1Zjk3YWU1YjQxOWI32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibmFtZSKqdGV4dC9wbGFpbpKqInV0X3RyYW5zIqp0ZXh0L3BsYWlukpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKnImxpbmUyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1ODg4NjhjZGY1NDY2YjJl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2ZTAyOTAwZjIwM2E5Nzlj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNzk0NmZlMzQzNmMzOTU5YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxpbmUxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhYmU4ZTQ4MDFjMDZlOTdk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2Uszw5czIE1hdHJpeHtGbG9hdDY0fToKICAwLjAgIC0wLjAgIC0wLjAKIC0wLjAgICAwLjAgIC0wLjAKIC0wLjAgIC0wLjAgICAwLjCqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4Y2JhNGMyOTVkYTllYTc02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGFjOWJkY2NkOWM4OWNkY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlYjQ0NGQwOTlhYmUzMmFi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5SSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6SBJKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK8zNTA3MjkxMzk2MTdhYjbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkq8ic2Jhc2VfZGVmYXVsdCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkrAidmJhc2VzX2RlZmF1bHQiqnRleHQvcGxhaW6ShaZwcmVmaXiyRGljdHtTdHJpbmcsIFJlYWx9qGVsZW1lbnRzkZKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SpzYuMzUwODWqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmM1MjBjYmNiY2Q5MzU0ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpK2InZvbHRhZ2Vfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKStCJwb3dlcl9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpKwImJhc2VfZnJlcXVlbmN5Iqp0ZXh0L3BsYWlukqQ2MC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrjgzZjA3ZWM1NGU3ZDU12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZmlsZXMiqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzkZIBktkpIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL3V0X3RyYW5zXzJ3X3l5LmRzcyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNzQwMGI0NWVkN2Y5YWE0NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKtInRyYW5zZm9ybWVyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpSJ0eDEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKqInBvbGFyaXR5Iqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzZGFlNmFjZDNmOTI3NDE12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic21fbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDQwZjliNDY1YzYyYTlkODLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ0bV9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDgxZjU4NDhmZjNlMmRlZGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeK1WZWN0b3J7SW50NjR9qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0ZDAyZDI1ZTA5ZmQ0MmZi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidG1fc2V0Iqp0ZXh0L3BsYWlukoWmcHJlZml4r1ZlY3RvcntGbG9hdDY0fahlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTg5NDg0Y2ZhMDMxOTk4MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpInRtX3N0ZXAiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2NDdjMjAzZmI4ZjAwYTAy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTVlNjllOTk5MDAyZjRiNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0NTM0OTA5ZTRlOWU5ODVi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqcibG9hZDMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDMiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDczMWY2NjUwZDYzNWFhMmPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmY0N2I5ZWEyMmMzMDZlM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKlNi41MzGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5MDU2ZmNlNjY0ZTE4OWMy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibG9hZDYiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDYiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGVkNzcyNDcyNGFlNTI5MzHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTQ2NzFiYjEwZDAxOWIyM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKjMi4zqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOTRjMGYxNGU2ZGI1NDMzYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQyIqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmNTJmN2JjNGRhNTcwMjAy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDg2YTFlODNhNTE3NjYzZWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SpTYuNTMxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmZhODM4YjRhMzgyZjZmN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQ1Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQ1Iqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiYTcwOWEzOGUzZWJmNzI32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrzliNWVkYTlkNzllN2EyN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKjMi4zqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTEwNDU0NzI2NjNjNWI1ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQxIqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1MDM3NWQ3NzhmNzliMTgy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDdlZmRmMDdjYzI4NDIyYWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SpTYuNTMxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjhhMmE2M2I5NWNkNjA2ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQ0Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQ0Iqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzZmE0MDcxZGVlNTMzOThi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRkNTU2YzI4NWYzMmYyZGLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SozIuM6p0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFiZjIzNjEyOWM2YzVhNGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzFkYzFhZGIyN2ViYmEyMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTkzN2UyYmVhMTc5MzNhNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlYzQ5YzRjNjQ3OWNmNjU52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyZjkxMmU5M2EzYTMyNzJl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTExOGNiNDUxMTNiMDYwOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyNmZjMTI4MzkyMmMxMmVh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzODRjYjQ3NjVmYTJlNjE02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGM1ODZkNmZhN2ExNzI5YWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYxYmIyNjI2ODdmNzEzNWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3NGJhZGNmZjU4N2Y2NmVk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDdkNGUyNTE3YmVkMDJiNjXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjMWVlZDhjYWYyZTc2M2Vi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGJjNzY1ZWE1ZTdmNjZlNDXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI3MTdhODBjYjJiMDE2NjLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyMWY2ZWQ3ZWIyZjc4ZWE52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDgwZjUwODA0YzYxZGYzM2LZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhMTMyMzc1NWIxNmQyZDJk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDZjZTkxMDUyYzhkYWRkY2PZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFlMDEzZGRmMDA4MzhkZDXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5Y2U3OThiMGE4ZDdmMTM32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI4ZDRiZWIwYjVkZDU4NmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTE3MmZhZjJlNzE5ZGZjNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKsImRhdGFfbW9kZWwiqnRleHQvcGxhaW6SukVOR0lORUVSSU5HOjpEYXRhTW9kZWwgPSAwqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQ2YWQ5NzlmZDFhMWM1ZjakbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiGa64IsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ1OGY4MDY1MS00YTQ0LTQ3ODEtYTZjMC1hMDU2ZWM3NmIwN2W5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4FxmhctXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkOTZhNjViZGMtN2VlNC00ZTlmLTk0ZjUtOGE4M2Y3NTEyZmU5iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kednKPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPkFsdGVybmF0aXZlbHksIHRoZSA8Y29kZT5NQVRIRU1BVElDQUw8L2NvZGU+IG1vZGVsIGNhbiBiZSByZXR1cm5lZCBkaXJlY3RseSBmcm9tIHRoZSA8Y29kZT5wYXJzZV9maWxlPC9jb2RlPiBjb21tYW5kIHdpdGggdGhlIDxjb2RlPmRhdGFfbW9kZWw8L2NvZGU+IGtleXdvcmQgYXJndW1lbnQ8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhtRNFrBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkOTZhNjViZGMtN2VlNC00ZTlmLTk0ZjUtOGE4M2Y3NTEyZmU5uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAUoVbVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGE3MzQ4ZmM4LWIyNWUtNGVjZi05ZmU2LTMxNDAzNmI3ZGY5Y4qmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c9wAEpKSsSJpc19rcm9uX3JlZHVjZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzk5IBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjZmZGNhNjhiYjczMzE2NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlJKSoyI0Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSrCJ2bV9wYWlyX2xiIqp0ZXh0L3BsYWlukoWmcHJlZml4tVR1cGxle0FueSwgQW55LCBSZWFsfahlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU1NTRiNzQ5MTgxNjBiMzXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6StyJ2b2x0YWdlX3NvdXJjZS5zb3VyY2UiqnRleHQvcGxhaW6SkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXikQm9vbKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNWRmOTViOWQ4ZTU2NDNjMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmInZtaW4iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvZjBhMGMzMjBiODczY2M42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwidm1fcGFpcl91YiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjM2RmM2JmYzc1MmIyNjMy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciYnVzX2kiqnRleHQvcGxhaW6SoTSqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0NWNmYTdjNGY5MjJhMzEx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqwidm1fcGFpcl9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0MTY4ZmE5MzcwM2VkYjgy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXikQm9vbKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTViMjIxNmUxZGQ2NWI0YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKsInZtX3BhaXJfdWIiqnRleHQvcGxhaW6ShaZwcmVmaXi1VHVwbGV7QW55LCBBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTE1YWE5YTcxMDIyMzhhNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImJ1c19pIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6SkqYibmFtZSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW6SkqoiYnVzX3R5cGUiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjYjIxNDg1MTgzYzEzNDMw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqwidm1fcGFpcl9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlNTJlNmNiMmI3YzlhNGJh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXikQm9vbKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvYzllMTc4OGViYTcwNGZl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwidm1fcGFpcl91YiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjMDZkNGUxOGVlNDc2OTJm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciYnVzX2kiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlukpKqImJ1c190eXBlIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjc1OTFiNDM1YzJmZDE2M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKsInZtX3BhaXJfbGIiqnRleHQvcGxhaW6ShaZwcmVmaXi1VHVwbGV7QW55LCBBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYWUwYzhlZThjOTg1NmQzZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pEJvb2yoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDY1MmIwZTdkMWNjMGVmNjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJ2bV9wYWlyX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4tVR1cGxle0FueSwgQW55LCBSZWFsfahlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGFiNGE3ZDQ1YzQwMTQ4ZTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJidXNfaSKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlukpKqImJ1c190eXBlIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGRhZDYwNzEwOGUyN2QyY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjNmJmZWY1NGZhYmI1NjVi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibmFtZSKqdGV4dC9wbGFpbpKuIjNidXNfZXhhbXBsZSKqdGV4dC9wbGFpbpKSpSJtYXAiqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTJjNzJiMjU0YWIxYzJlqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA5ZmRhMTg3Zjc2YWZiMjRmqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc4NWE4MjIzZTBlNjM0MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDU2Y2FmZDljZDM5NzkwMjmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK83NzJlYTYyNTIzMDkwZGOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzg3NDhlZDZlMWE5OGFjYqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM2YWE5NTA1YWFmNTJkYTepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBmZDc2OTA1YjgyZDdlMmZkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGRmOTY3YjAzOGZiMGVhMalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYjI3MzA1YTFmYjdjN2YwqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBhODlmOTlhNjc3YTEzNDM2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNWNhNjRkYzU2MjA2NzQ0ZqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDEwNTY1OWRhMTY1NWZjNTmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjIxNWMxMTExNjMyYTkxMKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2NmMmIxODQxNzkwZGYzZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlNjEyNmI1ZWQwMjA1ODM5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiNTkyMTdkOTQyM2FmMTdjqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDcxZmMzMzZiMjQwZWFiYzKpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlkr2Y1NGQ5NTAzNDE5NzJlYalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZTcyMGQyMDEzYmI5Y2JlZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLAxYTkyNjkzNTA3OTZlOWIypnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKvInNiYXNlX2RlZmF1bHQiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6SkrAidmJhc2VzX2RlZmF1bHQiqnRleHQvcGxhaW6ShaZwcmVmaXiyRGljdHtTdHJpbmcsIFJlYWx9qGVsZW1lbnRzkZKSoyIyIqp0ZXh0L3BsYWlukqcwLjIzMDk0qnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGMzN2NkOTlhZjQ3MWU2NTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6Skqcic2Jhc2UiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNTAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3Y2I4ZTIyNmU2YWQ0ZTI42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpCJwZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4OGM2YWY5NzdmMDJhN2M12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibW9kZWwiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjVkMzdmOTRiOTFlMzg2ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNodXRkb3duIqp0ZXh0L3BsYWlukqMwLjCqdGV4dC9wbGFpbpKSqSJzdGFydHVwIqp0ZXh0L3BsYWlukqMwLjCqdGV4dC9wbGFpbpKSryJjb25maWd1cmF0aW9uIqp0ZXh0L3BsYWlukrNXWUU6OkNvbm5Db25maWcgPSAwqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjkwNTk4ZWQzZjhlMzJiZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3MzI2NjU2NzUzODgzNTVk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgiYnJhbmNoIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpiJicl9yIqp0ZXh0L3BsYWluktluM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAxLjA5NDA2ICAgMC40Mzc4MTIgIDAuNDM3ODEyCiAwLjQzNzgxMiAgMS4wOTQwNiAgIDAuNDM3ODEyCiAwLjQzNzgxMiAgMC40Mzc4MTIgIDEuMDk0MDaqdGV4dC9wbGFpbpKSqCJyYXRlX2EiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjFmYTEwMTI1MTcxNWIwMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDhlOTNhYjAyOGE5ZWZkNWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJyYXRlX2IiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwY2IxY2M3ZjUwM2I3MDUxM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmIm5hbWUiqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlukpKmImJyX3giqnRleHQvcGxhaW6S2W8zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuNjI1MzEyICAwLjI1MDMxMiAgMC4yNTAzMTIKIDAuMjUwMzEyICAwLjYyNTMxMiAgMC4yNTAzMTIKIDAuMjUwMzEyICAwLjI1MDMxMiAgMC42MjUzMTKqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiMDhmYzJiOGNlOWZkNGZm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqYiYnJfciKqdGV4dC9wbGFpbpLZWzPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC45Mzc1ICAwLjM3NSAgIDAuMzc1CiAwLjM3NSAgIDAuOTM3NSAgMC4zNzUKIDAuMzc1ICAgMC4zNzUgICAwLjkzNzWqdGV4dC9wbGFpbpKSqCJyYXRlX2EiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDMzOTA5MGZmM2VlNmM4M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGFkZjIwZWQxNDk1YmZlYTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJyYXRlX2IiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZGZhZWQxYjYyY2RhMDg0MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmIm5hbWUiqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW6SkqYiYnJfeCKqdGV4dC9wbGFpbpLZbzPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC41NDY1NjIgIDAuMjE4NDM3ICAwLjIxODQzNwogMC4yMTg0MzcgIDAuNTQ2NTYyICAwLjIxODQzNwogMC4yMTg0MzcgIDAuMjE4NDM3ICAwLjU0NjU2Mqp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDg2NDgzNDFhZmExMDE0YTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6StyJ2b2x0YWdlX3NvdXJjZS5zb3VyY2UiqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDE3MjJkMzdmMDViODQ3ZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqE0qnRleHQvcGxhaW6SkqYiYnJfciKqdGV4dC9wbGFpbpLZgTPDlzMgTWF0cml4e0Zsb2F0NjR9OgogNC4wMDk2MWUtNyAgMy43MTU3MWUtOCAgMy43MTU3MWUtOAogMy43MTU3MWUtOCAgNC4wMDk2MWUtNyAgMy43MTU3MWUtOAogMy43MTU3MWUtOCAgMy43MTU3MWUtOCAgNC4wMDk2MWUtN6p0ZXh0L3BsYWlukpKmImJfZnIiqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbpKSqyJicl9zdGF0dXMiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhNTI1NTJmMzM3YzJjZmYw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk5MTM1MzEyMWZhNDc2YjLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJzdG9yYWdlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMmE3NTMwOTU0MjI1YzcwNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN3aXRjaCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5CkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDVlMGEzNjY3YTk5MjNiN2XZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJpc19wcm9qZWN0ZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSqiJwZXJfdW5pdCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKsImRhdGFfbW9kZWwiqnRleHQvcGxhaW6Su01BVEhFTUFUSUNBTDo6RGF0YU1vZGVsID0gMap0ZXh0L3BsYWlukpKnInNodW50Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGI5MDNjZjk4NDVjY2ViZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKtInRyYW5zZm9ybWVyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYmY1ZjI5NTZlYzNiZGJiM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKsImJ1c19sb29rdXAiqnRleHQvcGxhaW6ShaZwcmVmaXiwRGljdHtBbnksIEludDY0fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTg1YWQyNzgxZTMzYWYxONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiYWIxOGVhNzQ3YzZlM2Vj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SpCJsMiKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjODM3MzJmZmUyZDAwMzc12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTVlODZkMTdiOTUwZDI5MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzNDQ1MjQzNTNhZWUxMTQ22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3ZWY1N2VlM2QwNGM4NzBh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZGUwOWYwMmQyOTkzNzc5YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlNGZlYzRjYzFjNjE0MTcx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3YWE0YTgxMmM3YWFkZmY02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwODRlYjFlZmU3NzU1ZGI1N9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzN2FlYzA5MmRjOTlkYTYx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDgyNzRmOWRkZjIyNTY2MDKkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZaRtYXRosmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhtHunrBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkYTczNDhmYzgtYjI1ZS00ZWNmLTlmZTYtMzE0MDM2YjdkZjljuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAB2HerVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGY4ODJmMDcwLTc0YWYtNGYzYi05YWQxLWJkN2FkNDUzNzc4ZoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaASY8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgzPkJyYW5jaCBGbG93IGZvcm11bGF0aW9uczwvaDM+CjxwPlByZXZpb3VzbHksIHRvIHVzZSBhIGJyYW5jaCBmbG93IGZvcm11bGF0aW9uLCBzdWNoIGFzIDxjb2RlPlNPQ05MUFVCRlBvd2VyTW9kZWw8L2NvZGU+LCBpdCB3YXMgcmVxdWlyZWQgdG8gdXNlIGEgZGlmZmVyZW50IDxjb2RlPnNvbHZlXzwvY29kZT4gY29tbWFuZCwgYnV0IG5vdywgYnkgdXNpbmcgbXVsdGlwbGUgZGlzcGF0Y2ggd2UgaGF2ZSBzaW1wbGlmaWVkIHRoaXMgZm9yIHRoZSB1c2VyPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHzn+ouwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGY4ODJmMDcwLTc0YWYtNGYzYi05YWQxLWJkN2FkNDUzNzc4ZrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAFKLm1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmOKpnF1ZXVlZMKkbG9nc5WIpGxpbmX/o21zZ5LZSUNpcmN1aXQgaGFzIGJlZW4gcmVzZXQgd2l0aCB0aGUgJ2NsZWFyJyBvbiBsaW5lIDEgaW4gJ2Nhc2UzX2JhbGFuY2VkLmRzcyeqdGV4dC9wbGFpbqdjZWxsX2lk2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmOma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fZDI0YWVjMDCkZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlZQ29tbWFuZCAnY2FsY3ZvbHRhZ2ViYXNlcycgb24gbGluZSAzNiBpbiAnY2FzZTNfYmFsYW5jZWQuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmOma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlOQ29tbWFuZCAnc29sdmUnIG9uIGxpbmUgMzggaW4gJ2Nhc2UzX2JhbGFuY2VkLmRzcycgaXMgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcuqnRleHQvcGxhaW6nY2VsbF9pZNkkYWQ0OGIzYWQtZWRlMS00MTA5LTk2NDctMDA3YzFkOGQxOTZjpmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzc4OTIxNDk2pGZpbGXZUi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3NfcGFyc2UuamylZ3JvdXCpZHNzX3BhcnNlpWxldmVspEluZm+IpGxpbmX/o21zZ5LZXWJhc2VtdmE9MTAwIGlzIHRoZSBkZWZhdWx0IHZhbHVlLCB5b3UgbWF5IHdhbnQgdG8gYWRqdXN0IHNiYXNlX2RlZmF1bHQgZm9yIGJldHRlciBjb252ZXJnZW5jZap0ZXh0L3BsYWlup2NlbGxfaWTZJGFkNDhiM2FkLWVkZTEtNDEwOS05NjQ3LTAwN2MxZDhkMTk2Y6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl9hZjAyMTAwMKRmaWxl2VAvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzMmVuZy5qbKVncm91cKdkc3MyZW5npWxldmVspEluZm+IpGxpbmX/o21zZ5LZcmFzc3VtaW5nIHRpbWUgaXMgaW4gaG91cnMgZm9yIHRpbWVfZWxhcHNlZCBpbmZlcmVuY2UuIGlmIHRoaXMgaXMgaW5jb3JyZWN0LCBtYW51YWxseSBhZGp1c3Qgd2l0aCBzZXRfdGltZV9lbGFwc2VkIap0ZXh0L3BsYWlup2NlbGxfaWTZJGFkNDhiM2FkLWVkZTEtNDEwOS05NjQ3LTAwN2MxZDhkMTk2Y6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl8wMzYxMzM5ZqRmaWxl2VkvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9kYXRhX21vZGVsL211bHRpbmV0d29yay5qbKVncm91cKxtdWx0aW5ldHdvcmulbGV2ZWykSW5mb6dydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqYibmFtZSKqdGV4dC9wbGFpbpKuIjNidXNfZXhhbXBsZSKqdGV4dC9wbGFpbpKSpSJtYXAiqnRleHQvcGxhaW6ShaZwcmVmaXjZJ0RpY3R7U3RyaW5nLCBWZWN0b3J7RGljdHtTdHJpbmcsIEFueX19fahlbGVtZW50c5qSkqMiOCKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjRkOTI3MmU5ZjliYWIzM6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwM2ZhZGVmNjVjN2IxYWY1YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLA3NDFhMDYwNjMxMDFhYmFlpnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiNCKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzU5Nzg4ZjQyNTc1NjRkOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjNjOWRmOTkxMGRjYjZjMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLA3MmZmZDlhZWFmY2I0YzBmpnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiMSKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMmYxMDIxYTA1NjVkNGM3Y6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwY2M1ZDZkMDhlMWExY2FmNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLA2MjYxNzNkNThlMTFmNGM1pnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiNSKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjM3OTc1ODcyMzg3ZDljY6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZWI2MmNhMjcxZmVhMTgwZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLAyMjdiNGJjODhlMzgwM2Y4pnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTgwOGM4MTE2MGViYWVhOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTFmNjcwNzkwZDA1MDdkM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLA1N2I5Y2Y4MmY4NTkyMDYwpnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiNiKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTE4ZGM5N2M1MTQ3YTYxMalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOTE1NzVlNmQ2YzEwYjZiONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLBjNTZlNWZiZjUzYmViZjhmpnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiNyKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzg4YTNjMzI5ZmQ2YmRjNKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwY2M3NzI5ZjBlMjQ0OThkYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLA5ODg5NTAzM2Y5ZTg4N2Y5pnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqQiMTAiqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTJjNzJiMjU0YWIxYzJlqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA5ZmRhMTg3Zjc2YWZiMjRmqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc4NWE4MjIzZTBlNjM0MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDU2Y2FmZDljZDM5NzkwMjmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK83NzJlYTYyNTIzMDkwZGOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzg3NDhlZDZlMWE5OGFjYqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM2YWE5NTA1YWFmNTJkYTepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBmZDc2OTA1YjgyZDdlMmZkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGRmOTY3YjAzOGZiMGVhMalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYjI3MzA1YTFmYjdjN2YwqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBhODlmOTlhNjc3YTEzNDM2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNWNhNjRkYzU2MjA2NzQ0ZqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDEwNTY1OWRhMTY1NWZjNTmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjIxNWMxMTExNjMyYTkxMKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2NmMmIxODQxNzkwZGYzZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlNjEyNmI1ZWQwMjA1ODM5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiNTkyMTdkOTQyM2FmMTdjqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDcxZmMzMzZiMjQwZWFiYzKpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlksDc2NjhlZjViODcwNzcyMmWpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGUwZjkyMDUxMGI0NjdkNWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDlhMDVjZWRlNzE5YmNmZmKpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJzb3VyY2UiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmZmM3ODZhODZkYmJmZWU1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK/Il9tYXBfbWF0aDJlbmdfdm9sdGFnZV9zb3VyY2UhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sob2JqZWN0aWSwNGEyZDJhNDVkZDQwOWEyMqZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0kpKjIjkiqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTJjNzJiMjU0YWIxYzJlqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA5ZmRhMTg3Zjc2YWZiMjRmqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc4NWE4MjIzZTBlNjM0MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDU2Y2FmZDljZDM5NzkwMjmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK83NzJlYTYyNTIzMDkwZGOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzg3NDhlZDZlMWE5OGFjYqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM2YWE5NTA1YWFmNTJkYTepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBmZDc2OTA1YjgyZDdlMmZkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGRmOTY3YjAzOGZiMGVhMalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYjI3MzA1YTFmYjdjN2YwqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBhODlmOTlhNjc3YTEzNDM2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNWNhNjRkYzU2MjA2NzQ0ZqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDEwNTY1OWRhMTY1NWZjNTmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjIxNWMxMTExNjMyYTkxMKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2NmMmIxODQxNzkwZGYzZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlNjEyNmI1ZWQwMjA1ODM5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiNTkyMTdkOTQyM2FmMTdjqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDcxZmMzMzZiMjQwZWFiYzKpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlksGM4MWNlYjg0ZDY5NTAxNDOpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDg3YzNlOTA0ZDdkN2Y4YjPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDlhMDVjZWRlNzE5YmNmZmKpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJzb3VyY2UiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmZmM3ODZhODZkYmJmZWU1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK/Il9tYXBfbWF0aDJlbmdfdm9sdGFnZV9zb3VyY2UhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sob2JqZWN0aWSwODI5ZTUyNzdjZTE5NmJhZKZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTJjNzJiMjU0YWIxYzJlqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA5ZmRhMTg3Zjc2YWZiMjRmqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc4NWE4MjIzZTBlNjM0MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDU2Y2FmZDljZDM5NzkwMjmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK83NzJlYTYyNTIzMDkwZGOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzg3NDhlZDZlMWE5OGFjYqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM2YWE5NTA1YWFmNTJkYTepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBmZDc2OTA1YjgyZDdlMmZkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGRmOTY3YjAzOGZiMGVhMalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYjI3MzA1YTFmYjdjN2YwqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBhODlmOTlhNjc3YTEzNDM2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNWNhNjRkYzU2MjA2NzQ0ZqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDEwNTY1OWRhMTY1NWZjNTmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjIxNWMxMTExNjMyYTkxMKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2NmMmIxODQxNzkwZGYzZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlNjEyNmI1ZWQwMjA1ODM5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiNTkyMTdkOTQyM2FmMTdjqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDcxZmMzMzZiMjQwZWFiYzKpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlksGVlY2I2OGViN2VmOGYzNzipa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDVhM2YxNmZmN2Q3MzA3OWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDlhMDVjZWRlNzE5YmNmZmKpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJzb3VyY2UiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmZmM3ODZhODZkYmJmZWU1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK/Il9tYXBfbWF0aDJlbmdfdm9sdGFnZV9zb3VyY2UhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sob2JqZWN0aWSwM2EzMzU3NWMzZTJkZWE1YqZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4MjVlNjE4ZmNkMTJlNjg52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwiYnVzX2xvb2t1cCKqdGV4dC9wbGFpbpKFpnByZWZpeL9EaWN0e1N0cmluZywgRGljdHtTdHJpbmcsIEFueX19qGVsZW1lbnRzmpKSoyI4Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlZmQ3YTUxOTI4MDU2NjFh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvOTVmNmU0ZWRiMTUwNzk12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmFiMmZiZGNiZGJiZmU4ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY5Y2MwYjM5OWJlZTIwZTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjMzI2NDFjYWNlYTI2N2E22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWFkMDRiMmRmZGY2N2IyN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjciqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQwMWM2OWU0Yzg4ZWJiYTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCIxMCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZGNiOTMzNjE4MWM4NTUwZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDFmZWQ5ODI5ODgzMTRiYWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1ODEzNGJkMWY4N2NiZWNl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDMyODRhZjcwYWQ1Zjg1NjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJtdWx0aW5ldHdvcmsiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSpCJudyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5qSkqMiMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkrEiaXNfa3Jvbl9yZWR1Y2VkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6Skq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjhjNTI0YWYxYTgwZWNjZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiNGUxZDMxYzMyYzQwMmU12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDgzNTU1MzI4Y2ZhYjEzZWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDM1MGE3YzAyYjMxNjkxMjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK84MjEzNjBiNTk0MmQ3YzbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI0Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSsSJpc19rcm9uX3JlZHVjZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiYWIwYTAwY2JlOWY0OWVh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4idGltZV9lbGFwc2VkIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzY5Nzg1MzI1NjI1OTI2NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1MmJlZjgyYWVlODE4MjBj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0NDI2OTdlYjUxNDJlMjkx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTAxYjllZTk2OTM3Nzc0YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGVkMzdkMjhlYTM1NjgyNTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDk1ZDVmY2FkYmY5MDBjNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1MDkwNjc5NGVhMjEwMTVj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzMDU2ZWIyY2E5ZWMzMjU02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2VhYTIzYjdlNjU0NmM4MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGMzZjMxYWRkZDEwOWZkMDjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvNTE0ZThhMzUzMDI5MWIy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDdhY2VjZDAzYmU5ZGJkNGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFiNTYyMjE1MWY3YTQ2OGLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhOTIxNTA1YjFiNDJiY2Ri2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkrEiaXNfa3Jvbl9yZWR1Y2VkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6Skq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNWI5OGIzNmEwMDQ5Nzk0ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxYjgyMmZjNTAwMjkzZjVk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDg0N2E5YjdlZDFmNTIzNzfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDhjM2FmMDI1NjE5YWI4MTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2YzQ4MTExZWExOTAwZDk32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkrEiaXNfa3Jvbl9yZWR1Y2VkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6Skq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNWIwM2UwYThmZjY5YzQwNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjYWJkZDBhN2RlOTAyNzI42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY3MTc4ODFjOTcyZWY5NmbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDYzNjQwYmYyOGZkY2JmYTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmMTRlMDllMjJiOWMxYzBj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkrEiaXNfa3Jvbl9yZWR1Y2VkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6Skq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODExYjMyMjQ0YjhlMGY0MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkOTA2OTY2YWZiNmNlODRh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc5NTE5MTUyYmJhMmZlN2bZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDUzZGE2Zjg2ZjExNDkwNTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlMWVmYjRhZTBjZGY2M2I42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQiMTAiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYzM2UzM2FlOGZkMDhjNmLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjYwMzZkNzg5NTZhNWI4MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjYzAzMjllNmUxMDY0Y2Q22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4YWYxMDIwZjVmNDVhNzA42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYmY5OGJkOGM0ODMyMDE2ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDMzNGRhZTk3YWVlYjk0YjbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTczYzU2MDBmN2NiZWUwOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3ODRjNjViNWI5OTk0YzY52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1ZjYyMTJhZDg4MTc1ZDU12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjI0Y2UyY2I4ZDlhNjRhNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjgiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDM0YzIxYzhhYjFkYjFiNzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYmJkMjBkOWQzZmYzNmIyYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3YjMxZjgzZWJmNjc2N2Nm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2MjM2NDlkYjBjYmJjNTI02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjU4M2M5Y2Q5NDBiMjc0NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzNzJiYjNmN2I3NTcxZjFh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwiZGF0YV9tb2RlbCKqdGV4dC9wbGFpbpK7TUFUSEVNQVRJQ0FMOjpEYXRhTW9kZWwgPSAxqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNmNDVlYWUzYzc4YzY0MzKkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiG7jvNsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4A7z3CtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNTQyODA2OTYtYmVlYy00N2VlLTgxMTQtZWE5MzExYWNhOWViiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoFkzxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5UaGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIHRvIG5vdGljZSByaWdodCBhd2F5LiBGaXJzdCwgdGhlIGRhdGEgbW9kZWwgdHJhbnNmb3JtIGF1dG9tYXRpY2FsbHkgY29udmVydHMgdGhlIG1vZGVsIHRvIHBlci11bml0LiBTZWNvbmQsIHRoZXJlIGFyZSBhIGxvdCBvZiBlbXB0eSBjb21wb25lbnQgc2V0cywgd2hlcmVhcyBpbiB0aGUgPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+IG1vZGVsLCBvbmx5IGNvbXBvbmVudCB0eXBlcyB0aGF0IGhhZCBjb21wb25lbnRzIGluIHRoZW0gd2VyZSBsaXN0ZWQuIEluIHRoZSA8Y29kZT5NQVRIRU1BVElDQUw8L2NvZGU+IG1vZGVsIGNlcnRhaW4gY29tcG9uZW50IGRpY3Rpb25hcmllcyBhcmUgYWx3YXlzIGV4cGVjdGVkIHRvIGV4aXN0LCBhbmQgdGhlIDxjb2RlPmVuZzJtYXRoPC9jb2RlPiBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGUgdGhlc2UuPC9wPgo8cD5OZXh0LCB0aGVyZSBhcmUgYSBmZXcgdW51c2FsIGZpZWxkcywgc3VjaCBhcyA8Y29kZT4mcXVvdDtzZXR0aW5ncyZxdW90OzwvY29kZT4sIHdoaWNoIHByZXZpb3VzbHkgZGlkbiYjMzk7dCBleGlzdCBpbiB0aGUgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBtb2RlbC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgcGVyLXVuaXQgY29udmVyc2lvbiBzcGVjaWZpY2FsbHkgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uIEFsc28sIGlzIHRoZSA8Y29kZT4mcXVvdDttYXAmcXVvdDs8L2NvZGU+IGZpZWxkLCB3aGljaCBpcyBhIDxjb2RlPlZlY3RvcjwvY29kZT4gb2YgRGljdGlvbmFyaWVzIHRoYXQgZW5hYmxlIHRoZSBjb252ZXJzaW9uIGJhY2sgdG8gPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+IGZyb20gPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPi4gV2l0aG91dCB0aGlzIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gY29udmVydCBiYWNrLCBhbmQgaW4gZmFjdCBvbmx5IHRoZSBzb2x1dGlvbiBjYW4gYmUgY29udmVydGVkLCBiZWNhdXNlIHNvbWUgcHJvcGVydGllcyBhcmUgY29tYmluZWQgZGVzdHJ1Y3RpdmVseSBkdXJpbmcgdGhlIGNvbnZlcnNpb24gdG8gdGhlIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4gbW9kZWwsIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIHJldmVyc2UgZW5naW5lZXJlZC4gSG93ZXZlciwgc2luY2UgdGhlIGNvbnZlcnNpb24gdG8gPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBpcyBub3QgaW4tcGxhY2UsIHlvdSB3aWxsIGFsd2F5cyBoYXZlIGEgY29weSBvZiA8Y29kZT5lbmc8L2NvZGU+IGFsb25nc2lkZSA8Y29kZT5tYXRoPC9jb2RlPi48L3A+CjxwPkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBvbmUgb2YgdGhlIDxjb2RlPiZxdW90O21hcCZxdW90OzwvY29kZT4gZW50cmllczwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiG0me6sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ1NDI4MDY5Ni1iZWVjLTQ3ZWUtODExNC1lYTkzMTFhY2E5ZWK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ACGIftXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkOGIwNjYwMzktZWQ2NS00NjE3LWI0MDQtODY5NTJkM2ZjNzhliqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSpCJ2YSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqktMC40ODQyMziqdGV4dC9wbGFpbpICkqgtMTIwLjI0M6p0ZXh0L3BsYWlukgOSpzEyMC4yNzSqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjliM2ZmMjk2NGI0MjU2N9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSqDAuMjIyNTIxqnRleHQvcGxhaW6SApKoMC4yMjY3MjeqdGV4dC9wbGFpbpIDkqgwLjIyNTU3N6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlZTEzZGY5MGNkNzNkNWU22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDJjNzY0OTFhYzVhZDc1NjWkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsh84dW/sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ4YjA2NjAzOS1lZDY1LTQ2MTctYjQwNC04Njk1MmQzZmM3OGW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1bBLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGM1NWIyYzQyLTlkMjctMTFlYi0yNGNhLWU5MGE1NDcyZmZiYoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaAho8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgxPkludHJvZHVjdGlvbiB0byB0aGUgUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gRGF0YSBNb2RlbHM8L2gxPgo8cD5JbiB0aGlzIG5vdGVib29rIHdlIGludHJvZHVjZSB0aGUgZW5naW5lZXJpbmcgZGF0YSBtb2RlbCBhZGRlZCB0byBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiBpbiB2ZXJzaW9uIHYwLjkuMC4gV2Ugd2lsbCBnaXZlIHNldmVyYWwgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSB0aGlzIG5ldyBkYXRhIG1vZGVsIGRpcmVjdGx5LCBpbmNsdWRpbmcgbmV3IHRyYW5zZm9ybWF0aW9ucyB0aGF0IGhhdmUgYmVjb21lIGVhc2llciB3aXRoIGl0cyBpbnRyb2R1Y3Rpb24sIGhvdyB0byBjb252ZXJ0IGl0IHRvIHRoZSB0aGUgbG93ZXItbGV2ZWwgbWF0aGVtYXRpY2FsIG1vZGVsIHRoYXQgd2FzIHByZXZpb3VzbHkgdGhlIG9ubHkgdXNlciBpbnRlcmZhY2Ugd2Ugb2ZmZXJlZCwgYW5kIGhvdyB0byBnZXQgdmFyaW91cyB0eXBlcyBvZiByZXN1bHRzIHVzaW5nIHRoaXMgbmV3IG1vZGVsLjwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQshrc7COsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRjNTViMmM0Mi05ZDI3LTExZWItMjRjYS1lOTBhNTQ3MmZmYmK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4Fa9mMtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkN2U1ODExY2YtODZhMi00M2ZiLThjOTQtNDQwOTFmMzNjMDMxiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoCpDxkaXYgY2xhc3M9Im1hcmtkb3duIj48dWw+CjxsaT48cD48Y29kZT4mcXVvdDt2bSZxdW90OzwvY29kZT4gLSBzcGVjaWZpZXMgdGhlIGZpeGVkIHZvbHRhZ2UgbWFnbml0dWRlcyBwZXIgcGhhc2UgYXQgdGhlIGJ1czwvcD4KPC9saT4KPGxpPjxwPjxjb2RlPiZxdW90O3ZhJnF1b3Q7PC9jb2RlPiAtIHNwZWNpZmllcyB0aGUgZml4ZWQgcmVmZXJlbmNlIGFuZ2xlcyBwZXIgcGhhc2VzIGF0IHRoZSBidXM8L3A+CjwvbGk+CjxsaT48cD48Y29kZT4mcXVvdDtycyZxdW90OzwvY29kZT4gYW5kIDxjb2RlPiZxdW90O3hzJnF1b3Q7PC9jb2RlPiBzcGVjaWZpZXMgaW50ZXJuYWwgaW1wZWRhbmNlcyBvZiB0aGUgdm9sdGFnZSBzb3VyY2U8L3A+CjwvbGk+CjwvdWw+CjxoMz5JbXBvcnRpbmcgcmF3IGRzcyBwcm9wZXJ0aWVzPC9oMz4KPHA+SW4gY2FzZSB0aGVyZSBhcmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgeW91IHdhbnQgdG8gdXNlIGZyb20gZHNzLCBpdCBpcyBwb3NzaWJsZSB0byBpbXBvcnQgdGhvc2UgZGlyZWN0bHkgaW50byB0aGUgPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+ICYjNDA7YW5kIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4mIzQxOyBkYXRhIHN0cnVjdHVyZSB3aXRoIHRoZSA8Y29kZT5pbXBvcnRfYWxsPC9jb2RlPiBrZXl3b3JkIGFyZ3VtZW50PC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHIUpFmwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDdlNTgxMWNmLTg2YTItNDNmYi04Yzk0LTQ0MDkxZjMzYzAzMblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgCw4Ry1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQyN2Q1YTIzNy00YzJlLTRiMTQtYTA4Mi1mNDg0NzE1M2M4ZDWKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKwInZvbHRhZ2Vfc291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqCJzb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKoInFnX2J1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiNDE0Y2M3YWQ0ZTRhMDg32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicWciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDA3YTVmMTI4ZGFmYzk4NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInBnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDE3ZDlmZGMxOWM2ZjA1M2LZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZ19idXMiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjJkNTAxOGNkMjY0MjliMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlNmMzMmM0NWJkNjg0NmEw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzI3MzE2NTg3NGM5MWI3ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKmInF1YWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKkInFmIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGYyNTFiM2I0ZDE1ZTQ4Y2XZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJxdCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkZTU1YTA2OGE5NjVlNDY22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicHQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwM2U2NDlmOGRlOTg0MGMyYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInBmIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGU5ZDhkN2U1YzA2YzgwNmPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2VlOTgyNjEwYTU0M2NlN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoIm9obGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqQicWYiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYjIzMWIwNDY1MTFlMmZkNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInF0Iqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU4ZWQyOTAwMWU5NTI0YzPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJwdCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4MjNlYmJkMTcxMzg0ZTRk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicGYiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmE3ZTE3OGY0MWI3MDQxZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3OGM3M2U2NDVlMGZlZTgz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDMyM2NmZTlkNTBmYjZkMGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqcic2Jhc2UiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQ5NDE1MmVhZmVkNzljODHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsb2FkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSpCJsMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqgicWRfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYwODMxMGE2MjU0MGE1YTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9idXMiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzFlZTU4MTQ2ODE3MzMyNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInFkIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDE5ZDFkNWE3MTdkZWFjNTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJwZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4N2VjZmQyZGY0MTUwNDlh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDM0YWVmYzJlZDVkOTcxNTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqgicWRfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDMzNGZhYzE2Y2FkYTYwZmTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9idXMiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTM5OTA2NzVhYjZkMTQ3NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInFkIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRlZTAzZTkyODFmYjgzM2PZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJwZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3NGM5NWY1ZjRkY2RjZTBk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQzYmQ3ZjQ4ZjNmNjBiYTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqgicWRfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDVlNGYzMTVhYTBkOTcxM2PZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9idXMiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNGU0NzI4NzgwMGM5NWUxYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInFkIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDk5YzFjMGNmMTdiZThkODTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJwZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4N2U1ZjhkYTc0MDcwNmE32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGE2MGMyNTI2Yjg5MzUyYTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjE3NzAyZGMyZjY5OWJlM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNmY0MTkzZmFjZmNmN2JhY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDgzMzkyNDZkNzdiZTlhYTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZWMxZjEwYjM0NGZmMDkxM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMWYwODg2NjUyZjVkM2NhYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDJjMTZlOWY3NDk3YTAxZWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTRkYmJlZWY5Njc4NjMxNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpImxvYWRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKkInZhIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGY5YjNmZjI5NjRiNDI1NjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ2bSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlZTEzZGY5MGNkNzNkNWU22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDJjNzY0OTFhYzVhZDc1NjXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjlkNmNhN2JlMDZlYjAxONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhYWRmZTkxMmM2NDNmNDJmpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIfODBQLBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMjdkNWEyMzctNGMyZS00YjE0LWEwODItZjQ4NDcxNTNjOGQ1uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXNMyy1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRkMGUwMmVlNS1mNTdjLTQyODYtOTQwZC1iMDEwOTdjODQwYmWKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gFNPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPllvdSBjYW4gc2VlIHRoYXQgdW5kZXIgdGhlIGFjdHVhbCBjb21wb25lbnQsIGluIHRoaXMgY2FzZSBhIDxjb2RlPiZxdW90O2xvYWQmcXVvdDs8L2NvZGU+LCB0aGF0IHRoZXJlIGlzIGEgPGNvZGU+JnF1b3Q7dGltZV9zZXJpZXMmcXVvdDs8L2NvZGU+IGRpY3Rpb25hcnkgdGhhdCBjb250YWlucyA8Y29kZT5FTkdJTkVFUklORzwvY29kZT4gbW9kZWwgdmFyaWFibGUgbmFtZXMgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIGlkZW50aWZpZXJzIG9mIGEgcm9vdC1sZXZlbCA8Y29kZT50aW1lX3NlcmllczwvY29kZT4gb2JqZWN0LDwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQshyrPcOsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRkMGUwMmVlNS1mNTdjLTQyODYtOTQwZC1iMDEwOTdjODQwYmW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABKXctXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkOGJhMDgxYjQtODQ0NC00OGUwLWFmY2UtMjA2NDlmN2ZkZDAxiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkZIBkqMwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTUwNjNlOGI2YzhmODBmM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkZIBkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGM1NjFiYjEzMmQ0Njg3NWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOUkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlukgSSoTSqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDQ0MjhkNTdlZDJlZmFlZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORkgGSozAuMKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3YmJlMTk3MjE5ZmYzN2Qx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGYzNmZmN2FhYTBiNTM3YTakbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQshx/7LusHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ4YmEwODFiNC04NDQ0LTQ4ZTAtYWZjZS0yMDY0OWY3ZmRkMDG5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1ftLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDJjMzU4ZDdhLTVkODQtNGY2Mi1hMTQ3LTU3N2JiNzc1YWM3ZoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZ/jxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5XZSBjYW4gc2VlIHRoYXQgJnF1b3Q7bm9sb2FkbG9zcyZxdW90OywgJnF1b3Q7cncmcXVvdDssIGFuZCAmcXVvdDtpbWFnJnF1b3Q7IGFyZSBub24temVybywgYnV0IGlmIHdlIGFwcGx5IHRoZSBtYWtlX2xvc3NsZXNzJiMzMzsgZnVuY3Rpb24gd2UgY2FuIHNlZSB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gemVybywgZWZmZWN0aXZlbHkgZWxpbWluYXRpbmcgdGhlIGxvc3NlczwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiGO4hZsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQyYzM1OGQ3YS01ZDg0LTRmNjItYTE0Ny01NzdiYjc3NWFjN2a5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4BzaKRtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZTIyYTdkM2UtM2YyMS00MWIwLWFiZjItMmM3MjNlODdjNTdliqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoBujxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDI+UGFyc2luZyBEYXRhPC9oMj4KPHA+SGVyZSB3ZSBnaXZlIHRoZSBmaXJzdCBleGFtcGxlIG9mIGhvdyB0byBwYXJzZSBkYXRhIGludG8gdGhlIDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBkYXRhIG1vZGVsIHN0cnVjdHVyZSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgZGF0YSBzdHJ1Y3R1cmUgdHlwZSB0aGF0IHRoZSB1c2VyIHdpbGwgc2VlIHdpdGhvdXQgcGFzc2luZyBhZGRpdGlvbmFsIGFyZ3VtZW50cywgYXMgd2UgZGVtb25zdHJhdGUgbGF0ZXIuPC9wPgo8cD5XZSBzdGFydCB3aXRoIGEgMyBidXMgdW5iYWxhbmNlZCBsb2FkIGNhc2UgcHJvdmlkZWQgYXMgYSBkc3MgZmlsZSBpbiB0aGUgPGNvZGU+dGVzdDwvY29kZT4gZm9sZGVyIG9mIHRoZSBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi5qbCByZXBvc2l0b3J5PC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyGv/6quwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGUyMmE3ZDNlLTNmMjEtNDFiMC1hYmYyLTJjNzIzZTg3YzU3ZblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAGYTq1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQyYThjMTUzNi1lZjVmLTRlMzctYjMwZS0xYmI3Mzk4MmQ3YjCKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gL+PGRpdiBjbGFzcz0ibWFya2Rvd24iPjx1bD4KPGxpPjxwPjxjb2RlPiZxdW90O3Rlcm1pbmFscyZxdW90OzwvY29kZT4gaW5kaWNhdGVzIHdoaWNoIHRlcm1pbmFscyBvbiB0aGUgYnVzIGhhdmUgYWN0aXZlIGNvbm5lY3Rpb25zPC9wPgo8L2xpPgo8bGk+PHA+PGNvZGU+JnF1b3Q7Z3JvdW5kZWQmcXVvdDs8L2NvZGU+IGluZGljYXRlcyB3aGljaCB0ZXJtaW5hbHMgYXJlIGdyb3VuZGVkPC9wPgo8L2xpPgo8bGk+PHA+PGNvZGU+JnF1b3Q7cmcmcXVvdDs8L2NvZGU+IGFuZCA8Y29kZT4mcXVvdDt4ZyZxdW90OzwvY29kZT4gaW5kaWNhdGUgdGhlIGdyb3VuZGluZyByZXNpc3RhbmNlIGFuZCByZWFjdGFuY2Ugb2YgdGhlIGdyb3VuZDwvcD4KPC9saT4KPGxpPjxwPjxjb2RlPiZxdW90O3N0YXR1cyZxdW90OzwvY29kZT4gaW5kaWNhdGVzIHdoZXRoZXIgYSBidXMgaXMgPGNvZGU+RU5BQkxFRDwvY29kZT4gb3IgPGNvZGU+RElTQUJMRUQ8L2NvZGU+LCBhbmQgaXMgc3BlY2lmaWVkIGZvciBldmVyeSBjb21wb25lbnQgaW4gdGhlIGVuZ2luZWVyaW5nIG1vZGVsPC9wPgo8L2xpPgo8L3VsPgo8cD5OZXh0LCB3ZSBsb29rIGF0IHRoZSA8Y29kZT4mcXVvdDtsaW5lJnF1b3Q7PC9jb2RlPiBjb21wb25lbnRzLCB3aGljaCBpcyBhIGdlbmVyaWMgbmFtZSBmb3IgYm90aCBvdmVyaGVhZCBsaW5lcyBhbmQgdW5kZXJncm91bmQgY2FibGVzLCB3aGljaCB3ZSBkbyBub3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGluIHRoZSBub21lbmNsYXR1cmU8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIcgA3DbBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMmE4YzE1MzYtZWY1Zi00ZTM3LWIzMGUtMWJiNzM5ODJkN2IwuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAuqYLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MIqmcXVldWVkwqRsb2dzk4ikbGluZf+jbXNnktlJQ2lyY3VpdCBoYXMgYmVlbiByZXNldCB3aXRoIHRoZSAnY2xlYXInIG9uIGxpbmUgMSBpbiAndXRfdHJhbnNfMndfeXkuZHNzJ6p0ZXh0L3BsYWlup2NlbGxfaWTZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MKZrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl9kMjRhZWMwMKRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2VlDb21tYW5kICdjYWxjdm9sdGFnZWJhc2VzJyBvbiBsaW5lIDM1IGluICd1dF90cmFuc18yd195eS5kc3MnIGlzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nLqp0ZXh0L3BsYWlup2NlbGxfaWTZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MKZrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl83ODkyMTQ5NqRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2U5Db21tYW5kICdzb2x2ZScgb24gbGluZSAzOCBpbiAndXRfdHJhbnNfMndfeXkuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SQ3YTg2ZTI2ZC1mZGY2LTQxYjYtYjFkZC1kYzBjNGE4ZTlkNTCma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb6dydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5qSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKoInNvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukrAidnNvdXJjZS5zb3VyY2UiqnRleHQvcGxhaW6SkqQicnMiqnRleHQvcGxhaW6S2dU0w5c0IE1hdHJpeHtGbG9hdDY0fToKIDEuNjk3NjNlLTcgIDEuNTczMTllLTggIDEuNTczMTllLTggIDEuNTczMTllLTgKIDEuNTczMTllLTggIDEuNjk3NjNlLTcgIDEuNTczMTllLTggIDEuNTczMTllLTgKIDEuNTczMTllLTggIDEuNTczMTllLTggIDEuNjk3NjNlLTcgIDEuNTczMTllLTgKIDEuNTczMTllLTggIDEuNTczMTllLTggIDEuNTczMTllLTggIDEuNjk3NjNlLTeqdGV4dC9wbGFpbpKSpCJ2YSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK83OTk0MGEwZjVjY2RhNTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYWNkZTQ1NzNjMDU3NDg5OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDM3ZWU1MTUxNTY3NmY1ZmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4NzFmZDY5YWVjNzE3YWI42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc1ZGI3Y2I3NDllOGMxODnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJuYW1lIqp0ZXh0L3BsYWlukqoidXRfdHJhbnMiqnRleHQvcGxhaW6SkqYibGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqcibGluZTIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKnImNtX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI4MDdlMTliYTA5YzZiZDDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4cyKqdGV4dC9wbGFpbpLZXTPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4zMzQ5ICAwLjAzNDkgIDAuMDM0OQogMC4wMzQ5ICAwLjMzNDkgIDAuMDM0OQogMC4wMzQ5ICAwLjAzNDkgIDAuMzM0Oap0ZXh0L3BsYWlukpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQ5ZjBjODY3ZTQ2ZTM1YTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKmImdfdG8iqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyYmE3NTU3YTg3ZGI1NDVj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibGluZTEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKnImNtX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGE0NjdmYTdjZjk1YzJlODPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4cyKqdGV4dC9wbGFpbpLZZjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogIDIuMTM0OSAgLTAuODY1MSAgLTAuODY1MQogLTAuODY1MSAgIDIuMTM0OSAgLTAuODY1MQogLTAuODY1MSAgLTAuODY1MSAgIDIuMTM0Oap0ZXh0L3BsYWlukpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDJmYzU3MTJiMTAxNmFiYjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKmImdfdG8iqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3NGM2YjEwMTlhMTk5ZDIx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGY2ZjAzNmE1MWU2YzI4MjLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRlM2I4ZTZjODMxMTZiYTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkq8ic2Jhc2VfZGVmYXVsdCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkrAidmJhc2VzX2RlZmF1bHQiqnRleHQvcGxhaW6ShaZwcmVmaXiyRGljdHtTdHJpbmcsIFJlYWx9qGVsZW1lbnRzkZKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SpzYuMzUwODWqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTQ5MjhhMTAzOGY2Y2FiZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpK2InZvbHRhZ2Vfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKStCJwb3dlcl9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpKwImJhc2VfZnJlcXVlbmN5Iqp0ZXh0L3BsYWlukqQ2MC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDkxZjM0MTUxZThkY2ZjZjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmaWxlcyKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHORkgGS2SkiLi4vdGVzdC9kYXRhL29wZW5kc3MvdXRfdHJhbnNfMndfeXkuZHNzIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxNWYxNzZlMzEyNGJkMTBl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq0idHJhbnNmb3JtZXIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKlInR4MSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqoicG9sYXJpdHkiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrzYyOWYxZWU3MzhjNTg2ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInNtX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjZDI2NTlhNWNhZDFhNjY42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidG1fbGIiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiNzAzMWI5MTUxMWVkNWY02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXitVmVjdG9ye0ludDY0fahlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODdlZjllZmU2MWUyM2QwZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInRtX3NldCKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU5NTQzYmZhMTkzN2IyZTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJ0bV9zdGVwIqp0ZXh0L3BsYWlukoWmcHJlZml4r1ZlY3RvcntGbG9hdDY0fahlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZTI2YTc0Mzg5NmQ3ZDRlYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGNiZTdjZWUwNDhkMzc3ZjXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvOTI0Y2U4OWY5ODIwZTEw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkqcibG9hZDMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDMiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGFlMGI2ZjYyOWRiMDgyM2bZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNmY2NTU2ZTNiY2ZlMDViZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKlNi41MzGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlZTVjN2ViNDNhZWJiYjk52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibG9hZDYiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDYiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDk5MjFiNmIxZjNkOWM3Y2XZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMWIxODczOWExNDYzYTYwNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKjMi4zqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNmJjODExYTAzNWMzNWVhYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQyIqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK82ZDM4ZGIxNGYzYWQyMWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTEzMTZkODAyMDk1ZTVmZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKlNi41MzGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyM2E4NWUwOTI1ODFjM2E22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibG9hZDUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDUiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNiZmQ5YTc0Yjk4Yzk5ZjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwY2I1ZGNjOTk3NGVjYjA3Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKjMi4zqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOTNhNzgyMzQwNTgwMmUwMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQxIqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmMTQ4NDkzMWE0NzE0ZmZj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDZhNTU2NjQ2MzJkYzJiNzfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SpTYuNTMxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmNhYzViMzY1NzhhNGEwMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQ0Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQ0Iqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlYTdlNTkzNTE2ZGE4OTdm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDZiZTEyMGM1MzVmZDdjZTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SozIuM6p0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGRmZmZhZWJjOWUzYWE3MjbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjNlMTVhYmRhNWY1ODFhNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNzg5MzRjMWJiMmZkZWQ0MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4YjFmNmE1ZWQ4MTYyODZj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2MmJmZGEzYmEzYjQyNzc22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZWVhYmVkYjAxZjJmZmJmZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxMzk2OTY3ZjZlMTQxYjMy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkYjUxYzkwODc4N2NkZDJh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDgwZDNmODI0NDM4MTM2NzPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQ3NjRlMTE4MGNmZTQ1YzHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0NmM1YzNlODRmNjRkMDNj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGQ0MmI0Yzk3ZWYzZDhhZTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjOTE0YzIyYTUzZmVjMGYy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRhNGU2NTUwZDY2YzRmMWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDUwNmE5MzI4ZmYwOTdmNjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4NTRlYjNmMmNjNzJhNWNj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDg2NzAzYmI4ZDNjNzc4NmLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmN2MyNDkwMWIxNWExNzVj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGE5OTdmOTY4MTUwNTQ3YmXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDQ1ZmZmYzU3ZWEzNDRjYTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2Y2IxNWVkYjFiMzg0MDBk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzcxYTU5ZDZkNTFiYjAxOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyNTRiODViNzkxN2RmOTBl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwiZGF0YV9tb2RlbCKqdGV4dC9wbGFpbpK6RU5HSU5FRVJJTkc6OkRhdGFNb2RlbCA9IDCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzAzZDYzZjYyNTcxMzgxN6RtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlpmVuZ191dLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyIYvONqwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzlEb2T+1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRmMzQ1OGE1Yy03MGM2LTRkMGMtODI1My00ZmViMGM4N2VlNzaKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gF8PGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMz5UaW1lIFNlcmllcyBQYXJzaW5nIEV4YW1wbGU8L2gzPgo8cD5JbiB0aGUgPGNvZGU+RU5HSU5FRVJJTkc8L2NvZGU+IG1vZGVsLCB3ZSBoYXZlIGluY2x1ZGVkIHRoZSA8Y29kZT50aW1lX3NlcmllczwvY29kZT4gZGF0YSB0eXBlLCB3aGljaCBob2xkcyBhbGwgdGltZSBzZXJpZXMgZGF0YSBhbmQgY2FuIGJlIHJlZmVycmVkIHRvIHNpbWlsYXIgdG8gPGNvZGU+JnF1b3Q7bGluZWNvZGUmcXVvdDs8L2NvZGU+IGFzIGRlbW9uc3RyYXRlZCBhYm92ZS48L3A+CjxwPkJlbG93IHdlIGNhbiBzZWUgYW4gZXhhbXBsZSBvZiBhIHBhcnNlIHRoYXQgaW5jbHVkZXMgc29tZSB0aW1lX3NlcmllcyBjb21wb25lbnRzPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHIlgf6wcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGYzNDU4YTVjLTcwYzYtNGQwYy04MjUzLTRmZWIwYzg3ZWU3NrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAGIrm1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ1NDQxMDhkMS1kMWE3LTRkYzYtOWEzYy02YTEwMDI1Y2I4YTOKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gGbPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMz5SdW5uaW5nIFRpbWUgU2VyaWVzIE1vZGVsczwvaDM+CjxwPkJ5IGRlZmF1bHQsIDxjb2RlPnRpbWVfc2VyaWVzPC9jb2RlPiBvYmplY3Qgd2lsbCBiZSBpZ25vcmVkIHdoZW4gcnVubmluZyBhIG1vZGVsLiBUbyB1c2UgdGhlIHRpbWUgc2VyaWVzIGluZm9ybWF0aW9uIHlvdSB3aWxsIG5lZWQgdG8gaGF2ZSBhIG11bHRpbmV0d29yayBwcm9ibGVtIHNwZWNpZmljYXRpb248L3A+CjxwPkluIHRoZSBleGFtcGxlIGJlbG93IHdlIHVzZSBhIHRlc3QgY2FzZSwgd2hpY2ggaXMgbm90IGV4cG9ydGVkIGJ5IGRlZmF1bHQsIGFuZCB0aGVyZWZvcmUgcmVxdWlyZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIG5hbWVzcGFjZTwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiEQHgpsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ1NDQxMDhkMS1kMWE3LTRkYzYtOWEzYy02YTEwMDI1Y2I4YTO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABiXatXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZjMwY2QwZDAtYjBkYS00ZjYzLWEyNDUtNTY4YTc2M2E5M2Q4iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keaCkbWltZap0ZXh0L3BsYWlurHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQshqk0BfsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRmMzBjZDBkMC1iMGRhLTRmNjMtYTI0NS01NjhhNzYzYTkzZDi5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc8AAAABi2Hj8LVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1OYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeNkoTWF0aE9wdEludGVyZmFjZS5PcHRpbWl6ZXJXaXRoQXR0cmlidXRlc6hlbGVtZW50c5KStW9wdGltaXplcl9jb25zdHJ1Y3RvcpKvSXBvcHQuT3B0aW1pemVyqnRleHQvcGxhaW6SpnBhcmFtc5KFpnByZWZpeNk2UGFpcntNYXRoT3B0SW50ZXJmYWNlLkFic3RyYWN0T3B0aW1pemVyQXR0cmlidXRlLCBBbnl9qGVsZW1lbnRzkpIBkoOkdHlwZaRQYWlyqG9iamVjdGlksGY3ZGQzM2E2MmJlMjcwNzOpa2V5X3ZhbHVlkpKFpnByZWZpeLVSYXdPcHRpbWl6ZXJBdHRyaWJ1dGWoZWxlbWVudHORkqRuYW1lkqUidG9sIqp0ZXh0L3BsYWlupHR5cGWmc3RydWN0rHByZWZpeF9zaG9ydLVSYXdPcHRpbWl6ZXJBdHRyaWJ1dGWob2JqZWN0aWSwNTRhNWU1M2VmMjA0MWU1ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kqYxLjBlLTaqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKSg6R0eXBlpFBhaXKob2JqZWN0aWSwMWM2NGMxMTFlNjA0OTRhZalrZXlfdmFsdWWSkoWmcHJlZml4tVJhd09wdGltaXplckF0dHJpYnV0ZahlbGVtZW50c5GSpG5hbWWSrSJwcmludF9sZXZlbCKqdGV4dC9wbGFpbqR0eXBlpnN0cnVjdKxwcmVmaXhfc2hvcnS1UmF3T3B0aW1pemVyQXR0cmlidXRlqG9iamVjdGlksGI4NmZlOTljMzkyMGQ2NjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKhMKp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGNiYmRiYTQzM2VlMDRjNDLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpnN0cnVjdKxwcmVmaXhfc2hvcnS3T3B0aW1pemVyV2l0aEF0dHJpYnV0ZXOob2JqZWN0aWSwM2Y1YjExOTk1NjliNzc1NKRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlrGlwb3B0X3NvbHZlcrJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyGv/dSGwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1OblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgJYuQK1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ4M2NlNDM0Yy0wZjkyLTQ2YTgtODY0OC0zMjIwODQwNDQ2MDCKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKmInF1YWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOYkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5OSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQ1ZjhlOGEyZjkxY2FiYWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW6Skqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqsibGluZS5xdWFkIqp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnInRfYnVzIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSqiJsaW5lY29kZSKqdGV4dC9wbGFpbpKpIjQvMHF1YWQiqnRleHQvcGxhaW6Skq8iZl9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5OSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDEzYzQzYWVhZjRiMzVmZDLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZWYyYmY0MGE5YTllMTA3YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoIm9obGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5iSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzk5IBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvZGFhM2EyNjU1N2IwZGI52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZl9idXMiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6Skqsic291cmNlX2lkIqp0ZXh0L3BsYWlukq0ibGluZS5vaGxpbmUiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcidF9idXMiqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukpKqImxpbmVjb2RlIqp0ZXh0L3BsYWlukqgiNTU2bWNtIqp0ZXh0L3BsYWlukpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOTkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjZTMzZWViM2Q2OGU3MTZk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDU3Y2ZhZGViZTljNWZjMDfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGFiZWE5N2FjZmEyZjg2OaRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHIJ5S6wcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDgzY2U0MzRjLTBmOTItNDZhOC04NjQ4LTMyMjA4NDA0NDYwMLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzTd5tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNDVjMzIwZGQtZTBiMi00NmVjLWFmMDktZDgzZTU2NTIwMjZkiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRz3AASkpKqInBvbGFyaXR5Iqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkpIBkqExqnRleHQvcGxhaW6SApKhMap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK82MjlmMWVlNzM4YzU4NmTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzbV9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5KSAZKlNTAwLjCqdGV4dC9wbGFpbpICkqU1MDAuMKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjZDI2NTlhNWNhZDFhNjY42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidG1fbGIiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkpIBkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSozAuOap0ZXh0L3BsYWlukgKSozAuOap0ZXh0L3BsYWlukgOSozAuOap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjM2U4Nzk5M2YzMDhlODZk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqMwLjmqdGV4dC9wbGFpbpICkqMwLjmqdGV4dC9wbGFpbpIDkqMwLjmqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzNlODc5OTNmMzA4ZTg2ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiNzAzMWI5MTUxMWVkNWY02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXitVmVjdG9ye0ludDY0fahlbGVtZW50c5KSAZKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5SSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6SBJKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkNWU2NDk4MDk3ODVlOWI22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5SSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6SBJKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1YWU2NzAxZWExODYxYTQw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDg3ZWY5ZWZlNjFlMjNkMGbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ0bV9zZXQiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkpIBkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSpDEuMDKqdGV4dC9wbGFpbpICkqQxLjAyqnRleHQvcGxhaW6SA5KkMS4wMqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4NTVkMmQ4M2ZhNWNmNDQ22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqQwLjk3qnRleHQvcGxhaW6SApKkMC45N6p0ZXh0L3BsYWlukgOSpDAuOTeqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZTQyM2Y1MGUzMzdmNjgxOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1OTU0M2JmYTE5MzdiMmUz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkidG1fc3RlcCKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHOSkgGShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKnMC4wMzEyNap0ZXh0L3BsYWlukgKSpzAuMDMxMjWqdGV4dC9wbGFpbpIDkqcwLjAzMTI1qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI1OTlmMzVlNTI3YzdhMWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSpzAuMDMxMjWqdGV4dC9wbGFpbpICkqcwLjAzMTI1qnRleHQvcGxhaW6SA5KnMC4wMzEyNap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiNTk5ZjM1ZTUyN2M3YTFh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGUyNmE3NDM4OTZkN2Q0ZWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzkpIBkqMiMSKqdGV4dC9wbGFpbpICkqMiMiKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDI5OGM0YzA1NzM0OTg3ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImNvbmZpZ3VyYXRpb24iqnRleHQvcGxhaW6ShaZwcmVmaXjZIlBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLkNvbm5Db25maWeoZWxlbWVudHOSkgGSs1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbpICkrNXWUU6OkNvbm5Db25maWcgPSAwqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDJmZWViNzM5YzhjODM4ZmbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSrCJub2xvYWRsb3NzIqp0ZXh0L3BsYWlukqMwLjCqdGV4dC9wbGFpbpKSpiJjbWFnIqp0ZXh0L3BsYWlukqMwLjCqdGV4dC9wbGFpbpKSpSJ4c2MiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GSAZKjMC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDc5YzExMjdjZTBlYzQ3ZjDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SsSJ0cmFuc2Zvcm1lci50eDEiqnRleHQvcGxhaW6Skqcic21fdWIiqnRleHQvcGxhaW6SpTc1MC4wqnRleHQvcGxhaW6SkqQicnciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5KSAZKjMC4wqnRleHQvcGxhaW6SApKjMC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDUyZTVkNTU5ZGExN2JkOWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ0bV9maXgiqnRleHQvcGxhaW6ShaZwcmVmaXisVmVjdG9ye0Jvb2x9qGVsZW1lbnRzkpIBkoWmcHJlZml4pEJvb2yoZWxlbWVudHOTkgGSpHRydWWqdGV4dC9wbGFpbpICkqR0cnVlqnRleHQvcGxhaW6SA5KkdHJ1Zap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2MzM1NTZlNDE5N2VhZWU32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApKFpnByZWZpeKRCb29sqGVsZW1lbnRzk5IBkqR0cnVlqnRleHQvcGxhaW6SApKkdHJ1Zap0ZXh0L3BsYWlukgOSpHRydWWqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjMzNTU2ZTQxOTdlYWVlN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK9hNTNhYzI4ZTZhYTQzOWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5KSAZKkMTEuMKp0ZXh0L3BsYWlukgKSozQuMKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmZGI0YzI2YjJjN2JlNDgy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidG1fdWIiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkpIBkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSozEuMap0ZXh0L3BsYWlukgKSozEuMap0ZXh0L3BsYWlukgOSozEuMap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2NDgxYzIyNzMzY2QwYzA12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqMxLjGqdGV4dC9wbGFpbpICkqMxLjGqdGV4dC9wbGFpbpIDkqMxLjGqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjQ4MWMyMjczM2NkMGMwNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1NzA0OTEwNzExMjFjMjM12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGNiZTdjZWUwNDhkMzc3ZjWkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiGTpa8sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ0NWMzMjBkZC1lMGIyLTQ2ZWMtYWYwOS1kODNlNTY1MjAyNmS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1kAbVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDVmNzJlY2VjLWJiM2YtNDIzMS05M2MxLTcxOWUzOGUxN2JlNIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZuDxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5Zb3Ugd2lsbCBub3RlIHRoZSBwcmVzZW5jZSBvZiA8Y29kZT4mcXVvdDtkc3MmcXVvdDs8L2NvZGU+IGRpY3Rpb25hcmllcyB1bmRlciBjb21wb25lbnRzLCBhbmQgPGNvZGU+JnF1b3Q7ZHNzX29wdGlvbnMmcXVvdDs8L2NvZGU+IGF0IHRoZSByb290IGxldmVsPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHIj+zOwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDVmNzJlY2VjLWJiM2YtNDIzMS05M2MxLTcxOWUzOGUxN2JlNLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAEm7S1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ1NjQyMDBlMC0yMDgwLTQ0ZGEtOGRiZi0zN2M1ZTNhMzg0MTKKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gEMPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPkhlcmUgeW91IGNhbiBzZWUgdGhhdCB0aGUgc29sdXRpb24gY29tZXMgYmFjayBvdXQgYnkgZGVmYXVsdCBpbnRvIHRoZSBzYW1lIGRhdGEgbW9kZWwgYXMgaXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdG8gdGhlIHJ1bl8gY29tbWFuZCwgYXMgd2VsbCBhcyBiZWluZyBpbiBTSSB1bml0cywgYXMgb3Bwb3NlZCB0byBwZXIgdW5pdCwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgdGhlIHNvbHZlLiBGb3IgZXhhbXBsZSw8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIfODu9rBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkNTY0MjAwZTAtMjA4MC00NGRhLThkYmYtMzdjNWUzYTM4NDEyuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAQdJLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGU4NTI3MTJjLWQwOWEtNDFlMS05Nzg1LTMwOGMyMTljN2FkOIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukq8ibG9hZHNoYXBlLmxzMSKqdGV4dC9wbGFpbpKSpiJ0aW1lIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOakgGSozEuMKp0ZXh0L3BsYWlukgKSozIuMKp0ZXh0L3BsYWlukgOSozMuMKp0ZXh0L3BsYWlukgSSozQuMKp0ZXh0L3BsYWlukgWSozUuMKp0ZXh0L3BsYWlukgaSozYuMKp0ZXh0L3BsYWlukgeSozcuMKp0ZXh0L3BsYWlukgiSozguMKp0ZXh0L3BsYWlukgmSozkuMKp0ZXh0L3BsYWlukgqSpDEwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjdkYWNiYmU4NGVhYTU2ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpInJlcGxhY2UiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6SkqgidmFsdWVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOakgGSpTAuMDA1qnRleHQvcGxhaW6SApKkMC4wMap0ZXh0L3BsYWlukgOSpTAuMDE1qnRleHQvcGxhaW6SBJKkMC4wMqp0ZXh0L3BsYWlukgWSpTAuMDI1qnRleHQvcGxhaW6SBpKkMC4wM6p0ZXh0L3BsYWlukgeSpTAuMDM1qnRleHQvcGxhaW6SCJKkMC4wNKp0ZXh0L3BsYWlukgmSpTAuMDQ1qnRleHQvcGxhaW6SCpKkMC4wNap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1YjhlNTBlOTZjNTFiMjg22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgib2Zmc2V0Iqp0ZXh0L3BsYWlukqMwLjCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZWYxYjVkZmFiMzJiNThjZaRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHKt6k+wcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGU4NTI3MTJjLWQwOWEtNDFlMS05Nzg1LTMwOGMyMTljN2FkOLlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzVLQtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZjiqZxdWV1ZWTCpGxvZ3OTiKRsaW5l/6Ntc2eS2UtDaXJjdWl0IGhhcyBiZWVuIHJlc2V0IHdpdGggdGhlICdjbGVhcicgb24gbGluZSAxIGluICdjYXNlM191bmJhbGFuY2VkLmRzcyeqdGV4dC9wbGFpbqdjZWxsX2lk2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmOma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fZDI0YWVjMDCkZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlbQ29tbWFuZCAnY2FsY3ZvbHRhZ2ViYXNlcycgb24gbGluZSAzNSBpbiAnY2FzZTNfdW5iYWxhbmNlZC5kc3MnIGlzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nLqp0ZXh0L3BsYWlup2NlbGxfaWTZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl83ODkyMTQ5NqRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2VBDb21tYW5kICdzb2x2ZScgb24gbGluZSAzNyBpbiAnY2FzZTNfdW5iYWxhbmNlZC5kc3MnIGlzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nLqp0ZXh0L3BsYWlup2NlbGxfaWTZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl83ODkyMTQ5NqRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZvp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmpKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SsCJ2c291cmNlLnNvdXJjZSKqdGV4dC9wbGFpbpKSpCJycyKqdGV4dC9wbGFpbpLZ1TTDlzQgTWF0cml4e0Zsb2F0NjR9OgogNC4yNzY5MWUtOCAgMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgNC4yNzY5MWUtOCAgMy45NjM0MmUtOSAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgNC4yNzY5MWUtOCAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgNC4yNzY5MWUtOKp0ZXh0L3BsYWlukpKkInZhIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU3MTVlNzQxN2MzZDQyYjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNzc4ZjQyMDAyOWY2Mjc5N9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRhOTRkZjVhZWE3NmJjMjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0YTQxYjgxMTY4ZjIxZWFh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDUxMTEyYzE4NzRiMWFmMjDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJuYW1lIqp0ZXh0L3BsYWlukq4iM2J1c19leGFtcGxlIqp0ZXh0L3BsYWlukpKmImxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKmInF1YWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDVmOGU4YTJmOTFjYWJhZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SqyJsaW5lLnF1YWQiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcidF9idXMiqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGVmMmJmNDBhOWE5ZTEwN2HZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJvaGxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKoImxlbmd0aCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvZGFhM2EyNjU1N2IwZGI52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZl9idXMiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6Skqsic291cmNlX2lkIqp0ZXh0L3BsYWlukq0ibGluZS5vaGxpbmUiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcidF9idXMiqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDU3Y2ZhZGViZTljNWZjMDfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGFiZWE5N2FjZmEyZjg2OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOUkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlukgSSoTSqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOTQ5YTk1YjZjZjViOWQwMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSryJzYmFzZV9kZWZhdWx0Iqp0ZXh0L3BsYWlukqU1MDAuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4skRpY3R7U3RyaW5nLCBSZWFsfahlbGVtZW50c5GSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqcwLjIzMDk0qnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQ4NDFiM2JhNWQwOGRkYzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStiJ2b2x0YWdlX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkrQicG93ZXJfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSsCJiYXNlX2ZyZXF1ZW5jeSKqdGV4dC9wbGFpbpKkNTAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkMjFkNTc3ZDAwNjAxMTQ32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZmlsZXMiqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzkZIBktlqIi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjLy4uL3Rlc3QvZGF0YS9vcGVuZHNzL2Nhc2UzX3VuYmFsYW5jZWQuZHNzIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK82YzEyN2FmYjQ2OGM3OWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsb2FkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSpCJsMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqkibG9hZC5sMiKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODMzZjk0NjZjYTZiMGI3ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK41NWUxNGJkOGJhZjQ3ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKnMC4yMzA5NKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDJiNWU4YzI2YWVjYzMyODnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqkibG9hZC5sMyKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvOGU5ZmM1OWQ0ZjUwMjYw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQ3ZTI0YjYzMDgwYjZhZDPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SpzAuMjMwOTSqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4ZDczZTBkZmYzMmU3N2Nl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQibDEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKpImxvYWQubDEiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGY2NTBkYjg5YWZjNDgzODTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTBjOTJkMDE3OWQ3ODJkN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKnMC4yMzA5NKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGY2NTlhNTFkYzRmOGE1M2PZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGU0NTk3NWNmNGQxY2NiOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDkyNjJhMjhjYzhjNjkxYmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDdhNzFhYmQ5OThlNGIzM2PZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGMxMzk2MDZhNDcxZDE5ZWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmQ1YjA0YWZmZWI2ODQ3YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkODNmM2E5Y2VlMTZhZjU32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqsic291cmNlYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhNTA2M2U4YjZjOGY4MGYz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGM1NjFiYjEzMmQ0Njg3NWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQ0NDI4ZDU3ZWQyZWZhZWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3YmJlMTk3MjE5ZmYzN2Qx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGYzNmZmN2FhYTBiNTM3YTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxZTg0ZjZhMGRmOTAxYTQw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGZjMzgyN2MxOWFmNjYzODLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDViYWRiNTM2ZmMwNWE2MTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhNzhiMzkwOTcxOWNhMDVm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI5MzI2M2VlYWMzYTExNGLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDNjZDVlMjVjMWNkNWVkZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImxpbmVjb2RlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSqCI1NTZtY20iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKmImJfZnIiqnRleHQvcGxhaW6S2WAzw5czIE1hdHJpeHtGbG9hdDY0fToKIDI1LjQ2NDggIC0wLjAgICAgIC0wLjAKIC0wLjAgICAgIDI1LjQ2NDggIC0wLjAKIC0wLjAgICAgIC0wLjAgICAgIDI1LjQ2NDiqdGV4dC9wbGFpbpKSpCJycyKqdGV4dC9wbGFpbpLZSjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4xICAgMC4wNCAgMC4wNAogMC4wNCAgMC4xICAgMC4wNAogMC4wNCAgMC4wNCAgMC4xqnRleHQvcGxhaW6SkqciY21fdWIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZmQ4MjRhYTA1NmQ1MWQ5NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhzIqp0ZXh0L3BsYWluktldM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjA1ODMgIDAuMDIzMyAgMC4wMjMzCiAwLjAyMzMgIDAuMDU4MyAgMC4wMjMzCiAwLjAyMzMgIDAuMDIzMyAgMC4wNTgzqnRleHQvcGxhaW6SkqYiYl90byKqdGV4dC9wbGFpbpLZYDPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMjUuNDY0OCAgLTAuMCAgICAgLTAuMAogLTAuMCAgICAgMjUuNDY0OCAgLTAuMAogLTAuMCAgICAgLTAuMCAgICAgMjUuNDY0OKp0ZXh0L3BsYWlukpKmImdfdG8iqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlYmEyN2E5NjMzNGFlZjYx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkiNC8wcXVhZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqYiYl9mciKqdGV4dC9wbGFpbpLZYDPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMjUuNDY0OCAgLTAuMCAgICAgLTAuMAogLTAuMCAgICAgMjUuNDY0OCAgLTAuMAogLTAuMCAgICAgLTAuMCAgICAgMjUuNDY0OKp0ZXh0L3BsYWlukpKkInJzIqp0ZXh0L3BsYWluktldM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjExNjcgIDAuMDQ2NyAgMC4wNDY3CiAwLjA0NjcgIDAuMTE2NyAgMC4wNDY3CiAwLjA0NjcgIDAuMDQ2NyAgMC4xMTY3qnRleHQvcGxhaW6SkqciY21fdWIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvNDJkNjg0MmU0NzhlZTdh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMDY2NyAgMC4wMjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wNjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wMjY3ICAwLjA2NjeqdGV4dC9wbGFpbpKSpiJiX3RvIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqYiZ190byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk2OGVhYWQ0MDkzYjc2ZjbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOThiOGNiNTAwZDQxZjI4MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKsImRhdGFfbW9kZWwiqnRleHQvcGxhaW6SukVOR0lORUVSSU5HOjpEYXRhTW9kZWwgPSAwqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrjM2ODNmMTVjOTYyOWVipG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWWjZW5nsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIce41N7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZjuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXPAAAAAVYqVji1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRhNWI3MzZmOS0yNzc2LTQ3NjAtYjA3My1kMDIwMjdiYWVmMTOKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKvInNiYXNlX2RlZmF1bHQiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6SkrAidmJhc2VzX2RlZmF1bHQiqnRleHQvcGxhaW6ShaZwcmVmaXiyRGljdHtTdHJpbmcsIFJlYWx9qGVsZW1lbnRzkZKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SpzAuMjMwOTSqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDg0MWIzYmE1ZDA4ZGRjNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpK2InZvbHRhZ2Vfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKStCJwb3dlcl9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpKwImJhc2VfZnJlcXVlbmN5Iqp0ZXh0L3BsYWlukqQ1MC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGQyMWQ1NzdkMDA2MDExNDekbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQshx8UTMsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRhNWI3MzZmOS0yNzc2LTQ3NjAtYjA3My1kMDIwMjdiYWVmMTO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc0/rLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDJiZjgwMmUyLWY3NjktNDhkYi1hZGVmLWE1YTA2NmM1NjVjMoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZVDxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5BbHRlcm5hdGl2ZWx5LCB0aGlzIGNhbiBiZSBzcGVjaWZpZWQgYXQgcGFyc2UgYnk8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhpXOvLBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMmJmODAyZTItZjc2OS00OGRiLWFkZWYtYTVhMDY2YzU2NWMyuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAPkG7VwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDhkNTcwMWQxLTllOTEtNDNiNS05NzViLWZjOGUwZTMwNmU5OYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaAk48ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPlJ1bm5pbmcgT3B0aW1hbCBQb3dlciBGbG93PC9oMj4KPHA+SW4gdGhpcyBzZWN0aW9uIHdlIGludHJvZHVjZSBob3cgdG8gcnVuIGFuIG9wdGltYWwgcG93ZXIgZmxvdyAmIzQwO29wZiYjNDE7IGluIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIG9uIGFuIGVuZ2luZWVyaW5nIGRhdGEgbW9kZWw8L3A+CjxwPkluIG9yZGVyIHRvIHJ1biBhbiBPUEYgcHJvYmxlbSB5b3Ugd2lsbCBuZWVkPC9wPgo8b2w+CjxsaT48cD5hIGRhdGEgbW9kZWw8L3A+CjwvbGk+CjxsaT48cD5hIGZvcm11bGF0aW9uPC9wPgo8L2xpPgo8bGk+PHA+YSBzb2x2ZXI8L3A+CjwvbGk+Cjwvb2w+CjxwPkluIHRoZXNlIGV4YW1wbGVzIHdlIHdpbGwgdXNlIHRoZSA8Y29kZT5lbmc8L2NvZGU+IG1vZGVsIHdlIHdvcmtlZCB3aXRoIGFib3ZlLCB0aGUgPGNvZGU+QUNQVVBvd2VyTW9kZWw8L2NvZGU+LCB3aGljaCBpcyBhIEFDIHBvd2VyIGZsb3cgZm9ybXVsYXRpb24gaW4gcG9sYXIgY29vcmRpbmF0ZXMsIGFuZCB0aGUgPGNvZGU+aXBvcHRfc29sdmVyPC9jb2RlPiB3ZSBhbHJlYWR5IGRlZmluZWQgYWJvdmU8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIcq6H7LBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkOGQ1NzAxZDEtOWU5MS00M2I1LTk3NWItZmM4ZTBlMzA2ZTk5uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAtqTrVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDcyM2Y0ZTI2LTgwNjUtNGUyMi04YzVjLWRlMzJkMmU0MmI0N4qmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZVjxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5BbHRlcm5hdGl2ZWx5LCB3ZSBjYW4gYXBwbHkgdGhpcyBmdW5jdGlvbiBhdCBwYXJzZTwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiGTsklsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ3MjNmNGUyNi04MDY1LTRlMjItOGM1Yy1kZTMyZDJlNDJiNDe5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AA/1/tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkYjE1NTkzYjktZjc3NS00N2FmLWFhOWItNDk4MGE0MDI4ZmFhiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpiJiX2ZyIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqQicnMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMTE2NyAgMC4wNDY3ICAwLjA0NjcKIDAuMDQ2NyAgMC4xMTY3ICAwLjA0NjcKIDAuMDQ2NyAgMC4wNDY3ICAwLjExNjeqdGV4dC9wbGFpbpKSpyJjbV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqU2MDAuMKp0ZXh0L3BsYWlukgKSpTYwMC4wqnRleHQvcGxhaW6SA5KlNjAwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvNDJkNjg0MmU0NzhlZTdh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieHMiqnRleHQvcGxhaW6S2V0zw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMDY2NyAgMC4wMjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wNjY3ICAwLjAyNjcKIDAuMDI2NyAgMC4wMjY3ICAwLjA2NjeqdGV4dC9wbGFpbpKSpiJiX3RvIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqYiZ190byKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlukpKmImdfZnIiqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOTY4ZWFhZDQwOTNiNzZmNqRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHIMplWwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGIxNTU5M2I5LWY3NzUtNDdhZi1hYTliLTQ5ODBhNDAyOGZhYblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzVo9tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMzZjYTE3YmMtYjU2MC00OGM5LTk4OGYtMjU1NzgwNDc5ZDA1iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmZKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SsCJ2c291cmNlLnNvdXJjZSKqdGV4dC9wbGFpbpKSpCJycyKqdGV4dC9wbGFpbpLZ1TTDlzQgTWF0cml4e0Zsb2F0NjR9OgogNC4yNzY5MWUtOCAgMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgNC4yNzY5MWUtOCAgMy45NjM0MmUtOSAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgNC4yNzY5MWUtOCAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgNC4yNzY5MWUtOKp0ZXh0L3BsYWlukpKkInZhIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOUkgGSozAuMKp0ZXh0L3BsYWlukgKSpi0xMjAuMKp0ZXh0L3BsYWlukgOSpTEyMC4wqnRleHQvcGxhaW6SBJKjMC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU3MTVlNzQxN2MzZDQyYjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5SSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6SBJKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3NzhmNDIwMDI5ZjYyNzk32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQidm0iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5SSAZKoMC4yMjk5OTOqdGV4dC9wbGFpbpICkqgwLjIyOTk5M6p0ZXh0L3BsYWlukgOSqDAuMjI5OTkzqnRleHQvcGxhaW6SBJKjMC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRhOTRkZjVhZWE3NmJjMjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4cyKqdGV4dC9wbGFpbpLZ5TTDlzQgTWF0cml4e0Zsb2F0NjR9OgogIDEuNTQxNzhlLTcgIC0xLjA0NDk3ZS05ICAtMS4wNDQ5N2UtOSAgLTEuMDQ0OTdlLTkKIC0xLjA0NDk3ZS05ICAgMS41NDE3OGUtNyAgLTEuMDQ0OTdlLTkgIC0xLjA0NDk3ZS05CiAtMS4wNDQ5N2UtOSAgLTEuMDQ0OTdlLTkgICAxLjU0MTc4ZS03ICAtMS4wNDQ5N2UtOQogLTEuMDQ0OTdlLTkgIC0xLjA0NDk3ZS05ICAtMS4wNDQ5N2UtOSAgIDEuNTQxNzhlLTeqdGV4dC9wbGFpbpKSpSJidXMiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6Skq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0YTQxYjgxMTY4ZjIxZWFhpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIchIZJrBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMzZjYTE3YmMtYjU2MC00OGM5LTk4OGYtMjU1NzgwNDc5ZDA1uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXNVMW1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQxZTc5MTI2Mi0yNjFkLTQ3NTYtYmVjNC1lZGViZTQ3MzI3MDCKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52aw8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+SW4gdGhlc2UgZXhhbXBsZXMgd2Ugd2lsbCB1c2UgdGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb24gc29sdmVycywgc3BlY2lmaWVkIHVzaW5nIDxjb2RlPm9wdGltaXplcl93aXRoX2F0dHJpYnV0ZXM8L2NvZGU+IGZyb20gSnVNUCB2MC4yMTwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQshrqxQ0sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQxZTc5MTI2Mi0yNjFkLTQ3NTYtYmVjNC1lZGViZTQ3MzI3MDC5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABGVotXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMmNkZDY4MmEtYjk3Zi00OWRjLTg4MjktNDdlNzE0NjQ5N2I5iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keaCkbWltZap0ZXh0L3BsYWlurHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiGlF3qsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQyY2RkNjgyYS1iOTdmLTQ5ZGMtODgyOS00N2U3MTQ2NDk3Yjm5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4bzwzXtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNzQ1ZjMzYmYtOThkNy00YjI3LTk1ZmQtZWM2YmY1ZTNkNWNmiqZxdWV1ZWTCpGxvZ3ORiKRsaW5l/6Ntc2eS2gGDCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpUaGlzIHByb2dyYW0gY29udGFpbnMgSXBvcHQsIGEgbGlicmFyeSBmb3IgbGFyZ2Utc2NhbGUgbm9ubGluZWFyIG9wdGltaXphdGlvbi4KIElwb3B0IGlzIHJlbGVhc2VkIGFzIG9wZW4gc291cmNlIGNvZGUgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkuCiAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9jb2luLW9yL0lwb3B0CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKqnRleHQvcGxhaW6nY2VsbF9pZNkkNzQ1ZjMzYmYtOThkNy00YjI3LTk1ZmQtZWM2YmY1ZTNkNWNmpmt3YXJnc5CiaWS5TWFpbl9QbHV0b1J1bm5lcl8zMDQzZGI4Y6RmaWxl2UIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1BsdXRvL2t4ZXNvL3NyYy9ydW5uZXIvUGx1dG9SdW5uZXIuamylZ3JvdXCrUGx1dG9SdW5uZXKlbGV2ZWyuTG9nTGV2ZWwoLTU1NSmncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOYkpKsInNvbHZlX3RpbWUiqnRleHQvcGxhaW6SpzEuMTI1OTOqdGV4dC9wbGFpbpKSqyJvcHRpbWl6ZXIiqnRleHQvcGxhaW6SpyJJcG9wdCKqdGV4dC9wbGFpbpKStCJ0ZXJtaW5hdGlvbl9zdGF0dXMiqnRleHQvcGxhaW6S2SlMT0NBTExZX1NPTFZFRDo6VGVybWluYXRpb25TdGF0dXNDb2RlID0gNKp0ZXh0L3BsYWlukpKtImR1YWxfc3RhdHVzIqp0ZXh0L3BsYWluktkkRkVBU0lCTEVfUE9JTlQ6OlJlc3VsdFN0YXR1c0NvZGUgPSAxqnRleHQvcGxhaW6Skq8icHJpbWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZJEZFQVNJQkxFX1BPSU5UOjpSZXN1bHRTdGF0dXNDb2RlID0gMap0ZXh0L3BsYWlukpKrIm9iamVjdGl2ZSKqdGV4dC9wbGFpbpKpMC4wMjE0ODEyqnRleHQvcGxhaW6Skqoic29sdXRpb24iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKwInZvbHRhZ2Vfc291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSqCJzb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU2YzMyYzQ1YmQ2ODQ2YTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvMjczMTY1ODc0YzkxYjdk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqYicXVhZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2VlOTgyNjEwYTU0M2NlN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoIm9obGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNzhjNzNlNjQ1ZTBmZWU4M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzMjNjZmU5ZDUwZmI2ZDBl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKnInNiYXNlIqp0ZXh0L3BsYWlukqU1MDAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0OTQxNTJlYWZlZDc5Yzgx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqQibDIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDM0YWVmYzJlZDVkOTcxNTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDNiZDdmNDhmM2Y2MGJhOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkImwxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhNjBjMjUyNmI4OTM1MmEz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDYxNzcwMmRjMmY2OTliZTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGVjMWYxMGIzNDRmZjA5MTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDU0ZGJiZWVmOTY3ODYzMTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyYzc2NDkxYWM1YWQ3NTY12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGY5ZDZjYTdiZTA2ZWIwMTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJwZXJfdW5pdCKqdGV4dC9wbGFpbpKlZmFsc2WqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYWFkZmU5MTJjNjQzZjQyZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuIm9iamVjdGl2ZV9sYiKqdGV4dC9wbGFpbpKkLUluZqp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK85YWIxNzU0N2RiMWRmZTGkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZaZyZXN1bHSybGFzdF9ydW5fdGltZXN0YW1wy0HZQsh83uyWsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ3NDVmMzNiZi05OGQ3LTRiMjctOTVmZC1lYzZiZjVlM2Q1Y2a5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc8AAAAI43771bVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDg2N2Q4ZDFkLTA0MmEtNDJlYy04NDNlLTU2YjhiYTJkYjk2YYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqQibnciqnRleHQvcGxhaW6ShaZwcmVmaXi/RGljdHtTdHJpbmcsIERpY3R7U3RyaW5nLCBBbnl9fahlbGVtZW50c5qSkqMiMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGZmOGM2YjFkYzM0ZDhhZmbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwODc3N2M4ZTFkMzIzODM2MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhODM4YzE2NDE0YzE4NDJk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI5ZDk5NzlkMzgwNGRhMDPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvM2EzZTQwN2NiN2FlYmNi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGNkOTg4M2FhNWY3ZjVjYjXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOTgzNWFmOWI3NGFiZmJjONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2Mzg0MDkyMDBiM2IzN2Jh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGVjYjQyYWU0MWRiNmFhOTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI1Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWJmYTQwMTFmYzMyN2MxYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkMDk4MWZjNzY1NjM2MjQ32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGI1MmE3NWViMmVhMzEzZWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjI5MWRhNWQ4OTYxOGE3YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhZDczZjUxMjFmMWQ2YmFk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGQyN2NmOWRlNjk0ODE1YjHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI2Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMmE1YzUzYWU5OGVlOGExNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlZjZlZjVkMjIzMTMzNzM02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDI5OWY3Njg2MTc4ZDBlNTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI3Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjIyYjkxMjIyODllNDIyMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxMzFjMWI1MTZhNmRjYWIy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDU2NTRjYTA4NzBmN2IwMzfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCIxMCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDkyMWI5YWMyNjg3ZTgzMzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOTAxN2VlMGRlNDY1NzNlMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3NzkxNzA0NmIzNzBmNjkz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiOSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDYzZjA2NDFlOGMyM2QwN2bZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTljZDc1MDc3N2QwN2MwYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0NzZhNzRmMDUzMjJmOWVm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiOCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDU0OWJhMDAwZWQ4NzNkNzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvOGY4ZTIzYjU2MjcyNzA22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc4ZDI3M2UxYjVmMzQzNDXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZGM4ODg3NzVmZDVmNmUwNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxNjIyMjgxY2YwOTQ0OTJkpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWWqc29sX2VuZ19tbrJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyIb6YPqwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDg2N2Q4ZDFkLTA0MmEtNDJlYy04NDNlLTU2YjhiYTJkYjk2YblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAPHM21cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQyYzM3NTg3OC1mMTZiLTQ4MzMtOWFhYS1iODI2ZmJlMDU2YTKKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gPcPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMj5NYXRoZW1hdGljYWwgTW9kZWw8L2gyPgo8cD5JbiB0aGlzIHNlY3Rpb24gd2UgaW50cm9kdWNlIHRoZSBtYXRoZW1hdGljYWwgbW9kZWwsIHdoaWNoIHdhcyB0aGUgcHJldmlvdXMgdXNlci1mYWNpbmcgbW9kZWwgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24sIGV4cGxhaW4gaG93IGNvbnZlcnNpb25zIGJldHdlZW4gdGhlIG1vZGVsIGhhcHBlbiBpbiBwcmFjdGljZSwgYW5kIGdpdmUgYW4gZXhhbXBsZSBvZiBob3cgdG8gZG8gdGhpcyBjb252ZXJzaW9uIG1hbnVhbGx5PC9wPgo8cD5JbiBwcmFjdGljZSwgdW5sZXNzIHRoZSB1c2VyIGlzIGludGVyZXN0ZWQsIHRoZSBjb252ZXJzaW9uIGJldHdlZW4gdGhlIDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBhbmQgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBtb2RlbHMgc2hvdWxkIGJlIHNlZW1sZXNzIGFuZCBpbnZpc2libGUgdG8gdGhlIHVzZXIuIEJ5IHByb3ZpZGluZyBhbiA8Y29kZT5FTkdJTkVFUklORzwvY29kZT4gbW9kZWwgdG8gYSA8Y29kZT5ydW5fPC9jb2RlPiBjb21tYW5kIHRoZSA8Y29kZT5ydW5fbWNfbW9kZWw8L2NvZGU+IGNvbW1hbmQgd2lsbCBrbm93IHRvIGNvbnZlcnQgdGhlIG1vZGVsIHRvIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4sIHdoaWNoIHdpbGwgYmUgdXNlZCB0byB0aGUgZ2VuZXJhdGUgdGhlIEp1TVAgbW9kZWwgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIG9wdGltaXplZC4gU2ltaWxhcmx5LCB0aGUgc29sdXRpb24gZ2VuZXJhdGVkIGJ5IHRoaXMgb3B0aW1pemF0aW9uIHdpbGwgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgZm9ybWF0IG9mIHRoZSA8Y29kZT5FTkdJTkVFUklORzwvY29kZT4gbW9kZWwuPC9wPgo8cD5MZXQmIzM5O3MgZmlyc3QgdGFrZSBhIGxvb2sgYXQgaG93IHRvIGNvbnZlcnQgdG8gdGhlIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4gbW9kZWw8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhrPB17BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMmMzNzU4NzgtZjE2Yi00ODMzLTlhYWEtYjgyNmZiZTA1NmEyuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAdTB7VwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDU0NWM5MjcwLTI1N2EtNDZlOC05NzBkLTZhOWZjZjA5ZGMxN4qmcXVldWVkwqRsb2dzk4ikbGluZf+jbXNnktlLQ2lyY3VpdCBoYXMgYmVlbiByZXNldCB3aXRoIHRoZSAnY2xlYXInIG9uIGxpbmUgMSBpbiAnY2FzZTNfdW5iYWxhbmNlZC5kc3MnqnRleHQvcGxhaW6nY2VsbF9pZNkkNTQ1YzkyNzAtMjU3YS00NmU4LTk3MGQtNmE5ZmNmMDlkYzE3pmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uX2QyNGFlYzAwpGZpbGXZUi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3NfcGFyc2UuamylZ3JvdXCpZHNzX3BhcnNlpWxldmVspEluZm+IpGxpbmX/o21zZ5LZW0NvbW1hbmQgJ2NhbGN2b2x0YWdlYmFzZXMnIG9uIGxpbmUgMzUgaW4gJ2Nhc2UzX3VuYmFsYW5jZWQuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SQ1NDVjOTI3MC0yNTdhLTQ2ZTgtOTcwZC02YTlmY2YwOWRjMTema3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktlQQ29tbWFuZCAnc29sdmUnIG9uIGxpbmUgMzcgaW4gJ2Nhc2UzX3VuYmFsYW5jZWQuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SQ1NDVjOTI3MC0yNTdhLTQ2ZTgtOTcwZC02YTlmY2YwOWRjMTema3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb6dydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c9wAEpKSsSJpc19rcm9uX3JlZHVjZWQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzk5IBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmZiM2MwZjExMGYxMWJmZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlJKSoyI0Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSrCJ2bV9wYWlyX2xiIqp0ZXh0L3BsYWlukoWmcHJlZml4tVR1cGxle0FueSwgQW55LCBSZWFsfahlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGE4NjU0NjUxODI5NmM2OWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6StyJ2b2x0YWdlX3NvdXJjZS5zb3VyY2UiqnRleHQvcGxhaW6SkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXikQm9vbKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMzQ1NjVkMGQ1MDJhYTA4YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmInZtaW4iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOWYxZmQ0OGQ2ZmNhMzM0ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKsInZtX3BhaXJfdWIiqnRleHQvcGxhaW6ShaZwcmVmaXi1VHVwbGV7QW55LCBBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNzgwODk1OThhMWRkNGI5YtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImJ1c19pIqp0ZXh0L3BsYWlukqE0qnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjQ0NThiMDc5YTE1NjFhONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKsInZtX3BhaXJfbGIiqnRleHQvcGxhaW6ShaZwcmVmaXi1VHVwbGV7QW55LCBBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDM1YjkyMjVkODkyOTY0Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pEJvb2yoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGJkYjMwYTg0NjJlY2Q1NmXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJ2bV9wYWlyX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4tVR1cGxle0FueSwgQW55LCBSZWFsfahlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDhjZjZlZGZjNGJjOTU2YmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJidXNfaSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukpKqImJ1c190eXBlIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNzBkYzRkMmIxMzU1MmY1ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKsInZtX3BhaXJfbGIiqnRleHQvcGxhaW6ShaZwcmVmaXi1VHVwbGV7QW55LCBBbnksIFJlYWx9qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwM2I1NTVmYzRhODg1ZmNhONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pEJvb2yoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDhmYTFmYTQ4ODZjYTNjYzPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJ2bV9wYWlyX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4tVR1cGxle0FueSwgQW55LCBSZWFsfahlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGE1NzlmZTU1ZmNjZjQyYTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJidXNfaSKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKmIm5hbWUiqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SkqoiYnVzX3R5cGUiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1ZWI3MzEwOGVmMGJiNmM42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqwidm1fcGFpcl9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK8xYjk3NTlkMzU0ZTNlZWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKRCb29sqGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0MjVlYzdjOWVjM2MyZGJm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwidm1fcGFpcl91YiKqdGV4dC9wbGFpbpKFpnByZWZpeLVUdXBsZXtBbnksIEFueSwgUmVhbH2oZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzOTQwYzBiOWE0NWNkNzhl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciYnVzX2kiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSqiJidXNfdHlwZSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGVkZTg2MDFkMGQ2ZTUwMTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTU2MjVlZTA3YzYwZGE0NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmIm5hbWUiqnRleHQvcGxhaW6SriIzYnVzX2V4YW1wbGUiqnRleHQvcGxhaW6SkqUibWFwIqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmEyYzcyYjI1NGFiMWMyZalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWZkYTE4N2Y3NmFmYjI0ZqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk3ODVhODIyM2UwZTYzNDGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA1NmNhZmQ5Y2QzOTc5MDI5qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNzcyZWE2MjUyMzA5MGRjqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIEk5KDpHR5cGWkUGFpcqhvYmplY3RpZK84NzQ4ZWQ2ZTFhOThhY2Kpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAzNmFhOTUwNWFhZjUyZGE3qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZmQ3NjkwNWI4MmQ3ZTJmZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRkZjk2N2IwMzhmYjBlYTGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTg5Zjk5YTY3N2ExMzQzNqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDVjYTY0ZGM1NjIwNjc0NGapa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYjI3MzA1YTFmYjdjN2YwqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIHk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxMDU2NTlkYTE2NTVmYzU5qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDYyMTVjMTExMTYzMmE5MTCpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgiTkoOkdHlwZaRQYWlyqG9iamVjdGlksDdjZjJiMTg0MTc5MGRmM2Spa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZTYxMjZiNWVkMDIwNTgzOalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjU5MjE3ZDk0MjNhZjE3Y6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA3MWZjMzM2YjI0MGVhYmMyqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA0NTNmMDJlZjViODI2MjU3qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOTkgGSpyJnZW4uMSKqdGV4dC9wbGFpbpICkqciYnVzLjQiqnRleHQvcGxhaW6SA5KqImJyYW5jaC4zIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhYjQ3OWMxNTg4MTk2N2E42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5YTA1Y2VkZTcxOWJjZmZiqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZmZjNzg2YTg2ZGJiZmVlNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlksGU3NzU4MzIzMzY3MWQ1NGKmc2NoZW1hwNkiYXBwbGljYXRpb24vdm5kLnBsdXRvLnRhYmxlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkq8ic2Jhc2VfZGVmYXVsdCKqdGV4dC9wbGFpbpKlNTAwLjCqdGV4dC9wbGFpbpKSsCJ2YmFzZXNfZGVmYXVsdCKqdGV4dC9wbGFpbpKFpnByZWZpeLJEaWN0e1N0cmluZywgUmVhbH2oZWxlbWVudHORkpKjIjIiqnRleHQvcGxhaW6SpzAuMjMwOTSqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjMzYWYzMTQ5N2ZmNTU5MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpK2InZvbHRhZ2Vfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSpyJzYmFzZSKqdGV4dC9wbGFpbpKlNTAwLjCqdGV4dC9wbGFpbpKStCJwb3dlcl9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpKwImJhc2VfZnJlcXVlbmN5Iqp0ZXh0L3BsYWlukqQ1MC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDczOGQ0Njk1OThiNmU4NDHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKkInBnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI5MTExYzJlYTJhZWJiMTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJtb2RlbCKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyNWZmMGE4MmZkODc3YmQ52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2h1dGRvd24iqnRleHQvcGxhaW6SozAuMKp0ZXh0L3BsYWlukpKpInN0YXJ0dXAiqnRleHQvcGxhaW6SozAuMKp0ZXh0L3BsYWlukpKvImNvbmZpZ3VyYXRpb24iqnRleHQvcGxhaW6Ss1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3NmNlNzU2NzlmMjY5NmYx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDU4ZjBkOGQ4ZTM3ZGZmZDDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJicmFuY2giqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKmImJyX3IiqnRleHQvcGxhaW6S2W4zw5czIE1hdHJpeHtGbG9hdDY0fToKIDEuMDk0MDYgICAwLjQzNzgxMiAgMC40Mzc4MTIKIDAuNDM3ODEyICAxLjA5NDA2ICAgMC40Mzc4MTIKIDAuNDM3ODEyICAwLjQzNzgxMiAgMS4wOTQwNqp0ZXh0L3BsYWlukpKoInJhdGVfYSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4NGJmZGJhN2JhMGJjZjAx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iZl9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvYWEzYzE3MTQ2ZDExODFl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicmF0ZV9iIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGZiYTBkNDU1YTdjZGJkZjPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJuYW1lIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbpKSpiJicl94Iqp0ZXh0L3BsYWluktlvM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjYyNTMxMiAgMC4yNTAzMTIgIDAuMjUwMzEyCiAwLjI1MDMxMiAgMC42MjUzMTIgIDAuMjUwMzEyCiAwLjI1MDMxMiAgMC4yNTAzMTIgIDAuNjI1MzEyqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvNTllZjE5NjNjZGFkYWIw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqYiYnJfciKqdGV4dC9wbGFpbpLZWzPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC45Mzc1ICAwLjM3NSAgIDAuMzc1CiAwLjM3NSAgIDAuOTM3NSAgMC4zNzUKIDAuMzc1ICAgMC4zNzUgICAwLjkzNzWqdGV4dC9wbGFpbpKSqCJyYXRlX2EiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYjQ5MGFhNDk5OWFkN2ZlY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFlN2Q0MTM2ZWU4M2ZhNDXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJyYXRlX2IiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjc3OWNlZGVmZjdmYzk0ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmIm5hbWUiqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW6SkqYiYnJfeCKqdGV4dC9wbGFpbpLZbzPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC41NDY1NjIgIDAuMjE4NDM3ICAwLjIxODQzNwogMC4yMTg0MzcgIDAuNTQ2NTYyICAwLjIxODQzNwogMC4yMTg0MzcgIDAuMjE4NDM3ICAwLjU0NjU2Mqp0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDMyMGI2NWIwMTViMzgzN2bZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6StyJ2b2x0YWdlX3NvdXJjZS5zb3VyY2UiqnRleHQvcGxhaW6Skq8idF9jb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwM2FkYzk0MDQyNzQyODM1N9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqE0qnRleHQvcGxhaW6SkqYiYnJfciKqdGV4dC9wbGFpbpLZgTPDlzMgTWF0cml4e0Zsb2F0NjR9OgogNC4wMDk2MWUtNyAgMy43MTU3MWUtOCAgMy43MTU3MWUtOAogMy43MTU3MWUtOCAgNC4wMDk2MWUtNyAgMy43MTU3MWUtOAogMy43MTU3MWUtOCAgMy43MTU3MWUtOCAgNC4wMDk2MWUtN6p0ZXh0L3BsYWlukpKmImJfZnIiqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbpKSqyJicl9zdGF0dXMiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK9jMzNkODFiNDlmMWRlYWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjZmODU4NmJmZjhjZGM5YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpInN0b3JhZ2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOQpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0ZTRkMzI2Y2NlMzY4NDA42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3dpdGNoIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvYWVhNWM5MDQ3NzBlNDUw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4iaXNfcHJvamVjdGVkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6SkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpHRydWWqdGV4dC9wbGFpbpKSrCJkYXRhX21vZGVsIqp0ZXh0L3BsYWlukrtNQVRIRU1BVElDQUw6OkRhdGFNb2RlbCA9IDGqdGV4dC9wbGFpbpKSpyJzaHVudCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5CkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc2OGNhMGQwMWViNTkyYzLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJ0cmFuc2Zvcm1lciKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5CkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDJmMWRlZTgxOGZkODA0ZDbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJidXNfbG9va3VwIqp0ZXh0L3BsYWlukoWmcHJlZml4sERpY3R7QW55LCBJbnQ2NH2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGIwMDNlNTQ5MTFhNGQ5ZWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsb2FkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTZlYWEyOTAxNTUyOWU0ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImNvbmZpZ3VyYXRpb24iqnRleHQvcGxhaW6Ss1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6SkqQicWQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNWM1NDg1YWQyMDFmYzE4MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY5N2U1NGM4ODQ5OTdlNTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZmQ4NzNjYzA2MjhiZDU2ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImNvbmZpZ3VyYXRpb24iqnRleHQvcGxhaW6Ss1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6SkqQicWQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNzNmZTkzYzZjZjc0MGU0ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGNhYjgzOTk4NDcwZDQzZDHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDk4ZDhjMzQ3YTk4NzliY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKvImNvbmZpZ3VyYXRpb24iqnRleHQvcGxhaW6Ss1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6SkqQicWQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZWU5YjBiOWZjNGFjZWE3MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDRiN2EwYTJiYzg3ZTAzZGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjMzNjg0MDUxODA5MWU1ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK9iMWM0MjkxYzdkNDkwODekbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiG2Uq6sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ1NDVjOTI3MC0yNTdhLTQ2ZTgtOTcwZC02YTlmY2YwOWRjMTe5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AagKntXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZmRhNDIwYTEtZTU2My00YTQxLTg0ZDQtMmE1NzBiZjE2M2FliqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoETzxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDM+TXVsdGluZXR3b3JrczwvaDM+CjxwPkluIHRoaXMgc3Vic2VjdGlvbiB3ZSBjb3ZlciBwYXJzaW5nIGludG8gYSBtdWx0aW5ldHdvcmsgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGEgc3RydWN0dXJlIHRoYXQgb25seSBleGlzdHMgaW4gdGhlIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4gbW9kZWw8L3A+CjxwPkZvciB0aG9zZSB1bmZhbWlsaWFyLCB0aGUgSW5mcmFzdHJ1Y3R1cmVNb2RlbHMgZmFtaWx5IG9mIHBhY2thZ2VzIGhhcyBhIGZlYXR1cmUgY2FsbGVkIG11bHRpbmV0d29ya3MsIHdoaWNoIGlzIHVzZWZ1bCBmb3IsIGFtb25nIG90aGVyIHRoaW5ncywgcnVubmluZyBvcHRpbWl6YXRpb24gcHJvYmxlbXMgb24gdGltZSBzZXJpZXMgdHlwZSBwcm9ibGVtcy48L3A+CjxwPk11bHRpbmV0d29yayBkYXRhIHN0cnVjdHVyZXMgYXJlIGZvcm1hdHRlZCBsaWtlIHNvPC9wPgo8cHJlPjxjb2RlIGNsYXNzPSJsYW5ndWFnZS1qdWxpYSI+bW4gJiM2MTsgRGljdCYjMTIzO1N0cmluZyxBbnkmIzEyNTsmIzQwOwogICAgJnF1b3Q7bXVsdGluZXR3b3JrJnF1b3Q7ICYjNjE7Jmd0OyB0cnVlLAogICAgJnF1b3Q7bncmcXVvdDsgJiM2MTsmZ3Q7IERpY3QmIzEyMztTdHJpbmcsQW55JiMxMjU7JiM0MDsKICAgICAgICAmcXVvdDsxJnF1b3Q7ICYjNjE7Jmd0OyBEaWN0JiMxMjM7U3RyaW5nLEFueSYjMTI1OyYjNDA7CiAgICAgICAgICAgICZxdW90O2J1cyZxdW90OyAmIzYxOyZndDsgRGljdCYjMTIzO1N0cmluZyxBbnkmIzEyNTsmIzQwOyYjNDE7LAogICAgICAgICAgICAuLi4KICAgICAgICAmIzQxOywKICAgICAgICAuLi4KICAgICYjNDE7LAogICAgLi4uCiYjNDE7PC9jb2RlPjwvcHJlPgo8cD5UbyBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIG11bHRpbmV0d29yayBzdHJ1Y3R1cmUgZnJvbSBhbiBlbmdpbmVlcmluZyBtb2RlbCB0aGF0IGNvbnRhaW5zIDxjb2RlPnRpbWVfc2VyaWVzPC9jb2RlPiBlbGVtZW50cywgd2UgY2FuIHVzZSB0aGUgPGNvZGU+bXVsdGluZXR3b3JrPC9jb2RlPiBrZXl3b3JkIGFyZ3VtZW50IGluIDxjb2RlPnRyYW5zZm9ybV9kYXRhX21vZGVsPC9jb2RlPjwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiG282nsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRmZGE0MjBhMS1lNTYzLTRhNDEtODRkNC0yYTU3MGJmMTYzYWW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4AB/tjtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkYzg4NGZkNWItNGVjYi00MDJiLWIyMjgtMDFiOWE2MWRiOGJmiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoC1zxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5EaWZmZXJlbnQgaW5mb3JtYXRpb24gYW5kIHdhcm5pbmcgbWVzc2FnZXMgd2lsbCBiZSBnaXZlbiBkZXBlbmRpbmcgb24gdGhlIGlucHV0IGZpbGUuIEluIHRoZSBjYXNlIGFib3ZlLCB0aGVzZSBtZXNzYWdlcyBhbGwgcmVsYXRlZCB0byB2YXJpb3VzIHBhcnNlIG5vdGlmaWNhdGlvbnMgdGhhdCBhcmlzZSBkdXJpbmcgYSBwYXJzZSBvZiBhIGRzcyBmaWxlLCBhbmQgY2FuIGJlIHNhZmVseSBpZ25vcmVkPC9wPgo8cD5UaGUgcmVzdWx0aW5nIGRhdGEgc3RydWN0dXJlIGlzIGEgSnVsaWEgZGljdGlvbmFyeS4gVGhlIGZpcnN0IG5vdGFibGUgZmllbGQgaXMgPGNvZGU+JnF1b3Q7ZGF0YV9tb2RlbCZxdW90OzwvY29kZT4gd2hpY2ggc3BlY2lmaWVzIHdoaWNoIGRhdGEgbW9kZWwgdGhpcyBkYXRhIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0bywgaW4gdGhpcyBjYXNlIDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPi4gVGhpcyB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSBhbiA8Y29kZT5FbnVtPC9jb2RlPiBvZiB0eXBlIDxjb2RlPkRhdGFNb2RlbDwvY29kZT48L3A+CjxwPlRoZSBuZXh0IG5vdGFibGUgZmllbGQgaXMgPGNvZGU+JnF1b3Q7c2V0dGluZ3MmcXVvdDs8L2NvZGU+LCB3aGljaCBjb250YWlucyBzb21lIGltcG9ydGFudCBkZWZhdWx0L3N0YXJ0aW5nIHZhbHVlcyBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBuZXR3b3JrPC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHHuso6wcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGM4ODRmZDViLTRlY2ItNDAyYi1iMjI4LTAxYjlhNjFkYjhiZrlkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAHi6u1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQyOWE4YTU2MC03ZDVlLTQ5MjktODc3YS0yZGFiMTczMDk5NjiKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gNdPGRpdiBjbGFzcz0ibWFya2Rvd24iPjx1bD4KPGxpPjxwPjxjb2RlPiZxdW90O3NiYXNlX2RlZmF1bHQmcXVvdDs8L2NvZGU+IGlzIHRoZSBzdGFydGluZyB2YWx1ZSBmb3IgdGhlIHBvd2VyIGJhc2UsPC9wPgo8L2xpPgo8bGk+PHA+PGNvZGU+JnF1b3Q7dmJhc2VzX2RlZmF1bHQmcXVvdDs8L2NvZGU+IGlzIHRoZSBzdGFydGluZyB2b2x0YWdlIGJhc2UgZm9yIHRoZSBjYXNlLCBhbmQgbXVsdGlwbGUgdm9sdGFnZSBiYXNlcyBjYW4gYmUgc3BlY2lmaWVkLCB3aGljaCB3b3VsZCBiZSB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIGlzb2xhdGVkIGlzbGFuZHMgd2l0aCB0aGVpciBvd24gZ2VuZXJhdGlvbiw8L3A+CjwvbGk+CjxsaT48cD48Y29kZT4mcXVvdDt2b2x0YWdlX3NjYWxlX2ZhY3RvciZxdW90OzwvY29kZT4gaXMgYSBzY2FsaW5nIGZhY3RvciBmb3IgYWxsIHZvbHRhZ2UgdmFsdWVzLCB3aGljaCBpbiB0aGUgY2FzZSBvZiBPcGVuRFNTIGlzIGluIGtWIGJ5IGRlZmF1bHQ8L3A+CjwvbGk+CjxsaT48cD48Y29kZT4mcXVvdDtwb3dlcl9zY2FsZV9mYWN0b3ImcXVvdDs8L2NvZGU+IGlzIGEgc2NhbGluZyBmYWN0b3IgZm9yIGFsbCBwb3dlciB2YWx1ZXM8L3A+CjwvbGk+CjxsaT48cD48Y29kZT4mcXVvdDtiYXNlX2ZyZXF1ZW5jeSZxdW90OzwvY29kZT4gaXMgdGhlIGJhc2UgZnJlcXVlbmN5IG9mIHRoZSBuZXR3b3JrIGluIEh6LCB3aGljaCBpcyB1c2VmdWwgdG8ga25vdyBmb3IgbWl4ZWQgZnJlcXVlbmN5IG5ldHdvcmtzPC9wPgo8L2xpPgo8L3VsPgo8cD5OZXh0IHdlIGxvb2sgYXQgdGhlIDxjb2RlPiZxdW90O2J1cyZxdW90OzwvY29kZT4gY29tcG9uZW50czwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQshx+HPnsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQyOWE4YTU2MC03ZDVlLTQ5MjktODc3YS0yZGFiMTczMDk5Nji5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4A9RDUtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNzYzYTE1MDQtZjkyNy00ZGZjLWEwNDItYWM2NjMyNDcwOGE5iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmJKSrCJzb2x2ZV90aW1lIqp0ZXh0L3BsYWlukqowLjAwODUyNzA0qnRleHQvcGxhaW6Skqsib3B0aW1pemVyIqp0ZXh0L3BsYWlukqciSXBvcHQiqnRleHQvcGxhaW6SkrQidGVybWluYXRpb25fc3RhdHVzIqp0ZXh0L3BsYWluktkpTE9DQUxMWV9TT0xWRUQ6OlRlcm1pbmF0aW9uU3RhdHVzQ29kZSA9IDSqdGV4dC9wbGFpbpKSrSJkdWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZJEZFQVNJQkxFX1BPSU5UOjpSZXN1bHRTdGF0dXNDb2RlID0gMap0ZXh0L3BsYWlukpKvInByaW1hbF9zdGF0dXMiqnRleHQvcGxhaW6S2SRGRUFTSUJMRV9QT0lOVDo6UmVzdWx0U3RhdHVzQ29kZSA9IDGqdGV4dC9wbGFpbpKSqyJvYmplY3RpdmUiqnRleHQvcGxhaW6SqTAuMDIxNDgxMqp0ZXh0L3BsYWlukpKqInNvbHV0aW9uIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2ZGZlMjMyZDQzMTZhMTU52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDJlOTgyNWE1YzQ0YWEzMWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSpiJxdWFkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhOGVhYTQ0YmI4ZjQwZDY12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgib2hsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0N2M0OTM1MWY2YTdmN2Ji2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGYwNzdjNTczYzgwYjU0ZjjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqcic2Jhc2UiqnRleHQvcGxhaW6SpTUwMC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDM5OGVmNzRlNWEzY2RhNTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsb2FkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSpCJsMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMjBjOTJmOTNhOGFlMjM3M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkImwzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxZjBjYWEzOWE1MzNhM2Yz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQibDEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDgzOWZkNjdmNmU1OWY5NWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDg1ZTBmZTk5N2Q2N2RlY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjk0MDE4MTdkOTlmMTU4MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGQxNGVlZGE4MTQ4YmZmYtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpImxvYWRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzM5NzZlNmFlZTRkZDBmYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBhNjMzMGY4MzMzODRlNmY02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoicGVyX3VuaXQiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGE1ODAwYjUyYjIxYTdkYjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJvYmplY3RpdmVfbGIiqnRleHQvcGxhaW6SpC1JbmaqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYmRjYWY3ZDllMzE2MWIxZKRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlqXJlc3VsdF9wdbJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHzmm6KwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDc2M2ExNTA0LWY5MjctNGRmYy1hMDQyLWFjNjYzMjQ3MDhhOblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgEVotG1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQyZTRmZTAwMC00NDljLTRmYzAtODcwNy00YzUxYWM1MGFiMDOKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gMNPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxwPldlIGNhbiBzZWUgdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSBWZWN0b3JzIGZvciA8Y29kZT4mcXVvdDtwZF9ub20mcXVvdDs8L2NvZGU+IGFuZCA8Y29kZT4mcXVvdDtxZF9ub20mcXVvdDs8L2NvZGU+IGFyZSBvbmx5IG9uZSwgYWx0aG91Z2ggdGhlIG51bWJlciBvZiB0ZXJtaW5hbHMgbGlzdGVkIGluIDxjb2RlPiZxdW90O2Nvbm5lY3Rpb25zJnF1b3Q7PC9jb2RlPiBpcyB0d28uIFRoaXMgaXMgYmVjYXVzZSB0aGUgY29ubmVjdGlvbiBpcyBXWUUsIGFuZCB0aGVyZWZvcmUgdGhlIGZpbmFsIGNvbm5lY3Rpb24gaXMgYSBncm91bmRlZCBuZXV0cmFsPC9wPgo8cD5IZXJlIHdlIGFyZSBhbHNvIGludHJvZHVjZWQgdG8gdHdvIG5ldyBFbnVtcywgPGNvZGU+V1lFPC9jb2RlPiwgd2hpY2ggZ2l2ZXMgdGhlIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiwgYW5kIDxjb2RlPk5PPC9jb2RlPiB1bmRlciBkaXNwYXRjaGFibGUsIHdoaWNoIGluZGljYXRlcyB0aGF0IGlmIHRoaXMgY2FzZSB3ZXJlIHVzZWQgaW4gYW4gTUxEIHByb2JsZW0sIDxlbT5pLmUuPC9lbT4gd2l0aCA8Y29kZT5ydW5fbWNfbWxkPC9jb2RlPiB0aGF0IHRoaXMgbG9hZCB3b3VsZCBub3QgYmUgc2hlZGRhYmxlLjwvcD4KPHA+RmluYWxseSwgd2Ugc2hvdyB0aGUgZ2VuZXJhdGlvbiBzb3VyY2UgZm9yIHRoaXMgY2FzZSwgd2hpY2ggaW4gb3BlbmRzcyBpcyBhIHZvbHRhZ2Ugc291cmNlIG5hbWVkIDxjb2RlPiZxdW90O3NvdXJjZSZxdW90OzwvY29kZT48L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIcgzferBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMmU0ZmUwMDAtNDQ5Yy00ZmMwLTg3MDctNGM1MWFjNTBhYjAzuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAc2g7VwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDBlYmE0MDNlLWMyYmEtNGFmMy04ZGNjLWZlMTRhM2MyMmJkN4qmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnZuTxkaXYgY2xhc3M9Im1hcmtkb3duIj48cD5UaGlzIGZlYXR1cmUgaXMgdXNlZnVsIGZvciBidWlsZGluZyBtdWx0aW5ldHdvcmsgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCB3aWxsIGJlIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUgc2VjdGlvbiBvbiB0aGUgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBtb2RlbDwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQshyrhdIsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQwZWJhNDAzZS1jMmJhLTRhZjMtOGRjYy1mZTE0YTNjMjJiZDe5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ABAZ8tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMTJiYTAyZmYtOTFkZC00MzU1LWFkMmItZjNjYTNiNjFlMzE4iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoDxjxkaXYgY2xhc3M9Im1hcmtkb3duIj48cHJlPjxjb2RlIGNsYXNzPSJsYW5ndWFnZS1NaW4gMC41IDBfcGdfMSYjOTE7MSYjOTM7ICYjNDM7IDAuNSAwX3BnXzEmIzkxOzImIzkzOyAmIzQzOyAwLjUgMF9wZ18xJiM5MTszJiM5MzsiPlN1YmplY3QgdG8KIDBfJiM0MDszLDQsMiYjNDE7X3AmIzkxOzEmIzkzOyAtIDBfcGdfMSYjOTE7MSYjOTM7ICYjNjE7IDAuMAogMF8mIzQwOzMsNCwyJiM0MTtfcCYjOTE7MiYjOTM7IC0gMF9wZ18xJiM5MTsyJiM5MzsgJiM2MTsgMC4wCiAwXyYjNDA7Myw0LDImIzQxO19wJiM5MTszJiM5MzsgLSAwX3BnXzEmIzkxOzMmIzkzOyAmIzYxOyAwLjAKIDBfJiM0MDsyLDIsMSYjNDE7X3AmIzkxOzEmIzkzOyAtIDBfJiM0MDszLDQsMiYjNDE7X3AmIzkxOzEmIzkzOyAmIzYxOyAwLjAKIDBfJiM0MDsyLDIsMSYjNDE7X3AmIzkxOzImIzkzOyAtIDBfJiM0MDszLDQsMiYjNDE7X3AmIzkxOzImIzkzOyAmIzYxOyAwLjAKIDBfJiM0MDsyLDIsMSYjNDE7X3AmIzkxOzMmIzkzOyAtIDBfJiM0MDszLDQsMiYjNDE7X3AmIzkxOzMmIzkzOyAmIzYxOyAwLjAKIC0wXyYjNDA7MSwxLDMmIzQxO19wJiM5MTsxJiM5MzsgJiM2MTsgLTAuMDE4MDAwMDAwMDAwMDAwMDAyCiAtMF8mIzQwOzEsMSwzJiM0MTtfcCYjOTE7MiYjOTM7ICYjNjE7IC0wLjAxMgogLTBfJiM0MDsxLDEsMyYjNDE7X3AmIzkxOzMmIzkzOyAmIzYxOyAtMC4wMTIKIC0wXyYjNDA7MiwyLDEmIzQxO19wJiM5MTsxJiM5MzsgJiM0MzsgMF8mIzQwOzEsMSwzJiM0MTtfcCYjOTE7MSYjOTM7ICYjNjE7IDAuMAogLTBfJiM0MDsyLDIsMSYjNDE7X3AmIzkxOzImIzkzOyAmIzQzOyAwXyYjNDA7MSwxLDMmIzQxO19wJiM5MTsyJiM5MzsgJiM2MTsgMC4wCiAtMF8mIzQwOzIsMiwxJiM0MTtfcCYjOTE7MyYjOTM7ICYjNDM7IDBfJiM0MDsxLDEsMyYjNDE7X3AmIzkxOzMmIzkzOyAmIzYxOyAwLjA8L2NvZGU+PC9wcmU+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIiBQqprBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMTJiYTAyZmYtOTFkZC00MzU1LWFkMmItZjNjYTNiNjFlMzE4uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOIkKsLLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGU3YjU4OGU5LWZiNWYtNDM4My1iNWM2LWJjZTllZDhmNWE2MIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKpLTAuNDg0MjM4qnRleHQvcGxhaW6SApKoLTEyMC4yNDOqdGV4dC9wbGFpbpIDkqcxMjAuMjc0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGU0ZjFmNWIwMzBmZTNmMDHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ2bSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqgwLjk2MzU0Nqp0ZXh0L3BsYWlukgKSqDAuOTgxNzU3qnRleHQvcGxhaW6SA5KoMC45NzY3NzmqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzExMTRlY2M2OTNkZTcxZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK8zOTc2ZTZhZWU0ZGQwZmGkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsh858aosHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRlN2I1ODhlOS1mYjVmLTQzODMtYjVjNi1iY2U5ZWQ4ZjVhNjC5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1baLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDA3ZmM1YTFiLTRhOWUtNGExMC1iZjdhLWQyNjgyNzY5YWM5N4qmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaARk8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPkNvbmNsdXNpb248L2gyPgo8cD5UaGlzIGNvbmNsdWRlcyB0aGUgaW50cm9kdWN0aW9uIHRvIHRoZSA8Y29kZT5FTkdJTkVFUklORzwvY29kZT4gZGF0YSBtb2RlbCBhbmQgY29udmVyc2lvbiB0byB0aGUgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBtb2RlbC4gV2UgaG9wZSB0aGF0IHlvdSB3aWxsIGZpbmQgdGhpcyBuZXcgZGF0YSBtb2RlbCBhYnN0cmFjdGlvbiBlYXN5IHRvIHVzZSBhbmQgc2ltcGxlIHRvIHVuZGVyc3RhbmQ8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIiBSSGbBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkMDdmYzVhMWItNGE5ZS00YTEwLWJmN2EtZDI2ODI3NjlhYzk3uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAUghLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGUzZmUwYTVlLTk0MzEtNDUzZC1iN2U1LTgyMWRlNjI0YTRlZoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5iSkqwic29sdmVfdGltZSKqdGV4dC9wbGFpbpKqMC4wMDkyOTgwOap0ZXh0L3BsYWlukpKrIm9wdGltaXplciKqdGV4dC9wbGFpbpKnIklwb3B0Iqp0ZXh0L3BsYWlukpK0InRlcm1pbmF0aW9uX3N0YXR1cyKqdGV4dC9wbGFpbpLZKUxPQ0FMTFlfU09MVkVEOjpUZXJtaW5hdGlvblN0YXR1c0NvZGUgPSA0qnRleHQvcGxhaW6Skq0iZHVhbF9zdGF0dXMiqnRleHQvcGxhaW6S2SRGRUFTSUJMRV9QT0lOVDo6UmVzdWx0U3RhdHVzQ29kZSA9IDGqdGV4dC9wbGFpbpKSryJwcmltYWxfc3RhdHVzIqp0ZXh0L3BsYWluktkkRkVBU0lCTEVfUE9JTlQ6OlJlc3VsdFN0YXR1c0NvZGUgPSAxqnRleHQvcGxhaW6Skqsib2JqZWN0aXZlIqp0ZXh0L3BsYWlukqkwLjAyMTQ4MTKqdGV4dC9wbGFpbpKSqiJzb2x1dGlvbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5iSkqgiYnJhbmNoIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmMWQ2YzUwODI5NTYwZjEw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTE4ZTRjOWJlOGM1MDg5NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDFjOTI1Yzc1N2VjYzBmMGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTkzZTc2MDMxODI1NWFjM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImdlbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjRiZDllMmE4ZjIzYTRlN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK9jMGUwMWMzZGRjNDdhZmbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKStSJtdWx0aWluZnJhc3RydWN0dXJlIqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlukpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSryJzYmFzZV9kZWZhdWx0Iqp0ZXh0L3BsYWlukqU1MDAuMKp0ZXh0L3BsYWlukpKwInZiYXNlc19kZWZhdWx0Iqp0ZXh0L3BsYWlukoWmcHJlZml4skRpY3R7U3RyaW5nLCBSZWFsfahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYzM3Y2Q5OWFmNDcxZTY1N9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpK2InZvbHRhZ2Vfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKSpyJzYmFzZSKqdGV4dC9wbGFpbpKlNTAwLjCqdGV4dC9wbGFpbpKStCJwb3dlcl9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpKwImJhc2VfZnJlcXVlbmN5Iqp0ZXh0L3BsYWlukqQ1MC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDdjYjhlMjI2ZTZhZDRlMjjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJtdWx0aW5ldHdvcmsiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6SkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWFmMDRlNzNmYjg4MGE1M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGRmYTA4M2FkMDRlOGEyZGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3YTNkODlhZDNhMjJiZjI02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGY2ODNlNTYxMzJhZjYyZjLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKjIjQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDE3NjRkNTVlNzQ3MjM0NzjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiZjFmYmMxZmMzZTcxYmUw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGY5Zjc0NTE2NGU3NzY1NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDRjYTNhNTBjNWVlZWU5OWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOWY1YWYzNTM4NDVlMmI0MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGYwNTZlMWE5MjY1NTE0YmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJvYmplY3RpdmVfbGIiqnRleHQvcGxhaW6SpC1JbmaqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYWM0ZjVhNWMxZTQ2MzQwOaRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlq3Jlc3VsdF9tYXRosmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhvF3aLBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZTNmZTBhNWUtOTQzMS00NTNkLWI3ZTUtODIxZGU2MjRhNGVmuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAS8Lk7VwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDc4NWExYzM5LWFhNTYtNDI0NC1iN2I5LTMxZDdhMzFiNzNjM4qmcXVldWVkwqRsb2dzkYikbGluZf+jbXNnktlyYXNzdW1pbmcgdGltZSBpcyBpbiBob3VycyBmb3IgdGltZV9lbGFwc2VkIGluZmVyZW5jZS4gaWYgdGhpcyBpcyBpbmNvcnJlY3QsIG1hbnVhbGx5IGFkanVzdCB3aXRoIHNldF90aW1lX2VsYXBzZWQhqnRleHQvcGxhaW6nY2VsbF9pZNkkNzg1YTFjMzktYWE1Ni00MjQ0LWI3YjktMzFkN2EzMWI3M2Mzpmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzAzNjEzMzlmpGZpbGXZWS9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2RhdGFfbW9kZWwvbXVsdGluZXR3b3JrLmpspWdyb3VwrG11bHRpbmV0d29ya6VsZXZlbKRJbmZvp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSpiJuYW1lIqp0ZXh0L3BsYWlukq4iM2J1c19leGFtcGxlIqp0ZXh0L3BsYWlukpKlIm1hcCKqdGV4dC9wbGFpbpKFpnByZWZpeNknRGljdHtTdHJpbmcsIFZlY3RvcntEaWN0e1N0cmluZywgQW55fX19qGVsZW1lbnRzmpKSoyI4Iqp0ZXh0L3BsYWlukoOkcm93c5qSAZGSg6R0eXBlpFBhaXKob2JqZWN0aWSwYmEyYzcyYjI1NGFiMWMyZalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX3Jvb3QhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSApOSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWZkYTE4N2Y3NmFmYjI0ZqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDk3ODVhODIyM2UwZTYzNDGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIDk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA1NmNhZmQ5Y2QzOTc5MDI5qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSvNzcyZWE2MjUyMzA5MGRjqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIEk5KDpHR5cGWkUGFpcqhvYmplY3RpZK84NzQ4ZWQ2ZTFhOThhY2Kpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLAzNmFhOTUwNWFhZjUyZGE3qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZmQ3NjkwNWI4MmQ3ZTJmZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRkZjk2N2IwMzhmYjBlYTGpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpiJxdWFkIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTg5Zjk5YTY3N2ExMzQzNqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqiJicmFuY2guMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDVjYTY0ZGM1NjIwNjc0NGapa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJvaGxpbmUiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYjI3MzA1YTFmYjdjN2YwqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIHk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAxMDU2NTlkYTE2NTVmYzU5qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDYyMTVjMTExMTYzMmE5MTCpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgiTkoOkdHlwZaRQYWlyqG9iamVjdGlksDdjZjJiMTg0MTc5MGRmM2Spa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZTYxMjZiNWVkMDIwNTgzOalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCZOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYjU5MjE3ZDk0MjNhZjE3Y6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA3MWZjMzM2YjI0MGVhYmMyqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIKk5KDpHR5cGWkUGFpcqhvYmplY3RpZLAyOTJjNGRhYjhhMmRlOGMxqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOTkgGSpyJnZW4uMSKqdGV4dC9wbGFpbpICkqciYnVzLjQiqnRleHQvcGxhaW6SA5KqImJyYW5jaC4zIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkZDZmOWNkYmFhYmQ5OTc02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5YTA1Y2VkZTcxOWJjZmZiqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZmZjNzg2YTg2ZGJiZmVlNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlkrzIwYjgwNWY1ODU4OGVhYqZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0kpKjIjQiqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTJjNzJiMjU0YWIxYzJlqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA5ZmRhMTg3Zjc2YWZiMjRmqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc4NWE4MjIzZTBlNjM0MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDU2Y2FmZDljZDM5NzkwMjmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK83NzJlYTYyNTIzMDkwZGOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzg3NDhlZDZlMWE5OGFjYqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM2YWE5NTA1YWFmNTJkYTepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBmZDc2OTA1YjgyZDdlMmZkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGRmOTY3YjAzOGZiMGVhMalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYjI3MzA1YTFmYjdjN2YwqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBhODlmOTlhNjc3YTEzNDM2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNWNhNjRkYzU2MjA2NzQ0ZqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDEwNTY1OWRhMTY1NWZjNTmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjIxNWMxMTExNjMyYTkxMKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2NmMmIxODQxNzkwZGYzZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlNjEyNmI1ZWQwMjA1ODM5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiNTkyMTdkOTQyM2FmMTdjqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDcxZmMzMzZiMjQwZWFiYzKpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlksDUzY2Y2MzY3NDNlMTJhMjGpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU5YjcxOGQ2YTMzZWEyNTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDlhMDVjZWRlNzE5YmNmZmKpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqCJzb3VyY2UiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmZmM3ODZhODZkYmJmZWU1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK/Il9tYXBfbWF0aDJlbmdfdm9sdGFnZV9zb3VyY2UhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sob2JqZWN0aWSwZDc2YzAwNDAwMmQzNzA4ZKZzY2hlbWHA2SJhcHBsaWNhdGlvbi92bmQucGx1dG8udGFibGUrb2JqZWN0kpKjIjEiqnRleHQvcGxhaW6Sg6Ryb3dzmpIBkZKDpHR5cGWkUGFpcqhvYmplY3RpZLBiYTJjNzJiMjU0YWIxYzJlqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfcm9vdCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA5ZmRhMTg3Zjc2YWZiMjRmqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOTc4NWE4MjIzZTBlNjM0MalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgOTkoOkdHlwZaRQYWlyqG9iamVjdGlksDU2Y2FmZDljZDM5NzkwMjmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZK83NzJlYTYyNTIzMDkwZGOpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqyJzb3VyY2VidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgSTkoOkdHlwZaRQYWlyqG9iamVjdGlkrzg3NDhlZDZlMWE5OGFjYqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDM2YWE5NTA1YWFmNTJkYTepa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjZhZTY0YzlkODczNDhmNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StCJfbWFwX21hdGgyZW5nX2J1cyEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIFk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBmZDc2OTA1YjgyZDdlMmZkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGRmOTY3YjAzOGZiMGVhMalrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKmInF1YWQiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkYjI3MzA1YTFmYjdjN2YwqWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbGluZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIGk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBhODlmOTlhNjc3YTEzNDM2qWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKqImJyYW5jaC4yIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNWNhNjRkYzU2MjA2NzQ0ZqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoIm9obGluZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgeTkoOkdHlwZaRQYWlyqG9iamVjdGlksDEwNTY1OWRhMTY1NWZjNTmpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4xIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNjIxNWMxMTExNjMyYTkxMKlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwyIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCJOSg6R0eXBlpFBhaXKob2JqZWN0aWSwN2NmMmIxODQxNzkwZGYzZKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlNjEyNmI1ZWQwMjA1ODM5qWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIJk5KDpHR5cGWkUGFpcqhvYmplY3RpZLBiNTkyMTdkOTQyM2FmMTdjqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksDcxZmMzMzZiMjQwZWFiYzKpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgqTkoOkdHlwZaRQYWlyqG9iamVjdGlkr2IzZDE5NjZiYmNmNTEyMqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTc4YmExYTAxZWM1ZjhmN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLA4ZWNkMjkzYTcxOWI2YTI3pnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiNSKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYzY3ZGRiNWE5YmNiNWNhN6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYmM3MjAxYTdlOTg5YzE3NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLA3ZGIzZGU2YjRmNjBlNzU5pnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwM2IzMzE4MDY3NjFiZWRkYqlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZGI0ZmE1MDMyNjM5NWE1M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLBjOWU4MWU1YzY4MGU2NGIypnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiNiKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwYTY3ZmUzMmFmZmY3MmZiN6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjdiODU1NmQzZjdkZTYxZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLA3ODkxYmI0MjQ1MWFkNmZmpnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiNyKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZTdhZTJiZTA3MDU5ZGYxMKlrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvY2VkYmRhMDA5ZGY2ZjM02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3TZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5YTA1Y2VkZTcxOWJjZmZiqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZmZjNzg2YTg2ZGJiZmVlNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6SvyJfbWFwX21hdGgyZW5nX3ZvbHRhZ2Vfc291cmNlISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0qG9iamVjdGlksDgxMDNhZGY3ZDVmZjA1NTKmc2NoZW1hwNkiYXBwbGljYXRpb24vdm5kLnBsdXRvLnRhYmxlK29iamVjdJKSpCIxMCKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwMmE0OTBkNTNjMDQ2YzJmY6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMjI4ZGRkMjBiNGJmOWQ5ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLBhY2FjMTJmZDJkNGRiZjQ4pnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiOSKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZjEwZGZkM2ZmOGYyNWU3M6lrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTM5Mzg1ZDAzNzEwY2Q4NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLBkZWY3YjYzMzEyMzMxMjAzpnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SSkqMiMyKqdGV4dC9wbGFpbpKDpHJvd3OakgGRkoOkdHlwZaRQYWlyqG9iamVjdGlksGJhMmM3MmIyNTRhYjFjMmWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19yb290ISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKTkoOkdHlwZaRQYWlyqG9iamVjdGlksDlmZGExODdmNzZhZmIyNGapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqciYnVzLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA5Nzg1YTgyMjNlMGU2MzQxqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSA5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwNTZjYWZkOWNkMzk3OTAyOalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SpyJidXMuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlkrzc3MmVhNjI1MjMwOTBkY6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGY2YWU2NGM5ZDg3MzQ4ZjWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrQiX21hcF9tYXRoMmVuZ19idXMhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSBJOSg6R0eXBlpFBhaXKob2JqZWN0aWSvODc0OGVkNmUxYTk4YWNiqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKnImJ1cy4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwMzZhYTk1MDVhYWY1MmRhN6lrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBmNmFlNjRjOWQ4NzM0OGY1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK0Il9tYXBfbWF0aDJlbmdfYnVzISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgWTkoOkdHlwZaRQYWlyqG9iamVjdGlksGZkNzY5MDViODJkN2UyZmSpa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBkZGY5NjdiMDM4ZmIwZWExqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGRiMjczMDVhMWZiN2M3ZjCpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19saW5lISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgaTkoOkdHlwZaRQYWlyqG9iamVjdGlksGE4OWY5OWE2NzdhMTM0Mzapa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqoiYnJhbmNoLjIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA1Y2E2NGRjNTYyMDY3NDRmqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZGIyNzMwNWExZmI3YzdmMKlrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xpbmUhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSB5OSg6R0eXBlpFBhaXKob2JqZWN0aWSwMTA1NjU5ZGExNjU1ZmM1OalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6SqCJsb2FkLjEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLA2MjE1YzExMTE2MzJhOTEwqWtleV92YWx1ZZKSpiJmcm9tIqp0ZXh0L3BsYWlukqQibDIiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKDpHR5cGWkUGFpcqhvYmplY3RpZLBlYmJhZWExMjNiYWMwZjM1qWtleV92YWx1ZZKSsCJ1bm1hcF9mdW5jdGlvbiKqdGV4dC9wbGFpbpK1Il9tYXBfbWF0aDJlbmdfbG9hZCEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJIIk5KDpHR5cGWkUGFpcqhvYmplY3RpZLA3Y2YyYjE4NDE3OTBkZjNkqWtleV92YWx1ZZKSpCJ0byKqdGV4dC9wbGFpbpKoImxvYWQuMiKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGU2MTI2YjVlZDAyMDU4Mzmpa2V5X3ZhbHVlkpKmImZyb20iqnRleHQvcGxhaW6SpCJsMyKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGViYmFlYTEyM2JhYzBmMzWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukrUiX21hcF9tYXRoMmVuZ19sb2FkISKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgmTkoOkdHlwZaRQYWlyqG9iamVjdGlksGI1OTIxN2Q5NDIzYWYxN2Opa2V5X3ZhbHVlkpKkInRvIqp0ZXh0L3BsYWlukqgibG9hZC4zIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwNzFmYzMzNmIyNDBlYWJjMqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKkImwxIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwZWJiYWVhMTIzYmFjMGYzNalrZXlfdmFsdWWSkrAidW5tYXBfZnVuY3Rpb24iqnRleHQvcGxhaW6StSJfbWFwX21hdGgyZW5nX2xvYWQhIqp0ZXh0L3BsYWlu2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSCpOSg6R0eXBlpFBhaXKob2JqZWN0aWSwZTBiY2FlYjViZGI3MGNhNalrZXlfdmFsdWWSkqQidG8iqnRleHQvcGxhaW6ShaZwcmVmaXimU3RyaW5nqGVsZW1lbnRzk5IBkqciZ2VuLjEiqnRleHQvcGxhaW6SApKnImJ1cy40Iqp0ZXh0L3BsYWlukgOSqiJicmFuY2guMyKqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjEyZGJiYzBiMzI0OGZlY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSg6R0eXBlpFBhaXKob2JqZWN0aWSwOWEwNWNlZGU3MTliY2ZmYqlrZXlfdmFsdWWSkqYiZnJvbSKqdGV4dC9wbGFpbpKoInNvdXJjZSKqdGV4dC9wbGFpbtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0koOkdHlwZaRQYWlyqG9iamVjdGlksGZmYzc4NmE4NmRiYmZlZTWpa2V5X3ZhbHVlkpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW7ZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKhvYmplY3RpZLBhNmJiM2U0ZTIxN2E2NjA2pnNjaGVtYcDZImFwcGxpY2F0aW9uL3ZuZC5wbHV0by50YWJsZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc2OTA3OTRlNWQ0MmM0OWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJidXNfbG9va3VwIqp0ZXh0L3BsYWlukoWmcHJlZml4v0RpY3R7U3RyaW5nLCBEaWN0e1N0cmluZywgQW55fX2oZWxlbWVudHOakpKjIjgiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDc3ZmNkNGVhNjAxYjU1NjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI0Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkMjNkMjQ1OTk0OWMyNWY02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2ZlZTIyZjk4ZmZkZTQ4Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU0ZjljYzRiYmExNDc2ZDTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK9mNDA2NDdkMGVhMWEzZGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI2Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1MTUwYWM1ZDEyYzM0YTE12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvYWQ4NjQ0NTg1ZDMxZTQ32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQiMTAiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6SoTGqdGV4dC9wbGFpbpKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SoTKqdGV4dC9wbGFpbpKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukqEzqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGRhMmQzOWFkYTQ3YzM0YTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukqExqnRleHQvcGxhaW6Skqsic291cmNlYnVzIqp0ZXh0L3BsYWlukqEyqnRleHQvcGxhaW6SkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKhM6p0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4M2NkZTVhYWY3YmQ4NGM42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKhMap0ZXh0L3BsYWlukpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKhMqp0ZXh0L3BsYWlukpKpImxvYWRidXMiqnRleHQvcGxhaW6SoTOqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYTUxMzRjNDdiYTQ4YWZhZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2OWE1ZDYzNGMzNmQ3ODU02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq4ibXVsdGluZXR3b3JrIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6SkqQibnciqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOakpKjIjMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDgzYTFjYzMzZjgwYzI2NmXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDZmZWE2MWI5ZThjOTQyMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxMWUyYjc4Yzk0NTViNjIx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmNjhiODdlM2RkYTViOWM02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNGE2YTlhOWUwNTY0YWU4M9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNhNzMwNTJkNjRhOWQyNTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZjRhMTgyYWFkOWM0ZWUwMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyMDk3MzgyNWIxYzcwNGYz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkMWUyNWUwYTk0NDc4Yzll2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYmVlZjg0YTJlZTc2MGYyZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGIyYTViYjQwZDRmOTdmMDPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGZjZmViN2I4ZjcxMjg2OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlZjFjOTA4ZjRlZDAyMjli2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiZDE1ZDExZDY5ZmQ1MDYw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwN2FkMWMzMDE2NjNhY2RkZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDQ4ZmJhYzQ1ODI5MzBhNDbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTI1MGIzNDFiNDVlYWVmY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5NjBjZDM1ZjljYjBlYTJk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiOTljZTUwOWUyZjY0OTZk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjUzOWRiNWE1YjBhZDQ3ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQyODQ1ODE2OTRhMjUzMDLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOTRiMzU5YjkxYTAyZWExY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmODVkZWNiNGUxNTJmOWUy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjNjU4NjI2MmZkNGQ0MTA32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZWY4YTIyYjhjZmFiNTk2MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjYiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRjZmI2YzRjYWEwNmQ1MjLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTRhZTkyMWNiOTAyN2U3YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3NmFjODU4YWRkZTkxOTZj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK83YjdiMGU4N2YxNGMwMWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiYTIxNDlmOWU0ZDJlMmQx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkrEiaXNfa3Jvbl9yZWR1Y2VkIqp0ZXh0L3BsYWlukqR0cnVlqnRleHQvcGxhaW6Skq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDdmNmJhYTE5ZmY1NzU3NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuInRpbWVfZWxhcHNlZCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA1ZTVkODAyM2FjYzQ3OTVl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDg4MzdmM2EwODEwMDE0YjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJnZW4iqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDcxMDNkOWFiZDIxMGRiZGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAzNTE4ODY3MDVhYzAxN2Q42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQiMTAiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFiZjc3MmM2YTdlMzA0NTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2MxMzJlYTQ4ODJkYTI4NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkZTk0NjhiODJkYjgyM2U52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxODU2YzAwN2EwYjVlODhi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNjU4YTRjOWUzYmE0ZDQ4ZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDcxMTdhMGE3ZDIxZGY5YTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTA1ZWNhNjM5MGIyYjMxMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4MzIxY2E0ZGY2ZDNjNThh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2ZDE1NWU0NjRhMjBiYThi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjEwOTgzY2U1MmEzNTM2NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjgiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKxImlzX2tyb25fcmVkdWNlZCKqdGV4dC9wbGFpbpKkdHJ1Zap0ZXh0L3BsYWlukpKvImNvbmR1Y3Rvcl9pZHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDExYzYzMTY3MTM2OGIxNGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJ0aW1lX2VsYXBzZWQiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYWM0MWRlNjdjODY1ZWFmMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInNldHRpbmdzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA2YzJlMjY5ZWM4ZjRkODE42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiZ2VuIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjMzYyYjc4Njc2YTc3MGU22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSvZTNiOTRlMDhkMGY4OGM52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGFlNjk4NzdiNGQ1ZGY4N2PZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrCJkYXRhX21vZGVsIqp0ZXh0L3BsYWlukrtNQVRIRU1BVElDQUw6OkRhdGFNb2RlbCA9IDGqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwODA1NTUwZjA3MTNhMTE5ZqRtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlp21hdGhfbW6ybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiG4wlKsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ3ODVhMWMzOS1hYTU2LTQyNDQtYjdiOS0zMWQ3YTMxYjczYzO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ApVDktXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMmY5YzNmNjQtM2U1ZC00MjNmLTkzOWUtOGQ5NmJkMTllN2ZliqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmJKSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKvInRfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOTkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkNWY4ZThhMmY5MWNhYmFm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqciZl9idXMiqnRleHQvcGxhaW6SqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKrImxpbmUucXVhZCKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJ0X2J1cyKqdGV4dC9wbGFpbpKpImxvYWRidXMiqnRleHQvcGxhaW6SkqoibGluZWNvZGUiqnRleHQvcGxhaW6SqSI0LzBxdWFkIqp0ZXh0L3BsYWlukpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOTkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxM2M0M2FlYWY0YjM1ZmQy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGVmMmJmNDBhOWE5ZTEwN2GkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQshyCx//sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQyZjljM2Y2NC0zZTVkLTQyM2YtOTM5ZS04ZDk2YmQxOWU3ZmW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1ZELVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDU0MmU1OTJmLThmNzUtNDFmOS04Zjk4LTUzNzNiNDMxZmNjNoqmcXVldWVkwqRsb2dzlIikbGluZf+jbXNnktlJQ2lyY3VpdCBoYXMgYmVlbiByZXNldCB3aXRoIHRoZSAnY2xlYXInIG9uIGxpbmUgMSBpbiAnY2FzZTNfYmFsYW5jZWQuZHNzJ6p0ZXh0L3BsYWlup2NlbGxfaWTZJDU0MmU1OTJmLThmNzUtNDFmOS04Zjk4LTUzNzNiNDMxZmNjNqZrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl9kMjRhZWMwMKRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2VlDb21tYW5kICdjYWxjdm9sdGFnZWJhc2VzJyBvbiBsaW5lIDM2IGluICdjYXNlM19iYWxhbmNlZC5kc3MnIGlzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nLqp0ZXh0L3BsYWlup2NlbGxfaWTZJDU0MmU1OTJmLThmNzUtNDFmOS04Zjk4LTUzNzNiNDMxZmNjNqZrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl83ODkyMTQ5NqRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2U5Db21tYW5kICdzb2x2ZScgb24gbGluZSAzOCBpbiAnY2FzZTNfYmFsYW5jZWQuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYzama3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb4ikbGluZf+jbXNnktldYmFzZW12YT0xMDAgaXMgdGhlIGRlZmF1bHQgdmFsdWUsIHlvdSBtYXkgd2FudCB0byBhZGp1c3Qgc2Jhc2VfZGVmYXVsdCBmb3IgYmV0dGVyIGNvbnZlcmdlbmNlqnRleHQvcGxhaW6nY2VsbF9pZNkkNTQyZTU5MmYtOGY3NS00MWY5LThmOTgtNTM3M2I0MzFmY2M2pmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uX2FmMDIxMDAwpGZpbGXZUC9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2lvL2Rzcy9kc3MyZW5nLmpspWdyb3Vwp2RzczJlbmelbGV2ZWykSW5mb6dydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5uSkq8iY29uZHVjdG9yX2lkcyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5SSAZKhMap0ZXh0L3BsYWlukgKSoTKqdGV4dC9wbGFpbpIDkqEzqnRleHQvcGxhaW6SBJKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyMDcxMDI5NDdiYWQzZjA12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSqSJwcmltYXJ5Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODk1YTg3NTRkNDU4ZmRlY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZmE5MDc5MDZiNmM0ZjVlYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjQyZDZjMDZiMDViNjgzYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOQpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5ZWVkMmUzNDdmN2RjZmJm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGMxMDI2MWQ3NTkyYzhlMzjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGU5M2U5NTQ0ZmE2OTU4MznZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjY5ZjBjNTE3NTJhNDUyONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTY5YmNlOWZmNTM4M2NmMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDIxMzhkNmI4ZWE1ZGRjNzjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmViNTE1NzJkNDkxOTQzYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpImxvYWRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOVkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGY2Y2QwNGFiMTU4NjI4NzHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDAwNjdjMDMyN2Y5MTYyONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOGJlMTViZjZkZmMzNWQwNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDUxNmRjZWU3Y2FjN2JmNTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjc3NWI0ODU0NjEyYzQxONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4MjU5MDZhNTViZDlmMTlk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibmFtZSKqdGV4dC9wbGFpbpKuIjNidXNfZXhhbXBsZSKqdGV4dC9wbGFpbpKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkq8ic2Jhc2VfZGVmYXVsdCKqdGV4dC9wbGFpbpKoMTAwMDAwLjCqdGV4dC9wbGFpbpKSsCJ2YmFzZXNfZGVmYXVsdCKqdGV4dC9wbGFpbpKFpnByZWZpeLJEaWN0e1N0cmluZywgUmVhbH2oZWxlbWVudHORkpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKnMC4yMzA5NKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlNDZiYjkyOTFmZmYyMDNi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkrYidm9sdGFnZV9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpK0InBvd2VyX3NjYWxlX2ZhY3RvciKqdGV4dC9wbGFpbpKmMTAwMC4wqnRleHQvcGxhaW6SkrAiYmFzZV9mcmVxdWVuY3kiqnRleHQvcGxhaW6SpDUwLjCqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOWZiZTExYTNmYTk1NTQ0ZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZpbGVzIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5GSAZLZKSIuLi90ZXN0L2RhdGEvb3BlbmRzcy9jYXNlM19iYWxhbmNlZC5kc3MiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRiMmE5NzVmZjdmODQ4MGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJ0aW1lX3NlcmllcyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqUibHMxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlZKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SryJsb2Fkc2hhcGUubHMxIqp0ZXh0L3BsYWlukpKmInRpbWUiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjdkYWNiYmU4NGVhYTU2ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpInJlcGxhY2UiqnRleHQvcGxhaW6SpWZhbHNlqnRleHQvcGxhaW6SkqgidmFsdWVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDViOGU1MGU5NmM1MWIyODbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJvZmZzZXQiqnRleHQvcGxhaW6SozAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlZjFiNWRmYWIzMmI1OGNl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDFjMTdiNWZjOGQ2Njk4MGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SsCJ2c291cmNlLnNvdXJjZSKqdGV4dC9wbGFpbpKSpCJycyKqdGV4dC9wbGFpbpLZ1TTDlzQgTWF0cml4e0Zsb2F0NjR9OgogNC4yNzY5MWUtOCAgMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgNC4yNzY5MWUtOCAgMy45NjM0MmUtOSAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgNC4yNzY5MWUtOCAgMy45NjM0MmUtOQogMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgMy45NjM0MmUtOSAgNC4yNzY5MWUtOKp0ZXh0L3BsYWlukpKkInZhIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDk2ZWRiMGQ2ZThhNjkyYzTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZDAwM2EyMGRkYWUwYzZhOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGM3Njc4Yjg4YzlhODg1MjfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxNmZhY2U2ODc2MDMwYjUx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGM0NDlmYjIxNTBhMzEyODDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkpKSpiJxdWFkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKvInRfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDE2ZTQ3ZmY5MDRmZTVlODbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW6Skqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqsibGluZS5xdWFkIqp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnInRfYnVzIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4NTUzZWUzM2UxZGQyYWNh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgib2hsaW5lIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKvInRfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGYxNjgwYzgzM2EwNThlNWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmX2J1cyKqdGV4dC9wbGFpbpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrSJsaW5lLm9obGluZSKqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJ0X2J1cyKqdGV4dC9wbGFpbpKpInByaW1hcnkiqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwODQ0ODc5YTA1ZmM2NzI5N9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjOTczMzQyMTZhMWJiOGRj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqwiZGF0YV9tb2RlbCKqdGV4dC9wbGFpbpK6RU5HSU5FRVJJTkc6OkRhdGFNb2RlbCA9IDCqdGV4dC9wbGFpbpKSpiJsb2FkIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzk5KSpCJsMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDczOGYxMjg2MmYyOTdmODfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJwZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvOGRlODYxMzM5YjA1MjE52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSryJjb25maWd1cmF0aW9uIqp0ZXh0L3BsYWlukrNXWUU6OkNvbm5Db25maWcgPSAwqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzkzNTllYTRiYTc2ODVlMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkImwzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDBjMTNjNDg0OTk0YzgzNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInBkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2ZTAzMWExODgzZmFlZTY22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqUiYnVzIqp0ZXh0L3BsYWlukqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKSryJjb25maWd1cmF0aW9uIqp0ZXh0L3BsYWlukrNXWUU6OkNvbm5Db25maWcgPSAwqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGM0YTAyYTJlMGE2Yjc2Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkImwxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZjAwNjQwY2EyODFjNTBkZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInBkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZK82ZjY3MzExYjVlMTYxMTLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlukpKvImNvbmZpZ3VyYXRpb24iqnRleHQvcGxhaW6Ss1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbpKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3MTdiODg2MzJiMDZmYzY12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDRiMzVkYjQ4NWU3NzQwY2PZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJsaW5lY29kZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqgiNTU2bWNtIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpiJiX2ZyIqp0ZXh0L3BsYWluktlgM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAyNS40NjQ4ICAtMC4wICAgICAtMC4wCiAtMC4wICAgICAyNS40NjQ4ICAtMC4wCiAtMC4wICAgICAtMC4wICAgICAyNS40NjQ4qnRleHQvcGxhaW6SkqQicnMiqnRleHQvcGxhaW6S2Uozw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMSAgIDAuMDQgIDAuMDQKIDAuMDQgIDAuMSAgIDAuMDQKIDAuMDQgIDAuMDQgIDAuMap0ZXh0L3BsYWlukpKnImNtX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDI0MTVlZTZjOWY1MzQ4OTHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4cyKqdGV4dC9wbGFpbpLZXTPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wNTgzICAwLjAyMzMgIDAuMDIzMwogMC4wMjMzICAwLjA1ODMgIDAuMDIzMwogMC4wMjMzICAwLjAyMzMgIDAuMDU4M6p0ZXh0L3BsYWlukpKmImJfdG8iqnRleHQvcGxhaW6S2WAzw5czIE1hdHJpeHtGbG9hdDY0fToKIDI1LjQ2NDggIC0wLjAgICAgIC0wLjAKIC0wLjAgICAgIDI1LjQ2NDggIC0wLjAKIC0wLjAgICAgIC0wLjAgICAgIDI1LjQ2NDiqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWFhYzNjOGEwYzdmZTVkNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpIjQvMHF1YWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKmImJfZnIiqnRleHQvcGxhaW6S2WAzw5czIE1hdHJpeHtGbG9hdDY0fToKIDI1LjQ2NDggIC0wLjAgICAgIC0wLjAKIC0wLjAgICAgIDI1LjQ2NDggIC0wLjAKIC0wLjAgICAgIC0wLjAgICAgIDI1LjQ2NDiqdGV4dC9wbGFpbpKSpCJycyKqdGV4dC9wbGFpbpLZXTPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4xMTY3ICAwLjA0NjcgIDAuMDQ2NwogMC4wNDY3ICAwLjExNjcgIDAuMDQ2NwogMC4wNDY3ICAwLjA0NjcgIDAuMTE2N6p0ZXh0L3BsYWlukpKnImNtX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGZmYzVjNmI1ZDZjMTJhYjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4cyKqdGV4dC9wbGFpbpLZXTPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wNjY3ICAwLjAyNjcgIDAuMDI2NwogMC4wMjY3ICAwLjA2NjcgIDAuMDI2NwogMC4wMjY3ICAwLjAyNjcgIDAuMDY2N6p0ZXh0L3BsYWlukpKmImJfdG8iqnRleHQvcGxhaW6S2WAzw5czIE1hdHJpeHtGbG9hdDY0fToKIDI1LjQ2NDggIC0wLjAgICAgIC0wLjAKIC0wLjAgICAgIDI1LjQ2NDggIC0wLjAKIC0wLjAgICAgIC0wLjAgICAgIDI1LjQ2NDiqdGV4dC9wbGFpbpKSpiJnX3RvIqp0ZXh0L3BsYWluktlCM8OXMyBNYXRyaXh7RmxvYXQ2NH06CiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZGVlZjA1NTM5NTEzYTdhONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyMjQwMjFmNTFiYTdkN2Fh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU0OWYwNWIwODQ1NzcwMmWkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZaZlbmdfdHOybGFzdF9ydW5fdGltZXN0YW1wy0HZQshyrIGIsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYza5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc51gXzItXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNzQ4MzZiMmMtZGI2Ny00NDM1LWE1NTItYmE1YzNlOTNlNDNmiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkZIBkqMwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYzkxNGMyMmE1M2ZlYzBmMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkZIBkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDRhNGU2NTUwZDY2YzRmMWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOUkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlukgSSoTSqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTA2YTkzMjhmZjA5N2Y2MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnInZtX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOUkgGSpzIuNTQwMzSqdGV4dC9wbGFpbpICkqcyLjU0MDM0qnRleHQvcGxhaW6SA5KnMi41NDAzNKp0ZXh0L3BsYWlukgSSo0luZqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjZGYyY2UxZjY1Y2MxN2Ji2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidm1fbGIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5SSAZKnMi4wNzg0Nqp0ZXh0L3BsYWlukgKSpzIuMDc4NDaqdGV4dC9wbGFpbpIDkqcyLjA3ODQ2qnRleHQvcGxhaW6SBJKjMC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrzU1ZGEzMWJkNGExOWI1ZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInhnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORkgGSozAuMKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4NTRlYjNmMmNjNzJhNWNj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDg2NzAzYmI4ZDNjNzc4NmKkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiGlZt4sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ3NDgzNmIyYy1kYjY3LTQ0MzUtYTU1Mi1iYTVjM2U5M2U0M2a5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1p3LVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDVlNWRkMjRjLTk1YjUtNDk1MS04NTQ3LTEzZTIwYmIwZmVlY4qmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmgpG1pbWWqdGV4dC9wbGFpbqxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhkzqkrBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkNWU1ZGQyNGMtOTViNS00OTUxLTg1NDctMTNlMjBiYjBmZWVjuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXODGGHXLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDNkODY5ODlhLWE0ZGItNDc2Ni1hZWM3LWFiYzlhMjVmZmRlOIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaBE88ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPkVuZ2luZWVyaW5nIE1vZGVsIFRyYW5zZm9ybWF0aW9uczwvaDI+CjxwPk9uZSBvZiB0aGUgcG93ZXIgdGhpbmdzIGFib3V0IHRoZSBlbmdpbmVlcmluZyBtb2RlbCBpcyB0aGF0IGRhdGEgdHJhbnNmb3JtYXRpb25zIGFyZSBtdWNoIG1vcmUgc2ltcGxlLiBIZXJlIHdlIGlsbHVzdHJhdGUgdHdvIGV4YW1wbGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbmNsdWRlZCBpbiBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiwgYnV0IHdyaXRpbmcgeW91ciBvd24gZGF0YSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgd2lsbCBiZSB0cml2aWFsLCBhcyB3ZSB3aWxsIHNob3cuPC9wPgo8cD48c3Ryb25nPk5vdGU8L3N0cm9uZz46IEluIHYwLjksIDxjb2RlPmFwcGx5X2tyb25fcmVkdWN0aW9uJiMzMzs8L2NvZGU+IGFuZCA8Y29kZT5hcHBseV9waGFzZV9wcm9qZWN0aW9uJiMzMzs8L2NvZGU+IGFyZSBhcHBsaWVkIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgd2l0aCB0aGUga2V5d29yZCBhcmd1bWVudHMgPGNvZGU+a3Jvbl9yZWR1Y2UmIzYxO2ZhbHNlPC9jb2RlPiBhbmQgPGNvZGU+cGhhc2VfcHJvamVjdCYjNjE7ZmFsc2U8L2NvZGU+LCByZXNwZWN0aXZlbHkgaW4gPGNvZGU+cGFyc2VfZmlsZTwvY29kZT4gb3IgPGNvZGU+dHJhbnNmb3JtX2RhdGFfbW9kZWw8L2NvZGU+LjwvcD4KPHA+Rmlyc3QsIHRoZXJlIGFyZSBzZXZlcmFsIG9iamVjdHMgdGhhdCBoYXZlIGxvc3MgbW9kZWxzIGJ5IGRlZmF1bHQgd2hlbiBwYXJzaW5nIGZyb20gZHNzIGZpbGVzLCBzdWNoIGFzIHZvbHRhZ2Ugc291cmNlcywgdHJhbnNmb3JtZXJzLCBhbmQgc3dpdGNoZXMuIFRvIHJlbW92ZSB0aGVzZSBsb3NzIG1vZGVscywgdGhlcmVmb3JlIG1ha2luZyB0aGVzZSBjb21wb25lbnRzIGxvc3NsZXNzLCB3ZSBjYW4gdXNlIHRoZSBpbmNsdWRlZCA8Y29kZT5tYWtlX2xvc3Nlc3MmIzMzOzwvY29kZT4gZnVuY3Rpb24uIEhlcmUgd2UgdXNlIGEgYmFzaWMgMi13aW5kaW5nIHd5ZS13eWUgY29ubmVjdGVkIHRyYW5zZm9ybWVyIGNhc2UgZnJvbSA8Y29kZT50ZXN0PC9jb2RlPiB0byBpbGx1c3RyYXRlIHRoaXM8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhc6B5LBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkM2Q4Njk4OWEtYTRkYi00NzY2LWFlYzctYWJjOWEyNWZmZGU4uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAj6FLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGRlOTJiYzIwLWIxMjUtNGYzZC05MzBhLWIxZGE2M2Q1Y2VmNYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaAdA8ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPkltcG9ydHM8L2gyPgo8cD5BbGwgY29tbWFuZHMgaW4gdGhpcyBkb2N1bWVudCB3aXRoIG5vIHBhY2thZ2UgbmFtZXNwYWNlIHNwZWNpZmllZCBhcmUgZGlyZWN0bHkgZXhwb3J0ZWQgYnkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gb3IgYWxyZWFkeSBhdmFpbGFibGUgaW4gSnVsaWEgYmFzZS4gQW55IGNvbW1hbmRzIHRoYXQgYXJlIG9ubHkgYXZhaWFibGUgdmlhIGFuIGV4dGVybmFsIHBhY2thZ2Ugd2lsbCBiZSBzcGVjaWZpZWQgYnkgaW5jbHVkaW5nIGJ5IHVzaW5nIDxjb2RlPmltcG9ydDwvY29kZT4sIHdoaWNoIHdpbGwgcmVxdWlyZSBzcGVjaWZ5aW5nIHRoZSBvcmlnaW5hdGluZyBwYWNrYWdlIGJlZm9yZSB0aGUgY29tbWFuZCwgPGVtPmUuZy48L2VtPiA8Y29kZT5JcG9wdC5PcHRpbWl6ZXI8L2NvZGU+IGFzIHlvdSB3aWxsIHNlZSBiZWxvdy48L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIa3qiurBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZGU5MmJjMjAtYjEyNS00ZjNkLTkzMGEtYjFkYTYzZDVjZWY1uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAkTKPrVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGRiNGQ5ZWI5LWUxMjAtNDQ4OS1hM2MyLTQ4YzQzZjJhM2MzYoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaAv88ZGl2IGNsYXNzPSJtYXJrZG93biI+PGgyPkJ1aWxkaW5nIHRoZSBKdU1QIE1vZGVsPC9oMj4KPHA+SW4gc29tZSBjYXNlcyB0aGUgdXNlciB3aWxsIHdhbnQgdG8gZGlyZWN0bHkgYnVpbGQgdGhlIEp1TVAgbW9kZWwsIHdoaWNoIHdvdWxkIHRyYWRpdGlvbmFsbHkgYmUgZG9uZSB3aXRoIDxjb2RlPmluc3RhbnRpYXRlX21vZGVsPC9jb2RlPiBmcm9tIFBvd2VyTW9kZWxzLiBJbiBvcmRlciB0byBmYWNpbGl0YXRlIHVzaW5nIHRoZSA8Y29kZT5FTkdJTkVFUklORzwvY29kZT4gbW9kZWwgd2UgaGF2ZSBpbnRyb2R1Y2VkIDxjb2RlPmluc3RhbnRpYXRlX21jX21vZGVsPC9jb2RlPiB0byBhaWQgaW4gdGhlIGdlbmVyYXRpb24gb2YgdGhlIEp1TVAgbW9kZWwuIDxjb2RlPmluc3RhbnRpYXRlX21jX21vZGVsPC9jb2RlPiB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCB0aGUgZGF0YSBtb2RlbCB0byBNQVRIRU1BVElDQUwgaWYgbmVjZXNzYXJ5ICYjNDA7bm90aWZ5aW5nIHRoZSB1c2VyIG9mIHRoZSBjb252ZXJzaW9uJiM0MTssIGFuZCBwYXNzIHRoZSBNQVRIRU1BVElDQUwgbW9kZWwgb2ZmIHRvIFBvd2VyTW9kZWxzJiMzOTsgPGNvZGU+aW5zdGFudGlhdGVfbW9kZWw8L2NvZGU+IHdpdGggPGNvZGU+cmVmX2FkZF9hcmNzX3RyYW5zZm9ybWVyJiMzMzs8L2NvZGU+IGluIDxjb2RlPnJlZl9leHRlbnNpb25zPC9jb2RlPiwgd2hpY2ggaXMgYSByZXF1aXJlZCByZWYgZXh0ZW5zaW9uIGZvciBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi48L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhvrNHLBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZGI0ZDllYjktZTEyMC00NDg5LWEzYzItNDhjNDNmMmEzYzNiuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAY2prVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDlhYzZiMGVkLTU4YTgtNDA3OS1hYTlmLWQ3MDAyNGY0ZDRiNIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDkyNjJhMjhjYzhjNjkxYmHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDdhNzFhYmQ5OThlNGIzM2PZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOTkgGSoTGqdGV4dC9wbGFpbpICkqEyqnRleHQvcGxhaW6SA5KhM6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjMTM5NjA2YTQ3MWQxOWVh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5CkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDJkNWIwNGFmZmViNjg0N2HZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZDgzZjNhOWNlZTE2YWY1N9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GSAZKjMC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGE1MDYzZThiNmM4ZjgwZjPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GSAZKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjNTYxYmIxMzJkNDY4NzVh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQ0NDI4ZDU3ZWQyZWZhZWTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkZIBkqMwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwN2JiZTE5NzIxOWZmMzdkMdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmMzZmZjdhYWEwYjUzN2E22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqkibG9hZGJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GSAZKjMC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFlODRmNmEwZGY5MDFhNDDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GSAZKhNKp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBmYzM4MjdjMTlhZjY2Mzgy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDViYWRiNTM2ZmMwNWE2MTXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4ZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkZIBkqMwLjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTc4YjM5MDk3MTljYTA1ZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiOTMyNjNlZWFjM2ExMTRi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDQzY2Q1ZTI1YzFjZDVlZGakbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQshx+oC7sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ5YWM2YjBlZC01OGE4LTQwNzktYWE5Zi1kNzAwMjRmNGQ0YjS5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc1CabVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDg5ODQ2ODc4LWViZmMtNDlhNS05MWVmLTc2MmY2OTJiYTVlYYqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaAuM8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+V2UgY2FuIHNlZSB0aGVyZSBhcmUgdGhyZWUgYnVzZXMgaW4gdGhpcyBzeXN0ZW0sIGlkZW50aWZpZWQgYnkgaWRzIDxjb2RlPiZxdW90O3ByaW1hcnkmcXVvdDs8L2NvZGU+LCA8Y29kZT4mcXVvdDtzb3VyY2VidXMmcXVvdDs8L2NvZGU+LCBhbmQgPGNvZGU+JnF1b3Q7bG9hZGJ1cyZxdW90OzwvY29kZT4uPC9wPgo8cD48c3Ryb25nPk5PVEU8L3N0cm9uZz46IEluIEp1bGlhLCBvcmRlciBvZiBEaWN0aW9uYXJ5IGtleXMgaXMgbm90IGZpeGVkLCBub3IgZG9lcyBpdCByZXRhaW4gdGhlIG9yZGVyIGluIHdoaWNoIGl0IHdhcyBwYXJzZWQgbGlrZSA8ZW0+ZS5nLjwvZW0+IDxjb2RlPlZlY3RvcnM8L2NvZGU+LjwvcD4KPHA+SWRlbnRpZnlpbmcgY29tcG9uZW50cyBieSBub24taW50ZWdlciBuYW1lcyBpcyBhIG5ldyBmZWF0dXJlIG9mIHRoZSA8Y29kZT5FTkdJTkVFUklORzwvY29kZT4gbW9kZWwsIGFuZCBtYWtlcyBuZXR3b3JrIGRlYnVnZ2luZyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC48L3A+CjxwPjxzdHJvbmc+Tk9URTwvc3Ryb25nPjogYWxsIG5hbWVzIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIG9uIHBhcnNlIGZyb20gdGhlIG9yaWdpbmF0aW5nIGRzcyBmaWxlLjwvcD4KPHA+RWFjaCBidXMgY29tcG9uZW50IGhhcyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgaW4gdGhlIDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBtb2RlbDwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQshx/DyCsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ4OTg0Njg3OC1lYmZjLTQ5YTUtOTFlZi03NjJmNjkyYmE1ZWG5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4ACj2FtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkZjJmYTc3OWUtZjYyZC00MDUzLWIwNTUtZTlmMGFlZTZjM2Y3iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmJKSrCJzb2x2ZV90aW1lIqp0ZXh0L3BsYWlukqgwLjE4NDY4Map0ZXh0L3BsYWlukpKrIm9wdGltaXplciKqdGV4dC9wbGFpbpKnIklwb3B0Iqp0ZXh0L3BsYWlukpK0InRlcm1pbmF0aW9uX3N0YXR1cyKqdGV4dC9wbGFpbpLZKUxPQ0FMTFlfU09MVkVEOjpUZXJtaW5hdGlvblN0YXR1c0NvZGUgPSA0qnRleHQvcGxhaW6Skq0iZHVhbF9zdGF0dXMiqnRleHQvcGxhaW6S2SRGRUFTSUJMRV9QT0lOVDo6UmVzdWx0U3RhdHVzQ29kZSA9IDGqdGV4dC9wbGFpbpKSryJwcmltYWxfc3RhdHVzIqp0ZXh0L3BsYWluktkkRkVBU0lCTEVfUE9JTlQ6OlJlc3VsdFN0YXR1c0NvZGUgPSAxqnRleHQvcGxhaW6Skqsib2JqZWN0aXZlIqp0ZXh0L3BsYWlukqkwLjAyMTEzMDWqdGV4dC9wbGFpbpKSqiJzb2x1dGlvbiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5aSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKoInNvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwYjM0YjY1ZmYxOWMwMDhiZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3Nzk4NTYwNWEyNWEwYWMx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqYicXVhZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmI4NGJmZjEyYTI0ZTc5NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoIm9obGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTQzZDE5Yzc1YmEzODVjZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4YjBkOTJjYTQ5NDQ3ODAy2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKnInNiYXNlIqp0ZXh0L3BsYWlukqU1MDAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmYjZlZDRkMWE5Zjk3YmMz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqQibDIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGRmMjg4MzRkNzE3YTJhM2LZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJsMyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwM2M4MTBkZGJhYzJiM2IxNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkImwxIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0MzQzN2M1NmI5YjAxNDQ02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDliNWJlODA4NjllMTBlZDbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKpInByaW1hcnkiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDYyZTk3MGYwNzhlZTMzMjPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDRjODVhN2QyY2MyNjk4ZTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJsb2FkYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBlNzMyYmVjMDgxODBlZWFk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU0MWEwMDVmZmI0ZjcwMDDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJwZXJfdW5pdCKqdGV4dC9wbGFpbpKlZmFsc2WqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2Y4YjYyODM1MjQwMWUyN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKuIm9iamVjdGl2ZV9sYiKqdGV4dC9wbGFpbpKkLUluZqp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmYjA2M2Q0ZGE5NGMwNDE3pG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWWpcmVzdWx0X2Jmsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhD/1J7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZjJmYTc3OWUtZjYyZC00MDUzLWIwNTUtZTlmMGFlZTZjM2Y3uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXPAAAABtWr0yK1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQ4MmU5MzMwYi0yZTk0LTQyYTEtYjU2ZC00MzA2NzRiMTEyNDGKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHPcABKSkqoicG9sYXJpdHkiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHOSkgGSoTGqdGV4dC9wbGFpbpICkqExqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrzYyOWYxZWU3MzhjNTg2ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInNtX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkpIBkqU1MDAuMKp0ZXh0L3BsYWlukgKSpTUwMC4wqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGNkMjY1OWE1Y2FkMWE2NjjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ0bV9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHOSkgGShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKjMC45qnRleHQvcGxhaW6SApKjMC45qnRleHQvcGxhaW6SA5KjMC45qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGMzZTg3OTkzZjMwOGU4NmTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSozAuOap0ZXh0L3BsYWlukgKSozAuOap0ZXh0L3BsYWlukgOSozAuOap0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjM2U4Nzk5M2YzMDhlODZk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI3MDMxYjkxNTExZWQ1ZjTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeK1WZWN0b3J7SW50NjR9qGVsZW1lbnRzkpIBkoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQ1ZTY0OTgwOTc4NWU5YjbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDVhZTY3MDFlYTE4NjFhNDDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODdlZjllZmU2MWUyM2QwZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInRtX3NldCKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHOSkgGShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKkMS4wMqp0ZXh0L3BsYWlukgKSpDEuMDKqdGV4dC9wbGFpbpIDkqQxLjAyqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDg1NWQyZDgzZmE1Y2Y0NDbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJICkoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOTkgGSpDAuOTeqdGV4dC9wbGFpbpICkqQwLjk3qnRleHQvcGxhaW6SA5KkMC45N6p0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlNDIzZjUwZTMzN2Y2ODE52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDU5NTQzYmZhMTkzN2IyZTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJ0bV9zdGVwIqp0ZXh0L3BsYWlukoWmcHJlZml4r1ZlY3RvcntGbG9hdDY0fahlbGVtZW50c5KSAZKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqcwLjAzMTI1qnRleHQvcGxhaW6SApKnMC4wMzEyNap0ZXh0L3BsYWlukgOSpzAuMDMxMjWqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYjU5OWYzNWU1MjdjN2ExYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKnMC4wMzEyNap0ZXh0L3BsYWlukgKSpzAuMDMxMjWqdGV4dC9wbGFpbpIDkqcwLjAzMTI1qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGI1OTlmMzVlNTI3YzdhMWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZTI2YTc0Mzg5NmQ3ZDRlYdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHOSkgGSoyIxIqp0ZXh0L3BsYWlukgKSoyIyIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0Mjk4YzRjMDU3MzQ5ODc42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq8iY29uZmlndXJhdGlvbiKqdGV4dC9wbGFpbpKFpnByZWZpeNkiUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uQ29ubkNvbmZpZ6hlbGVtZW50c5KSAZKzV1lFOjpDb25uQ29uZmlnID0gMKp0ZXh0L3BsYWlukgKSs1dZRTo6Q29ubkNvbmZpZyA9IDCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMmZlZWI3MzljOGM4MzhmZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKsIm5vbG9hZGxvc3MiqnRleHQvcGxhaW6SpDAuMDWqdGV4dC9wbGFpbpKSpiJjbWFnIqp0ZXh0L3BsYWlukqQwLjExqnRleHQvcGxhaW6SkqUieHNjIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORkgGSpDAuMDWqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMzAyZGE0NmYzMzcxMzA1YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKxInRyYW5zZm9ybWVyLnR4MSKqdGV4dC9wbGFpbpKSpyJzbV91YiKqdGV4dC9wbGFpbpKlNzUwLjCqdGV4dC9wbGFpbpKSpCJydyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkpIBkqQwLjAxqnRleHQvcGxhaW6SApKkMC4wMqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA5ZTU3NjdmOTI0OWE3MGE02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidG1fZml4Iqp0ZXh0L3BsYWlukoWmcHJlZml4rFZlY3RvcntCb29sfahlbGVtZW50c5KSAZKFpnByZWZpeKRCb29sqGVsZW1lbnRzk5IBkqR0cnVlqnRleHQvcGxhaW6SApKkdHJ1Zap0ZXh0L3BsYWlukgOSpHRydWWqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjMzNTU2ZTQxOTdlYWVlN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKShaZwcmVmaXikQm9vbKhlbGVtZW50c5OSAZKkdHJ1Zap0ZXh0L3BsYWlukgKSpHRydWWqdGV4dC9wbGFpbpIDkqR0cnVlqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDYzMzU1NmU0MTk3ZWFlZTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvYTUzYWMyOGU2YWE0Mzlh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidm1fbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHOSkgGSpDExLjCqdGV4dC9wbGFpbpICkqM0LjCqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZmRiNGMyNmIyYzdiZTQ4MtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnInRtX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4r1ZlY3RvcntGbG9hdDY0fahlbGVtZW50c5KSAZKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzk5IBkqMxLjGqdGV4dC9wbGFpbpICkqMxLjGqdGV4dC9wbGFpbpIDkqMxLjGqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjQ4MWMyMjczM2NkMGMwNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kgKShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5OSAZKjMS4xqnRleHQvcGxhaW6SApKjMS4xqnRleHQvcGxhaW6SA5KjMS4xqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDY0ODFjMjI3MzNjZDBjMDXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNTcwNDkxMDcxMTIxYzIzNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjYmU3Y2VlMDQ4ZDM3N2Y1pG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhjkfELBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkODJlOTMzMGItMmU5NC00MmExLWI1NmQtNDMwNjc0YjExMjQxuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXNS8i1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRkZGUyZGE1OS02M2ZhLTQ1NDktODgyOS00OTFlNWYzYzY3NWWKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gGrPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoMz5UcmFuc2Zvcm1hdGlvbnMgb24gTXVsdGluZXR3b3JrczwvaDM+CjxwPlRyYW5zZm9ybWF0aW9ucyBvbiBNdWx0aW5ldHdvcmtzIHNob3VsZCBoYXBwZW4gPHN0cm9uZz5iZWZvcmU8L3N0cm9uZz4gdGhlIG5ldHdvcmsgaXMgY29udmVydGVkIGludG8gYSA8Y29kZT5NQVRIRU1BVElDQUw8L2NvZGU+IGRhdGEgbW9kZWwsIHNvIHRoYXQgdGhleSBjYW4gZ2VuZXJhbGx5IGZvbGxvdyB0aGUgc2FtZSBwYXR0ZXJuIGFzIHNob3duIGFib3ZlIGFuZCBjYW4gYmUgc2VlbiBpbiB0aGUgPGNvZGU+bWFrZV9sb3NzbGVzcyYjMzM7PC9jb2RlPiBhbmQgPGNvZGU+YXBwbHlfdm9sdGFnZV9ib3VuZHMmIzMzOzwvY29kZT4gZnVuY3Rpb25zIGFscmVhZHkgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb248L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhrOMWLBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZGRlMmRhNTktNjNmYS00NTQ5LTg4MjktNDkxZTVmM2M2NzVluWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAb+Q7VwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGZiODFkM2MxLWE0N2ItNDZkOS1iNDYzLTE3NjYwMjJiZTExNIqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHnaAQQ8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+VGhlIHJlc3VsdCBvZiA8Y29kZT5zb2x2ZV9tY19vcGY8L2NvZGU+IHdpbGwgYmUgdmVyeSBmYW1pbGlhciB0byB0aG9zZSB3aG8gYXJlIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBQb3dlck1vZGVscyBhbmQgUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uIFRoZSBub3RhYmxlIGRpZmZlcmVuY2Ugd2lsbCBiZSBpbiB0aGUgPGNvZGU+JnF1b3Q7c29sdXRpb24mcXVvdDs8L2NvZGU+IGRpY3Rpb25hcnk8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIfN9i7bBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZmI4MWQzYzEtYTQ3Yi00NmQ5LWI0NjMtMTc2NjAyMmJlMTE0uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAATOGLVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGYwNzBkYmJjLTFhNTUtNDhmMi1hYTIxLTIxMTllYjU3M2I1YoqmcXVldWVkwqRsb2dzkKdydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqYicXVhZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5mSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzk5IBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOWUyMjg2YmY5MTcxMTk3MdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbpKSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SqyJsaW5lLnF1YWQiqnRleHQvcGxhaW6Skqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcidF9idXMiqnRleHQvcGxhaW6SqSJsb2FkYnVzIqp0ZXh0L3BsYWlukpKqImxpbmVjb2RlIqp0ZXh0L3BsYWlukqkiNC8wcXVhZCKqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzk5IBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZGUxYmEwNTQ5MTYzNGFiNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImRzcyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqYicXVhZCKqdGV4dC9wbGFpbpKSpiJidXMxIqp0ZXh0L3BsYWlukq8icHJpbWFyeS4xLjIuMyKqdGV4dC9wbGFpbpKSqiJsaW5lY29kZSKqdGV4dC9wbGFpbpKpIjQvMHF1YWQiqnRleHQvcGxhaW6SkqYiYnVzMiKqdGV4dC9wbGFpbpKvImxvYWRidXMuMS4yLjMiqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY5YmNlZmQzYThhNWY2ODLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTMzNzZjNGQ3YjlhYmZmMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoIm9obGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5mSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSryJ0X2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzk5IBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOWRjZTZjNTMxMGM5ZTUzNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImZfYnVzIqp0ZXh0L3BsYWlukqsic291cmNlYnVzIqp0ZXh0L3BsYWlukpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKtImxpbmUub2hsaW5lIqp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnInRfYnVzIqp0ZXh0L3BsYWlukqkicHJpbWFyeSKqdGV4dC9wbGFpbpKSqiJsaW5lY29kZSKqdGV4dC9wbGFpbpKoIjU1Nm1jbSKqdGV4dC9wbGFpbpKSryJmX2Nvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzk5IBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbqR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZTQxNGNiY2IxZDU2OWY5ZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImRzcyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqgibGVuZ3RoIqp0ZXh0L3BsYWlukqMxLjCqdGV4dC9wbGFpbpKSpiJuYW1lIqp0ZXh0L3BsYWlukqgib2hsaW5lIqp0ZXh0L3BsYWlukpKmImJ1czEiqnRleHQvcGxhaW6SsSJzb3VyY2VidXMuMS4yLjMiqnRleHQvcGxhaW6SkqoibGluZWNvZGUiqnRleHQvcGxhaW6SqCI1NTZtY20iqnRleHQvcGxhaW6SkqYiYnVzMiKqdGV4dC9wbGFpbpKvInByaW1hcnkuMS4yLjMiqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDI4OGFmYjRhMjY0NjkwOTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwY2E1MjhiMTY2OWQ1YWNhNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4YmM0NDdhN2VjYjRhYWNlpG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIciUQVrBwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkZjA3MGRiYmMtMWE1NS00OGYyLWFhMjEtMjExOWViNTczYjViuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXNQmi1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRhMDlkZThhYi1jMWUxLTRjOWYtOWQ4Ni00MjY4Y2U1MDNjYWWKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52as8ZGl2IGNsYXNzPSJtYXJrZG93biI+PHA+SWYgZm9yIHNvbWUgcmVhc29uIHlvdSB3YW50IHRvIHJldHVybiB0aGUgcmVzdWx0IGluIHBlci11bml0IHJhdGhlciB0aGFuIFNJLCB5b3UgY2FuIHNwZWNpZnkgdGhpcyBpbiB0aGUgPGNvZGU+c29sdmVfPC9jb2RlPiBjb21tYW5kIGJ5PC9wPgo8L2Rpdj6kbWltZal0ZXh0L2h0bWyscm9vdGFzc2lnbmVlwLJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyHziAeuwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGEwOWRlOGFiLWMxZTEtNGM5Zi05ZDg2LTQyNjhjZTUwM2NhZblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgAEGmi1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SRiOGUwMWNlMi1kN2Y3LTRjNzMtODIzMC05ZmRlZWNhYjJjNGWKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R52gGkPGRpdiBjbGFzcz0ibWFya2Rvd24iPjxoND5SdW5uaW5nIDxjb2RlPk1BVEhFTUFUSUNBTDwvY29kZT4gTXVsdGluZXR3b3JrczwvaDQ+CjxwPkFzIHdpdGggdGhlIDxjb2RlPkVOR0lORUVSSU5HPC9jb2RlPiBleGFtcGxlIG9mIHJ1bm5pbmcgYSBtdWx0aW5ldHdvcmsgcHJvYmxlbSwgeW91IHdpbGwgbmVlZCBhIG11bHRpbmV0d29yayBwcm9ibGVtIHNwZWNpZmljYXRpb24sIGFuZCBhcyB3aXRoIHRoZSBwcmV2aW91cyBzaW5nbGUgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBuZXR3b3JrIGV4YW1wbGUgYWJvdmUsIHdlIG9ubHkgb2J0YWluIHRoZSA8Y29kZT5NQVRIRU1BVElDQUw8L2NvZGU+IHNvbHV0aW9uLCBhbmQgY2FuIHRyYW5zZm9ybSB0aGUgc29sdXRpb24gaW4gdGhlIHNhbWUgbWFubmVyIGFzIGJlZm9yZTwvcD4KPC9kaXY+pG1pbWWpdGV4dC9odG1srHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiG9kUXsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SRiOGUwMWNlMi1kN2Y3LTRjNzMtODIzMC05ZmRlZWNhYjJjNGW5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4Are5ktXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkYWM5NGU1NTYtYjU0NC00Y2E2LTg3YmQtZmYyZDdhNzQxNGU3iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedlDIi9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjLy4uIqRtaW1lqnRleHQvcGxhaW6scm9vdGFzc2lnbmVlqHBtZF9wYXRosmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIa6qn27BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkYWM5NGU1NTYtYjU0NC00Y2E2LTg3YmQtZmYyZDdhNzQxNGU3uWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAFxibVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJGFlOGRhZjZjLTQwNTUtNDk3ZS05MDVjLWQ2ZDVhNjM3M2FkM4qmcXVldWVkwqRsb2dzkYikbGluZf+jbXNnktlyYXNzdW1pbmcgdGltZSBpcyBpbiBob3VycyBmb3IgdGltZV9lbGFwc2VkIGluZmVyZW5jZS4gaWYgdGhpcyBpcyBpbmNvcnJlY3QsIG1hbnVhbGx5IGFkanVzdCB3aXRoIHNldF90aW1lX2VsYXBzZWQhqnRleHQvcGxhaW6nY2VsbF9pZNkkYWU4ZGFmNmMtNDA1NS00OTdlLTkwNWMtZDZkNWE2MzczYWQzpmt3YXJnc5CiaWTZIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uXzAzNjEzMzlmpGZpbGXZWS9ob21lL3J1bm5lci8uanVsaWEvcGFja2FnZXMvUG93ZXJNb2RlbHNEaXN0cmlidXRpb24vNFR3YjIvc3JjL2RhdGFfbW9kZWwvbXVsdGluZXR3b3JrLmpspWdyb3VwrG11bHRpbmV0d29ya6VsZXZlbKRJbmZvp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzmJKSrCJzb2x2ZV90aW1lIqp0ZXh0L3BsYWlukqkwLjAwMjAzMTiqdGV4dC9wbGFpbpKSqyJvcHRpbWl6ZXIiqnRleHQvcGxhaW6SpyJJcG9wdCKqdGV4dC9wbGFpbpKStCJ0ZXJtaW5hdGlvbl9zdGF0dXMiqnRleHQvcGxhaW6S2SlMT0NBTExZX1NPTFZFRDo6VGVybWluYXRpb25TdGF0dXNDb2RlID0gNKp0ZXh0L3BsYWlukpKtImR1YWxfc3RhdHVzIqp0ZXh0L3BsYWluktkkRkVBU0lCTEVfUE9JTlQ6OlJlc3VsdFN0YXR1c0NvZGUgPSAxqnRleHQvcGxhaW6Skq8icHJpbWFsX3N0YXR1cyKqdGV4dC9wbGFpbpLZJEZFQVNJQkxFX1BPSU5UOjpSZXN1bHRTdGF0dXNDb2RlID0gMap0ZXh0L3BsYWlukpKrIm9iamVjdGl2ZSKqdGV4dC9wbGFpbpKnMC4wMDQ5Nap0ZXh0L3BsYWlukpKqInNvbHV0aW9uIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkZKSpCJudyKqdGV4dC9wbGFpbpKFpnByZWZpeL9EaWN0e1N0cmluZywgRGljdHtTdHJpbmcsIEFueX19qGVsZW1lbnRzl5KSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBmMzIzYThlNjJkM2E5YTY02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiNCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZmExZTRhZDQzYjJlYjYzMNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk5ZWJkZTE4N2FjOWMzM2HZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyI1Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzkaRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA3NTg5ZjM4MWIyMDVlN2I52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqMiMiKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGMwZDdiZDE1ZjBkMGFhONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKjIjYiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORpG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDNkYWNjMjBkYzI0Yjk3ZWHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyYmNmYWZkMTllOTFhMjdh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGUyOWFlMDM0OGMyOGVjYzHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSriJvYmplY3RpdmVfbGIiqnRleHQvcGxhaW6SpC1JbmaqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZGM4OTFhODU4MWUwMTMzM6RtaW1l2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3Sscm9vdGFzc2lnbmVlqXJlc3VsdF9tbrJsYXN0X3J1bl90aW1lc3RhbXDLQdlCyIXOBaOwcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJGFlOGRhZjZjLTQwNTUtNDk3ZS05MDVjLWQ2ZDVhNjM3M2FkM7lkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzwAAAAFueESCtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkNjY2MjIzZDUtODAyYS00MTY0LTg4MmMtOGFiMWExMzE5ZDZkiqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9kedoBNTxkaXYgY2xhc3M9Im1hcmtkb3duIj48aDM+UnVubmluZyA8Y29kZT5NQVRIRU1BVElDQUw8L2NvZGU+IG1vZGVsczwvaDM+CjxwPlRoZXJlIGlzIHZlcnkgbGl0dGxlIGRpZmZlcmVuY2UgZnJvbSB0aGUgdXNlciBwb2ludC1vZi12aWV3IGluIHJ1bm5pbmcgPGNvZGU+TUFUSEVNQVRJQ0FMPC9jb2RlPiBtb2RlbHMgb3RoZXIgdGhhbiB0aGUgcmVzdWx0cyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCBiYWNrIHRvIHRoZSB0aGUgZm9ybWF0IG9mIHRoZSA8Y29kZT5FTkdJTkVFUklORzwvY29kZT4gbW9kZWw8L3A+CjwvZGl2PqRtaW1lqXRleHQvaHRtbKxyb290YXNzaWduZWXAsmxhc3RfcnVuX3RpbWVzdGFtcMtB2ULIhu6rk7BwZXJzaXN0X2pzX3N0YXRlwrdoYXNfcGx1dG9faG9va19mZWF0dXJlc8KnY2VsbF9pZNkkNjY2MjIzZDUtODAyYS00MTY0LTg4MmMtOGFiMWExMzE5ZDZkuWRlcGVuZHNfb25fZGlzYWJsZWRfY2VsbHPCp3J1bnRpbWXOAAWynbVwdWJsaXNoZWRfb2JqZWN0X2tleXOQuGRlcGVuZHNfb25fc2tpcHBlZF9jZWxsc8KnZXJyb3JlZMLZJDQwMjBkNjdhLTRhOWUtNDAzMC1iN2NkLWU1ZDYwZTc4NDk1Y4qmcXVldWVkwqRsb2dzk4ikbGluZf+jbXNnktlJQ2lyY3VpdCBoYXMgYmVlbiByZXNldCB3aXRoIHRoZSAnY2xlYXInIG9uIGxpbmUgMSBpbiAndXRfdHJhbnNfMndfeXkuZHNzJ6p0ZXh0L3BsYWlup2NlbGxfaWTZJDQwMjBkNjdhLTRhOWUtNDAzMC1iN2NkLWU1ZDYwZTc4NDk1Y6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl9kMjRhZWMwMKRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2VlDb21tYW5kICdjYWxjdm9sdGFnZWJhc2VzJyBvbiBsaW5lIDM1IGluICd1dF90cmFuc18yd195eS5kc3MnIGlzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nLqp0ZXh0L3BsYWlup2NlbGxfaWTZJDQwMjBkNjdhLTRhOWUtNDAzMC1iN2NkLWU1ZDYwZTc4NDk1Y6Zrd2FyZ3OQomlk2SBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbl83ODkyMTQ5NqRmaWxl2VIvaG9tZS9ydW5uZXIvLmp1bGlhL3BhY2thZ2VzL1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLzRUd2IyL3NyYy9pby9kc3MvZHNzX3BhcnNlLmpspWdyb3VwqWRzc19wYXJzZaVsZXZlbKRJbmZviKRsaW5l/6Ntc2eS2U5Db21tYW5kICdzb2x2ZScgb24gbGluZSAzOCBpbiAndXRfdHJhbnNfMndfeXkuZHNzJyBpcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZy6qdGV4dC9wbGFpbqdjZWxsX2lk2SQ0MDIwZDY3YS00YTllLTQwMzAtYjdjZC1lNWQ2MGU3ODQ5NWOma3dhcmdzkKJpZNkgUG93ZXJNb2RlbHNEaXN0cmlidXRpb25fNzg5MjE0OTakZmlsZdlSL2hvbWUvcnVubmVyLy5qdWxpYS9wYWNrYWdlcy9Qb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi80VHdiMi9zcmMvaW8vZHNzL2Rzc19wYXJzZS5qbKVncm91cKlkc3NfcGFyc2WlbGV2ZWykSW5mb6dydW5uaW5nwqZvdXRwdXSGpGJvZHmFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5qSkrAidm9sdGFnZV9zb3VyY2UiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKoInNvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukrAidnNvdXJjZS5zb3VyY2UiqnRleHQvcGxhaW6SkqQicnMiqnRleHQvcGxhaW6S2WU0w5c0IE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMCAgMC4wCiAwLjAgIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlukpKkInZhIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDlkOTA0MWU2NmNjNGRlM2XZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYTc5MGI5YWI4MGM4ZGZhNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDhiMzQwOGM2YzgwZjc4MWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAxM2EyNzA2NWViZDJlZmY32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDk1OGE0YjM0ZWZhMmYwZWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJuYW1lIqp0ZXh0L3BsYWlukqoidXRfdHJhbnMiqnRleHQvcGxhaW6SkqYibGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqcibGluZTIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKnImNtX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGNhNjI4OGUzZDk0ZDFjNDDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4cyKqdGV4dC9wbGFpbpLZQjPDlzMgTWF0cml4e0Zsb2F0NjR9OgogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMAogMC4wICAwLjAgIDAuMKp0ZXh0L3BsYWlukpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDI0ZDkwMjA2MGUzYTRhZWLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKmImdfdG8iqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4ZjFjMjYzZDYyYzA1YmRj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibGluZTEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKnImNtX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDViNWM0YTIyN2I0MDc0MTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ4cyKqdGV4dC9wbGFpbpLZSzPDlzMgTWF0cml4e0Zsb2F0NjR9OgogIDAuMCAgLTAuMCAgLTAuMAogLTAuMCAgIDAuMCAgLTAuMAogLTAuMCAgLTAuMCAgIDAuMKp0ZXh0L3BsYWlukpKvImZfY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGJhNTI1MmZlYjkyYzhmM2HZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJsZW5ndGgiqnRleHQvcGxhaW6SozEuMKp0ZXh0L3BsYWlukpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKmImdfdG8iqnRleHQvcGxhaW6S2UIzw5czIE1hdHJpeHtGbG9hdDY0fToKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjAKIDAuMCAgMC4wICAwLjCqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBjNjdhNGM5ZGQxN2M3ZGRj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDcyMzM1ZWQ1YThlZWM0MDnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSryJjb25kdWN0b3JfaWRzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzlJIBkqExqnRleHQvcGxhaW6SApKhMqp0ZXh0L3BsYWlukgOSoTOqdGV4dC9wbGFpbpIEkqE0qnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDNhYWZiZDhiYTcwNmUwOTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJzZXR0aW5ncyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkq8ic2Jhc2VfZGVmYXVsdCKqdGV4dC9wbGFpbpKjMS4wqnRleHQvcGxhaW6SkrAidmJhc2VzX2RlZmF1bHQiqnRleHQvcGxhaW6ShaZwcmVmaXiyRGljdHtTdHJpbmcsIFJlYWx9qGVsZW1lbnRzkZKSqyJzb3VyY2VidXMiqnRleHQvcGxhaW6SpzYuMzUwODWqdGV4dC9wbGFpbqR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNDQ1Y2E5ZDI0Y2VkMjJhN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpK2InZvbHRhZ2Vfc2NhbGVfZmFjdG9yIqp0ZXh0L3BsYWlukqYxMDAwLjCqdGV4dC9wbGFpbpKStCJwb3dlcl9zY2FsZV9mYWN0b3IiqnRleHQvcGxhaW6SpjEwMDAuMKp0ZXh0L3BsYWlukpKwImJhc2VfZnJlcXVlbmN5Iqp0ZXh0L3BsYWlukqQ2MC4wqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY3ZTFiMDM3OTNmYTk0ODHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJmaWxlcyKqdGV4dC9wbGFpbpKFpnByZWZpeKZTdHJpbmeoZWxlbWVudHORkgGS2SkiLi4vdGVzdC9kYXRhL29wZW5kc3MvdXRfdHJhbnNfMndfeXkuZHNzIqp0ZXh0L3BsYWlupHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2ODIxM2M1YzNmOTA1MjE32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq0idHJhbnNmb3JtZXIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKlInR4MSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqoicG9sYXJpdHkiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkr2U1ZTFlM2VlMTQ0NjVmOdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInNtX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0NjUxMzcyMTUxMmFlNGI52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidG1fbGIiqnRleHQvcGxhaW6ShaZwcmVmaXivVmVjdG9ye0Zsb2F0NjR9qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxZmJhYWRhZTJlYzY5Zjdj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXitVmVjdG9ye0ludDY0fahlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwODc2OTU5NmE3ZTI0MmQyN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInRtX3NldCKqdGV4dC9wbGFpbpKFpnByZWZpeK9WZWN0b3J7RmxvYXQ2NH2oZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGZlOTE3NTQ1NmM3NDAwZWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqSJ0bV9zdGVwIqp0ZXh0L3BsYWlukoWmcHJlZml4r1ZlY3RvcntGbG9hdDY0fahlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOGUwOTAxYzE4YjYzNTVkNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDY0MGZhMTM4MGNhNzgzOWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwODk0MjQ5N2FkNzA1YmVkZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKmImxvYWQiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOWkpKnImxvYWQzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQzIqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBkZTQ3MTkzNGFiZDM0ZjJl2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkr2JmZTYzOTNkYzdkYzhhM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKlNi41MzGqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkMWNkNWRiM2U4MWJiNDYw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcibG9hZDYiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKrInNvdXJjZV9pZCKqdGV4dC9wbGFpbpKsImxvYWQubG9hZDYiqnRleHQvcGxhaW6SkqgicWRfbm9tIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDI1MGM4ZTczMzk2Y2JiY2XZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSpyJtb2RlbCKqdGV4dC9wbGFpbpK0UE9XRVI6OkxvYWRNb2RlbCA9IDCqdGV4dC9wbGFpbpKSrSJjb25uZWN0aW9ucyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMWIyNGIzYmFmYWM5NWEzNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInZtX25vbSKqdGV4dC9wbGFpbpKjMi4zqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTQxNzJiMTAwY2FlOGI1ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQyIqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyZjFkOGQ5MGNkOGVkZWEx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQ5MjdjY2JlZjZjZmIyZDLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SpTYuNTMxqnRleHQvcGxhaW6kbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMWUzYWVmMTI4MGY1ZjE4NNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnImxvYWQ1Iqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSqyJzb3VyY2VfaWQiqnRleHQvcGxhaW6SrCJsb2FkLmxvYWQ1Iqp0ZXh0L3BsYWlukpKoInFkX25vbSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAyMDBhMWFiOGFmNjcxZjI52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqcibW9kZWwiqnRleHQvcGxhaW6StFBPV0VSOjpMb2FkTW9kZWwgPSAwqnRleHQvcGxhaW6Skq0iY29ubmVjdGlvbnMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGJiMTBkYWQ5YmFhMjQ5ZTjZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJ2bV9ub20iqnRleHQvcGxhaW6SozIuM6p0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDE1NGVkZmI0ZWYxZTRjZDHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJsb2FkMSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqwibG9hZC5sb2FkMSKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjJiZjQ0NzUzNGQxY2JiNdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBjYzllMzFkOTVkYmNjZDMz2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidm1fbm9tIqp0ZXh0L3BsYWlukqU2LjUzMap0ZXh0L3BsYWlupG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGVmOWIxOWI1YTNiNjk0ZWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJsb2FkNCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5eSkqsic291cmNlX2lkIqp0ZXh0L3BsYWlukqwibG9hZC5sb2FkNCKqdGV4dC9wbGFpbpKSqCJxZF9ub20iqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjgzZmMyZmUzZmMwOGVmN9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKnIm1vZGVsIqp0ZXh0L3BsYWlukrRQT1dFUjo6TG9hZE1vZGVsID0gMKp0ZXh0L3BsYWlukpKtImNvbm5lY3Rpb25zIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxZWY0YTA3NzAyNjY2NmQ52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgidm1fbm9tIqp0ZXh0L3BsYWlukqMyLjOqdGV4dC9wbGFpbqRtb3JlpHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBkNWZmNjFiMWYwN2JiMDEw2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDhmMmJiZDYyNjJkODQ2OTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpSJidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKjIjEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOXkpKkInJnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGIwMWRiZDdmNGY3ZjViYTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqiJncm91bmRlZCKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZGUyYWI2YWNhYjk5MjNkNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKoInN0YXR1cyKqdGV4dC9wbGFpbpKzRU5BQkxFRDo6U3RhdHVzID0gMap0ZXh0L3BsYWlukpKrInRlcm1pbmFscyKqdGV4dC9wbGFpbpKFpnByZWZpeKVJbnQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNWY3MWNlNDYwMzcwYjkyZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKnInZtX3ViIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDdiMjBhMjdmZGVjMTQ1NDbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ2bV9sYiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2OTJmMmExY2JhZGUyN2Q42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkbW9yZaR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTE4YWVkMjY2NzQ5ODQ0MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5WSkqQicmciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMTU5NWQ4OTgxYTZlZTNmY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqImdyb3VuZGVkIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlODQ2NTNmYTNmY2ZkYzA12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgic3RhdHVzIqp0ZXh0L3BsYWlukrNFTkFCTEVEOjpTdGF0dXMgPSAxqnRleHQvcGxhaW6SkqsidGVybWluYWxzIqp0ZXh0L3BsYWlukoWmcHJlZml4pUludDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4NWVkODQzYjUwNjgyNDg02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQieGciqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwY2Q5NDk3ODQ4YTZjNjVmNtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZK9mMmYwMTZlNjI5MGFhMWPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIyIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA1ODllMzFjNjIwN2Y5ZjRi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDIwN2YzMTI3YjA0MTlhMTfZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGU4OTFiYzIzMTViMDk2MGXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ2bV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4MmU0MDYzN2VlNDdmOWU22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidm1fbGIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwMzNiMDQwNjVjZmUwNjYwM9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGU3ZDAxZDgwMTNkMmRlMTDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSoyIzIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzl5KSpCJyZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2OGE4YjM0NWMwOTU3OTc22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoiZ3JvdW5kZWQiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDk4ODMwNGM5YTA0YTE4OTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJzdGF0dXMiqnRleHQvcGxhaW6Ss0VOQUJMRUQ6OlN0YXR1cyA9IDGqdGV4dC9wbGFpbpKSqyJ0ZXJtaW5hbHMiqnRleHQvcGxhaW6ShaZwcmVmaXilSW50NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGViNmYwYjBjOWI2YjJlODHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpyJ2bV91YiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA0MjViZjA3ZWVkMzc0NjAx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqcidm1fbGIiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNzRhZTQ3ZTJkMWRiZTI0Y9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pG1vcmWkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDU3Yjc3NTE0NzNhMTg0NmLZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwOGExNGRhMmQ1ODVkNWQ5ONkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKsImRhdGFfbW9kZWwiqnRleHQvcGxhaW6SukVOR0lORUVSSU5HOjpEYXRhTW9kZWwgPSAwqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGY0YWM1MmMyMmQ4ZmQ2ZjCkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiGswb3sHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQ0MDIwZDY3YS00YTllLTQwMzAtYjdjZC1lNWQ2MGU3ODQ5NWO5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4WUBp9tXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwtkkMDUzNjAxNjMtNGE2Zi00MWRhLThmYWUtMDcwZTMyN2MyNjA1iqZxdWV1ZWTCpGxvZ3OQp3J1bm5pbmfCpm91dHB1dIakYm9keYWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlpKSsCJ2b2x0YWdlX3NvdXJjZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5GSkqgic291cmNlIqp0ZXh0L3BsYWlukoWmcHJlZml4sURpY3R7U3RyaW5nLCBBbnl9qGVsZW1lbnRzlJKSqCJxZ19idXMiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZmI2Yjg0ZmViYzYwNzI4NdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInFnIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGUzYWI5NjQzOGNkNDMwZTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJwZyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzOThmNThmZjM4OWJiNjUx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicGdfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGRhN2YyOTIwZmE3YjVhNTbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNWUyNDUzOTgwMWM1OGExMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4N2FhYzYzMjU0ZDIyZTk22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibGluZSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqYicXVhZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5SSkqQicWYiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNDNiMzkzMzFjY2YwZDdmZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInF0Iqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrzk1Y2VlNWVkODQzOTQ0OdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInB0Iqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGIwMjI4ZGY4YTVjZWMwNGHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJwZiKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA4MjdmMGFlYjRhODdjY2Nj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksGE3MzE3ZTU5OTNkZjAxNGPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSqCJvaGxpbmUiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKkInFmIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDFiZmFjMWYyZmQ3ZjJhMDXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJxdCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBlN2RmMzc2Nzk1NDgxNTFi2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicHQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOTUyOTMyYzFlZmRjMGQ5ZNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInBmIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDg4NDU3NzExZDYxNDZkZGTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMTUwZmFiZWE2ZjliNTUwY9khYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA4ZjhhZjBmMDY0OTFmMDk22SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqoic2V0dGluZ3MiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHORkpKnInNiYXNlIqp0ZXh0L3BsYWlukqU1MDAuMKp0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA5OWNhNDllNmY5MTBhNzVm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqYibG9hZCKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqQibDIiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKoInFkX2J1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiNDk3OGM0Zjk5ZmM5MTlj2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicGRfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGE0NWNiZDMyNzk4NmRmYzbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAzMTMxMWM0ZDkzMmY5Zjdh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicGQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwOGRjNmY0OWU0YzViNTE2NtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLBiNGRjMDJiM2FmMzQxNGU02SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQibDMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKoInFkX2J1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLAxYWQyYzVhYjY2NzJmNGFh2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicGRfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGYxM2ExMDY0OTM0MThiYTnZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA3ZGMzMzYwN2FjNTNkODNk2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicGQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwYmNiMTY5YzMyYTMwMzAwZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0pHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLA0NTA1NTg0MDRmODZiYjA32SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQibDEiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOUkpKoInFkX2J1cyKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLA2MGU2YzdjYjcyOWFmZTM52SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqgicGRfYnVzIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGEwMzIwYWQyZjEzMTc0ZTPZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJxZCKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBiMDUzY2I0ZDkxNzRmMWU42SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SSkqQicGQiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSvYjk1Njk2MmM3ZjgzNGU12SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDI3OWY2NTIyOTRiYmIxODTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwZTNhOWZkN2Q4Y2QwZGZkZtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKlImJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5OSkqkicHJpbWFyeSKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwZmExZjBhY2UzOWJiMjRkNNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlkrmYzMjAyZmM3NjM1M2Jm2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlkrzQ4MDUyNjg0ZTdjYjU4MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKrInNvdXJjZWJ1cyKqdGV4dC9wbGFpbpKFpnByZWZpeLFEaWN0e1N0cmluZywgQW55fahlbGVtZW50c5KSkqQidmEiqnRleHQvcGxhaW6ShaZwcmVmaXinRmxvYXQ2NKhlbGVtZW50c5GkbW9yZaR0eXBlpUFycmF5rHByZWZpeF9zaG9ydKCob2JqZWN0aWSwNjY3NTk4NDYxMjY4MzIwMtkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKkInZtIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksDE2ZmNmNDU0NzM3NmMwNzDZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwMzkwOTA3MWJiNzhmMjg3YdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKpImxvYWRidXMiqnRleHQvcGxhaW6ShaZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOSkpKkInZhIqp0ZXh0L3BsYWlukoWmcHJlZml4p0Zsb2F0NjSoZWxlbWVudHORpG1vcmWkdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGQ5ZDQxNTM3ZjkyNTA1NTTZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpCJ2bSKqdGV4dC9wbGFpbpKFpnByZWZpeKdGbG9hdDY0qGVsZW1lbnRzkaRtb3JlpHR5cGWlQXJyYXmscHJlZml4X3Nob3J0oKhvYmplY3RpZLBhYTE1M2E0MjE5YTc1NDUx2SFhcHBsaWNhdGlvbi92bmQucGx1dG8udHJlZStvYmplY3SkdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDIwNzUyNTI3MDY2NjNlMDHZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKR0eXBlpERpY3SscHJlZml4X3Nob3J0pERpY3Sob2JqZWN0aWSwNTVhODlhY2FmMGNkMjc3MNkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0kpKqInBlcl91bml0Iqp0ZXh0L3BsYWlukqVmYWxzZap0ZXh0L3BsYWlupHR5cGWkRGljdKxwcmVmaXhfc2hvcnSkRGljdKhvYmplY3RpZLAyMDZiNjg3OTA2NTM2ZTA5pG1pbWXZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdKxyb290YXNzaWduZWWnc29sX2VuZ7JsYXN0X3J1bl90aW1lc3RhbXDLQdlCyIb0DMywcGVyc2lzdF9qc19zdGF0ZcK3aGFzX3BsdXRvX2hvb2tfZmVhdHVyZXPCp2NlbGxfaWTZJDA1MzYwMTYzLTRhNmYtNDFkYS04ZmFlLTA3MGUzMjdjMjYwNblkZXBlbmRzX29uX2Rpc2FibGVkX2NlbGxzwqdydW50aW1lzgBiIdS1cHVibGlzaGVkX29iamVjdF9rZXlzkLhkZXBlbmRzX29uX3NraXBwZWRfY2VsbHPCp2Vycm9yZWTC2SQxZGMwNjAwNy1iNDEzLTRjYmItYjQzYi0yYzc5NTVlY2I2ZDKKpnF1ZXVlZMKkbG9nc5CncnVubmluZ8Kmb3V0cHV0hqRib2R5haZwcmVmaXixRGljdHtTdHJpbmcsIEFueX2oZWxlbWVudHOTkpKkInRvIqp0ZXh0L3BsYWlukoWmcHJlZml4plN0cmluZ6hlbGVtZW50c5OSAZKnImdlbi4xIqp0ZXh0L3BsYWlukgKSpyJidXMuNCKqdGV4dC9wbGFpbpIDkqoiYnJhbmNoLjMiqnRleHQvcGxhaW6kdHlwZaVBcnJheaxwcmVmaXhfc2hvcnSgqG9iamVjdGlksGU3MjBkMjAxM2JiOWNiZWbZIWFwcGxpY2F0aW9uL3ZuZC5wbHV0by50cmVlK29iamVjdJKSpiJmcm9tIqp0ZXh0L3BsYWlukqgic291cmNlIqp0ZXh0L3BsYWlukpKwInVubWFwX2Z1bmN0aW9uIqp0ZXh0L3BsYWlukr8iX21hcF9tYXRoMmVuZ192b2x0YWdlX3NvdXJjZSEiqnRleHQvcGxhaW6kdHlwZaREaWN0rHByZWZpeF9zaG9ydKREaWN0qG9iamVjdGlksDM4NTdmOGNjZGUyODE3MmSkbWltZdkhYXBwbGljYXRpb24vdm5kLnBsdXRvLnRyZWUrb2JqZWN0rHJvb3Rhc3NpZ25lZcCybGFzdF9ydW5fdGltZXN0YW1wy0HZQsiG1BcnsHBlcnNpc3RfanNfc3RhdGXCt2hhc19wbHV0b19ob29rX2ZlYXR1cmVzwqdjZWxsX2lk2SQxZGMwNjAwNy1iNDEzLTRjYmItYjQzYi0yYzc5NTVlY2I2ZDK5ZGVwZW5kc19vbl9kaXNhYmxlZF9jZWxsc8KncnVudGltZc4An7rLtXB1Ymxpc2hlZF9vYmplY3Rfa2V5c5C4ZGVwZW5kc19vbl9za2lwcGVkX2NlbGxzwqdlcnJvcmVkwqtzdGF0dXNfdHJlZYSkbmFtZahub3RlYm9va6hzdWJ0YXNrc4Smc2F2aW5nhKRuYW1lpnNhdmluZ6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyGqg0pWqc3RhcnRlZF9hdMtB2ULIaqDLMql3b3Jrc3BhY2WEpG5hbWWpd29ya3NwYWNlqHN1YnRhc2tzgqxpbml0X3Byb2Nlc3OEpG5hbWWsaW5pdF9wcm9jZXNzqHN1YnRhc2tzhKE0hKRuYW1loTSoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQshol5VfqnN0YXJ0ZWRfYXTLQdlCyGfSKOGhMYSkbmFtZaExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIZ8uGy6pzdGFydGVkX2F0y0HZQshnVFCDoTKEpG5hbWWhMqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyGfQ+Zyqc3RhcnRlZF9hdMtB2ULIZ8uG6KEzhKRuYW1loTOoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQshn0ijQqnN0YXJ0ZWRfYXTLQdlCyGfQ+bWrZmluaXNoZWRfYXTLQdlCyGiXlWyqc3RhcnRlZF9hdMtB2ULIZ1RQFq5jcmVhdGVfcHJvY2Vzc4SkbmFtZa5jcmVhdGVfcHJvY2Vzc6hzdWJ0YXNrc4KhMYSkbmFtZaExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIZjy/36pzdGFydGVkX2F0y0HZQshlPs5koTKEpG5hbWWhMqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyGdUT/Sqc3RhcnRlZF9hdMtB2ULIZjzABatmaW5pc2hlZF9hdMtB2ULIZ1RP46pzdGFydGVkX2F0y0HZQshlPs5Cq2ZpbmlzaGVkX2F0y0HZQshol5V0qnN0YXJ0ZWRfYXTLQdlCyGU+zgyjcGtnhKRuYW1lo3BrZ6hzdWJ0YXNrc4SsaW5zdGFudGlhdGUxhKRuYW1lrGluc3RhbnRpYXRlMahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyGU/kpKqc3RhcnRlZF9hdMtB2ULIZT8RBqhhbmFseXNpc4SkbmFtZahhbmFseXNpc6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyGU+ccWqc3RhcnRlZF9hdMtB2ULIZT3gM6pwcmVjb21waWxlhKRuYW1lqnByZWNvbXBpbGWoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQshmwxTwqnN0YXJ0ZWRfYXTLQdlCyGVe8dCncmVzb2x2ZYSkbmFtZadyZXNvbHZlqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIZV7xsqpzdGFydGVkX2F0y0HZQshlP5Kfq2ZpbmlzaGVkX2F0y0HZQshmwxUeqnN0YXJ0ZWRfYXTLQdlCyGU94BGjcnVuhKRuYW1lo3J1bqhzdWJ0YXNrc4KwcmVzb2x2ZV90b3BvbG9neYSkbmFtZbByZXNvbHZlX3RvcG9sb2d5qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIaqGpuapzdGFydGVkX2F0y0HZQshqoP1dqGV2YWx1YXRlhKRuYW1lqGV2YWx1YXRlqHN1YnRhc2tz3gBMojMyhKRuYW1lojMyqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIfN9jNapzdGFydGVkX2F0y0HZQsh83u1nojI5hKRuYW1lojI5qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIcq4XlKpzdGFydGVkX2F0y0HZQshyres+oTGEpG5hbWWhMahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyGtzsQeqc3RhcnRlZF9hdMtB2ULIaqJGD6IxMoSkbmFtZaIxMqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHH8POKqc3RhcnRlZF9hdMtB2ULIcfqBjKI1NISkbmFtZaI1NKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIaVzvuqc3RhcnRlZF9hdMtB2ULIhpWcMKIyMISkbmFtZaIyMKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHISGaSqc3RhcnRlZF9hdMtB2ULIcgzgAaIzMISkbmFtZaIzMKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHKuiDOqc3RhcnRlZF9hdMtB2ULIcq4XyqEyhKRuYW1loTKoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQshreqMrqnN0YXJ0ZWRfYXTLQdlCyGtzsWShNoSkbmFtZaE2qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIa//q96pzdGFydGVkX2F0y0HZQshr/3XzojQ3hKRuYW1lojQ3qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhkzrA6pzdGFydGVkX2F0y0HZQsiGO4lMojc0hKRuYW1lojc0qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIh+KujqpzdGFydGVkX2F0y0HZQsiG+s2zojQxhKRuYW1lojQxqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhEB4eapzdGFydGVkX2F0y0HZQsiEP/X1ojY1hKRuYW1lojY1qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhu48T6pzdGFydGVkX2F0y0HZQsiG4wotojUzhKRuYW1lojUzqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhpWb4apzdGFydGVkX2F0y0HZQsiGlF6eojUxhKRuYW1lojUxqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhmwkmqpzdGFydGVkX2F0y0HZQsiGa67FojI3hKRuYW1lojI3qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIcqz3UapzdGFydGVkX2F0y0HZQshyrIJiojc1hKRuYW1lojc1qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIiBQrCqpzdGFydGVkX2F0y0HZQsiH4q7eojQyhKRuYW1lojQyqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhc4GDKpzdGFydGVkX2F0y0HZQsiEQHizojMzhKRuYW1lojMzqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIfODBsapzdGFydGVkX2F0y0HZQsh832NvojI4hKRuYW1lojI4qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIcq3qvKpzdGFydGVkX2F0y0HZQshyrPd/ojcwhKRuYW1lojcwqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhvZFkapzdGFydGVkX2F0y0HZQsiG9A2RojUyhKRuYW1lojUyqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhpReU6pzdGFydGVkX2F0y0HZQsiGbCTqojUwhKRuYW1lojUwqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhmuudapzdGFydGVkX2F0y0HZQsiGTsmGojE0hKRuYW1lojE0qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIcgA3aapzdGFydGVkX2F0y0HZQshx/7OzojYzhKRuYW1lojYzqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhtvOGKpzdGFydGVkX2F0y0HZQsiG2Ut7oTeEpG5hbWWhN6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHHuNa2qc3RhcnRlZF9hdMtB2ULIa//rOqI1N4SkbmFtZaI1N6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIazwhKqc3RhcnRlZF9hdMtB2ULIhrOM9KE4hKRuYW1loTioc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQshx7rLhqnN0YXJ0ZWRfYXTLQdlCyHHuNgWiNjSEpG5hbWWiNjSoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQsiG4wnEqnN0YXJ0ZWRfYXTLQdlCyIbbzmyiMjaEpG5hbWWiMjaoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQshyrIIKqnN0YXJ0ZWRfYXTLQdlCyHIlgoSiMTCEpG5hbWWiMTCoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQshx+HRgqnN0YXJ0ZWRfYXTLQdlCyHHxRZmiMTmEpG5hbWWiMTmoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQshyDN/GqnN0YXJ0ZWRfYXTLQdlCyHIMpuyiNjmEpG5hbWWiNjmoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQsiG9A05qnN0YXJ0ZWRfYXTLQdlCyIbx47CiNjCEpG5hbWWiNjCoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQsiG1BePqnN0YXJ0ZWRfYXTLQdlCyIbSaF6iMjSEpG5hbWWiMjSoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQshyJRC/qnN0YXJ0ZWRfYXTLQdlCyHIj+7GhNISkbmFtZaE0qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIa6sUh6pzdGFydGVkX2F0y0HZQshrqqisojU4hKRuYW1lojU4qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhtHvE6pzdGFydGVkX2F0y0HZQsiGs8JQojI1hKRuYW1lojI1qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIciWCRapzdGFydGVkX2F0y0HZQshyJRESojIzhKRuYW1lojIzqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIciP7dqpzdGFydGVkX2F0y0HZQshyI4fGojIyhKRuYW1lojIyqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIciOHYqpzdGFydGVkX2F0y0HZQshyFKUNojExhKRuYW1lojExqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIcfqBNKpzdGFydGVkX2F0y0HZQshx+HS8ojM1hKRuYW1lojM1qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIfOHWH6pzdGFydGVkX2F0y0HZQsh84O+VojEzhKRuYW1lojEzqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIcf+zW6pzdGFydGVkX2F0y0HZQshx/D0yojQ5hKRuYW1lojQ5qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhk7JXKpzdGFydGVkX2F0y0HZQsiGTpeNojU5hKRuYW1lojU5qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhtJoH6pzdGFydGVkX2F0y0HZQsiG0e9fojYxhKRuYW1lojYxqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhtRNaqpzdGFydGVkX2F0y0HZQsiG1BfXojE1hKRuYW1lojE1qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIcgnlm6pzdGFydGVkX2F0y0HZQshyADe1ojY3hKRuYW1lojY3qHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhvF3zapzdGFydGVkX2F0y0HZQsiG7qwVojYyhKRuYW1lojYyqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhtlLI6pzdGFydGVkX2F0y0HZQsiG1E2lojQzhKRuYW1lojQzqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIhc6CLKpzdGFydGVkX2F0y0HZQsiFzgZXoTWEpG5hbWWhNahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyGv/dZ+qc3RhcnRlZF9hdMtB2ULIa6sUy6IxNoSkbmFtZaIxNqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHILIFyqc3RhcnRlZF9hdMtB2ULIcgnl5qIzMYSkbmFtZaIzMahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHze7RSqc3RhcnRlZF9hdMtB2ULIcq6IkKIzOYSkbmFtZaIzOahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHzn+saqc3RhcnRlZF9hdMtB2ULIfOfHR6I0MISkbmFtZaI0MKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIQ/9ZCqc3RhcnRlZF9hdMtB2ULIfOf69KI0NoSkbmFtZaI0NqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIY7iMKqc3RhcnRlZF9hdMtB2ULIhjkfyaIzOISkbmFtZaIzOKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHznxwiqc3RhcnRlZF9hdMtB2ULIfOacZ6IyMYSkbmFtZaIyMahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHIUpL6qc3RhcnRlZF9hdMtB2ULIchIZ8KI3MoSkbmFtZaI3MqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIb6YXCqc3RhcnRlZF9hdMtB2ULIhvhNOKIzNISkbmFtZaIzNKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHzg7z2qc3RhcnRlZF9hdMtB2ULIfODCDaI0NISkbmFtZaI0NKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIYvOUOqc3RhcnRlZF9hdMtB2ULIhc6CXqI0NYSkbmFtZaI0NahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIY5H4Kqc3RhcnRlZF9hdMtB2ULIhi85sKI2OISkbmFtZaI2OKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIbx422qc3RhcnRlZF9hdMtB2ULIhvF4JaI1NoSkbmFtZaI1NqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIazjKiqc3RhcnRlZF9hdMtB2ULIhrMHzKI1NYSkbmFtZaI1NahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIazB2iqc3RhcnRlZF9hdMtB2ULIhpXPMaIzNoSkbmFtZaIzNqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHziAjaqc3RhcnRlZF9hdMtB2ULIfOHWc6I2NoSkbmFtZaI2NqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIbuq9Kqc3RhcnRlZF9hdMtB2ULIhu48n6I3NoSkbmFtZaI3NqhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIgUklyqc3RhcnRlZF9hdMtB2ULIiBQrUqIxN4SkbmFtZaIxN6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHILY+Wqc3RhcnRlZF9hdMtB2ULIcgsgo6I3MYSkbmFtZaI3MahzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIb4TOyqc3RhcnRlZF9hdMtB2ULIhvZF6aIzN4SkbmFtZaIzN6hzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHzmnAuqc3RhcnRlZF9hdMtB2ULIfOICk6I0OISkbmFtZaI0OKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyIZOlymqc3RhcnRlZF9hdMtB2ULIhkzrW6IxOISkbmFtZaIxOKhzdWJ0YXNrc4CrZmluaXNoZWRfYXTLQdlCyHIMpqiqc3RhcnRlZF9hdMtB2ULIcgtkH6E5hKRuYW1loTmoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQshx8UVBqnN0YXJ0ZWRfYXTLQdlCyHHusxyiNzOEpG5hbWWiNzOoc3VidGFza3OAq2ZpbmlzaGVkX2F0y0HZQsiG+s1oqnN0YXJ0ZWRfYXTLQdlCyIb6YbuhM4SkbmFtZaEzqHN1YnRhc2tzgKtmaW5pc2hlZF9hdMtB2ULIa6qoUKpzdGFydGVkX2F0y0HZQshreqN3q2ZpbmlzaGVkX2F0y0HZQsiIFL5EqnN0YXJ0ZWRfYXTLQdlCyGqhqb2rZmluaXNoZWRfYXTLQdlCyIgUvkCqc3RhcnRlZF9hdMtB2ULIaqD9GqtmaW5pc2hlZF9hdMCqc3RhcnRlZF9hdMtB2ULIZTq2a7FjZWxsX2RlcGVuZGVuY2llc94ATdkkNWFiNmNkMTYtM2MyNC00ZjYwLWJkZjItN2Y0OGIzZTI1MDg1hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNWFiNmNkMTYtM2MyNC00ZjYwLWJkZjItN2Y0OGIzZTI1MDg1tGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkOTY3NTdkZGUtNTJiZS00OTMwLTliZGQtOTMwM2JiNzE1ZTU1hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkOTY3NTdkZGUtNTJiZS00OTMwLTliZGQtOTMwM2JiNzE1ZTU1tGRvd25zdHJlYW1fY2VsbHNfbWFwga5yZXN1bHRfbWF0aF9tbpHZJDg2N2Q4ZDFkLTA0MmEtNDJlYy04NDNlLTU2YjhiYTJkYjk2YbJ1cHN0cmVhbV9jZWxsc19tYXCFrGlwb3B0X3NvbHZlcpHZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1ObdQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbpHZJGYzMGNkMGQwLWIwZGEtNGY2My1hMjQ1LTU2OGE3NjNhOTNkOKdtYXRoX21ukdkkNzg1YTFjMzktYWE1Ni00MjQ0LWI3YjktMzFkN2EzMWI3M2Mzrk5GQVVQb3dlck1vZGVskNkoUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uX3NvbHZlX21uX21jX29wYpDZJDAyNjA4OGY3LWIxZGYtNDY0Ny1hZDgxLTUyYzZjOGVhNzk0NIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDAyNjA4OGY3LWIxZGYtNDY0Ny1hZDgxLTUyYzZjOGVhNzk0NLRkb3duc3RyZWFtX2NlbGxzX21hcIGnZW5nX2FsbJHZJGYwNzBkYmJjLTFhNTUtNDhmMi1hYTIxLTIxMTllYjU3M2I1YrJ1cHN0cmVhbV9jZWxsc19tYXCBqnBhcnNlX2ZpbGWQ2SRmMDZiOTU5Mi0wZTE2LTRmZDEtYmY2ZS02MjRlYzBjZGI4ZmKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRmMDZiOTU5Mi0wZTE2LTRmZDEtYmY2ZS02MjRlYzBjZGI4ZmK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRiMWU1NTI2My05Yzc2LTQzYjItYjkxYy0xMTViMmYwODAxODKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRiMWU1NTI2My05Yzc2LTQzYjItYjkxYy0xMTViMmYwODAxODK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ0NjAzYmM1Ni1jNDAyLTQ4YWYtOTcxNS0wNzIyZTQyZDkwZjeEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ0NjAzYmM1Ni1jNDAyLTQ4YWYtOTcxNS0wNzIyZTQyZDkwZje0ZG93bnN0cmVhbV9jZWxsc19tYXCBpnBtX2VuZ5HZJDEyYmEwMmZmLTkxZGQtNDM1NS1hZDJiLWYzY2EzYjYxZTMxOLJ1cHN0cmVhbV9jZWxsc19tYXCEtGluc3RhbnRpYXRlX21jX21vZGVskK5ORkFVUG93ZXJNb2RlbJCsYnVpbGRfbWNfb3BmkKNlbmeR2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmPZJDU4ZjgwNjUxLTRhNDQtNDc4MS1hNmMwLWEwNTZlYzc2YjA3ZYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDU4ZjgwNjUxLTRhNDQtNDc4MS1hNmMwLWEwNTZlYzc2YjA3ZbRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqpwYXJzZV9maWxlkK5tYWtlX2xvc3NsZXNzIZDZJDk2YTY1YmRjLTdlZTQtNGU5Zi05NGY1LThhODNmNzUxMmZlOYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDk2YTY1YmRjLTdlZTQtNGU5Zi05NGY1LThhODNmNzUxMmZlObRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGE3MzQ4ZmM4LWIyNWUtNGVjZi05ZmU2LTMxNDAzNmI3ZGY5Y4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGE3MzQ4ZmM4LWIyNWUtNGVjZi05ZmU2LTMxNDAzNmI3ZGY5Y7Rkb3duc3RyZWFtX2NlbGxzX21hcIGkbWF0aJPZJDFkYzA2MDA3LWI0MTMtNGNiYi1iNDNiLTJjNzk1NWVjYjZkMtkkZTNmZTBhNWUtOTQzMS00NTNkLWI3ZTUtODIxZGU2MjRhNGVm2SQwNTM2MDE2My00YTZmLTQxZGEtOGZhZS0wNzBlMzI3YzI2MDWydXBzdHJlYW1fY2VsbHNfbWFwgqNlbmeR2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmO0dHJhbnNmb3JtX2RhdGFfbW9kZWyQ2SRmODgyZjA3MC03NGFmLTRmM2ItOWFkMS1iZDdhZDQ1Mzc3OGaEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRmODgyZjA3MC03NGFmLTRmM2ItOWFkMS1iZDdhZDQ1Mzc3OGa0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmOEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRhZDQ4YjNhZC1lZGUxLTQxMDktOTY0Ny0wMDdjMWQ4ZDE5NmO0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKsTUFUSEVNQVRJQ0FMkKpwYXJzZV9maWxlkNkkNTQyODA2OTYtYmVlYy00N2VlLTgxMTQtZWE5MzExYWNhOWVihLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNTQyODA2OTYtYmVlYy00N2VlLTgxMTQtZWE5MzExYWNhOWVitGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkOGIwNjYwMzktZWQ2NS00NjE3LWI0MDQtODY5NTJkM2ZjNzhlhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkOGIwNjYwMzktZWQ2NS00NjE3LWI0MDQtODY5NTJkM2ZjNzhltGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCBpnJlc3VsdJHZJDc0NWYzM2JmLTk4ZDctNGIyNy05NWZkLWVjNmJmNWUzZDVjZtkkYzU1YjJjNDItOWQyNy0xMWViLTI0Y2EtZTkwYTU0NzJmZmJihLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkYzU1YjJjNDItOWQyNy0xMWViLTI0Y2EtZTkwYTU0NzJmZmJitGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkN2U1ODExY2YtODZhMi00M2ZiLThjOTQtNDQwOTFmMzNjMDMxhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkN2U1ODExY2YtODZhMi00M2ZiLThjOTQtNDQwOTFmMzNjMDMxtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkMjdkNWEyMzctNGMyZS00YjE0LWEwODItZjQ4NDcxNTNjOGQ1hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkMjdkNWEyMzctNGMyZS00YjE0LWEwODItZjQ4NDcxNTNjOGQ1tGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCBpnJlc3VsdJHZJDc0NWYzM2JmLTk4ZDctNGIyNy05NWZkLWVjNmJmNWUzZDVjZtkkZDBlMDJlZTUtZjU3Yy00Mjg2LTk0MGQtYjAxMDk3Yzg0MGJlhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZDBlMDJlZTUtZjU3Yy00Mjg2LTk0MGQtYjAxMDk3Yzg0MGJltGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkOGJhMDgxYjQtODQ0NC00OGUwLWFmY2UtMjA2NDlmN2ZkZDAxhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkOGJhMDgxYjQtODQ0NC00OGUwLWFmY2UtMjA2NDlmN2ZkZDAxtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCBo2VuZ5HZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y9kkMmMzNThkN2EtNWQ4NC00ZjYyLWExNDctNTc3YmI3NzVhYzdmhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkMmMzNThkN2EtNWQ4NC00ZjYyLWExNDctNTc3YmI3NzVhYzdmtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkZTIyYTdkM2UtM2YyMS00MWIwLWFiZjItMmM3MjNlODdjNTdlhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZTIyYTdkM2UtM2YyMS00MWIwLWFiZjItMmM3MjNlODdjNTdltGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkMmE4YzE1MzYtZWY1Zi00ZTM3LWIzMGUtMWJiNzM5ODJkN2IwhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkMmE4YzE1MzYtZWY1Zi00ZTM3LWIzMGUtMWJiNzM5ODJkN2IwtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkN2E4NmUyNmQtZmRmNi00MWI2LWIxZGQtZGMwYzRhOGU5ZDUwhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkN2E4NmUyNmQtZmRmNi00MWI2LWIxZGQtZGMwYzRhOGU5ZDUwtGRvd25zdHJlYW1fY2VsbHNfbWFwgaZlbmdfdXSV2SQ4MmU5MzMwYi0yZTk0LTQyYTEtYjU2ZC00MzA2NzRiMTEyNDHZJDVlNWRkMjRjLTk1YjUtNDk1MS04NTQ3LTEzZTIwYmIwZmVlY9kkNDVjMzIwZGQtZTBiMi00NmVjLWFmMDktZDgzZTU2NTIwMjZk2SQyY2RkNjgyYS1iOTdmLTQ5ZGMtODgyOS00N2U3MTQ2NDk3YjnZJDc0ODM2YjJjLWRiNjctNDQzNS1hNTUyLWJhNWMzZTkzZTQzZrJ1cHN0cmVhbV9jZWxsc19tYXCBqnBhcnNlX2ZpbGWQ2SRmMzQ1OGE1Yy03MGM2LTRkMGMtODI1My00ZmViMGM4N2VlNzaEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRmMzQ1OGE1Yy03MGM2LTRkMGMtODI1My00ZmViMGM4N2VlNza0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ1NDQxMDhkMS1kMWE3LTRkYzYtOWEzYy02YTEwMDI1Y2I4YTOEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ1NDQxMDhkMS1kMWE3LTRkYzYtOWEzYy02YTEwMDI1Y2I4YTO0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRmMzBjZDBkMC1iMGRhLTRmNjMtYTI0NS01NjhhNzYzYTkzZDiEtHByZWNlZGVuY2VfaGV1cmlzdGljB6djZWxsX2lk2SRmMzBjZDBkMC1iMGRhLTRmNjMtYTI0NS01NjhhNzYzYTkzZDi0ZG93bnN0cmVhbV9jZWxsc19tYXCCt1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9uk9kkYWM5NGU1NTYtYjU0NC00Y2E2LTg3YmQtZmYyZDdhNzQxNGU32SRhZThkYWY2Yy00MDU1LTQ5N2UtOTA1Yy1kNmQ1YTYzNzNhZDPZJDk2NzU3ZGRlLTUyYmUtNDkzMC05YmRkLTkzMDNiYjcxNWU1NaVJcG9wdJHZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1ObJ1cHN0cmVhbV9jZWxsc19tYXCA2SQ4OWRlODBkZi0xZGQwLTRmOTQtYTI3ZC03NDY5M2E5NzgwNTmEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ4OWRlODBkZi0xZGQwLTRmOTQtYTI3ZC03NDY5M2E5NzgwNTm0ZG93bnN0cmVhbV9jZWxsc19tYXCBrGlwb3B0X3NvbHZlcpbZJDc0NWYzM2JmLTk4ZDctNGIyNy05NWZkLWVjNmJmNWUzZDVjZtkkNzYzYTE1MDQtZjkyNy00ZGZjLWEwNDItYWM2NjMyNDcwOGE52SRmMmZhNzc5ZS1mNjJkLTQwNTMtYjA1NS1lOWYwYWVlNmMzZjfZJGFlOGRhZjZjLTQwNTUtNDk3ZS05MDVjLWQ2ZDVhNjM3M2FkM9kkZTNmZTBhNWUtOTQzMS00NTNkLWI3ZTUtODIxZGU2MjRhNGVm2SQ5Njc1N2RkZS01MmJlLTQ5MzAtOWJkZC05MzAzYmI3MTVlNTWydXBzdHJlYW1fY2VsbHNfbWFwg6VJcG9wdJHZJGYzMGNkMGQwLWIwZGEtNGY2My1hMjQ1LTU2OGE3NjNhOTNkOKI9PpC5b3B0aW1pemVyX3dpdGhfYXR0cmlidXRlc5DZJDgzY2U0MzRjLTBmOTItNDZhOC04NjQ4LTMyMjA4NDA0NDYwMIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDgzY2U0MzRjLTBmOTItNDZhOC04NjQ4LTMyMjA4NDA0NDYwMLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaNlbmeR2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmPZJDQ1YzMyMGRkLWUwYjItNDZlYy1hZjA5LWQ4M2U1NjUyMDI2ZIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDQ1YzMyMGRkLWUwYjItNDZlYy1hZjA5LWQ4M2U1NjUyMDI2ZLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaZlbmdfdXSR2SQ3YTg2ZTI2ZC1mZGY2LTQxYjYtYjFkZC1kYzBjNGE4ZTlkNTDZJDVmNzJlY2VjLWJiM2YtNDIzMS05M2MxLTcxOWUzOGUxN2JlNIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDVmNzJlY2VjLWJiM2YtNDIzMS05M2MxLTcxOWUzOGUxN2JlNLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDU2NDIwMGUwLTIwODAtNDRkYS04ZGJmLTM3YzVlM2EzODQxMoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDU2NDIwMGUwLTIwODAtNDRkYS04ZGJmLTM3YzVlM2EzODQxMrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGU4NTI3MTJjLWQwOWEtNDFlMS05Nzg1LTMwOGMyMTljN2FkOIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGU4NTI3MTJjLWQwOWEtNDFlMS05Nzg1LTMwOGMyMTljN2FkOLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaZlbmdfdHOR2SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYzbZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y7Rkb3duc3RyZWFtX2NlbGxzX21hcIGjZW5nnNkkYTViNzM2ZjktMjc3Ni00NzYwLWIwNzMtZDAyMDI3YmFlZjEz2SQ5YWM2YjBlZC01OGE4LTQwNzktYWE5Zi1kNzAwMjRmNGQ0YjTZJDhiYTA4MWI0LTg0NDQtNDhlMC1hZmNlLTIwNjQ5ZjdmZGQwMdkkODNjZTQzNGMtMGY5Mi00NmE4LTg2NDgtMzIyMDg0MDQ0NjAw2SQyZjljM2Y2NC0zZTVkLTQyM2YtOTM5ZS04ZDk2YmQxOWU3ZmXZJGIxNTU5M2I5LWY3NzUtNDdhZi1hYTliLTQ5ODBhNDAyOGZhYdkkMzZjYTE3YmMtYjU2MC00OGM5LTk4OGYtMjU1NzgwNDc5ZDA12SQ3NDVmMzNiZi05OGQ3LTRiMjctOTVmZC1lYzZiZjVlM2Q1Y2bZJDc2M2ExNTA0LWY5MjctNGRmYy1hMDQyLWFjNjYzMjQ3MDhhOdkkZjJmYTc3OWUtZjYyZC00MDUzLWIwNTUtZTlmMGFlZTZjM2Y32SRhNzM0OGZjOC1iMjVlLTRlY2YtOWZlNi0zMTQwMzZiN2RmOWPZJDQ2MDNiYzU2LWM0MDItNDhhZi05NzE1LTA3MjJlNDJkOTBmN7J1cHN0cmVhbV9jZWxsc19tYXCCqnBhcnNlX2ZpbGWQqHBtZF9wYXRokdkkYWM5NGU1NTYtYjU0NC00Y2E2LTg3YmQtZmYyZDdhNzQxNGU32SRhNWI3MzZmOS0yNzc2LTQ3NjAtYjA3My1kMDIwMjdiYWVmMTOEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRhNWI3MzZmOS0yNzc2LTQ3NjAtYjA3My1kMDIwMjdiYWVmMTO0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGjZW5nkdkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZj2SQyYmY4MDJlMi1mNzY5LTQ4ZGItYWRlZi1hNWEwNjZjNTY1YzKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQyYmY4MDJlMi1mNzY5LTQ4ZGItYWRlZi1hNWEwNjZjNTY1YzK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ4ZDU3MDFkMS05ZTkxLTQzYjUtOTc1Yi1mYzhlMGUzMDZlOTmEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ4ZDU3MDFkMS05ZTkxLTQzYjUtOTc1Yi1mYzhlMGUzMDZlOTm0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ3MjNmNGUyNi04MDY1LTRlMjItOGM1Yy1kZTMyZDJlNDJiNDeEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ3MjNmNGUyNi04MDY1LTRlMjItOGM1Yy1kZTMyZDJlNDJiNDe0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SRiMTU1OTNiOS1mNzc1LTQ3YWYtYWE5Yi00OTgwYTQwMjhmYWGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SRiMTU1OTNiOS1mNzc1LTQ3YWYtYWE5Yi00OTgwYTQwMjhmYWG0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGjZW5nkdkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZj2SQzNmNhMTdiYy1iNTYwLTQ4YzktOTg4Zi0yNTU3ODA0NzlkMDWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQzNmNhMTdiYy1iNTYwLTQ4YzktOTg4Zi0yNTU3ODA0NzlkMDW0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGjZW5nkdkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZj2SQxZTc5MTI2Mi0yNjFkLTQ3NTYtYmVjNC1lZGViZTQ3MzI3MDCEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQxZTc5MTI2Mi0yNjFkLTQ3NTYtYmVjNC1lZGViZTQ3MzI3MDC0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQyY2RkNjgyYS1iOTdmLTQ5ZGMtODgyOS00N2U3MTQ2NDk3YjmEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQyY2RkNjgyYS1iOTdmLTQ5ZGMtODgyOS00N2U3MTQ2NDk3Yjm0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKmZW5nX3V0kdkkN2E4NmUyNmQtZmRmNi00MWI2LWIxZGQtZGMwYzRhOGU5ZDUwtWFwcGx5X3ZvbHRhZ2VfYm91bmRzIZDZJDc0NWYzM2JmLTk4ZDctNGIyNy05NWZkLWVjNmJmNWUzZDVjZoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDc0NWYzM2JmLTk4ZDctNGIyNy05NWZkLWVjNmJmNWUzZDVjZrRkb3duc3RyZWFtX2NlbGxzX21hcIGmcmVzdWx0ktkkMjdkNWEyMzctNGMyZS00YjE0LWEwODItZjQ4NDcxNTNjOGQ12SQ4YjA2NjAzOS1lZDY1LTQ2MTctYjQwNC04Njk1MmQzZmM3OGWydXBzdHJlYW1fY2VsbHNfbWFwhKxpcG9wdF9zb2x2ZXKR2SQ4OWRlODBkZi0xZGQwLTRmOTQtYTI3ZC03NDY5M2E5NzgwNTmuQUNQVVBvd2VyTW9kZWyQo2VuZ5HZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y6xzb2x2ZV9tY19vcGaQ2SQ4NjdkOGQxZC0wNDJhLTQyZWMtODQzZS01NmI4YmEyZGI5NmGEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ4NjdkOGQxZC0wNDJhLTQyZWMtODQzZS01NmI4YmEyZGI5NmG0ZG93bnN0cmVhbV9jZWxsc19tYXCBqnNvbF9lbmdfbW6QsnVwc3RyZWFtX2NlbGxzX21hcIOnbWF0aF9tbpHZJDc4NWExYzM5LWFhNTYtNDI0NC1iN2I5LTMxZDdhMzFiNzNjM7J0cmFuc2Zvcm1fc29sdXRpb26QrnJlc3VsdF9tYXRoX21ukdkkOTY3NTdkZGUtNTJiZS00OTMwLTliZGQtOTMwM2JiNzE1ZTU12SQyYzM3NTg3OC1mMTZiLTQ4MzMtOWFhYS1iODI2ZmJlMDU2YTKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQyYzM3NTg3OC1mMTZiLTQ4MzMtOWFhYS1iODI2ZmJlMDU2YTK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ1NDVjOTI3MC0yNTdhLTQ2ZTgtOTcwZC02YTlmY2YwOWRjMTeEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ1NDVjOTI3MC0yNTdhLTQ2ZTgtOTcwZC02YTlmY2YwOWRjMTe0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKsTUFUSEVNQVRJQ0FMkKpwYXJzZV9maWxlkNkkZmRhNDIwYTEtZTU2My00YTQxLTg0ZDQtMmE1NzBiZjE2M2FlhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZmRhNDIwYTEtZTU2My00YTQxLTg0ZDQtMmE1NzBiZjE2M2FltGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkYzg4NGZkNWItNGVjYi00MDJiLWIyMjgtMDFiOWE2MWRiOGJmhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkYzg4NGZkNWItNGVjYi00MDJiLWIyMjgtMDFiOWE2MWRiOGJmtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkMjlhOGE1NjAtN2Q1ZS00OTI5LTg3N2EtMmRhYjE3MzA5OTY4hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkMjlhOGE1NjAtN2Q1ZS00OTI5LTg3N2EtMmRhYjE3MzA5OTY4tGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkNzYzYTE1MDQtZjkyNy00ZGZjLWEwNDItYWM2NjMyNDcwOGE5hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNzYzYTE1MDQtZjkyNy00ZGZjLWEwNDItYWM2NjMyNDcwOGE5tGRvd25zdHJlYW1fY2VsbHNfbWFwgalyZXN1bHRfcHWR2SRlN2I1ODhlOS1mYjVmLTQzODMtYjVjNi1iY2U5ZWQ4ZjVhNjCydXBzdHJlYW1fY2VsbHNfbWFwhKxpcG9wdF9zb2x2ZXKR2SQ4OWRlODBkZi0xZGQwLTRmOTQtYTI3ZC03NDY5M2E5NzgwNTmuQUNQVVBvd2VyTW9kZWyQo2VuZ5HZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y6xzb2x2ZV9tY19vcGaQ2SQyZTRmZTAwMC00NDljLTRmYzAtODcwNy00YzUxYWM1MGFiMDOEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQyZTRmZTAwMC00NDljLTRmYzAtODcwNy00YzUxYWM1MGFiMDO0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQwZWJhNDAzZS1jMmJhLTRhZjMtOGRjYy1mZTE0YTNjMjJiZDeEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQwZWJhNDAzZS1jMmJhLTRhZjMtOGRjYy1mZTE0YTNjMjJiZDe0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQxMmJhMDJmZi05MWRkLTQzNTUtYWQyYi1mM2NhM2I2MWUzMTiEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQxMmJhMDJmZi05MWRkLTQzNTUtYWQyYi1mM2NhM2I2MWUzMTi0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIOifD6QqE1hcmtkb3dukKZwbV9lbmeR2SQ0NjAzYmM1Ni1jNDAyLTQ4YWYtOTcxNS0wNzIyZTQyZDkwZjfZJGU3YjU4OGU5LWZiNWYtNDM4My1iNWM2LWJjZTllZDhmNWE2MIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGU3YjU4OGU5LWZiNWYtNDM4My1iNWM2LWJjZTllZDhmNWE2MLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgalyZXN1bHRfcHWR2SQ3NjNhMTUwNC1mOTI3LTRkZmMtYTA0Mi1hYzY2MzI0NzA4YTnZJDA3ZmM1YTFiLTRhOWUtNGExMC1iZjdhLWQyNjgyNzY5YWM5N4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDA3ZmM1YTFiLTRhOWUtNGExMC1iZjdhLWQyNjgyNzY5YWM5N7Rkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGUzZmUwYTVlLTk0MzEtNDUzZC1iN2U1LTgyMWRlNjI0YTRlZoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGUzZmUwYTVlLTk0MzEtNDUzZC1iN2U1LTgyMWRlNjI0YTRlZrRkb3duc3RyZWFtX2NlbGxzX21hcIGrcmVzdWx0X21hdGiR2SQwNTM2MDE2My00YTZmLTQxZGEtOGZhZS0wNzBlMzI3YzI2MDWydXBzdHJlYW1fY2VsbHNfbWFwhKxpcG9wdF9zb2x2ZXKR2SQ4OWRlODBkZi0xZGQwLTRmOTQtYTI3ZC03NDY5M2E5NzgwNTmkbWF0aJHZJGE3MzQ4ZmM4LWIyNWUtNGVjZi05ZmU2LTMxNDAzNmI3ZGY5Y65BQ1BVUG93ZXJNb2RlbJCsc29sdmVfbWNfb3BmkNkkNzg1YTFjMzktYWE1Ni00MjQ0LWI3YjktMzFkN2EzMWI3M2MzhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNzg1YTFjMzktYWE1Ni00MjQ0LWI3YjktMzFkN2EzMWI3M2MztGRvd25zdHJlYW1fY2VsbHNfbWFwgadtYXRoX21uktkkOTY3NTdkZGUtNTJiZS00OTMwLTliZGQtOTMwM2JiNzE1ZTU12SQ4NjdkOGQxZC0wNDJhLTQyZWMtODQzZS01NmI4YmEyZGI5NmGydXBzdHJlYW1fY2VsbHNfbWFwgqZlbmdfdHOR2SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYza0dHJhbnNmb3JtX2RhdGFfbW9kZWyQ2SQyZjljM2Y2NC0zZTVkLTQyM2YtOTM5ZS04ZDk2YmQxOWU3ZmWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQyZjljM2Y2NC0zZTVkLTQyM2YtOTM5ZS04ZDk2YmQxOWU3ZmW0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIGjZW5nkdkkNWZlMmQxODYtNDBjNi00NmMyLTgyM2UtOTQwMWNiM2I2ZDZj2SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYzaEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ1NDJlNTkyZi04Zjc1LTQxZjktOGY5OC01MzczYjQzMWZjYza0ZG93bnN0cmVhbV9jZWxsc19tYXCBpmVuZ190c5PZJGU4NTI3MTJjLWQwOWEtNDFlMS05Nzg1LTMwOGMyMTljN2FkONkkYWU4ZGFmNmMtNDA1NS00OTdlLTkwNWMtZDZkNWE2MzczYWQz2SQ3ODVhMWMzOS1hYTU2LTQyNDQtYjdiOS0zMWQ3YTMxYjczYzOydXBzdHJlYW1fY2VsbHNfbWFwgapwYXJzZV9maWxlkNkkNzQ4MzZiMmMtZGI2Ny00NDM1LWE1NTItYmE1YzNlOTNlNDNmhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNzQ4MzZiMmMtZGI2Ny00NDM1LWE1NTItYmE1YzNlOTNlNDNmtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCBpmVuZ191dJHZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MNkkNWU1ZGQyNGMtOTViNS00OTUxLTg1NDctMTNlMjBiYjBmZWVjhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkNWU1ZGQyNGMtOTViNS00OTUxLTg1NDctMTNlMjBiYjBmZWVjtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCpmVuZ191dJHZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MK5tYWtlX2xvc3NsZXNzIZDZJDNkODY5ODlhLWE0ZGItNDc2Ni1hZWM3LWFiYzlhMjVmZmRlOIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDNkODY5ODlhLWE0ZGItNDc2Ni1hZWM3LWFiYzlhMjVmZmRlOLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGRlOTJiYzIwLWIxMjUtNGYzZC05MzBhLWIxZGE2M2Q1Y2VmNYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGRlOTJiYzIwLWIxMjUtNGYzZC05MzBhLWIxZGE2M2Q1Y2VmNbRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGRiNGQ5ZWI5LWUxMjAtNDQ4OS1hM2MyLTQ4YzQzZjJhM2MzYoS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGRiNGQ5ZWI5LWUxMjAtNDQ4OS1hM2MyLTQ4YzQzZjJhM2MzYrRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJDlhYzZiMGVkLTU4YTgtNDA3OS1hYTlmLWQ3MDAyNGY0ZDRiNIS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDlhYzZiMGVkLTU4YTgtNDA3OS1hYTlmLWQ3MDAyNGY0ZDRiNLRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgaNlbmeR2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmPZJDg5ODQ2ODc4LWViZmMtNDlhNS05MWVmLTc2MmY2OTJiYTVlYYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJDg5ODQ2ODc4LWViZmMtNDlhNS05MWVmLTc2MmY2OTJiYTVlYbRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGYyZmE3NzllLWY2MmQtNDA1My1iMDU1LWU5ZjBhZWU2YzNmN4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGYyZmE3NzllLWY2MmQtNDA1My1iMDU1LWU5ZjBhZWU2YzNmN7Rkb3duc3RyZWFtX2NlbGxzX21hcIGpcmVzdWx0X2JmkLJ1cHN0cmVhbV9jZWxsc19tYXCErGlwb3B0X3NvbHZlcpHZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1OaNlbmeR2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmOzU09DTkxQVUJGUG93ZXJNb2RlbJCsc29sdmVfbWNfb3BmkNkkODJlOTMzMGItMmU5NC00MmExLWI1NmQtNDMwNjc0YjExMjQxhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkODJlOTMzMGItMmU5NC00MmExLWI1NmQtNDMwNjc0YjExMjQxtGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCBpmVuZ191dJHZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MNkkZGRlMmRhNTktNjNmYS00NTQ5LTg4MjktNDkxZTVmM2M2NzVlhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZGRlMmRhNTktNjNmYS00NTQ5LTg4MjktNDkxZTVmM2M2NzVltGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkZmI4MWQzYzEtYTQ3Yi00NmQ5LWI0NjMtMTc2NjAyMmJlMTE0hLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZmI4MWQzYzEtYTQ3Yi00NmQ5LWI0NjMtMTc2NjAyMmJlMTE0tGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCCp0BtZF9zdHKQqGdldGluZGV4kNkkZjA3MGRiYmMtMWE1NS00OGYyLWFhMjEtMjExOWViNTczYjVihLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkZjA3MGRiYmMtMWE1NS00OGYyLWFhMjEtMjExOWViNTczYjVitGRvd25zdHJlYW1fY2VsbHNfbWFwgLJ1cHN0cmVhbV9jZWxsc19tYXCBp2VuZ19hbGyR2SQwMjYwODhmNy1iMWRmLTQ2NDctYWQ4MS01MmM2YzhlYTc5NDTZJGEwOWRlOGFiLWMxZTEtNGM5Zi05ZDg2LTQyNjhjZTUwM2NhZYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGEwOWRlOGFiLWMxZTEtNGM5Zi05ZDg2LTQyNjhjZTUwM2NhZbRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGI4ZTAxY2UyLWQ3ZjctNGM3My04MjMwLTlmZGVlY2FiMmM0ZYS0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGI4ZTAxY2UyLWQ3ZjctNGM3My04MjMwLTlmZGVlY2FiMmM0ZbRkb3duc3RyZWFtX2NlbGxzX21hcICydXBzdHJlYW1fY2VsbHNfbWFwgqdAbWRfc3RykKhnZXRpbmRleJDZJGFjOTRlNTU2LWI1NDQtNGNhNi04N2JkLWZmMmQ3YTc0MTRlN4S0cHJlY2VkZW5jZV9oZXVyaXN0aWMJp2NlbGxfaWTZJGFjOTRlNTU2LWI1NDQtNGNhNi04N2JkLWZmMmQ3YTc0MTRlN7Rkb3duc3RyZWFtX2NlbGxzX21hcIGocG1kX3BhdGiR2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmOydXBzdHJlYW1fY2VsbHNfbWFwhLdQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbpHZJGYzMGNkMGQwLWIwZGEtNGY2My1hMjQ1LTU2OGE3NjNhOTNkOKdkaXJuYW1lkKhqb2lucGF0aJCmcGF0aG9mkNkkYWU4ZGFmNmMtNDA1NS00OTdlLTkwNWMtZDZkNWE2MzczYWQzhLRwcmVjZWRlbmNlX2hldXJpc3RpYwmnY2VsbF9pZNkkYWU4ZGFmNmMtNDA1NS00OTdlLTkwNWMtZDZkNWE2MzczYWQztGRvd25zdHJlYW1fY2VsbHNfbWFwgalyZXN1bHRfbW6QsnVwc3RyZWFtX2NlbGxzX21hcIWsaXBvcHRfc29sdmVykdkkODlkZTgwZGYtMWRkMC00Zjk0LWEyN2QtNzQ2OTNhOTc4MDU5t1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9ukdkkZjMwY2QwZDAtYjBkYS00ZjYzLWEyNDUtNTY4YTc2M2E5M2Q4pmVuZ190c5HZJDU0MmU1OTJmLThmNzUtNDFmOS04Zjk4LTUzNzNiNDMxZmNjNq5ORkFVUG93ZXJNb2RlbJDZKFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLl9zb2x2ZV9tbl9tY19vcGKQ2SQ2NjYyMjNkNS04MDJhLTQxNjQtODgyYy04YWIxYTEzMTlkNmSEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ2NjYyMjNkNS04MDJhLTQxNjQtODgyYy04YWIxYTEzMTlkNmS0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKnQG1kX3N0cpCoZ2V0aW5kZXiQ2SQ0MDIwZDY3YS00YTllLTQwMzAtYjdjZC1lNWQ2MGU3ODQ5NWOEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQ0MDIwZDY3YS00YTllLTQwMzAtYjdjZC1lNWQ2MGU3ODQ5NWO0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIS1YXBwbHlfdm9sdGFnZV9ib3VuZHMhkKpwYXJzZV9maWxlkK5tYWtlX2xvc3NsZXNzIZCiPT6Q2SQwNTM2MDE2My00YTZmLTQxZGEtOGZhZS0wNzBlMzI3YzI2MDWEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQwNTM2MDE2My00YTZmLTQxZGEtOGZhZS0wNzBlMzI3YzI2MDW0ZG93bnN0cmVhbV9jZWxsc19tYXCBp3NvbF9lbmeQsnVwc3RyZWFtX2NlbGxzX21hcIOkbWF0aJHZJGE3MzQ4ZmM4LWIyNWUtNGVjZi05ZmU2LTMxNDAzNmI3ZGY5Y6tyZXN1bHRfbWF0aJHZJGUzZmUwYTVlLTk0MzEtNDUzZC1iN2U1LTgyMWRlNjI0YTRlZrJ0cmFuc2Zvcm1fc29sdXRpb26Q2SQxZGMwNjAwNy1iNDEzLTRjYmItYjQzYi0yYzc5NTVlY2I2ZDKEtHByZWNlZGVuY2VfaGV1cmlzdGljCadjZWxsX2lk2SQxZGMwNjAwNy1iNDEzLTRjYmItYjQzYi0yYzc5NTVlY2I2ZDK0ZG93bnN0cmVhbV9jZWxsc19tYXCAsnVwc3RyZWFtX2NlbGxzX21hcIKkbWF0aJHZJGE3MzQ4ZmM4LWIyNWUtNGVjZi05ZmU2LTMxNDAzNmI3ZGY5Y6NlbmSQtGNlbGxfZXhlY3V0aW9uX29yZGVy3ABN2SRmMzBjZDBkMC1iMGRhLTRmNjMtYTI0NS01NjhhNzYzYTkzZDjZJGM1NWIyYzQyLTlkMjctMTFlYi0yNGNhLWU5MGE1NDcyZmZiYtkkZGU5MmJjMjAtYjEyNS00ZjNkLTkzMGEtYjFkYTYzZDVjZWY12SRhYzk0ZTU1Ni1iNTQ0LTRjYTYtODdiZC1mZjJkN2E3NDE0ZTfZJDFlNzkxMjYyLTI2MWQtNDc1Ni1iZWM0LWVkZWJlNDczMjcwMNkkODlkZTgwZGYtMWRkMC00Zjk0LWEyN2QtNzQ2OTNhOTc4MDU52SRlMjJhN2QzZS0zZjIxLTQxYjAtYWJmMi0yYzcyM2U4N2M1N2XZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y9kkYzg4NGZkNWItNGVjYi00MDJiLWIyMjgtMDFiOWE2MWRiOGJm2SRhNWI3MzZmOS0yNzc2LTQ3NjAtYjA3My1kMDIwMjdiYWVmMTPZJDI5YThhNTYwLTdkNWUtNDkyOS04NzdhLTJkYWIxNzMwOTk2ONkkOWFjNmIwZWQtNThhOC00MDc5LWFhOWYtZDcwMDI0ZjRkNGI02SQ4OTg0Njg3OC1lYmZjLTQ5YTUtOTFlZi03NjJmNjkyYmE1ZWHZJDhiYTA4MWI0LTg0NDQtNDhlMC1hZmNlLTIwNjQ5ZjdmZGQwMdkkMmE4YzE1MzYtZWY1Zi00ZTM3LWIzMGUtMWJiNzM5ODJkN2Iw2SQ4M2NlNDM0Yy0wZjkyLTQ2YTgtODY0OC0zMjIwODQwNDQ2MDDZJDJmOWMzZjY0LTNlNWQtNDIzZi05MzllLThkOTZiZDE5ZTdmZdkkZjA2Yjk1OTItMGUxNi00ZmQxLWJmNmUtNjI0ZWMwY2RiOGZi2SRiMTU1OTNiOS1mNzc1LTQ3YWYtYWE5Yi00OTgwYTQwMjhmYWHZJDJlNGZlMDAwLTQ0OWMtNGZjMC04NzA3LTRjNTFhYzUwYWIwM9kkMzZjYTE3YmMtYjU2MC00OGM5LTk4OGYtMjU1NzgwNDc5ZDA12SQ3ZTU4MTFjZi04NmEyLTQzZmItOGM5NC00NDA5MWYzM2MwMzHZJDAyNjA4OGY3LWIxZGYtNDY0Ny1hZDgxLTUyYzZjOGVhNzk0NNkkNWY3MmVjZWMtYmIzZi00MjMxLTkzYzEtNzE5ZTM4ZTE3YmU02SRmMDcwZGJiYy0xYTU1LTQ4ZjItYWEyMS0yMTE5ZWI1NzNiNWLZJGYzNDU4YTVjLTcwYzYtNGQwYy04MjUzLTRmZWIwYzg3ZWU3NtkkNTQyZTU5MmYtOGY3NS00MWY5LThmOTgtNTM3M2I0MzFmY2M22SRkMGUwMmVlNS1mNTdjLTQyODYtOTQwZC1iMDEwOTdjODQwYmXZJGU4NTI3MTJjLWQwOWEtNDFlMS05Nzg1LTMwOGMyMTljN2FkONkkMGViYTQwM2UtYzJiYS00YWYzLThkY2MtZmUxNGEzYzIyYmQ32SQ4ZDU3MDFkMS05ZTkxLTQzYjUtOTc1Yi1mYzhlMGUzMDZlOTnZJDc0NWYzM2JmLTk4ZDctNGIyNy05NWZkLWVjNmJmNWUzZDVjZtkkZmI4MWQzYzEtYTQ3Yi00NmQ5LWI0NjMtMTc2NjAyMmJlMTE02SQyN2Q1YTIzNy00YzJlLTRiMTQtYTA4Mi1mNDg0NzE1M2M4ZDXZJDU2NDIwMGUwLTIwODAtNDRkYS04ZGJmLTM3YzVlM2EzODQxMtkkOGIwNjYwMzktZWQ2NS00NjE3LWI0MDQtODY5NTJkM2ZjNzhl2SRhMDlkZThhYi1jMWUxLTRjOWYtOWQ4Ni00MjY4Y2U1MDNjYWXZJDc2M2ExNTA0LWY5MjctNGRmYy1hMDQyLWFjNjYzMjQ3MDhhOdkkZTdiNTg4ZTktZmI1Zi00MzgzLWI1YzYtYmNlOWVkOGY1YTYw2SRmODgyZjA3MC03NGFmLTRmM2ItOWFkMS1iZDdhZDQ1Mzc3OGbZJGYyZmE3NzllLWY2MmQtNDA1My1iMDU1LWU5ZjBhZWU2YzNmN9kkNTQ0MTA4ZDEtZDFhNy00ZGM2LTlhM2MtNmExMDAyNWNiOGEz2SRhZThkYWY2Yy00MDU1LTQ5N2UtOTA1Yy1kNmQ1YTYzNzNhZDPZJDNkODY5ODlhLWE0ZGItNDc2Ni1hZWM3LWFiYzlhMjVmZmRlONkkN2E4NmUyNmQtZmRmNi00MWI2LWIxZGQtZGMwYzRhOGU5ZDUw2SQ4MmU5MzMwYi0yZTk0LTQyYTEtYjU2ZC00MzA2NzRiMTEyNDHZJDJjMzU4ZDdhLTVkODQtNGY2Mi1hMTQ3LTU3N2JiNzc1YWM3ZtkkNWU1ZGQyNGMtOTViNS00OTUxLTg1NDctMTNlMjBiYjBmZWVj2SQ0NWMzMjBkZC1lMGIyLTQ2ZWMtYWYwOS1kODNlNTY1MjAyNmTZJDcyM2Y0ZTI2LTgwNjUtNGUyMi04YzVjLWRlMzJkMmU0MmI0N9kkNThmODA2NTEtNGE0NC00NzgxLWE2YzAtYTA1NmVjNzZiMDdl2SRiMWU1NTI2My05Yzc2LTQzYjItYjkxYy0xMTViMmYwODAxODLZJDJjZGQ2ODJhLWI5N2YtNDlkYy04ODI5LTQ3ZTcxNDY0OTdiOdkkNzQ4MzZiMmMtZGI2Ny00NDM1LWE1NTItYmE1YzNlOTNlNDNm2SQyYmY4MDJlMi1mNzY5LTQ4ZGItYWRlZi1hNWEwNjZjNTY1YzLZJDQwMjBkNjdhLTRhOWUtNDAzMC1iN2NkLWU1ZDYwZTc4NDk1Y9kkZGRlMmRhNTktNjNmYS00NTQ5LTg4MjktNDkxZTVmM2M2NzVl2SQyYzM3NTg3OC1mMTZiLTQ4MzMtOWFhYS1iODI2ZmJlMDU2YTLZJGE3MzQ4ZmM4LWIyNWUtNGVjZi05ZmU2LTMxNDAzNmI3ZGY5Y9kkNTQyODA2OTYtYmVlYy00N2VlLTgxMTQtZWE5MzExYWNhOWVi2SQxZGMwNjAwNy1iNDEzLTRjYmItYjQzYi0yYzc5NTVlY2I2ZDLZJDk2YTY1YmRjLTdlZTQtNGU5Zi05NGY1LThhODNmNzUxMmZlOdkkNTQ1YzkyNzAtMjU3YS00NmU4LTk3MGQtNmE5ZmNmMDlkYzE32SRmZGE0MjBhMS1lNTYzLTRhNDEtODRkNC0yYTU3MGJmMTYzYWXZJDc4NWExYzM5LWFhNTYtNDI0NC1iN2I5LTMxZDdhMzFiNzNjM9kkYWQ0OGIzYWQtZWRlMS00MTA5LTk2NDctMDA3YzFkOGQxOTZj2SQ2NjYyMjNkNS04MDJhLTQxNjQtODgyYy04YWIxYTEzMTlkNmTZJGUzZmUwYTVlLTk0MzEtNDUzZC1iN2U1LTgyMWRlNjI0YTRlZtkkNWFiNmNkMTYtM2MyNC00ZjYwLWJkZjItN2Y0OGIzZTI1MDg12SQwNTM2MDE2My00YTZmLTQxZGEtOGZhZS0wNzBlMzI3YzI2MDXZJGI4ZTAxY2UyLWQ3ZjctNGM3My04MjMwLTlmZGVlY2FiMmM0ZdkkOTY3NTdkZGUtNTJiZS00OTMwLTliZGQtOTMwM2JiNzE1ZTU12SQ4NjdkOGQxZC0wNDJhLTQyZWMtODQzZS01NmI4YmEyZGI5NmHZJGRiNGQ5ZWI5LWUxMjAtNDQ4OS1hM2MyLTQ4YzQzZjJhM2MzYtkkNDYwM2JjNTYtYzQwMi00OGFmLTk3MTUtMDcyMmU0MmQ5MGY32SQxMmJhMDJmZi05MWRkLTQzNTUtYWQyYi1mM2NhM2I2MWUzMTjZJDA3ZmM1YTFiLTRhOWUtNGExMC1iZjdhLWQyNjgyNzY5YWM5N7RsYXN0X2hvdF9yZWxvYWRfdGltZcsAAAAAAAAAAKlzaG9ydHBhdGi4VGhlIEVuZ2luZWVyaW5nIE1vZGVsLmpsrnByb2Nlc3Nfc3RhdHVzpXJlYWR5pHBhdGjZIWV4YW1wbGVzL1RoZSBFbmdpbmVlcmluZyBNb2RlbC5qbK5sYXN0X3NhdmVfdGltZctB2ULIaqDK5qpjZWxsX29yZGVy3ABN2SRjNTViMmM0Mi05ZDI3LTExZWItMjRjYS1lOTBhNTQ3MmZmYmLZJGRlOTJiYzIwLWIxMjUtNGYzZC05MzBhLWIxZGE2M2Q1Y2VmNdkkZjMwY2QwZDAtYjBkYS00ZjYzLWEyNDUtNTY4YTc2M2E5M2Q42SRhYzk0ZTU1Ni1iNTQ0LTRjYTYtODdiZC1mZjJkN2E3NDE0ZTfZJDFlNzkxMjYyLTI2MWQtNDc1Ni1iZWM0LWVkZWJlNDczMjcwMNkkODlkZTgwZGYtMWRkMC00Zjk0LWEyN2QtNzQ2OTNhOTc4MDU52SRlMjJhN2QzZS0zZjIxLTQxYjAtYWJmMi0yYzcyM2U4N2M1N2XZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y9kkYzg4NGZkNWItNGVjYi00MDJiLWIyMjgtMDFiOWE2MWRiOGJm2SRhNWI3MzZmOS0yNzc2LTQ3NjAtYjA3My1kMDIwMjdiYWVmMTPZJDI5YThhNTYwLTdkNWUtNDkyOS04NzdhLTJkYWIxNzMwOTk2ONkkOWFjNmIwZWQtNThhOC00MDc5LWFhOWYtZDcwMDI0ZjRkNGI02SQ4OTg0Njg3OC1lYmZjLTQ5YTUtOTFlZi03NjJmNjkyYmE1ZWHZJDhiYTA4MWI0LTg0NDQtNDhlMC1hZmNlLTIwNjQ5ZjdmZGQwMdkkMmE4YzE1MzYtZWY1Zi00ZTM3LWIzMGUtMWJiNzM5ODJkN2Iw2SQ4M2NlNDM0Yy0wZjkyLTQ2YTgtODY0OC0zMjIwODQwNDQ2MDDZJDJmOWMzZjY0LTNlNWQtNDIzZi05MzllLThkOTZiZDE5ZTdmZdkkZjA2Yjk1OTItMGUxNi00ZmQxLWJmNmUtNjI0ZWMwY2RiOGZi2SRiMTU1OTNiOS1mNzc1LTQ3YWYtYWE5Yi00OTgwYTQwMjhmYWHZJDJlNGZlMDAwLTQ0OWMtNGZjMC04NzA3LTRjNTFhYzUwYWIwM9kkMzZjYTE3YmMtYjU2MC00OGM5LTk4OGYtMjU1NzgwNDc5ZDA12SQ3ZTU4MTFjZi04NmEyLTQzZmItOGM5NC00NDA5MWYzM2MwMzHZJDAyNjA4OGY3LWIxZGYtNDY0Ny1hZDgxLTUyYzZjOGVhNzk0NNkkNWY3MmVjZWMtYmIzZi00MjMxLTkzYzEtNzE5ZTM4ZTE3YmU02SRmMDcwZGJiYy0xYTU1LTQ4ZjItYWEyMS0yMTE5ZWI1NzNiNWLZJGYzNDU4YTVjLTcwYzYtNGQwYy04MjUzLTRmZWIwYzg3ZWU3NtkkNTQyZTU5MmYtOGY3NS00MWY5LThmOTgtNTM3M2I0MzFmY2M22SRkMGUwMmVlNS1mNTdjLTQyODYtOTQwZC1iMDEwOTdjODQwYmXZJGU4NTI3MTJjLWQwOWEtNDFlMS05Nzg1LTMwOGMyMTljN2FkONkkMGViYTQwM2UtYzJiYS00YWYzLThkY2MtZmUxNGEzYzIyYmQ32SQ4ZDU3MDFkMS05ZTkxLTQzYjUtOTc1Yi1mYzhlMGUzMDZlOTnZJDc0NWYzM2JmLTk4ZDctNGIyNy05NWZkLWVjNmJmNWUzZDVjZtkkZmI4MWQzYzEtYTQ3Yi00NmQ5LWI0NjMtMTc2NjAyMmJlMTE02SQyN2Q1YTIzNy00YzJlLTRiMTQtYTA4Mi1mNDg0NzE1M2M4ZDXZJDU2NDIwMGUwLTIwODAtNDRkYS04ZGJmLTM3YzVlM2EzODQxMtkkOGIwNjYwMzktZWQ2NS00NjE3LWI0MDQtODY5NTJkM2ZjNzhl2SRhMDlkZThhYi1jMWUxLTRjOWYtOWQ4Ni00MjY4Y2U1MDNjYWXZJDc2M2ExNTA0LWY5MjctNGRmYy1hMDQyLWFjNjYzMjQ3MDhhOdkkZTdiNTg4ZTktZmI1Zi00MzgzLWI1YzYtYmNlOWVkOGY1YTYw2SRmODgyZjA3MC03NGFmLTRmM2ItOWFkMS1iZDdhZDQ1Mzc3OGbZJGYyZmE3NzllLWY2MmQtNDA1My1iMDU1LWU5ZjBhZWU2YzNmN9kkNTQ0MTA4ZDEtZDFhNy00ZGM2LTlhM2MtNmExMDAyNWNiOGEz2SRhZThkYWY2Yy00MDU1LTQ5N2UtOTA1Yy1kNmQ1YTYzNzNhZDPZJDNkODY5ODlhLWE0ZGItNDc2Ni1hZWM3LWFiYzlhMjVmZmRlONkkN2E4NmUyNmQtZmRmNi00MWI2LWIxZGQtZGMwYzRhOGU5ZDUw2SQ4MmU5MzMwYi0yZTk0LTQyYTEtYjU2ZC00MzA2NzRiMTEyNDHZJDJjMzU4ZDdhLTVkODQtNGY2Mi1hMTQ3LTU3N2JiNzc1YWM3ZtkkNWU1ZGQyNGMtOTViNS00OTUxLTg1NDctMTNlMjBiYjBmZWVj2SQ0NWMzMjBkZC1lMGIyLTQ2ZWMtYWYwOS1kODNlNTY1MjAyNmTZJDcyM2Y0ZTI2LTgwNjUtNGUyMi04YzVjLWRlMzJkMmU0MmI0N9kkNThmODA2NTEtNGE0NC00NzgxLWE2YzAtYTA1NmVjNzZiMDdl2SRiMWU1NTI2My05Yzc2LTQzYjItYjkxYy0xMTViMmYwODAxODLZJDJjZGQ2ODJhLWI5N2YtNDlkYy04ODI5LTQ3ZTcxNDY0OTdiOdkkNzQ4MzZiMmMtZGI2Ny00NDM1LWE1NTItYmE1YzNlOTNlNDNm2SQyYmY4MDJlMi1mNzY5LTQ4ZGItYWRlZi1hNWEwNjZjNTY1YzLZJDQwMjBkNjdhLTRhOWUtNDAzMC1iN2NkLWU1ZDYwZTc4NDk1Y9kkZGRlMmRhNTktNjNmYS00NTQ5LTg4MjktNDkxZTVmM2M2NzVl2SQyYzM3NTg3OC1mMTZiLTQ4MzMtOWFhYS1iODI2ZmJlMDU2YTLZJGE3MzQ4ZmM4LWIyNWUtNGVjZi05ZmU2LTMxNDAzNmI3ZGY5Y9kkNTQyODA2OTYtYmVlYy00N2VlLTgxMTQtZWE5MzExYWNhOWVi2SQxZGMwNjAwNy1iNDEzLTRjYmItYjQzYi0yYzc5NTVlY2I2ZDLZJDk2YTY1YmRjLTdlZTQtNGU5Zi05NGY1LThhODNmNzUxMmZlOdkkNTQ1YzkyNzAtMjU3YS00NmU4LTk3MGQtNmE5ZmNmMDlkYzE32SRmZGE0MjBhMS1lNTYzLTRhNDEtODRkNC0yYTU3MGJmMTYzYWXZJDc4NWExYzM5LWFhNTYtNDI0NC1iN2I5LTMxZDdhMzFiNzNjM9kkYWQ0OGIzYWQtZWRlMS00MTA5LTk2NDctMDA3YzFkOGQxOTZj2SQ2NjYyMjNkNS04MDJhLTQxNjQtODgyYy04YWIxYTEzMTlkNmTZJGUzZmUwYTVlLTk0MzEtNDUzZC1iN2U1LTgyMWRlNjI0YTRlZtkkNWFiNmNkMTYtM2MyNC00ZjYwLWJkZjItN2Y0OGIzZTI1MDg12SQwNTM2MDE2My00YTZmLTQxZGEtOGZhZS0wNzBlMzI3YzI2MDXZJGI4ZTAxY2UyLWQ3ZjctNGM3My04MjMwLTlmZGVlY2FiMmM0ZdkkOTY3NTdkZGUtNTJiZS00OTMwLTliZGQtOTMwM2JiNzE1ZTU12SQ4NjdkOGQxZC0wNDJhLTQyZWMtODQzZS01NmI4YmEyZGI5NmHZJGRiNGQ5ZWI5LWUxMjAtNDQ4OS1hM2MyLTQ4YzQzZjJhM2MzYtkkNDYwM2JjNTYtYzQwMi00OGFmLTk3MTUtMDcyMmU0MmQ5MGY32SQxMmJhMDJmZi05MWRkLTQzNTUtYWQyYi1mM2NhM2I2MWUzMTjZJDA3ZmM1YTFiLTRhOWUtNGExMC1iZjdhLWQyNjgyNzY5YWM5N7FwdWJsaXNoZWRfb2JqZWN0c4ClbmJwa2eIsmluc3RhbGxlZF92ZXJzaW9uc4K3UG93ZXJNb2RlbHNEaXN0cmlidXRpb26mMC4xNC43pUlwb3B0pTEuMi4wsHRlcm1pbmFsX291dHB1dHODt1Bvd2VyTW9kZWxzRGlzdHJpYnV0aW9u2gddG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGF0IGAvdG1wL2psXzZHZVpJcy9NYW5pZmVzdC50b21sYCBoYXMgYW4gb2xkIGZvcm1hdCB0aGF0IGlzIGJlaW5nIG1haW50YWluZWQuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdXBkYXRlIHRvIHRoZSBuZXcgZm9ybWF0LCB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgSnVsaWEgdmVyc2lvbnMg4omlIDEuNi4yLCBydW4gYGltcG9ydCBQa2c7IFBrZy51cGdyYWRlX21hbmlmZXN0KClgIHdoaWNoIHdpbGwgdXBncmFkZSB0aGUgZm9ybWF0IHdpdGhvdXQgcmUtcmVzb2x2aW5nLgobWzMzbRtbMW3ilIIgG1syMm0bWzM5bVRvIHRoZW4gcmVjb3JkIHRoZSBqdWxpYSB2ZXJzaW9uIHJlLXJlc29sdmUgd2l0aCBgUGtnLnJlc29sdmUoKWAgYW5kIGlmIHRoZXJlIGFyZSByZXNvbHZlIGNvbmZsaWN0cyBjb25zaWRlciBgUGtnLnVwZGF0ZSgpYC4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgUGtnLlR5cGVzIC9vcHQvaG9zdGVkdG9vbGNhY2hlL2p1bGlhLzEuOS4zL3g2NC9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuOS9Qa2cvc3JjL21hbmlmZXN0LmpsOjMxNhtbMzltCgpJbnN0YW50aWF0aW5nLi4uChtbMzNtG1sxbeKUjCAbWzIybRtbMzltG1szM20bWzFtV2FybmluZzogG1syMm0bWzM5bVRoZSBhY3RpdmUgbWFuaWZlc3QgZmlsZSBpcyBhbiBvbGRlciBmb3JtYXQgd2l0aCBubyBqdWxpYSB2ZXJzaW9uIGVudHJ5LiBEZXBlbmRlbmNpZXMgbWF5IGhhdmUgYmVlbiByZXNvbHZlZCB3aXRoIGEgZGlmZmVyZW50IGp1bGlhIHZlcnNpb24uChtbMzNtG1sxbeKUlCAbWzIybRtbMzltG1s5MG1AIC90bXAvamxfNkdlWklzL01hbmlmZXN0LnRvbWw6MBtbMzltCgpSZXNvbHZpbmcuLi4KG1szMm0bWzFtICBObyBDaGFuZ2VzG1syMm0bWzM5bSB0byBgL3RtcC9qbF82R2VaSXMvUHJvamVjdC50b21sYAobWzMybRtbMW0gICAgVXBkYXRpbmcbWzIybRtbMzltIGAvdG1wL2psXzZHZVpJcy9NYW5pZmVzdC50b21sYAogIBtbOTBtWzQ0Y2ZlOTVhXSAbWzM5bRtbOTNt4oaRIFBrZyB2MS44LjAg4oeSIHYxLjkuMhtbMzltCiAgG1s5MG1bMTA3NDViMTZdIBtbMzltG1s5M21+IFN0YXRpc3RpY3Mg4oeSIHYxLjkuMBtbMzltCiAgG1s5MG1bZmEyNjdmMWZdIBtbMzltG1s5M23ihpEgVE9NTCB2MS4wLjAg4oeSIHYxLjAuMxtbMzltCiAgG1s5MG1bYTRlNTY5YTZdIBtbMzltG1s5NW3ihpMgVGFyIHYxLjEwLjEg4oeSIHYxLjEwLjAbWzM5bQogIBtbOTBtW2U2NmUwMDc4XSAbWzM5bRtbOTNt4oaRIENvbXBpbGVyU3VwcG9ydExpYnJhcmllc19qbGwgdjEuMC4xKzAg4oeSIHYxLjAuNSswG1szOW0KICAbWzkwbVtjOGZmZDljM10gG1szOW0bWzkzbeKGkSBNYmVkVExTX2psbCB2Mi4yOC4wKzAg4oeSIHYyLjI4LjIrMBtbMzltCiAgG1s5MG1bMTRhMzYwNmRdIBtbMzltG1s5M23ihpEgTW96aWxsYUNBQ2VydHNfamxsIHYyMDIyLjIuMSDih5IgdjIwMjIuMTAuMTEbWzM5bQogIBtbOTBtWzQ1MzY2MjlhXSAbWzM5bRtbOTNt4oaRIE9wZW5CTEFTX2psbCB2MC4zLjIwKzAg4oeSIHYwLjMuMjErNBtbMzltCiAgG1s5MG1bYmVhODdkNGFdIBtbMzltG1s5Mm0rIFN1aXRlU3BhcnNlX2psbCB2NS4xMC4xKzYbWzM5bQogIBtbOTBtWzgzNzc1YTU4XSAbWzM5bRtbOTNt4oaRIFpsaWJfamxsIHYxLjIuMTIrMyDih5IgdjEuMi4xMyswG1szOW0KICAbWzkwbVs4ZTg1MGI5MF0gG1szOW0bWzkzbeKGkSBsaWJibGFzdHJhbXBvbGluZV9qbGwgdjUuMS4xKzAg4oeSIHY1LjguMCswG1szOW0KClByZWNvbXBpbGluZy4uLgobWzMybRtbMW0gIEFjdGl2YXRpbmcbWzIybRtbMzltIHByb2plY3QgYXQgYC90bXAvamxfNkdlWklzYKpuYnBrZ19zeW5j2gddG1szM20bWzFt4pSMIBtbMjJtG1szOW0bWzMzbRtbMW1XYXJuaW5nOiAbWzIybRtbMzltVGhlIGFjdGl2ZSBtYW5pZmVzdCBmaWxlIGF0IGAvdG1wL2psXzZHZVpJcy9NYW5pZmVzdC50b21sYCBoYXMgYW4gb2xkIGZvcm1hdCB0aGF0IGlzIGJlaW5nIG1haW50YWluZWQuChtbMzNtG1sxbeKUgiAbWzIybRtbMzltVG8gdXBkYXRlIHRvIHRoZSBuZXcgZm9ybWF0LCB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgSnVsaWEgdmVyc2lvbnMg4omlIDEuNi4yLCBydW4gYGltcG9ydCBQa2c7IFBrZy51cGdyYWRlX21hbmlmZXN0KClgIHdoaWNoIHdpbGwgdXBncmFkZSB0aGUgZm9ybWF0IHdpdGhvdXQgcmUtcmVzb2x2aW5nLgobWzMzbRtbMW3ilIIgG1syMm0bWzM5bVRvIHRoZW4gcmVjb3JkIHRoZSBqdWxpYSB2ZXJzaW9uIHJlLXJlc29sdmUgd2l0aCBgUGtnLnJlc29sdmUoKWAgYW5kIGlmIHRoZXJlIGFyZSByZXNvbHZlIGNvbmZsaWN0cyBjb25zaWRlciBgUGtnLnVwZGF0ZSgpYC4KG1szM20bWzFt4pSUIBtbMjJtG1szOW0bWzkwbUAgUGtnLlR5cGVzIC9vcHQvaG9zdGVkdG9vbGNhY2hlL2p1bGlhLzEuOS4zL3g2NC9zaGFyZS9qdWxpYS9zdGRsaWIvdjEuOS9Qa2cvc3JjL21hbmlmZXN0LmpsOjMxNhtbMzltCgpJbnN0YW50aWF0aW5nLi4uChtbMzNtG1sxbeKUjCAbWzIybRtbMzltG1szM20bWzFtV2FybmluZzogG1syMm0bWzM5bVRoZSBhY3RpdmUgbWFuaWZlc3QgZmlsZSBpcyBhbiBvbGRlciBmb3JtYXQgd2l0aCBubyBqdWxpYSB2ZXJzaW9uIGVudHJ5LiBEZXBlbmRlbmNpZXMgbWF5IGhhdmUgYmVlbiByZXNvbHZlZCB3aXRoIGEgZGlmZmVyZW50IGp1bGlhIHZlcnNpb24uChtbMzNtG1sxbeKUlCAbWzIybRtbMzltG1s5MG1AIC90bXAvamxfNkdlWklzL01hbmlmZXN0LnRvbWw6MBtbMzltCgpSZXNvbHZpbmcuLi4KG1szMm0bWzFtICBObyBDaGFuZ2VzG1syMm0bWzM5bSB0byBgL3RtcC9qbF82R2VaSXMvUHJvamVjdC50b21sYAobWzMybRtbMW0gICAgVXBkYXRpbmcbWzIybRtbMzltIGAvdG1wL2psXzZHZVpJcy9NYW5pZmVzdC50b21sYAogIBtbOTBtWzQ0Y2ZlOTVhXSAbWzM5bRtbOTNt4oaRIFBrZyB2MS44LjAg4oeSIHYxLjkuMhtbMzltCiAgG1s5MG1bMTA3NDViMTZdIBtbMzltG1s5M21+IFN0YXRpc3RpY3Mg4oeSIHYxLjkuMBtbMzltCiAgG1s5MG1bZmEyNjdmMWZdIBtbMzltG1s5M23ihpEgVE9NTCB2MS4wLjAg4oeSIHYxLjAuMxtbMzltCiAgG1s5MG1bYTRlNTY5YTZdIBtbMzltG1s5NW3ihpMgVGFyIHYxLjEwLjEg4oeSIHYxLjEwLjAbWzM5bQogIBtbOTBtW2U2NmUwMDc4XSAbWzM5bRtbOTNt4oaRIENvbXBpbGVyU3VwcG9ydExpYnJhcmllc19qbGwgdjEuMC4xKzAg4oeSIHYxLjAuNSswG1szOW0KICAbWzkwbVtjOGZmZDljM10gG1szOW0bWzkzbeKGkSBNYmVkVExTX2psbCB2Mi4yOC4wKzAg4oeSIHYyLjI4LjIrMBtbMzltCiAgG1s5MG1bMTRhMzYwNmRdIBtbMzltG1s5M23ihpEgTW96aWxsYUNBQ2VydHNfamxsIHYyMDIyLjIuMSDih5IgdjIwMjIuMTAuMTEbWzM5bQogIBtbOTBtWzQ1MzY2MjlhXSAbWzM5bRtbOTNt4oaRIE9wZW5CTEFTX2psbCB2MC4zLjIwKzAg4oeSIHYwLjMuMjErNBtbMzltCiAgG1s5MG1bYmVhODdkNGFdIBtbMzltG1s5Mm0rIFN1aXRlU3BhcnNlX2psbCB2NS4xMC4xKzYbWzM5bQogIBtbOTBtWzgzNzc1YTU4XSAbWzM5bRtbOTNt4oaRIFpsaWJfamxsIHYxLjIuMTIrMyDih5IgdjEuMi4xMyswG1szOW0KICAbWzkwbVs4ZTg1MGI5MF0gG1szOW0bWzkzbeKGkSBsaWJibGFzdHJhbXBvbGluZV9qbGwgdjUuMS4xKzAg4oeSIHY1LjguMCswG1szOW0KClByZWNvbXBpbGluZy4uLgobWzMybRtbMW0gIEFjdGl2YXRpbmcbWzIybRtbMzltIHByb2plY3QgYXQgYC90bXAvamxfNkdlWklzYKVJcG9wdNoHXRtbMzNtG1sxbeKUjCAbWzIybRtbMzltG1szM20bWzFtV2FybmluZzogG1syMm0bWzM5bVRoZSBhY3RpdmUgbWFuaWZlc3QgZmlsZSBhdCBgL3RtcC9qbF82R2VaSXMvTWFuaWZlc3QudG9tbGAgaGFzIGFuIG9sZCBmb3JtYXQgdGhhdCBpcyBiZWluZyBtYWludGFpbmVkLgobWzMzbRtbMW3ilIIgG1syMm0bWzM5bVRvIHVwZGF0ZSB0byB0aGUgbmV3IGZvcm1hdCwgd2hpY2ggaXMgc3VwcG9ydGVkIGJ5IEp1bGlhIHZlcnNpb25zIOKJpSAxLjYuMiwgcnVuIGBpbXBvcnQgUGtnOyBQa2cudXBncmFkZV9tYW5pZmVzdCgpYCB3aGljaCB3aWxsIHVwZ3JhZGUgdGhlIGZvcm1hdCB3aXRob3V0IHJlLXJlc29sdmluZy4KG1szM20bWzFt4pSCIBtbMjJtG1szOW1UbyB0aGVuIHJlY29yZCB0aGUganVsaWEgdmVyc2lvbiByZS1yZXNvbHZlIHdpdGggYFBrZy5yZXNvbHZlKClgIGFuZCBpZiB0aGVyZSBhcmUgcmVzb2x2ZSBjb25mbGljdHMgY29uc2lkZXIgYFBrZy51cGRhdGUoKWAuChtbMzNtG1sxbeKUlCAbWzIybRtbMzltG1s5MG1AIFBrZy5UeXBlcyAvb3B0L2hvc3RlZHRvb2xjYWNoZS9qdWxpYS8xLjkuMy94NjQvc2hhcmUvanVsaWEvc3RkbGliL3YxLjkvUGtnL3NyYy9tYW5pZmVzdC5qbDozMTYbWzM5bQoKSW5zdGFudGlhdGluZy4uLgobWzMzbRtbMW3ilIwgG1syMm0bWzM5bRtbMzNtG1sxbVdhcm5pbmc6IBtbMjJtG1szOW1UaGUgYWN0aXZlIG1hbmlmZXN0IGZpbGUgaXMgYW4gb2xkZXIgZm9ybWF0IHdpdGggbm8ganVsaWEgdmVyc2lvbiBlbnRyeS4gRGVwZW5kZW5jaWVzIG1heSBoYXZlIGJlZW4gcmVzb2x2ZWQgd2l0aCBhIGRpZmZlcmVudCBqdWxpYSB2ZXJzaW9uLgobWzMzbRtbMW3ilJQgG1syMm0bWzM5bRtbOTBtQCAvdG1wL2psXzZHZVpJcy9NYW5pZmVzdC50b21sOjAbWzM5bQoKUmVzb2x2aW5nLi4uChtbMzJtG1sxbSAgTm8gQ2hhbmdlcxtbMjJtG1szOW0gdG8gYC90bXAvamxfNkdlWklzL1Byb2plY3QudG9tbGAKG1szMm0bWzFtICAgIFVwZGF0aW5nG1syMm0bWzM5bSBgL3RtcC9qbF82R2VaSXMvTWFuaWZlc3QudG9tbGAKICAbWzkwbVs0NGNmZTk1YV0gG1szOW0bWzkzbeKGkSBQa2cgdjEuOC4wIOKHkiB2MS45LjIbWzM5bQogIBtbOTBtWzEwNzQ1YjE2XSAbWzM5bRtbOTNtfiBTdGF0aXN0aWNzIOKHkiB2MS45LjAbWzM5bQogIBtbOTBtW2ZhMjY3ZjFmXSAbWzM5bRtbOTNt4oaRIFRPTUwgdjEuMC4wIOKHkiB2MS4wLjMbWzM5bQogIBtbOTBtW2E0ZTU2OWE2XSAbWzM5bRtbOTVt4oaTIFRhciB2MS4xMC4xIOKHkiB2MS4xMC4wG1szOW0KICAbWzkwbVtlNjZlMDA3OF0gG1szOW0bWzkzbeKGkSBDb21waWxlclN1cHBvcnRMaWJyYXJpZXNfamxsIHYxLjAuMSswIOKHkiB2MS4wLjUrMBtbMzltCiAgG1s5MG1bYzhmZmQ5YzNdIBtbMzltG1s5M23ihpEgTWJlZFRMU19qbGwgdjIuMjguMCswIOKHkiB2Mi4yOC4yKzAbWzM5bQogIBtbOTBtWzE0YTM2MDZkXSAbWzM5bRtbOTNt4oaRIE1vemlsbGFDQUNlcnRzX2psbCB2MjAyMi4yLjEg4oeSIHYyMDIyLjEwLjExG1szOW0KICAbWzkwbVs0NTM2NjI5YV0gG1szOW0bWzkzbeKGkSBPcGVuQkxBU19qbGwgdjAuMy4yMCswIOKHkiB2MC4zLjIxKzQbWzM5bQogIBtbOTBtW2JlYTg3ZDRhXSAbWzM5bRtbOTJtKyBTdWl0ZVNwYXJzZV9qbGwgdjUuMTAuMSs2G1szOW0KICAbWzkwbVs4Mzc3NWE1OF0gG1szOW0bWzkzbeKGkSBabGliX2psbCB2MS4yLjEyKzMg4oeSIHYxLjIuMTMrMBtbMzltCiAgG1s5MG1bOGU4NTBiOTBdIBtbMzltG1s5M23ihpEgbGliYmxhc3RyYW1wb2xpbmVfamxsIHY1LjEuMSswIOKHkiB2NS44LjArMBtbMzltCgpQcmVjb21waWxpbmcuLi4KG1szMm0bWzFtICBBY3RpdmF0aW5nG1syMm0bWzM5bSBwcm9qZWN0IGF0IGAvdG1wL2psXzZHZVpJc2CnZW5hYmxlZMO3cmVzdGFydF9yZWNvbW1lbmRlZF9tc2fAtHJlc3RhcnRfcmVxdWlyZWRfbXNnwK1idXN5X3BhY2thZ2VzkK9pbnN0YWxsX3RpbWVfbnPPAAAAAUwmHMqsaW5zdGFudGlhdGVkw6tjZWxsX2lucHV0c94ATdkkNWFiNmNkMTYtM2MyNC00ZjYwLWJkZjItN2Y0OGIzZTI1MDg1hKdjZWxsX2lk2SQ1YWI2Y2QxNi0zYzI0LTRmNjAtYmRmMi03ZjQ4YjNlMjUwODWkY29kZdl+bWQiIiIKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBtYW51YWxseSBjb252ZXJ0IHRoZSBzb2x1dGlvbiBiYWNrIHRvIHRoZSBgRU5HSU5FRVJJTkdgIGZvcm1hdCwgcHJvdmlkZWQgeW91IGhhdmUgdGhlIF9fbWFwX18KIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQ5Njc1N2RkZS01MmJlLTQ5MzAtOWJkZC05MzAzYmI3MTVlNTWEp2NlbGxfaWTZJDk2NzU3ZGRlLTUyYmUtNDkzMC05YmRkLTkzMDNiYjcxNWU1NaRjb2Rl2WByZXN1bHRfbWF0aF9tbiA9IFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLl9zb2x2ZV9tbl9tY19vcGIobWF0aF9tbiwgTkZBVVBvd2VyTW9kZWwsIGlwb3B0X3NvbHZlcimobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDAyNjA4OGY3LWIxZGYtNDY0Ny1hZDgxLTUyYzZjOGVhNzk0NISnY2VsbF9pZNkkMDI2MDg4ZjctYjFkZi00NjQ3LWFkODEtNTJjNmM4ZWE3OTQ0pGNvZGXZUmVuZ19hbGwgPSBwYXJzZV9maWxlKCIuLi90ZXN0L2RhdGEvb3BlbmRzcy9jYXNlM191bmJhbGFuY2VkLmRzcyI7IGltcG9ydF9hbGw9dHJ1ZSmobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJGYwNmI5NTkyLTBlMTYtNGZkMS1iZjZlLTYyNGVjMGNkYjhmYoSnY2VsbF9pZNkkZjA2Yjk1OTItMGUxNi00ZmQxLWJmNmUtNjI0ZWMwY2RiOGZipGNvZGXaA0RtZCIiIgpBZ2Fpbiwgd2Ugc2VlIGNvbXBvbmVudHMgaWRlbnRpZmllZCBieSB0aGVpciBPcGVuRFNTIG5hbWVzLiBBIGAibGluZSJgIGlzIGFuIGVkZ2Ugb2JqZWN0LCB3aGljaCB3aWxsIGFsd2F5cyBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKCi0gYCJmX2J1cyJgCi0gYCJ0X2J1cyJgCi0gYCJmX2Nvbm5lY3Rpb25zImAgLSBsaXN0IG9mIHRlcm1pbmFscyB0byB3aGljaCB0aGUgbGluZSBpcyBjb25uZWN0ZWQgb24gdGhlIGZyb20tc2lkZQotIGAidF9jb25uZWN0aW9ucyJgIC0gbGlzdCBvZiB0ZXJtaW5hbHMgdG8gd2hpY2ggdGhlIGxpbmUgaXMgY29ubmVjdGVkIG9uIHRoZSB0by1zaWRlCgpIZXJlIHdlIGFyZSBhbHNvIGludHJvZHVjZWQgdG8gdHdvIGltcG9ydGFudCBjb25jZXB0cywgdGhlIGAic291cmNlX2lkImAsIHdoaWNoIGlzIGFuIGVhc3kgd2F5IHRvIGlkZW50aWZ5IGZyb20gd2hlcmUgYW4gb2JqZWN0IG9yaWdpbmF0ZXMgaW4gdGhlIGRzcyBmaWxlLCBhbmQgYSBkYXRhIHR5cGUgZWxlbWVudCwgcG9pbnRlZCB0byBieSBgImxpbmVjb2RlImAgaW4gdGhpcyBjYXNlLgoKQSBkYXRhIHR5cGUgZWxlbWVudCBpcyBhbiBlbGVtZW50IHRoYXQgZG9lcyBub3QgcmVwcmVzZW50IGEgcmVhbCBlbmdpbmVlcmluZyBvYmplY3QsIGJ1dCBvbmx5IGNvbnRhaW5zIGRhdGEgdGhhdCBvbmUgb2YgdGhvc2UgcmVhbCBvYmplY3RzIGNhbiByZWZlciB0bywgaW4gdGhpcyBjYXNlIGEgbGluZWNvZGUsIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGxpa2UgbGluZSByZXNpc3RhbmNlL3JlYWN0YW5jZSBhbmQgY29uZHVjdGFuY2Uvc3VzY2VwdGFuY2UuCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkYjFlNTUyNjMtOWM3Ni00M2IyLWI5MWMtMTE1YjJmMDgwMTgyhKdjZWxsX2lk2SRiMWU1NTI2My05Yzc2LTQzYjItYjkxYy0xMTViMmYwODAxODKkY29kZdoBK21kIiIiCkFub3RoZXIgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gaW5jbHVkZWQgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gaXMgdGhlIGBhcHBseV92b2x0YWdlX2JvdW5kcyFgIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGFwcGx5IHNvbWUgdm9sdGFnZSBib3VuZHMgaW4gU0kgdW5pdHMsIGdpdmVuIHNvbWUgcGVyY2VudCB2YWx1ZSwgX2UuZy5fIGlmIHdlIHdhbnQgdGhlIGxvd2VyIGJvdW5kIG9uIHZvbHRhZ2UgdG8gYmUgYDAuOWAgYW5kIHVwcGVyIGJvdW5kIGAxLjFgIGFmdGVyIHBlci11bml0IGNvbnZlcnNpb24KIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQ0NjAzYmM1Ni1jNDAyLTQ4YWYtOTcxNS0wNzIyZTQyZDkwZjeEp2NlbGxfaWTZJDQ2MDNiYzU2LWM0MDItNDhhZi05NzE1LTA3MjJlNDJkOTBmN6Rjb2Rl2UBwbV9lbmcgPSBpbnN0YW50aWF0ZV9tY19tb2RlbChlbmcsIE5GQVVQb3dlck1vZGVsLCBidWlsZF9tY19vcGYpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ1OGY4MDY1MS00YTQ0LTQ3ODEtYTZjMC1hMDU2ZWM3NmIwN2WEp2NlbGxfaWTZJDU4ZjgwNjUxLTRhNDQtNDc4MS1hNmMwLWEwNTZlYzc2YjA3ZaRjb2Rl2VdwYXJzZV9maWxlKCIuLi90ZXN0L2RhdGEvb3BlbmRzcy91dF90cmFuc18yd195eS5kc3MiOyB0cmFuc2Zvcm1hdGlvbnM9W21ha2VfbG9zc2xlc3MhXSmobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDk2YTY1YmRjLTdlZTQtNGU5Zi05NGY1LThhODNmNzUxMmZlOYSnY2VsbF9pZNkkOTZhNjViZGMtN2VlNC00ZTlmLTk0ZjUtOGE4M2Y3NTEyZmU5pGNvZGXZj21kIiIiCkFsdGVybmF0aXZlbHksIHRoZSBgTUFUSEVNQVRJQ0FMYCBtb2RlbCBjYW4gYmUgcmV0dXJuZWQgZGlyZWN0bHkgZnJvbSB0aGUgYHBhcnNlX2ZpbGVgIGNvbW1hbmQgd2l0aCB0aGUgYGRhdGFfbW9kZWxgIGtleXdvcmQgYXJndW1lbnQKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRhNzM0OGZjOC1iMjVlLTRlY2YtOWZlNi0zMTQwMzZiN2RmOWOEp2NlbGxfaWTZJGE3MzQ4ZmM4LWIyNWUtNGVjZi05ZmU2LTMxNDAzNmI3ZGY5Y6Rjb2Rl2SBtYXRoID0gdHJhbnNmb3JtX2RhdGFfbW9kZWwoZW5nKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkZjg4MmYwNzAtNzRhZi00ZjNiLTlhZDEtYmQ3YWQ0NTM3NzhmhKdjZWxsX2lk2SRmODgyZjA3MC03NGFmLTRmM2ItOWFkMS1iZDdhZDQ1Mzc3OGakY29kZdnybWQiIiIKIyMjIEJyYW5jaCBGbG93IGZvcm11bGF0aW9ucwoKUHJldmlvdXNseSwgdG8gdXNlIGEgYnJhbmNoIGZsb3cgZm9ybXVsYXRpb24sIHN1Y2ggYXMgYFNPQ05MUFVCRlBvd2VyTW9kZWxgLCBpdCB3YXMgcmVxdWlyZWQgdG8gdXNlIGEgZGlmZmVyZW50IGBzb2x2ZV9gIGNvbW1hbmQsIGJ1dCBub3csIGJ5IHVzaW5nIG11bHRpcGxlIGRpc3BhdGNoIHdlIGhhdmUgc2ltcGxpZmllZCB0aGlzIGZvciB0aGUgdXNlcgoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGFkNDhiM2FkLWVkZTEtNDEwOS05NjQ3LTAwN2MxZDhkMTk2Y4SnY2VsbF9pZNkkYWQ0OGIzYWQtZWRlMS00MTA5LTk2NDctMDA3YzFkOGQxOTZjpGNvZGXZYXBhcnNlX2ZpbGUoIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL2Nhc2UzX2JhbGFuY2VkLmRzcyI7IG11bHRpbmV0d29yaz10cnVlLCBkYXRhX21vZGVsPU1BVEhFTUFUSUNBTCmobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDU0MjgwNjk2LWJlZWMtNDdlZS04MTE0LWVhOTMxMWFjYTllYoSnY2VsbF9pZNkkNTQyODA2OTYtYmVlYy00N2VlLTgxMTQtZWE5MzExYWNhOWVipGNvZGXaBLFtZCIiIgpUaGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIHRvIG5vdGljZSByaWdodCBhd2F5LiBGaXJzdCwgdGhlIGRhdGEgbW9kZWwgdHJhbnNmb3JtIGF1dG9tYXRpY2FsbHkgY29udmVydHMgdGhlIG1vZGVsIHRvIHBlci11bml0LiBTZWNvbmQsIHRoZXJlIGFyZSBhIGxvdCBvZiBlbXB0eSBjb21wb25lbnQgc2V0cywgd2hlcmVhcyBpbiB0aGUgYEVOR0lORUVSSU5HYCBtb2RlbCwgb25seSBjb21wb25lbnQgdHlwZXMgdGhhdCBoYWQgY29tcG9uZW50cyBpbiB0aGVtIHdlcmUgbGlzdGVkLiBJbiB0aGUgYE1BVEhFTUFUSUNBTGAgbW9kZWwgY2VydGFpbiBjb21wb25lbnQgZGljdGlvbmFyaWVzIGFyZSBhbHdheXMgZXhwZWN0ZWQgdG8gZXhpc3QsIGFuZCB0aGUgYGVuZzJtYXRoYCBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGUgdGhlc2UuCgpOZXh0LCB0aGVyZSBhcmUgYSBmZXcgdW51c2FsIGZpZWxkcywgc3VjaCBhcyBgInNldHRpbmdzImAsIHdoaWNoIHByZXZpb3VzbHkgZGlkbid0IGV4aXN0IGluIHRoZSBgTUFUSEVNQVRJQ0FMYCBtb2RlbC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgcGVyLXVuaXQgY29udmVyc2lvbiBzcGVjaWZpY2FsbHkgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uIEFsc28sIGlzIHRoZSBgIm1hcCJgIGZpZWxkLCB3aGljaCBpcyBhIGBWZWN0b3JgIG9mIERpY3Rpb25hcmllcyB0aGF0IGVuYWJsZSB0aGUgY29udmVyc2lvbiBiYWNrIHRvIGBFTkdJTkVFUklOR2AgZnJvbSBgTUFUSEVNQVRJQ0FMYC4gV2l0aG91dCB0aGlzIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gY29udmVydCBiYWNrLCBhbmQgaW4gZmFjdCBvbmx5IHRoZSBzb2x1dGlvbiBjYW4gYmUgY29udmVydGVkLCBiZWNhdXNlIHNvbWUgcHJvcGVydGllcyBhcmUgY29tYmluZWQgZGVzdHJ1Y3RpdmVseSBkdXJpbmcgdGhlIGNvbnZlcnNpb24gdG8gdGhlIGBNQVRIRU1BVElDQUxgIG1vZGVsLCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSByZXZlcnNlIGVuZ2luZWVyZWQuIEhvd2V2ZXIsIHNpbmNlIHRoZSBjb252ZXJzaW9uIHRvIGBNQVRIRU1BVElDQUxgIGlzIG5vdCBpbi1wbGFjZSwgeW91IHdpbGwgYWx3YXlzIGhhdmUgYSBjb3B5IG9mIGBlbmdgIGFsb25nc2lkZSBgbWF0aGAuCgpIZXJlIGlzIGFuIGV4YW1wbGUgb2Ygb25lIG9mIHRoZSBgIm1hcCJgIGVudHJpZXMKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQ4YjA2NjAzOS1lZDY1LTQ2MTctYjQwNC04Njk1MmQzZmM3OGWEp2NlbGxfaWTZJDhiMDY2MDM5LWVkNjUtNDYxNy1iNDA0LTg2OTUyZDNmYzc4ZaRjb2Rl2SRyZXN1bHRbInNvbHV0aW9uIl1bImJ1cyJdWyJsb2FkYnVzIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJGM1NWIyYzQyLTlkMjctMTFlYi0yNGNhLWU5MGE1NDcyZmZiYoSnY2VsbF9pZNkkYzU1YjJjNDItOWQyNy0xMWViLTI0Y2EtZTkwYTU0NzJmZmJipGNvZGXaAfptZCIiIgojIEludHJvZHVjdGlvbiB0byB0aGUgUG93ZXJNb2RlbHNEaXN0cmlidXRpb24gRGF0YSBNb2RlbHMKCkluIHRoaXMgbm90ZWJvb2sgd2UgaW50cm9kdWNlIHRoZSBlbmdpbmVlcmluZyBkYXRhIG1vZGVsIGFkZGVkIHRvIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIGluIHZlcnNpb24gdjAuOS4wLiBXZSB3aWxsIGdpdmUgc2V2ZXJhbCBleGFtcGxlcyBvZiBob3cgdG8gdXNlIHRoaXMgbmV3IGRhdGEgbW9kZWwgZGlyZWN0bHksIGluY2x1ZGluZyBuZXcgdHJhbnNmb3JtYXRpb25zIHRoYXQgaGF2ZSBiZWNvbWUgZWFzaWVyIHdpdGggaXRzIGludHJvZHVjdGlvbiwgaG93IHRvIGNvbnZlcnQgaXQgdG8gdGhlIHRoZSBsb3dlci1sZXZlbCBtYXRoZW1hdGljYWwgbW9kZWwgdGhhdCB3YXMgcHJldmlvdXNseSB0aGUgb25seSB1c2VyIGludGVyZmFjZSB3ZSBvZmZlcmVkLCBhbmQgaG93IHRvIGdldCB2YXJpb3VzIHR5cGVzIG9mIHJlc3VsdHMgdXNpbmcgdGhpcyBuZXcgbW9kZWwuCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkN2U1ODExY2YtODZhMi00M2ZiLThjOTQtNDQwOTFmMzNjMDMxhKdjZWxsX2lk2SQ3ZTU4MTFjZi04NmEyLTQzZmItOGM5NC00NDA5MWYzM2MwMzGkY29kZdoB0m1kIiIiCi0gYCJ2bSJgIC0gc3BlY2lmaWVzIHRoZSBmaXhlZCB2b2x0YWdlIG1hZ25pdHVkZXMgcGVyIHBoYXNlIGF0IHRoZSBidXMKLSBgInZhImAgLSBzcGVjaWZpZXMgdGhlIGZpeGVkIHJlZmVyZW5jZSBhbmdsZXMgcGVyIHBoYXNlcyBhdCB0aGUgYnVzCi0gYCJycyJgIGFuZCBgInhzImAgc3BlY2lmaWVzIGludGVybmFsIGltcGVkYW5jZXMgb2YgdGhlIHZvbHRhZ2Ugc291cmNlCgojIyMgSW1wb3J0aW5nIHJhdyBkc3MgcHJvcGVydGllcwoKSW4gY2FzZSB0aGVyZSBhcmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgeW91IHdhbnQgdG8gdXNlIGZyb20gZHNzLCBpdCBpcyBwb3NzaWJsZSB0byBpbXBvcnQgdGhvc2UgZGlyZWN0bHkgaW50byB0aGUgYEVOR0lORUVSSU5HYCAoYW5kIGBNQVRIRU1BVElDQUxgKSBkYXRhIHN0cnVjdHVyZSB3aXRoIHRoZSBgaW1wb3J0X2FsbGAga2V5d29yZCBhcmd1bWVudAoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDI3ZDVhMjM3LTRjMmUtNGIxNC1hMDgyLWY0ODQ3MTUzYzhkNYSnY2VsbF9pZNkkMjdkNWEyMzctNGMyZS00YjE0LWEwODItZjQ4NDcxNTNjOGQ1pGNvZGWycmVzdWx0WyJzb2x1dGlvbiJdqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SRkMGUwMmVlNS1mNTdjLTQyODYtOTQwZC1iMDEwOTdjODQwYmWEp2NlbGxfaWTZJGQwZTAyZWU1LWY1N2MtNDI4Ni05NDBkLWIwMTA5N2M4NDBiZaRjb2Rl2fNtZCIiIgpZb3UgY2FuIHNlZSB0aGF0IHVuZGVyIHRoZSBhY3R1YWwgY29tcG9uZW50LCBpbiB0aGlzIGNhc2UgYSBgImxvYWQiYCwgdGhhdCB0aGVyZSBpcyBhIGAidGltZV9zZXJpZXMiYCBkaWN0aW9uYXJ5IHRoYXQgY29udGFpbnMgYEVOR0lORUVSSU5HYCBtb2RlbCB2YXJpYWJsZSBuYW1lcyBhbmQgcmVmZXJlbmNlcyB0byB0aGUgaWRlbnRpZmllcnMgb2YgYSByb290LWxldmVsIGB0aW1lX3Nlcmllc2Agb2JqZWN0LAoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDhiYTA4MWI0LTg0NDQtNDhlMC1hZmNlLTIwNjQ5ZjdmZGQwMYSnY2VsbF9pZNkkOGJhMDgxYjQtODQ0NC00OGUwLWFmY2UtMjA2NDlmN2ZkZDAxpGNvZGW3ZW5nWyJidXMiXVsic291cmNlYnVzIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDJjMzU4ZDdhLTVkODQtNGY2Mi1hMTQ3LTU3N2JiNzc1YWM3ZoSnY2VsbF9pZNkkMmMzNThkN2EtNWQ4NC00ZjYyLWExNDctNTc3YmI3NzVhYzdmpGNvZGXZwm1kIiIiCldlIGNhbiBzZWUgdGhhdCAibm9sb2FkbG9zcyIsICJydyIsIGFuZCAiaW1hZyIgYXJlIG5vbi16ZXJvLCBidXQgaWYgd2UgYXBwbHkgdGhlIG1ha2VfbG9zc2xlc3MhIGZ1bmN0aW9uIHdlIGNhbiBzZWUgdGhlc2UgcGFyYW1ldGVycyBhcmUgc2V0IHRvIHplcm8sIGVmZmVjdGl2ZWx5IGVsaW1pbmF0aW5nIHRoZSBsb3NzZXMKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRlMjJhN2QzZS0zZjIxLTQxYjAtYWJmMi0yYzcyM2U4N2M1N2WEp2NlbGxfaWTZJGUyMmE3ZDNlLTNmMjEtNDFiMC1hYmYyLTJjNzIzZTg3YzU3ZaRjb2Rl2gF/bWQiIiIKIyMgUGFyc2luZyBEYXRhCgpIZXJlIHdlIGdpdmUgdGhlIGZpcnN0IGV4YW1wbGUgb2YgaG93IHRvIHBhcnNlIGRhdGEgaW50byB0aGUgYEVOR0lORUVSSU5HYCBkYXRhIG1vZGVsIHN0cnVjdHVyZSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgZGF0YSBzdHJ1Y3R1cmUgdHlwZSB0aGF0IHRoZSB1c2VyIHdpbGwgc2VlIHdpdGhvdXQgcGFzc2luZyBhZGRpdGlvbmFsIGFyZ3VtZW50cywgYXMgd2UgZGVtb25zdHJhdGUgbGF0ZXIuCgpXZSBzdGFydCB3aXRoIGEgMyBidXMgdW5iYWxhbmNlZCBsb2FkIGNhc2UgcHJvdmlkZWQgYXMgYSBkc3MgZmlsZSBpbiB0aGUgYHRlc3RgIGZvbGRlciBvZiB0aGUgUG93ZXJNb2RlbHNEaXN0cmlidXRpb24uamwgcmVwb3NpdG9yeQoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDJhOGMxNTM2LWVmNWYtNGUzNy1iMzBlLTFiYjczOTgyZDdiMISnY2VsbF9pZNkkMmE4YzE1MzYtZWY1Zi00ZTM3LWIzMGUtMWJiNzM5ODJkN2IwpGNvZGXaAgptZCIiIgotIGAidGVybWluYWxzImAgaW5kaWNhdGVzIHdoaWNoIHRlcm1pbmFscyBvbiB0aGUgYnVzIGhhdmUgYWN0aXZlIGNvbm5lY3Rpb25zCi0gYCJncm91bmRlZCJgIGluZGljYXRlcyB3aGljaCB0ZXJtaW5hbHMgYXJlIGdyb3VuZGVkCi0gYCJyZyJgIGFuZCBgInhnImAgaW5kaWNhdGUgdGhlIGdyb3VuZGluZyByZXNpc3RhbmNlIGFuZCByZWFjdGFuY2Ugb2YgdGhlIGdyb3VuZAotIGAic3RhdHVzImAgaW5kaWNhdGVzIHdoZXRoZXIgYSBidXMgaXMgYEVOQUJMRURgIG9yIGBESVNBQkxFRGAsIGFuZCBpcyBzcGVjaWZpZWQgZm9yIGV2ZXJ5IGNvbXBvbmVudCBpbiB0aGUgZW5naW5lZXJpbmcgbW9kZWwKCk5leHQsIHdlIGxvb2sgYXQgdGhlIGAibGluZSJgIGNvbXBvbmVudHMsIHdoaWNoIGlzIGEgZ2VuZXJpYyBuYW1lIGZvciBib3RoIG92ZXJoZWFkIGxpbmVzIGFuZCB1bmRlcmdyb3VuZCBjYWJsZXMsIHdoaWNoIHdlIGRvIG5vdCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW4gdGhlIG5vbWVuY2xhdHVyZQoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDdhODZlMjZkLWZkZjYtNDFiNi1iMWRkLWRjMGM0YThlOWQ1MISnY2VsbF9pZNkkN2E4NmUyNmQtZmRmNi00MWI2LWIxZGQtZGMwYzRhOGU5ZDUwpGNvZGXZPmVuZ191dCA9IHBhcnNlX2ZpbGUoIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL3V0X3RyYW5zXzJ3X3l5LmRzcyIpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SRmMzQ1OGE1Yy03MGM2LTRkMGMtODI1My00ZmViMGM4N2VlNzaEp2NlbGxfaWTZJGYzNDU4YTVjLTcwYzYtNGQwYy04MjUzLTRmZWIwYzg3ZWU3NqRjb2Rl2gEtbWQiIiIKIyMjIFRpbWUgU2VyaWVzIFBhcnNpbmcgRXhhbXBsZQoKSW4gdGhlIGBFTkdJTkVFUklOR2AgbW9kZWwsIHdlIGhhdmUgaW5jbHVkZWQgdGhlIGB0aW1lX3Nlcmllc2AgZGF0YSB0eXBlLCB3aGljaCBob2xkcyBhbGwgdGltZSBzZXJpZXMgZGF0YSBhbmQgY2FuIGJlIHJlZmVycmVkIHRvIHNpbWlsYXIgdG8gYCJsaW5lY29kZSJgIGFzIGRlbW9uc3RyYXRlZCBhYm92ZS4KCkJlbG93IHdlIGNhbiBzZWUgYW4gZXhhbXBsZSBvZiBhIHBhcnNlIHRoYXQgaW5jbHVkZXMgc29tZSB0aW1lX3NlcmllcyBjb21wb25lbnRzCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkNTQ0MTA4ZDEtZDFhNy00ZGM2LTlhM2MtNmExMDAyNWNiOGEzhKdjZWxsX2lk2SQ1NDQxMDhkMS1kMWE3LTRkYzYtOWEzYy02YTEwMDI1Y2I4YTOkY29kZdoBbG1kIiIiCiMjIyBSdW5uaW5nIFRpbWUgU2VyaWVzIE1vZGVscwoKQnkgZGVmYXVsdCwgYHRpbWVfc2VyaWVzYCBvYmplY3Qgd2lsbCBiZSBpZ25vcmVkIHdoZW4gcnVubmluZyBhIG1vZGVsLiBUbyB1c2UgdGhlIHRpbWUgc2VyaWVzIGluZm9ybWF0aW9uIHlvdSB3aWxsIG5lZWQgdG8gaGF2ZSBhIG11bHRpbmV0d29yayBwcm9ibGVtIHNwZWNpZmljYXRpb24KCkluIHRoZSBleGFtcGxlIGJlbG93IHdlIHVzZSBhIHRlc3QgY2FzZSwgd2hpY2ggaXMgbm90IGV4cG9ydGVkIGJ5IGRlZmF1bHQsIGFuZCB0aGVyZWZvcmUgcmVxdWlyZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIG5hbWVzcGFjZQoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGYzMGNkMGQwLWIwZGEtNGY2My1hMjQ1LTU2OGE3NjNhOTNkOISnY2VsbF9pZNkkZjMwY2QwZDAtYjBkYS00ZjYzLWEyNDUtNTY4YTc2M2E5M2Q4pGNvZGXZNWJlZ2luCgl1c2luZyBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbgoJdXNpbmcgSXBvcHQKZW5kqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ4OWRlODBkZi0xZGQwLTRmOTQtYTI3ZC03NDY5M2E5NzgwNTmEp2NlbGxfaWTZJDg5ZGU4MGRmLTFkZDAtNGY5NC1hMjdkLTc0NjkzYTk3ODA1OaRjb2Rl2VhpcG9wdF9zb2x2ZXIgPSBvcHRpbWl6ZXJfd2l0aF9hdHRyaWJ1dGVzKElwb3B0Lk9wdGltaXplciwgInRvbCI9PjFlLTYsICJwcmludF9sZXZlbCI9PjApqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ4M2NlNDM0Yy0wZjkyLTQ2YTgtODY0OC0zMjIwODQwNDQ2MDCEp2NlbGxfaWTZJDgzY2U0MzRjLTBmOTItNDZhOC04NjQ4LTMyMjA4NDA0NDYwMKRjb2Rlq2VuZ1sibGluZSJdqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ0NWMzMjBkZC1lMGIyLTQ2ZWMtYWYwOS1kODNlNTY1MjAyNmSEp2NlbGxfaWTZJDQ1YzMyMGRkLWUwYjItNDZlYy1hZjA5LWQ4M2U1NjUyMDI2ZKRjb2RlvGVuZ191dFsidHJhbnNmb3JtZXIiXVsidHgxIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDVmNzJlY2VjLWJiM2YtNDIzMS05M2MxLTcxOWUzOGUxN2JlNISnY2VsbF9pZNkkNWY3MmVjZWMtYmIzZi00MjMxLTkzYzEtNzE5ZTM4ZTE3YmU0pGNvZGXZdG1kIiIiCllvdSB3aWxsIG5vdGUgdGhlIHByZXNlbmNlIG9mIGAiZHNzImAgZGljdGlvbmFyaWVzIHVuZGVyIGNvbXBvbmVudHMsIGFuZCBgImRzc19vcHRpb25zImAgYXQgdGhlIHJvb3QgbGV2ZWwKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQ1NjQyMDBlMC0yMDgwLTQ0ZGEtOGRiZi0zN2M1ZTNhMzg0MTKEp2NlbGxfaWTZJDU2NDIwMGUwLTIwODAtNDRkYS04ZGJmLTM3YzVlM2EzODQxMqRjb2Rl2fJtZCIiIgpIZXJlIHlvdSBjYW4gc2VlIHRoYXQgdGhlIHNvbHV0aW9uIGNvbWVzIGJhY2sgb3V0IGJ5IGRlZmF1bHQgaW50byB0aGUgc2FtZSBkYXRhIG1vZGVsIGFzIGlzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHRvIHRoZSBydW5fIGNvbW1hbmQsIGFzIHdlbGwgYXMgYmVpbmcgaW4gU0kgdW5pdHMsIGFzIG9wcG9zZWQgdG8gcGVyIHVuaXQsIHdoaWNoIGlzIHVzZWQgZHVyaW5nIHRoZSBzb2x2ZS4gRm9yIGV4YW1wbGUsCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkZTg1MjcxMmMtZDA5YS00MWUxLTk3ODUtMzA4YzIxOWM3YWQ4hKdjZWxsX2lk2SRlODUyNzEyYy1kMDlhLTQxZTEtOTc4NS0zMDhjMjE5YzdhZDikY29kZbxlbmdfdHNbInRpbWVfc2VyaWVzIl1bImxzMSJdqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ1ZmUyZDE4Ni00MGM2LTQ2YzItODIzZS05NDAxY2IzYjZkNmOEp2NlbGxfaWTZJDVmZTJkMTg2LTQwYzYtNDZjMi04MjNlLTk0MDFjYjNiNmQ2Y6Rjb2Rl2URlbmcgPSBwYXJzZV9maWxlKCIkcG1kX3BhdGgvdGVzdC9kYXRhL29wZW5kc3MvY2FzZTNfdW5iYWxhbmNlZC5kc3MiKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkYTViNzM2ZjktMjc3Ni00NzYwLWIwNzMtZDAyMDI3YmFlZjEzhKdjZWxsX2lk2SRhNWI3MzZmOS0yNzc2LTQ3NjAtYjA3My1kMDIwMjdiYWVmMTOkY29kZa9lbmdbInNldHRpbmdzIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDJiZjgwMmUyLWY3NjktNDhkYi1hZGVmLWE1YTA2NmM1NjVjMoSnY2VsbF9pZNkkMmJmODAyZTItZjc2OS00OGRiLWFkZWYtYTVhMDY2YzU2NWMypGNvZGXZNG1kIkFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIHNwZWNpZmllZCBhdCBwYXJzZSBieSKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDhkNTcwMWQxLTllOTEtNDNiNS05NzViLWZjOGUwZTMwNmU5OYSnY2VsbF9pZNkkOGQ1NzAxZDEtOWU5MS00M2I1LTk3NWItZmM4ZTBlMzA2ZTk5pGNvZGXaAcZtZCIiIgojIyBSdW5uaW5nIE9wdGltYWwgUG93ZXIgRmxvdwoKSW4gdGhpcyBzZWN0aW9uIHdlIGludHJvZHVjZSBob3cgdG8gcnVuIGFuIG9wdGltYWwgcG93ZXIgZmxvdyAob3BmKSBpbiBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbiBvbiBhbiBlbmdpbmVlcmluZyBkYXRhIG1vZGVsCgpJbiBvcmRlciB0byBydW4gYW4gT1BGIHByb2JsZW0geW91IHdpbGwgbmVlZAoKMS4gYSBkYXRhIG1vZGVsCjIuIGEgZm9ybXVsYXRpb24KMy4gYSBzb2x2ZXIKCkluIHRoZXNlIGV4YW1wbGVzIHdlIHdpbGwgdXNlIHRoZSBgZW5nYCBtb2RlbCB3ZSB3b3JrZWQgd2l0aCBhYm92ZSwgdGhlIGBBQ1BVUG93ZXJNb2RlbGAsIHdoaWNoIGlzIGEgQUMgcG93ZXIgZmxvdyBmb3JtdWxhdGlvbiBpbiBwb2xhciBjb29yZGluYXRlcywgYW5kIHRoZSBgaXBvcHRfc29sdmVyYCB3ZSBhbHJlYWR5IGRlZmluZWQgYWJvdmUKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQ3MjNmNGUyNi04MDY1LTRlMjItOGM1Yy1kZTMyZDJlNDJiNDeEp2NlbGxfaWTZJDcyM2Y0ZTI2LTgwNjUtNGUyMi04YzVjLWRlMzJkMmU0MmI0N6Rjb2Rl2TZtZCJBbHRlcm5hdGl2ZWx5LCB3ZSBjYW4gYXBwbHkgdGhpcyBmdW5jdGlvbiBhdCBwYXJzZSKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGIxNTU5M2I5LWY3NzUtNDdhZi1hYTliLTQ5ODBhNDAyOGZhYYSnY2VsbF9pZNkkYjE1NTkzYjktZjc3NS00N2FmLWFhOWItNDk4MGE0MDI4ZmFhpGNvZGW6ZW5nWyJsaW5lY29kZSJdWyI0LzBxdWFkIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDM2Y2ExN2JjLWI1NjAtNDhjOS05ODhmLTI1NTc4MDQ3OWQwNYSnY2VsbF9pZNkkMzZjYTE3YmMtYjU2MC00OGM5LTk4OGYtMjU1NzgwNDc5ZDA1pGNvZGW/ZW5nWyJ2b2x0YWdlX3NvdXJjZSJdWyJzb3VyY2UiXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkMWU3OTEyNjItMjYxZC00NzU2LWJlYzQtZWRlYmU0NzMyNzAwhKdjZWxsX2lk2SQxZTc5MTI2Mi0yNjFkLTQ3NTYtYmVjNC1lZGViZTQ3MzI3MDCkY29kZdmBbWQiSW4gdGhlc2UgZXhhbXBsZXMgd2Ugd2lsbCB1c2UgdGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb24gc29sdmVycywgc3BlY2lmaWVkIHVzaW5nIGBvcHRpbWl6ZXJfd2l0aF9hdHRyaWJ1dGVzYCBmcm9tIEp1TVAgdjAuMjEiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQyY2RkNjgyYS1iOTdmLTQ5ZGMtODgyOS00N2U3MTQ2NDk3YjmEp2NlbGxfaWTZJDJjZGQ2ODJhLWI5N2YtNDlkYy04ODI5LTQ3ZTcxNDY0OTdiOaRjb2Rl2TNhcHBseV92b2x0YWdlX2JvdW5kcyEoZW5nX3V0OyB2bV9sYj0wLjksIHZtX3ViPTEuMSmobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDc0NWYzM2JmLTk4ZDctNGIyNy05NWZkLWVjNmJmNWUzZDVjZoSnY2VsbF9pZNkkNzQ1ZjMzYmYtOThkNy00YjI3LTk1ZmQtZWM2YmY1ZTNkNWNmpGNvZGXZOHJlc3VsdCA9IHNvbHZlX21jX29wZihlbmcsIEFDUFVQb3dlck1vZGVsLCBpcG9wdF9zb2x2ZXIpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ4NjdkOGQxZC0wNDJhLTQyZWMtODQzZS01NmI4YmEyZGI5NmGEp2NlbGxfaWTZJDg2N2Q4ZDFkLTA0MmEtNDJlYy04NDNlLTU2YjhiYTJkYjk2YaRjb2Rl2URzb2xfZW5nX21uID0gdHJhbnNmb3JtX3NvbHV0aW9uKHJlc3VsdF9tYXRoX21uWyJzb2x1dGlvbiJdLCBtYXRoX21uKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkMmMzNzU4NzgtZjE2Yi00ODMzLTlhYWEtYjgyNmZiZTA1NmEyhKdjZWxsX2lk2SQyYzM3NTg3OC1mMTZiLTQ4MzMtOWFhYS1iODI2ZmJlMDU2YTKkY29kZdoDVW1kIiIiCiMjIE1hdGhlbWF0aWNhbCBNb2RlbAoKSW4gdGhpcyBzZWN0aW9uIHdlIGludHJvZHVjZSB0aGUgbWF0aGVtYXRpY2FsIG1vZGVsLCB3aGljaCB3YXMgdGhlIHByZXZpb3VzIHVzZXItZmFjaW5nIG1vZGVsIGluIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLCBleHBsYWluIGhvdyBjb252ZXJzaW9ucyBiZXR3ZWVuIHRoZSBtb2RlbCBoYXBwZW4gaW4gcHJhY3RpY2UsIGFuZCBnaXZlIGFuIGV4YW1wbGUgb2YgaG93IHRvIGRvIHRoaXMgY29udmVyc2lvbiBtYW51YWxseQoKSW4gcHJhY3RpY2UsIHVubGVzcyB0aGUgdXNlciBpcyBpbnRlcmVzdGVkLCB0aGUgY29udmVyc2lvbiBiZXR3ZWVuIHRoZSBgRU5HSU5FRVJJTkdgIGFuZCBgTUFUSEVNQVRJQ0FMYCBtb2RlbHMgc2hvdWxkIGJlIHNlZW1sZXNzIGFuZCBpbnZpc2libGUgdG8gdGhlIHVzZXIuIEJ5IHByb3ZpZGluZyBhbiBgRU5HSU5FRVJJTkdgIG1vZGVsIHRvIGEgYHJ1bl9gIGNvbW1hbmQgdGhlIGBydW5fbWNfbW9kZWxgIGNvbW1hbmQgd2lsbCBrbm93IHRvIGNvbnZlcnQgdGhlIG1vZGVsIHRvIGBNQVRIRU1BVElDQUxgLCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gdGhlIGdlbmVyYXRlIHRoZSBKdU1QIG1vZGVsIHRoYXQgd2lsbCBhY3R1YWxseSBiZSBvcHRpbWl6ZWQuIFNpbWlsYXJseSwgdGhlIHNvbHV0aW9uIGdlbmVyYXRlZCBieSB0aGlzIG9wdGltaXphdGlvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIGJhY2sgdG8gdGhlIGZvcm1hdCBvZiB0aGUgYEVOR0lORUVSSU5HYCBtb2RlbC4KCkxldCdzIGZpcnN0IHRha2UgYSBsb29rIGF0IGhvdyB0byBjb252ZXJ0IHRvIHRoZSBgTUFUSEVNQVRJQ0FMYCBtb2RlbAoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDU0NWM5MjcwLTI1N2EtNDZlOC05NzBkLTZhOWZjZjA5ZGMxN4SnY2VsbF9pZNkkNTQ1YzkyNzAtMjU3YS00NmU4LTk3MGQtNmE5ZmNmMDlkYzE3pGNvZGXZUHBhcnNlX2ZpbGUoIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL2Nhc2UzX3VuYmFsYW5jZWQuZHNzIjsgZGF0YV9tb2RlbD1NQVRIRU1BVElDQUwpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SRmZGE0MjBhMS1lNTYzLTRhNDEtODRkNC0yYTU3MGJmMTYzYWWEp2NlbGxfaWTZJGZkYTQyMGExLWU1NjMtNGE0MS04NGQ0LTJhNTcwYmYxNjNhZaRjb2Rl2gNCbWQiIiIKIyMjIE11bHRpbmV0d29ya3MKCkluIHRoaXMgc3Vic2VjdGlvbiB3ZSBjb3ZlciBwYXJzaW5nIGludG8gYSBtdWx0aW5ldHdvcmsgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGEgc3RydWN0dXJlIHRoYXQgb25seSBleGlzdHMgaW4gdGhlIGBNQVRIRU1BVElDQUxgIG1vZGVsCgpGb3IgdGhvc2UgdW5mYW1pbGlhciwgdGhlIEluZnJhc3RydWN0dXJlTW9kZWxzIGZhbWlseSBvZiBwYWNrYWdlcyBoYXMgYSBmZWF0dXJlIGNhbGxlZCBtdWx0aW5ldHdvcmtzLCB3aGljaCBpcyB1c2VmdWwgZm9yLCBhbW9uZyBvdGhlciB0aGluZ3MsIHJ1bm5pbmcgb3B0aW1pemF0aW9uIHByb2JsZW1zIG9uIHRpbWUgc2VyaWVzIHR5cGUgcHJvYmxlbXMuCgpNdWx0aW5ldHdvcmsgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBmb3JtYXR0ZWQgbGlrZSBzbwoKYGBganVsaWEKbW4gPSBEaWN0e1N0cmluZyxBbnl9KAogICAgIm11bHRpbmV0d29yayIgPT4gdHJ1ZSwKICAgICJudyIgPT4gRGljdHtTdHJpbmcsQW55fSgKICAgICAgICAiMSIgPT4gRGljdHtTdHJpbmcsQW55fSgKICAgICAgICAgICAgImJ1cyIgPT4gRGljdHtTdHJpbmcsQW55fSgpLAogICAgICAgICAgICAuLi4KICAgICAgICApLAogICAgICAgIC4uLgogICAgKSwKICAgIC4uLgopCmBgYAoKVG8gYXV0b21hdGljYWxseSBjcmVhdGUgYSBtdWx0aW5ldHdvcmsgc3RydWN0dXJlIGZyb20gYW4gZW5naW5lZXJpbmcgbW9kZWwgdGhhdCBjb250YWlucyBgdGltZV9zZXJpZXNgIGVsZW1lbnRzLCB3ZSBjYW4gdXNlIHRoZSBgbXVsdGluZXR3b3JrYCBrZXl3b3JkIGFyZ3VtZW50IGluIGB0cmFuc2Zvcm1fZGF0YV9tb2RlbGAKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRjODg0ZmQ1Yi00ZWNiLTQwMmItYjIyOC0wMWI5YTYxZGI4YmaEp2NlbGxfaWTZJGM4ODRmZDViLTRlY2ItNDAyYi1iMjI4LTAxYjlhNjFkYjhiZqRjb2Rl2gJmbWQiIiIKRGlmZmVyZW50IGluZm9ybWF0aW9uIGFuZCB3YXJuaW5nIG1lc3NhZ2VzIHdpbGwgYmUgZ2l2ZW4gZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBmaWxlLiBJbiB0aGUgY2FzZSBhYm92ZSwgdGhlc2UgbWVzc2FnZXMgYWxsIHJlbGF0ZWQgdG8gdmFyaW91cyBwYXJzZSBub3RpZmljYXRpb25zIHRoYXQgYXJpc2UgZHVyaW5nIGEgcGFyc2Ugb2YgYSBkc3MgZmlsZSwgYW5kIGNhbiBiZSBzYWZlbHkgaWdub3JlZAoKVGhlIHJlc3VsdGluZyBkYXRhIHN0cnVjdHVyZSBpcyBhIEp1bGlhIGRpY3Rpb25hcnkuIFRoZSBmaXJzdCBub3RhYmxlIGZpZWxkIGlzIGAiZGF0YV9tb2RlbCJgIHdoaWNoIHNwZWNpZmllcyB3aGljaCBkYXRhIG1vZGVsIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8sIGluIHRoaXMgY2FzZSBgRU5HSU5FRVJJTkdgLiBUaGlzIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGBFbnVtYCBvZiB0eXBlIGBEYXRhTW9kZWxgCgpUaGUgbmV4dCBub3RhYmxlIGZpZWxkIGlzIGAic2V0dGluZ3MiYCwgd2hpY2ggY29udGFpbnMgc29tZSBpbXBvcnRhbnQgZGVmYXVsdC9zdGFydGluZyB2YWx1ZXMgZm9yIHRoZSBkaXN0cmlidXRpb24gbmV0d29yawoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDI5YThhNTYwLTdkNWUtNDkyOS04NzdhLTJkYWIxNzMwOTk2OISnY2VsbF9pZNkkMjlhOGE1NjAtN2Q1ZS00OTI5LTg3N2EtMmRhYjE3MzA5OTY4pGNvZGXaAnBtZCIiIgotIGAic2Jhc2VfZGVmYXVsdCJgIGlzIHRoZSBzdGFydGluZyB2YWx1ZSBmb3IgdGhlIHBvd2VyIGJhc2UsCi0gYCJ2YmFzZXNfZGVmYXVsdCJgIGlzIHRoZSBzdGFydGluZyB2b2x0YWdlIGJhc2UgZm9yIHRoZSBjYXNlLCBhbmQgbXVsdGlwbGUgdm9sdGFnZSBiYXNlcyBjYW4gYmUgc3BlY2lmaWVkLCB3aGljaCB3b3VsZCBiZSB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIGlzb2xhdGVkIGlzbGFuZHMgd2l0aCB0aGVpciBvd24gZ2VuZXJhdGlvbiwKLSBgInZvbHRhZ2Vfc2NhbGVfZmFjdG9yImAgaXMgYSBzY2FsaW5nIGZhY3RvciBmb3IgYWxsIHZvbHRhZ2UgdmFsdWVzLCB3aGljaCBpbiB0aGUgY2FzZSBvZiBPcGVuRFNTIGlzIGluIGtWIGJ5IGRlZmF1bHQKLSBgInBvd2VyX3NjYWxlX2ZhY3RvciJgIGlzIGEgc2NhbGluZyBmYWN0b3IgZm9yIGFsbCBwb3dlciB2YWx1ZXMKLSBgImJhc2VfZnJlcXVlbmN5ImAgaXMgdGhlIGJhc2UgZnJlcXVlbmN5IG9mIHRoZSBuZXR3b3JrIGluIEh6LCB3aGljaCBpcyB1c2VmdWwgdG8ga25vdyBmb3IgbWl4ZWQgZnJlcXVlbmN5IG5ldHdvcmtzCgpOZXh0IHdlIGxvb2sgYXQgdGhlIGAiYnVzImAgY29tcG9uZW50cwoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJDc2M2ExNTA0LWY5MjctNGRmYy1hMDQyLWFjNjYzMjQ3MDhhOYSnY2VsbF9pZNkkNzYzYTE1MDQtZjkyNy00ZGZjLWEwNDItYWM2NjMyNDcwOGE5pGNvZGXZSnJlc3VsdF9wdSA9IHNvbHZlX21jX29wZihlbmcsIEFDUFVQb3dlck1vZGVsLCBpcG9wdF9zb2x2ZXI7IG1ha2Vfc2k9ZmFsc2UpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQyZTRmZTAwMC00NDljLTRmYzAtODcwNy00YzUxYWM1MGFiMDOEp2NlbGxfaWTZJDJlNGZlMDAwLTQ0OWMtNGZjMC04NzA3LTRjNTFhYzUwYWIwM6Rjb2Rl2gJrbWQiIiIKV2UgY2FuIHNlZSB0aGF0IHRoZSBsZW5ndGggb2YgdGhlIFZlY3RvcnMgZm9yIGAicGRfbm9tImAgYW5kIGAicWRfbm9tImAgYXJlIG9ubHkgb25lLCBhbHRob3VnaCB0aGUgbnVtYmVyIG9mIHRlcm1pbmFscyBsaXN0ZWQgaW4gYCJjb25uZWN0aW9ucyJgIGlzIHR3by4gVGhpcyBpcyBiZWNhdXNlIHRoZSBjb25uZWN0aW9uIGlzIFdZRSwgYW5kIHRoZXJlZm9yZSB0aGUgZmluYWwgY29ubmVjdGlvbiBpcyBhIGdyb3VuZGVkIG5ldXRyYWwKCkhlcmUgd2UgYXJlIGFsc28gaW50cm9kdWNlZCB0byB0d28gbmV3IEVudW1zLCBgV1lFYCwgd2hpY2ggZ2l2ZXMgdGhlIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiwgYW5kIGBOT2AgdW5kZXIgZGlzcGF0Y2hhYmxlLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBpZiB0aGlzIGNhc2Ugd2VyZSB1c2VkIGluIGFuIE1MRCBwcm9ibGVtLCBfaS5lLl8gd2l0aCBgcnVuX21jX21sZGAgdGhhdCB0aGlzIGxvYWQgd291bGQgbm90IGJlIHNoZWRkYWJsZS4KCkZpbmFsbHksIHdlIHNob3cgdGhlIGdlbmVyYXRpb24gc291cmNlIGZvciB0aGlzIGNhc2UsIHdoaWNoIGluIG9wZW5kc3MgaXMgYSB2b2x0YWdlIHNvdXJjZSBuYW1lZCBgInNvdXJjZSJgCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkMGViYTQwM2UtYzJiYS00YWYzLThkY2MtZmUxNGEzYzIyYmQ3hKdjZWxsX2lk2SQwZWJhNDAzZS1jMmJhLTRhZjMtOGRjYy1mZTE0YTNjMjJiZDekY29kZdmUbWQiIiIKVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCBmb3IgYnVpbGRpbmcgbXVsdGluZXR3b3JrIGRhdGEgc3RydWN0dXJlcywgd2hpY2ggd2lsbCBiZSBkZXNjcmliZWQgYmVsb3cgaW4gdGhlIHNlY3Rpb24gb24gdGhlIGBNQVRIRU1BVElDQUxgIG1vZGVsCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkMTJiYTAyZmYtOTFkZC00MzU1LWFkMmItZjNjYTNiNjFlMzE4hKdjZWxsX2lk2SQxMmJhMDJmZi05MWRkLTQzNTUtYWQyYi1mM2NhM2I2MWUzMTikY29kZdkpImBgYCQocG1fZW5nLm1vZGVsKWBgYCIgfD4gTWFya2Rvd24ucGFyc2WobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGU3YjU4OGU5LWZiNWYtNDM4My1iNWM2LWJjZTllZDhmNWE2MISnY2VsbF9pZNkkZTdiNTg4ZTktZmI1Zi00MzgzLWI1YzYtYmNlOWVkOGY1YTYwpGNvZGXZJ3Jlc3VsdF9wdVsic29sdXRpb24iXVsiYnVzIl1bImxvYWRidXMiXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkMDdmYzVhMWItNGE5ZS00YTEwLWJmN2EtZDI2ODI3NjlhYzk3hKdjZWxsX2lk2SQwN2ZjNWExYi00YTllLTRhMTAtYmY3YS1kMjY4Mjc2OWFjOTekY29kZdnkbWQiIiIKIyMgQ29uY2x1c2lvbgoKVGhpcyBjb25jbHVkZXMgdGhlIGludHJvZHVjdGlvbiB0byB0aGUgYEVOR0lORUVSSU5HYCBkYXRhIG1vZGVsIGFuZCBjb252ZXJzaW9uIHRvIHRoZSBgTUFUSEVNQVRJQ0FMYCBtb2RlbC4gV2UgaG9wZSB0aGF0IHlvdSB3aWxsIGZpbmQgdGhpcyBuZXcgZGF0YSBtb2RlbCBhYnN0cmFjdGlvbiBlYXN5IHRvIHVzZSBhbmQgc2ltcGxlIHRvIHVuZGVyc3RhbmQKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRlM2ZlMGE1ZS05NDMxLTQ1M2QtYjdlNS04MjFkZTYyNGE0ZWaEp2NlbGxfaWTZJGUzZmUwYTVlLTk0MzEtNDUzZC1iN2U1LTgyMWRlNjI0YTRlZqRjb2Rl2T5yZXN1bHRfbWF0aCA9IHNvbHZlX21jX29wZihtYXRoLCBBQ1BVUG93ZXJNb2RlbCwgaXBvcHRfc29sdmVyKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkNzg1YTFjMzktYWE1Ni00MjQ0LWI3YjktMzFkN2EzMWI3M2MzhKdjZWxsX2lk2SQ3ODVhMWMzOS1hYTU2LTQyNDQtYjdiOS0zMWQ3YTMxYjczYzOkY29kZdk5bWF0aF9tbiA9IHRyYW5zZm9ybV9kYXRhX21vZGVsKGVuZ190czsgbXVsdGluZXR3b3JrPXRydWUpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQyZjljM2Y2NC0zZTVkLTQyM2YtOTM5ZS04ZDk2YmQxOWU3ZmWEp2NlbGxfaWTZJDJmOWMzZjY0LTNlNWQtNDIzZi05MzllLThkOTZiZDE5ZTdmZaRjb2Rls2VuZ1sibGluZSJdWyJxdWFkIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDU0MmU1OTJmLThmNzUtNDFmOS04Zjk4LTUzNzNiNDMxZmNjNoSnY2VsbF9pZNkkNTQyZTU5MmYtOGY3NS00MWY5LThmOTgtNTM3M2I0MzFmY2M2pGNvZGXZU2VuZ190cyA9IHBhcnNlX2ZpbGUoIi4uL3Rlc3QvZGF0YS9vcGVuZHNzL2Nhc2UzX2JhbGFuY2VkLmRzcyI7IHRpbWVfc2VyaWVzPSJkYWlseSIpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQ3NDgzNmIyYy1kYjY3LTQ0MzUtYTU1Mi1iYTVjM2U5M2U0M2aEp2NlbGxfaWTZJDc0ODM2YjJjLWRiNjctNDQzNS1hNTUyLWJhNWMzZTkzZTQzZqRjb2RlsmVuZ191dFsiYnVzIl1bIjIiXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkNWU1ZGQyNGMtOTViNS00OTUxLTg1NDctMTNlMjBiYjBmZWVjhKdjZWxsX2lk2SQ1ZTVkZDI0Yy05NWI1LTQ5NTEtODU0Ny0xM2UyMGJiMGZlZWOkY29kZbZtYWtlX2xvc3NsZXNzIShlbmdfdXQpqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SQzZDg2OTg5YS1hNGRiLTQ3NjYtYWVjNy1hYmM5YTI1ZmZkZTiEp2NlbGxfaWTZJDNkODY5ODlhLWE0ZGItNDc2Ni1hZWM3LWFiYzlhMjVmZmRlOKRjb2Rl2gOrbWQiIiIKIyMgRW5naW5lZXJpbmcgTW9kZWwgVHJhbnNmb3JtYXRpb25zCgpPbmUgb2YgdGhlIHBvd2VyIHRoaW5ncyBhYm91dCB0aGUgZW5naW5lZXJpbmcgbW9kZWwgaXMgdGhhdCBkYXRhIHRyYW5zZm9ybWF0aW9ucyBhcmUgbXVjaCBtb3JlIHNpbXBsZS4gSGVyZSB3ZSBpbGx1c3RyYXRlIHR3byBleGFtcGxlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW5jbHVkZWQgaW4gUG93ZXJNb2RlbHNEaXN0cmlidXRpb24sIGJ1dCB3cml0aW5nIHlvdXIgb3duIGRhdGEgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zIHdpbGwgYmUgdHJpdmlhbCwgYXMgd2Ugd2lsbCBzaG93LgoKX19Ob3RlX186IEluIHYwLjksIGBhcHBseV9rcm9uX3JlZHVjdGlvbiFgIGFuZCBgYXBwbHlfcGhhc2VfcHJvamVjdGlvbiFgIGFyZSBhcHBsaWVkIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgd2l0aCB0aGUga2V5d29yZCBhcmd1bWVudHMgYGtyb25fcmVkdWNlPWZhbHNlYCBhbmQgYHBoYXNlX3Byb2plY3Q9ZmFsc2VgLCByZXNwZWN0aXZlbHkgaW4gYHBhcnNlX2ZpbGVgIG9yIGB0cmFuc2Zvcm1fZGF0YV9tb2RlbGAuCgpGaXJzdCwgdGhlcmUgYXJlIHNldmVyYWwgb2JqZWN0cyB0aGF0IGhhdmUgbG9zcyBtb2RlbHMgYnkgZGVmYXVsdCB3aGVuIHBhcnNpbmcgZnJvbSBkc3MgZmlsZXMsIHN1Y2ggYXMgdm9sdGFnZSBzb3VyY2VzLCB0cmFuc2Zvcm1lcnMsIGFuZCBzd2l0Y2hlcy4gVG8gcmVtb3ZlIHRoZXNlIGxvc3MgbW9kZWxzLCB0aGVyZWZvcmUgbWFraW5nIHRoZXNlIGNvbXBvbmVudHMgbG9zc2xlc3MsIHdlIGNhbiB1c2UgdGhlIGluY2x1ZGVkIGBtYWtlX2xvc3Nlc3MhYCBmdW5jdGlvbi4gSGVyZSB3ZSB1c2UgYSBiYXNpYyAyLXdpbmRpbmcgd3llLXd5ZSBjb25uZWN0ZWQgdHJhbnNmb3JtZXIgY2FzZSBmcm9tIGB0ZXN0YCB0byBpbGx1c3RyYXRlIHRoaXMKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRkZTkyYmMyMC1iMTI1LTRmM2QtOTMwYS1iMWRhNjNkNWNlZjWEp2NlbGxfaWTZJGRlOTJiYzIwLWIxMjUtNGYzZC05MzBhLWIxZGE2M2Q1Y2VmNaRjb2Rl2gGUbWQiIiIKIyMgSW1wb3J0cwoKQWxsIGNvbW1hbmRzIGluIHRoaXMgZG9jdW1lbnQgd2l0aCBubyBwYWNrYWdlIG5hbWVzcGFjZSBzcGVjaWZpZWQgYXJlIGRpcmVjdGx5IGV4cG9ydGVkIGJ5IFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uIG9yIGFscmVhZHkgYXZhaWxhYmxlIGluIEp1bGlhIGJhc2UuIEFueSBjb21tYW5kcyB0aGF0IGFyZSBvbmx5IGF2YWlhYmxlIHZpYSBhbiBleHRlcm5hbCBwYWNrYWdlIHdpbGwgYmUgc3BlY2lmaWVkIGJ5IGluY2x1ZGluZyBieSB1c2luZyBgaW1wb3J0YCwgd2hpY2ggd2lsbCByZXF1aXJlIHNwZWNpZnlpbmcgdGhlIG9yaWdpbmF0aW5nIHBhY2thZ2UgYmVmb3JlIHRoZSBjb21tYW5kLCBfZS5nLl8gYElwb3B0Lk9wdGltaXplcmAgYXMgeW91IHdpbGwgc2VlIGJlbG93LgoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGRiNGQ5ZWI5LWUxMjAtNDQ4OS1hM2MyLTQ4YzQzZjJhM2MzYoSnY2VsbF9pZNkkZGI0ZDllYjktZTEyMC00NDg5LWEzYzItNDhjNDNmMmEzYzNipGNvZGXaAoNtZCIiIgojIyBCdWlsZGluZyB0aGUgSnVNUCBNb2RlbAoKSW4gc29tZSBjYXNlcyB0aGUgdXNlciB3aWxsIHdhbnQgdG8gZGlyZWN0bHkgYnVpbGQgdGhlIEp1TVAgbW9kZWwsIHdoaWNoIHdvdWxkIHRyYWRpdGlvbmFsbHkgYmUgZG9uZSB3aXRoIGBpbnN0YW50aWF0ZV9tb2RlbGAgZnJvbSBQb3dlck1vZGVscy4gSW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSB1c2luZyB0aGUgYEVOR0lORUVSSU5HYCBtb2RlbCB3ZSBoYXZlIGludHJvZHVjZWQgYGluc3RhbnRpYXRlX21jX21vZGVsYCB0byBhaWQgaW4gdGhlIGdlbmVyYXRpb24gb2YgdGhlIEp1TVAgbW9kZWwuIGBpbnN0YW50aWF0ZV9tY19tb2RlbGAgd2lsbCBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgdGhlIGRhdGEgbW9kZWwgdG8gTUFUSEVNQVRJQ0FMIGlmIG5lY2Vzc2FyeSAobm90aWZ5aW5nIHRoZSB1c2VyIG9mIHRoZSBjb252ZXJzaW9uKSwgYW5kIHBhc3MgdGhlIE1BVEhFTUFUSUNBTCBtb2RlbCBvZmYgdG8gUG93ZXJNb2RlbHMnIGBpbnN0YW50aWF0ZV9tb2RlbGAgd2l0aCBgcmVmX2FkZF9hcmNzX3RyYW5zZm9ybWVyIWAgaW4gYHJlZl9leHRlbnNpb25zYCwgd2hpY2ggaXMgYSByZXF1aXJlZCByZWYgZXh0ZW5zaW9uIGZvciBQb3dlck1vZGVsc0Rpc3RyaWJ1dGlvbi4KIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQ5YWM2YjBlZC01OGE4LTQwNzktYWE5Zi1kNzAwMjRmNGQ0YjSEp2NlbGxfaWTZJDlhYzZiMGVkLTU4YTgtNDA3OS1hYTlmLWQ3MDAyNGY0ZDRiNKRjb2RlqmVuZ1siYnVzIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDg5ODQ2ODc4LWViZmMtNDlhNS05MWVmLTc2MmY2OTJiYTVlYYSnY2VsbF9pZNkkODk4NDY4NzgtZWJmYy00OWE1LTkxZWYtNzYyZjY5MmJhNWVhpGNvZGXaAjBtZCIiIgpXZSBjYW4gc2VlIHRoZXJlIGFyZSB0aHJlZSBidXNlcyBpbiB0aGlzIHN5c3RlbSwgaWRlbnRpZmllZCBieSBpZHMgYCJwcmltYXJ5ImAsIGAic291cmNlYnVzImAsIGFuZCBgImxvYWRidXMiYC4KCl9fTk9URV9fOiBJbiBKdWxpYSwgb3JkZXIgb2YgRGljdGlvbmFyeSBrZXlzIGlzIG5vdCBmaXhlZCwgbm9yIGRvZXMgaXQgcmV0YWluIHRoZSBvcmRlciBpbiB3aGljaCBpdCB3YXMgcGFyc2VkIGxpa2UgX2UuZy5fIGBWZWN0b3JzYC4KCklkZW50aWZ5aW5nIGNvbXBvbmVudHMgYnkgbm9uLWludGVnZXIgbmFtZXMgaXMgYSBuZXcgZmVhdHVyZSBvZiB0aGUgYEVOR0lORUVSSU5HYCBtb2RlbCwgYW5kIG1ha2VzIG5ldHdvcmsgZGVidWdnaW5nIG1vcmUgc3RyYWlnaHRmb3J3YXJkLgoKX19OT1RFX186IGFsbCBuYW1lcyBhcmUgY29udmVydGVkIHRvIGxvd2VyY2FzZSBvbiBwYXJzZSBmcm9tIHRoZSBvcmlnaW5hdGluZyBkc3MgZmlsZS4KCkVhY2ggYnVzIGNvbXBvbmVudCBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGluIHRoZSBgRU5HSU5FRVJJTkdgIG1vZGVsCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkZjJmYTc3OWUtZjYyZC00MDUzLWIwNTUtZTlmMGFlZTZjM2Y3hKdjZWxsX2lk2SRmMmZhNzc5ZS1mNjJkLTQwNTMtYjA1NS1lOWYwYWVlNmMzZjekY29kZdlAcmVzdWx0X2JmID0gc29sdmVfbWNfb3BmKGVuZywgU09DTkxQVUJGUG93ZXJNb2RlbCwgaXBvcHRfc29sdmVyKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkODJlOTMzMGItMmU5NC00MmExLWI1NmQtNDMwNjc0YjExMjQxhKdjZWxsX2lk2SQ4MmU5MzMwYi0yZTk0LTQyYTEtYjU2ZC00MzA2NzRiMTEyNDGkY29kZbxlbmdfdXRbInRyYW5zZm9ybWVyIl1bInR4MSJdqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTC2SRkZGUyZGE1OS02M2ZhLTQ1NDktODgyOS00OTFlNWYzYzY3NWWEp2NlbGxfaWTZJGRkZTJkYTU5LTYzZmEtNDU0OS04ODI5LTQ5MWU1ZjNjNjc1ZaRjb2Rl2gFXbWQiIiIKIyMjIFRyYW5zZm9ybWF0aW9ucyBvbiBNdWx0aW5ldHdvcmtzCgpUcmFuc2Zvcm1hdGlvbnMgb24gTXVsdGluZXR3b3JrcyBzaG91bGQgaGFwcGVuIF9fYmVmb3JlX18gdGhlIG5ldHdvcmsgaXMgY29udmVydGVkIGludG8gYSBgTUFUSEVNQVRJQ0FMYCBkYXRhIG1vZGVsLCBzbyB0aGF0IHRoZXkgY2FuIGdlbmVyYWxseSBmb2xsb3cgdGhlIHNhbWUgcGF0dGVybiBhcyBzaG93biBhYm92ZSBhbmQgY2FuIGJlIHNlZW4gaW4gdGhlIGBtYWtlX2xvc3NsZXNzIWAgYW5kIGBhcHBseV92b2x0YWdlX2JvdW5kcyFgIGZ1bmN0aW9ucyBhbHJlYWR5IGluIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uCiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkZmI4MWQzYzEtYTQ3Yi00NmQ5LWI0NjMtMTc2NjAyMmJlMTE0hKdjZWxsX2lk2SRmYjgxZDNjMS1hNDdiLTQ2ZDktYjQ2My0xNzY2MDIyYmUxMTSkY29kZdnKbWQiIiIKVGhlIHJlc3VsdCBvZiBgc29sdmVfbWNfb3BmYCB3aWxsIGJlIHZlcnkgZmFtaWxpYXIgdG8gdGhvc2Ugd2hvIGFyZSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggUG93ZXJNb2RlbHMgYW5kIFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLiBUaGUgbm90YWJsZSBkaWZmZXJlbmNlIHdpbGwgYmUgaW4gdGhlIGAic29sdXRpb24iYCBkaWN0aW9uYXJ5CiIiIqhtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkw9kkZjA3MGRiYmMtMWE1NS00OGYyLWFhMjEtMjExOWViNTczYjVihKdjZWxsX2lk2SRmMDcwZGJiYy0xYTU1LTQ4ZjItYWEyMS0yMTE5ZWI1NzNiNWKkY29kZa9lbmdfYWxsWyJsaW5lIl2obWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJGEwOWRlOGFiLWMxZTEtNGM5Zi05ZDg2LTQyNjhjZTUwM2NhZYSnY2VsbF9pZNkkYTA5ZGU4YWItYzFlMS00YzlmLTlkODYtNDI2OGNlNTAzY2FlpGNvZGXZhm1kIiIiCklmIGZvciBzb21lIHJlYXNvbiB5b3Ugd2FudCB0byByZXR1cm4gdGhlIHJlc3VsdCBpbiBwZXItdW5pdCByYXRoZXIgdGhhbiBTSSwgeW91IGNhbiBzcGVjaWZ5IHRoaXMgaW4gdGhlIGBzb2x2ZV9gIGNvbW1hbmQgYnkKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SRiOGUwMWNlMi1kN2Y3LTRjNzMtODIzMC05ZmRlZWNhYjJjNGWEp2NlbGxfaWTZJGI4ZTAxY2UyLWQ3ZjctNGM3My04MjMwLTlmZGVlY2FiMmM0ZaRjb2Rl2gFbbWQiIiIKIyMjIyBSdW5uaW5nIGBNQVRIRU1BVElDQUxgIE11bHRpbmV0d29ya3MKCkFzIHdpdGggdGhlIGBFTkdJTkVFUklOR2AgZXhhbXBsZSBvZiBydW5uaW5nIGEgbXVsdGluZXR3b3JrIHByb2JsZW0sIHlvdSB3aWxsIG5lZWQgYSBtdWx0aW5ldHdvcmsgcHJvYmxlbSBzcGVjaWZpY2F0aW9uLCBhbmQgYXMgd2l0aCB0aGUgcHJldmlvdXMgc2luZ2xlIGBNQVRIRU1BVElDQUxgIG5ldHdvcmsgZXhhbXBsZSBhYm92ZSwgd2Ugb25seSBvYnRhaW4gdGhlIGBNQVRIRU1BVElDQUxgIHNvbHV0aW9uLCBhbmQgY2FuIHRyYW5zZm9ybSB0aGUgc29sdXRpb24gaW4gdGhlIHNhbWUgbWFubmVyIGFzIGJlZm9yZQoiIiKobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMPZJGFjOTRlNTU2LWI1NDQtNGNhNi04N2JkLWZmMmQ3YTc0MTRlN4SnY2VsbF9pZNkkYWM5NGU1NTYtYjU0NC00Y2E2LTg3YmQtZmYyZDdhNzQxNGU3pGNvZGXZQ3BtZF9wYXRoID0gam9pbnBhdGgoZGlybmFtZShwYXRob2YoUG93ZXJNb2RlbHNEaXN0cmlidXRpb24pKSwgIi4uIimobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJGFlOGRhZjZjLTQwNTUtNDk3ZS05MDVjLWQ2ZDVhNjM3M2FkM4SnY2VsbF9pZNkkYWU4ZGFmNmMtNDA1NS00OTdlLTkwNWMtZDZkNWE2MzczYWQzpGNvZGXZWnJlc3VsdF9tbiA9IFBvd2VyTW9kZWxzRGlzdHJpYnV0aW9uLl9zb2x2ZV9tbl9tY19vcGIoZW5nX3RzLCBORkFVUG93ZXJNb2RlbCwgaXBvcHRfc29sdmVyKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkNjY2MjIzZDUtODAyYS00MTY0LTg4MmMtOGFiMWExMzE5ZDZkhKdjZWxsX2lk2SQ2NjYyMjNkNS04MDJhLTQxNjQtODgyYy04YWIxYTEzMTlkNmSkY29kZdn2bWQiIiIKIyMjIFJ1bm5pbmcgYE1BVEhFTUFUSUNBTGAgbW9kZWxzCgpUaGVyZSBpcyB2ZXJ5IGxpdHRsZSBkaWZmZXJlbmNlIGZyb20gdGhlIHVzZXIgcG9pbnQtb2YtdmlldyBpbiBydW5uaW5nIGBNQVRIRU1BVElDQUxgIG1vZGVscyBvdGhlciB0aGFuIHRoZSByZXN1bHRzIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIGJhY2sgdG8gdGhlIHRoZSBmb3JtYXQgb2YgdGhlIGBFTkdJTkVFUklOR2AgbW9kZWwKIiIiqG1ldGFkYXRhg6lzaG93X2xvZ3PDqGRpc2FibGVkwq5za2lwX2FzX3NjcmlwdMKrY29kZV9mb2xkZWTD2SQ0MDIwZDY3YS00YTllLTQwMzAtYjdjZC1lNWQ2MGU3ODQ5NWOEp2NlbGxfaWTZJDQwMjBkNjdhLTRhOWUtNDAzMC1iN2NkLWU1ZDYwZTc4NDk1Y6Rjb2Rl2YxwYXJzZV9maWxlKCIuLi90ZXN0L2RhdGEvb3BlbmRzcy91dF90cmFuc18yd195eS5kc3MiOyB0cmFuc2Zvcm1hdGlvbnM9W21ha2VfbG9zc2xlc3MhLCAoYXBwbHlfdm9sdGFnZV9ib3VuZHMhLCAidm1fbGIiPT4wLjksICJ2bV91YiI9PjEuMSldKahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwtkkMDUzNjAxNjMtNGE2Zi00MWRhLThmYWUtMDcwZTMyN2MyNjA1hKdjZWxsX2lk2SQwNTM2MDE2My00YTZmLTQxZGEtOGZhZS0wNzBlMzI3YzI2MDWkY29kZdk7c29sX2VuZyA9IHRyYW5zZm9ybV9zb2x1dGlvbihyZXN1bHRfbWF0aFsic29sdXRpb24iXSwgbWF0aCmobWV0YWRhdGGDqXNob3dfbG9nc8OoZGlzYWJsZWTCrnNraXBfYXNfc2NyaXB0wqtjb2RlX2ZvbGRlZMLZJDFkYzA2MDA3LWI0MTMtNGNiYi1iNDNiLTJjNzk1NWVjYjZkMoSnY2VsbF9pZNkkMWRjMDYwMDctYjQxMy00Y2JiLWI0M2ItMmM3OTU1ZWNiNmQypGNvZGWwbWF0aFsibWFwIl1bZW5kXahtZXRhZGF0YYOpc2hvd19sb2dzw6hkaXNhYmxlZMKuc2tpcF9hc19zY3JpcHTCq2NvZGVfZm9sZGVkwqtub3RlYm9va19pZNkkMGYyYWJkMjgtNTdkNS0xMWVlLTM5M2UtNTM2YWNmZDMxOGNjq2luX3RlbXBfZGlywqhtZXRhZGF0YYA="; window.pluto_preamble_html = undefined; diff --git a/dev/tutorials/basic.html b/dev/tutorials/basic.html index ed4b3867c..cca7b725c 100644 --- a/dev/tutorials/basic.html +++ b/dev/tutorials/basic.html @@ -352,10 +352,10 @@ Documenter.jl version 0.27.25 on - - Friday 4 August 2023 + + Wednesday 20 September 2023 - . Using Julia version 1.9.2. + . Using Julia version 1.9.3.

      diff --git a/dev/tutorials/basic.jl.html b/dev/tutorials/basic.jl.html index 341512f5a..742f6f9a7 100644 --- a/dev/tutorials/basic.jl.html +++ b/dev/tutorials/basic.jl.html @@ -3,11 +3,11 @@