/*
Also please follow this
Do your project have diferent charset languages to account with?
      - Yes -> follow https://projects.netcentric.biz/wiki/display/FRONTEND/CSS+-+Font+Normalization
      - No -> You can still use it, there are tons of advantages, but its create some extra css and layout rendering
*/
/*
  * Design spec:
  * https://www.figma.com/file/SR4rvQlNnCmPMrQ9WYaIqv/branch/TJqkFymq09wf8KwmY1WNcj/Volvo-AEM-Design-system?type=design&node-id=7-26&t=pAm916VRiqCOD2I1-0
*/
/**
 * z-indexes from lower to -> higher
 */
:root {
  --v-icon-size: 24px;
}

@media (min-width: 960px) {
  :root {
    --v-icon-size: 16px;
  }
}

.v-icon {
  width: var(--v-icon-size);
  height: var(--v-icon-size);
}

.v-icon svg path {
  fill: currentColor;
}

.v-icon-sprite {
  pointer-events: none;
  position: absolute;
  max-height: 0;
  max-width: 0;
  overflow: hidden;
}

.v-icon--16 {
  display: none;
}

@media (min-width: 960px) {
  .v-icon--16 {
    display: inline;
  }
}

.v-icon--24 {
  display: inline;
  y: 0;
  /* stylelint-disable */
  /* stylelint-enable */
}

@media not all and (min-resolution: 0.001dpcm) {
  .v-icon--24 {
    -webkit-transform: translateY(-16px);
            transform: translateY(-16px);
  }
}

@supports (-webkit-touch-callout: none) {
  .v-icon--24 {
    -webkit-transform: translateY(-16px);
            transform: translateY(-16px);
  }
}

@media (min-width: 960px) {
  .v-icon--24 {
    display: none;
  }
}

/*doc
---
title: Pixel to em
name: nn-px-to-em
category: functions
---

Calculate the em with a given pixel with the given base font size
If you don't set a $base the $base-font-size is used as the context


## Live Template abbreviations
---
-ptu


## Parameters
---
@parameter $value = pixel based number (without unit)
@parameter $base = pixel based number (without unit)


## Dependencies
---
nn-strip-unit


## Example
---
```html_example
nn-px-to-em(5) // Output: 0.3125em
nn-px-to-em(5, 10) // Output: 0.5em
nn-px-to-em(5, 20) // Output: 0.25em
```
*/
/*doc
---
title: Pixel to rem
name: nn-px-to-rem
category: functions
---

Calculate the rem with a given pixel with the given base font size

In:  5px
Out: 0.3125rem


## Live Template abbreviations
---
-rem


## Parameters
---
@parameter $value = pixel based number (without unit)


## Dependencies
---
nn-strip-unit

## Example
---
```html_example
nn-px-to-rem(5) // Output 0.3125rem
```

*/
/*doc
---
title: Pixel to unit
name: px-to-unit
category: mixins
---

Set a property and value (pixel based without unit)

Calculates rem / em / % from given pixel and base (default base is the
base-font-size, 16px)
If rtl is true, this mixin handles all the direction stuff:
- Switching the values, when we have exactly 4 values
- Switching left and right in properties (padding and margin)


## Live Template abbreviations
---
-ptu (for em or % to pixel - with base parameter)
-rem (for rem to pixel - without base parameter)


## Parameters
---
@parameter $property = padding | margin | font-size | width | height
@parameter $value = Pixel based number - add px to keep the px for a value
@parameter $base = px based number, Default: 16px
@parameter $unit = Set unit: px | em | rem | percent


## Dependencies
---
abstract/functions/swap-left-right
abstract/functions/strip-unit


## Example
---

```html_example
@include nn-px-to-unit(padding, 0 10px 20 0); => padding: 0 10px 1.25rem 0;
@include nn-px-to-unit(padding, 0 10 20 0); => padding: 0 0.625rem 1.25rem 0;
@include nn-px-to-unit(padding-left, 10);
@include nn-px-to-unit(padding-right, 10);
@include nn-px-to-unit(margin, 0 10 20 0);
@include nn-px-to-unit(margin-left, 10);
@include nn-px-to-unit(margin-right, 10);
@include nn-px-to-unit(font-size, 20);
@include nn-px-to-unit(width, 100);
@include nn-px-to-unit(min-width, 100);
@include nn-px-to-unit(mann-width, 100);
@include nn-px-to-unit(height, 100);
@include nn-px-to-unit(min-height, 100);
@include nn-px-to-unit(mann-height, 100);
```


## Source
---
http://css-tricks.com/snippets/css/less-mixin-for-rem-font-sizing/

*/
/*doc
---
title: Pixel to unitless
name: nn-px-to-unitless
category: functions
---

This makes the same calculation as px to em. But it don't print out the unit.

Use this for line-heights.


## Live Template abbreviations
---



## Parameters
---
@parameter $value = pixel based number (without unit)
@parameter $base = pixel based number (without unit)


## Dependencies
---



## Example
---

```html_example
line-height: nn-px-to-unitless(5) // Output: 0.3125
```


## Source
---


*/
/*doc
---
title: Strip unit
name: nn-strip-unit
category: functions
---

Strips of the unit of a number


## Parameters
---
@parameter $num = number with unit (5px, 5em, 5rem)


## Example
---

```html_example
nn-strip-unit(5px) //Output: 5
nn-strip-unit(10em) // Output: 10
nn-strip-unit(15rem) // Output: 15
```

*/
/*doc
---
title: z-index
name: nn-z-index
category: functions
---
 
Because z-indices can get tricky we manage them in the theme.scss globally.

Always use this mixin to set set a z-index.
  
Read the Best Practice to get an full documentation:
https://projects.netcentric.biz/wiki/display/FRONTEND/How+to+set+a+z-index
 
 
## Live Template abbreviations
---
-z
 
 
## Parameters
---
@parameter $element = Name of the element (normally this will be the module name for the main stack)
@parameter $list = Name of the list (default $z-indices). Must be only set for stack context
@parameter $min = Set a minimum z-index which will be added to the list.

 
## Dependencies
---
$z-indices variable in the theme.scss


## Example
---
  
```html_example

// In the SASS theme file

$z-indices: slider, modal, dialog, navigation;


// In the SASS module file

.modal {
    &__base {
        position: absolute;
        z-index: nn-z-index(modal);
    }
}
```
 

## Source
---
http://www.smashingmagazine.com/2014/06/12/sassy-z-index-management-for-complex-layouts/

*/
/* doc
---
title: remove every unit
name: strip-unit
category: functions
---
remove all units

## Parameters
---
@parameter $number = number with unit

## Example
---
```html_example
strip-unit(5px) // Output: 5
```
*/
/*doc
---
title: Swap left right values
name: nn-rtl
category: functions
---

Swap the names right and left when $rtl is set to true.
If the value is not right or left it returns the original value.

In:  right
Out: left (in rtl), right (in ltr)


## Live Template abbreviations
---



## Parameters
---
@parameter $origin = right | left


## Example
---

```html_example
nn-rtl(left): 10px;
nn-rtl(padding-right): 30px;
nn-rtl(0 1px 8px 12px) // 0 12px 8px 1px
```


*/
/*doc
---
title: Clearfix
name: clearfix
category: mixins
---

Clears after floating element

Use this mixin only inside media queries where you can't use the
abstract/extends/utils/_clearfix version, which adds less code to css


## Live Template abbreviations
---



## Example
---

```html_example
@include clearfix;
```


## Source
---
https://css-tricks.com/snippets/css/clear-fix/
*/
.icon {
  display: inline-block;
  width: 32px;
  height: 32px;
}

/* doc
---
title: focus color
name: focus color
category: mixins
---

Add a focus color when keyboard-focus is activated
## Parameters
---
@param $number

*/
/* doc
---
title: ignore-container
name: ignore-container
category: mixins
---

Set full page width for something inside a container

## Parameters
---
@param $container-size
@param $gutter

*/
/* Generates all the rules for the grid columns up to the given amount of column */
/* Generates all the rules for the grid column offset up to the given amount of column */
/* Generates all the rules for the grid and columns for the given break point and total of columns */
/* API function to be called to generate a grid config */
/*doc
---
type: button type
state: state button
---

Button styles

Use this mixin for button styles: color text, background, border


## Example
---

```html_example
@include button(primary);
```
*/
/*doc
---
lineLimit: This value specifies the number of lines after which the content will be clamped. It must be greater than 0.
---

Truncates text at a specific number of lines.

Use this mixin to hide long text.

## Example
---

```html_example
@include line-clamp($lineLimit: 4);
```
*/
/* typography
---
title: typography
name: Typography
category: mixins
---

Adds font CSS properties by a map provided

## Parameters
---
@param $t-style
@param $is-important: false

* $t-style is expected to be a map with 'default' and 'breakpoint[s]' submaps with a property
for every css property to be set.
* $is-important parameter allows to force typography properties to be set as !important
Try to avoid its use, but it might be needed for situations where styles for a component
are very specific and to overwrite the generic ones is too complex (if they have a lot of specificity)

*/
/* doc
---
title: hidden
name: hidden
category: mixins
---

Hide from both screenreaders and browsers: h5bp.com/u
## Parameters
---

*/
/* doc
---
title: overlay
name: overlay
category: mixins
---

Creates an overlay with the provided background color
## Parameters
---
@param $bgColor

*/
.marketlanguageselector {
  width: 100%;
  max-width: 100vw;
  align-items: center;
  justify-content: space-between;
  padding: 12px;
}

@media (min-width: 960px) {
  .marketlanguageselector {
    display: grid;
    grid-template-columns: 35% 65%;
  }
}

@media (min-width: 960px) {
  .marketlanguageselector__no-markets {
    display: grid;
    grid-template-columns: 55% 45%;
  }
}

.marketlanguageselector__message {
  margin-right: 15px;
  padding-right: 10px;
  font-family: var(--ff-regular);
  font-size: 14px;
  font-weight: 400;
  line-height: 1.5;
  letter-spacing: var(--ls-default);
  padding-top: 4px;
  padding-bottom: 4px;
}

@media (min-width: 960px) {
  .marketlanguageselector__message {
    margin-right: 60px;
  }
}

.marketlanguageselector__controls {
  display: flex;
  margin-top: 12px;
  overflow-y: visible;
}

@media (min-width: 960px) {
  .marketlanguageselector__controls {
    margin-top: 0;
  }
}

.marketlanguageselector__continue {
  margin: 0 0 0 24px;
  display: inline-flex;
  align-items: center;
  min-width: auto;
  padding: 12px 10px;
}

@media (min-width: 768px) {
  .marketlanguageselector__continue {
    padding: 12px 32px;
  }
}

@media (min-width: 960px) {
  .marketlanguageselector__continue {
    margin: 0 60px;
  }
}

.marketlanguageselector__continue--splash {
  margin: 0;
}

@media (min-width: 960px) {
  .marketlanguageselector__continue--splash {
    margin: 0 60px 0 auto;
  }
}

.marketlanguageselector__dropdown {
  display: flex;
  position: relative;
  justify-content: space-between;
  width: 100%;
  cursor: pointer;
  align-items: center;
  padding: 12px 10px;
  background-color: #888b8d;
  border: 1px solid #888b8d;
}

@media (min-width: 768px) {
  .marketlanguageselector__dropdown {
    padding: 12px 32px;
  }
}

.marketlanguageselector__dropdown__items {
  top: 0;
  left: 0;
  width: 100%;
  position: absolute;
  background-color: #888b8d;
  border: 1px solid #888b8d;
  transition-duration: 0.5s;
}

.marketlanguageselector__dropdown__items li {
  display: flex;
  padding: 12px 10px;
  align-items: center;
  border-bottom: 1px solid #a7a8a9;
}

@media (min-width: 768px) {
  .marketlanguageselector__dropdown__items li {
    padding: 12px 32px;
  }
}

.marketlanguageselector__dropdown__items li:hover {
  background-color: #53565a;
}

.marketlanguageselector__dropdown__items li:first-child:after {
  content: '';
  display: inline-block;
  background: url("../../../../../../content/dam/volvo-media/list-icons/chevron-up.svg#chevron-up-icon-w24-view");
  width: var(--v-icon-size);
  height: var(--v-icon-size);
  -webkit-filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
          filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
  filter: url('data:image/svg+xml;utf8,    <svg xmlns="http://www.w3.org/2000/svg">    <filter id="recolor" color-interpolation-filters="sRGB">        <feColorMatrix type="matrix" values="         0 0 0 0 1         0 0 0 0 1         0 0 0 0 1         0 0 0 1 0         "/>    </filter>    </svg>    #recolor');
  pointer-events: none;
}

@media (min-width: 1200px) {
  .marketlanguageselector__dropdown__items li:first-child:after {
    background: url("../../../../../../content/dam/volvo-media/list-icons/chevron-up.svg#chevron-up-icon-w16-view");
  }
}

.marketlanguageselector__dropdown__items li:first-child span {
  padding-right: 10px;
}

.marketlanguageselector__dropdown__items li:last-child {
  border-bottom: none;
}

.marketlanguageselector__dropdown__items span {
  cursor: pointer;
  width: 100%;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  pointer-events: none;
}

.marketlanguageselector__dropdown__placeholder {
  width: 100%;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.marketlanguageselector__dropdown__placeholder:after {
  content: '';
  display: inline-block;
  background: url("../../../../../../content/dam/volvo-media/list-icons/chevron-down.svg#chevron-down-icon-w24-view");
  width: var(--v-icon-size);
  height: var(--v-icon-size);
  -webkit-filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
          filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
  filter: url('data:image/svg+xml;utf8,    <svg xmlns="http://www.w3.org/2000/svg">    <filter id="recolor" color-interpolation-filters="sRGB">        <feColorMatrix type="matrix" values="         0 0 0 0 1         0 0 0 0 1         0 0 0 0 1         0 0 0 1 0         "/>    </filter>    </svg>    #recolor');
  pointer-events: none;
}

@media (min-width: 1200px) {
  .marketlanguageselector__dropdown__placeholder:after {
    background: url("../../../../../../content/dam/volvo-media/list-icons/chevron-down.svg#chevron-down-icon-w16-view");
  }
}

@media (max-width: 767px) {
  .marketlanguageselector__dropdown__placeholder {
    width: 100%;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
}

.marketlanguageselector__dropdown::after {
  content: '';
}

.top-banner__close {
  top: 5px;
}

@media (min-width: 960px) {
  .top-banner__close {
    top: auto;
  }
}

@supports not (-webkit-touch-callout: none) {
  @media (max-width: 767px) {
    body {
      margin-top: var(--market-language-height);
    }
    .top-banner {
      position: fixed;
      width: 100%;
    }
  }
}
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3RhcmdldC92YXVsdC13b3JrL2pjcl9yb290L2FwcHMvdm9sdm8vY2xpZW50bGlicy9zaGFyZWQvY29tcG9uZW50cy9zdHJ1Y3R1cmUvbWFya2V0bGFuZ3VhZ2VzZWxlY3Rvci9tYXJrZXRsYW5ndWFnZXNlbGVjdG9yLmJ1bmRsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0VBS0U7QUFDRjs7O0VBR0U7QUFDRjs7R0FFRztBQUNIO0VBQ0Usb0JBQW9CO0NBQ3JCOztBQUVEO0VBQ0U7SUFDRSxvQkFBb0I7R0FDckI7Q0FDRjs7QUFFRDtFQUNFLDBCQUEwQjtFQUMxQiwyQkFBMkI7Q0FDNUI7O0FBRUQ7RUFDRSxtQkFBbUI7Q0FDcEI7O0FBRUQ7RUFDRSxxQkFBcUI7RUFDckIsbUJBQW1CO0VBQ25CLGNBQWM7RUFDZCxhQUFhO0VBQ2IsaUJBQWlCO0NBQ2xCOztBQUVEO0VBQ0UsY0FBYztDQUNmOztBQUVEO0VBQ0U7SUFDRSxnQkFBZ0I7R0FDakI7Q0FDRjs7QUFFRDtFQUNFLGdCQUFnQjtFQUNoQixLQUFLO0VBQ0wsdUJBQXVCO0VBQ3ZCLHNCQUFzQjtDQUN2Qjs7QUFFRDtFQUNFO0lBQ0UscUNBQTZCO1lBQTdCLDZCQUE2QjtHQUM5QjtDQUNGOztBQUVEO0VBQ0U7SUFDRSxxQ0FBNkI7WUFBN0IsNkJBQTZCO0dBQzlCO0NBQ0Y7O0FBRUQ7RUFDRTtJQUNFLGNBQWM7R0FDZjtDQUNGOztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa0NFO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlDRTtBQUNGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNkRFO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF3Q0U7QUFDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBd0JFO0FBQ0Y7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QUMxQiwyQkFBMkI7RUFDM0Isb0VBQTREO1VBQTVELDREQUE0RDtFQUM1RCxvVEFBb1Q7RUFDcFQscUJBQXFCO0NBQ3RCOztBQUVEO0VBQ0U7SUFDRSxtR0FBbUc7R0FDcEc7Q0FDRjs7QUFFRDtFQUNFO0lBQ0UsWUFBWTtJQUNaLG9CQUFvQjtJQUNwQixpQkFBaUI7SUFDakIsd0JBQXdCO0dBQ3pCO0NBQ0Y7O0FBRUQ7RUFDRSxZQUFZO0NBQ2I7O0FBRUQ7RUFDRSxTQUFTO0NBQ1Y7O0FBRUQ7RUFDRTtJQUNFLFVBQVU7R0FDWDtDQUNGOztBQUVEO0VBQ0U7SUFDRTtNQUNFLDBDQUEwQztLQUMzQztJQUNEO01BQ0UsZ0JBQWdCO01BQ2hCLFlBQVk7S0FDYjtHQUNGO0NBQ0YiLCJmaWxlIjoiLi4vdGFyZ2V0L3ZhdWx0LXdvcmsvamNyX3Jvb3QvYXBwcy92b2x2by9jbGllbnRsaWJzL3NoYXJlZC9jb21wb25lbnRzL3N0cnVjdHVyZS9tYXJrZXRsYW5ndWFnZXNlbGVjdG9yL21hcmtldGxhbmd1YWdlc2VsZWN0b3IuYnVuZGxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5BbHNvIHBsZWFzZSBmb2xsb3cgdGhpc1xuRG8geW91ciBwcm9qZWN0IGhhdmUgZGlmZXJlbnQgY2hhcnNldCBsYW5ndWFnZXMgdG8gYWNjb3VudCB3aXRoP1xuICAgICAgLSBZZXMgLT4gZm9sbG93IGh0dHBzOi8vcHJvamVjdHMubmV0Y2VudHJpYy5iaXovd2lraS9kaXNwbGF5L0ZST05URU5EL0NTUystK0ZvbnQrTm9ybWFsaXphdGlvblxuICAgICAgLSBObyAtPiBZb3UgY2FuIHN0aWxsIHVzZSBpdCwgdGhlcmUgYXJlIHRvbnMgb2YgYWR2YW50YWdlcywgYnV0IGl0cyBjcmVhdGUgc29tZSBleHRyYSBjc3MgYW5kIGxheW91dCByZW5kZXJpbmdcbiovXG4vKlxuICAqIERlc2lnbiBzcGVjOlxuICAqIGh0dHBzOi8vd3d3LmZpZ21hLmNvbS9maWxlL1NSNHJ2UWxObkNtUE1yUTlXWWFJcXYvYnJhbmNoL1RKcWtGeW1xMDl3ZjhLd21ZMVdOY2ovVm9sdm8tQUVNLURlc2lnbi1zeXN0ZW0/dHlwZT1kZXNpZ24mbm9kZS1pZD03LTI2JnQ9cEFtOTE2VlJpcUNPRDJJMS0wXG4qL1xuLyoqXG4gKiB6LWluZGV4ZXMgZnJvbSBsb3dlciB0byAtPiBoaWdoZXJcbiAqL1xuOnJvb3Qge1xuICAtLXYtaWNvbi1zaXplOiAyNHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHtcbiAgOnJvb3Qge1xuICAgIC0tdi1pY29uLXNpemU6IDE2cHg7XG4gIH1cbn1cblxuLnYtaWNvbiB7XG4gIHdpZHRoOiB2YXIoLS12LWljb24tc2l6ZSk7XG4gIGhlaWdodDogdmFyKC0tdi1pY29uLXNpemUpO1xufVxuXG4udi1pY29uIHN2ZyBwYXRoIHtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuXG4udi1pY29uLXNwcml0ZSB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG1heC1oZWlnaHQ6IDA7XG4gIG1heC13aWR0aDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnYtaWNvbi0tMTYge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHtcbiAgLnYtaWNvbi0tMTYge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgfVxufVxuXG4udi1pY29uLS0yNCB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgeTogMDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSAqL1xufVxuXG5AbWVkaWEgbm90IGFsbCBhbmQgKG1pbi1yZXNvbHV0aW9uOiAwLjAwMWRwY20pIHtcbiAgLnYtaWNvbi0tMjQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTZweCk7XG4gIH1cbn1cblxuQHN1cHBvcnRzICgtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmUpIHtcbiAgLnYtaWNvbi0tMjQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTZweCk7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7XG4gIC52LWljb24tLTI0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi8qZG9jXG4tLS1cbnRpdGxlOiBQaXhlbCB0byBlbVxubmFtZTogbm4tcHgtdG8tZW1cbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuXG5DYWxjdWxhdGUgdGhlIGVtIHdpdGggYSBnaXZlbiBwaXhlbCB3aXRoIHRoZSBnaXZlbiBiYXNlIGZvbnQgc2l6ZVxuSWYgeW91IGRvbid0IHNldCBhICRiYXNlIHRoZSAkYmFzZS1mb250LXNpemUgaXMgdXNlZCBhcyB0aGUgY29udGV4dFxuXG5cbiMjIExpdmUgVGVtcGxhdGUgYWJicmV2aWF0aW9uc1xuLS0tXG4tcHR1XG5cblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW1ldGVyICR2YWx1ZSA9IHBpeGVsIGJhc2VkIG51bWJlciAod2l0aG91dCB1bml0KVxuQHBhcmFtZXRlciAkYmFzZSA9IHBpeGVsIGJhc2VkIG51bWJlciAod2l0aG91dCB1bml0KVxuXG5cbiMjIERlcGVuZGVuY2llc1xuLS0tXG5ubi1zdHJpcC11bml0XG5cblxuIyMgRXhhbXBsZVxuLS0tXG5gYGBodG1sX2V4YW1wbGVcbm5uLXB4LXRvLWVtKDUpIC8vIE91dHB1dDogMC4zMTI1ZW1cbm5uLXB4LXRvLWVtKDUsIDEwKSAvLyBPdXRwdXQ6IDAuNWVtXG5ubi1weC10by1lbSg1LCAyMCkgLy8gT3V0cHV0OiAwLjI1ZW1cbmBgYFxuKi9cbi8qZG9jXG4tLS1cbnRpdGxlOiBQaXhlbCB0byByZW1cbm5hbWU6IG5uLXB4LXRvLXJlbVxuY2F0ZWdvcnk6IGZ1bmN0aW9uc1xuLS0tXG5cbkNhbGN1bGF0ZSB0aGUgcmVtIHdpdGggYSBnaXZlbiBwaXhlbCB3aXRoIHRoZSBnaXZlbiBiYXNlIGZvbnQgc2l6ZVxuXG5JbjogIDVweFxuT3V0OiAwLjMxMjVyZW1cblxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuLXJlbVxuXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtZXRlciAkdmFsdWUgPSBwaXhlbCBiYXNlZCBudW1iZXIgKHdpdGhvdXQgdW5pdClcblxuXG4jIyBEZXBlbmRlbmNpZXNcbi0tLVxubm4tc3RyaXAtdW5pdFxuXG4jIyBFeGFtcGxlXG4tLS1cbmBgYGh0bWxfZXhhbXBsZVxubm4tcHgtdG8tcmVtKDUpIC8vIE91dHB1dCAwLjMxMjVyZW1cbmBgYFxuXG4qL1xuLypkb2Ncbi0tLVxudGl0bGU6IFBpeGVsIHRvIHVuaXRcbm5hbWU6IHB4LXRvLXVuaXRcbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5TZXQgYSBwcm9wZXJ0eSBhbmQgdmFsdWUgKHBpeGVsIGJhc2VkIHdpdGhvdXQgdW5pdClcblxuQ2FsY3VsYXRlcyByZW0gLyBlbSAvICUgZnJvbSBnaXZlbiBwaXhlbCBhbmQgYmFzZSAoZGVmYXVsdCBiYXNlIGlzIHRoZVxuYmFzZS1mb250LXNpemUsIDE2cHgpXG5JZiBydGwgaXMgdHJ1ZSwgdGhpcyBtaXhpbiBoYW5kbGVzIGFsbCB0aGUgZGlyZWN0aW9uIHN0dWZmOlxuLSBTd2l0Y2hpbmcgdGhlIHZhbHVlcywgd2hlbiB3ZSBoYXZlIGV4YWN0bHkgNCB2YWx1ZXNcbi0gU3dpdGNoaW5nIGxlZnQgYW5kIHJpZ2h0IGluIHByb3BlcnRpZXMgKHBhZGRpbmcgYW5kIG1hcmdpbilcblxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuLXB0dSAoZm9yIGVtIG9yICUgdG8gcGl4ZWwgLSB3aXRoIGJhc2UgcGFyYW1ldGVyKVxuLXJlbSAoZm9yIHJlbSB0byBwaXhlbCAtIHdpdGhvdXQgYmFzZSBwYXJhbWV0ZXIpXG5cblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW1ldGVyICRwcm9wZXJ0eSA9IHBhZGRpbmcgfCBtYXJnaW4gfCBmb250LXNpemUgfCB3aWR0aCB8IGhlaWdodFxuQHBhcmFtZXRlciAkdmFsdWUgPSBQaXhlbCBiYXNlZCBudW1iZXIgLSBhZGQgcHggdG8ga2VlcCB0aGUgcHggZm9yIGEgdmFsdWVcbkBwYXJhbWV0ZXIgJGJhc2UgPSBweCBiYXNlZCBudW1iZXIsIERlZmF1bHQ6IDE2cHhcbkBwYXJhbWV0ZXIgJHVuaXQgPSBTZXQgdW5pdDogcHggfCBlbSB8IHJlbSB8IHBlcmNlbnRcblxuXG4jIyBEZXBlbmRlbmNpZXNcbi0tLVxuYWJzdHJhY3QvZnVuY3Rpb25zL3N3YXAtbGVmdC1yaWdodFxuYWJzdHJhY3QvZnVuY3Rpb25zL3N0cmlwLXVuaXRcblxuXG4jIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5AaW5jbHVkZSBubi1weC10by11bml0KHBhZGRpbmcsIDAgMTBweCAyMCAwKTsgPT4gcGFkZGluZzogMCAxMHB4IDEuMjVyZW0gMDtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQocGFkZGluZywgMCAxMCAyMCAwKTsgPT4gcGFkZGluZzogMCAwLjYyNXJlbSAxLjI1cmVtIDA7XG5AaW5jbHVkZSBubi1weC10by11bml0KHBhZGRpbmctbGVmdCwgMTApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChwYWRkaW5nLXJpZ2h0LCAxMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1hcmdpbiwgMCAxMCAyMCAwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQobWFyZ2luLWxlZnQsIDEwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQobWFyZ2luLXJpZ2h0LCAxMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KGZvbnQtc2l6ZSwgMjApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdCh3aWR0aCwgMTAwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQobWluLXdpZHRoLCAxMDApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChtYW5uLXdpZHRoLCAxMDApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChoZWlnaHQsIDEwMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1pbi1oZWlnaHQsIDEwMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1hbm4taGVpZ2h0LCAxMDApO1xuYGBgXG5cblxuIyMgU291cmNlXG4tLS1cbmh0dHA6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvbGVzcy1taXhpbi1mb3ItcmVtLWZvbnQtc2l6aW5nL1xuXG4qL1xuLypkb2Ncbi0tLVxudGl0bGU6IFBpeGVsIHRvIHVuaXRsZXNzXG5uYW1lOiBubi1weC10by11bml0bGVzc1xuY2F0ZWdvcnk6IGZ1bmN0aW9uc1xuLS0tXG5cblRoaXMgbWFrZXMgdGhlIHNhbWUgY2FsY3VsYXRpb24gYXMgcHggdG8gZW0uIEJ1dCBpdCBkb24ndCBwcmludCBvdXQgdGhlIHVuaXQuXG5cblVzZSB0aGlzIGZvciBsaW5lLWhlaWdodHMuXG5cblxuIyMgTGl2ZSBUZW1wbGF0ZSBhYmJyZXZpYXRpb25zXG4tLS1cblxuXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtZXRlciAkdmFsdWUgPSBwaXhlbCBiYXNlZCBudW1iZXIgKHdpdGhvdXQgdW5pdClcbkBwYXJhbWV0ZXIgJGJhc2UgPSBwaXhlbCBiYXNlZCBudW1iZXIgKHdpdGhvdXQgdW5pdClcblxuXG4jIyBEZXBlbmRlbmNpZXNcbi0tLVxuXG5cblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxubGluZS1oZWlnaHQ6IG5uLXB4LXRvLXVuaXRsZXNzKDUpIC8vIE91dHB1dDogMC4zMTI1XG5gYGBcblxuXG4jIyBTb3VyY2Vcbi0tLVxuXG5cbiovXG4vKmRvY1xuLS0tXG50aXRsZTogU3RyaXAgdW5pdFxubmFtZTogbm4tc3RyaXAtdW5pdFxuY2F0ZWdvcnk6IGZ1bmN0aW9uc1xuLS0tXG5cblN0cmlwcyBvZiB0aGUgdW5pdCBvZiBhIG51bWJlclxuXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtZXRlciAkbnVtID0gbnVtYmVyIHdpdGggdW5pdCAoNXB4LCA1ZW0sIDVyZW0pXG5cblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxubm4tc3RyaXAtdW5pdCg1cHgpIC8vT3V0cHV0OiA1XG5ubi1zdHJpcC11bml0KDEwZW0pIC8vIE91dHB1dDogMTBcbm5uLXN0cmlwLXVuaXQoMTVyZW0pIC8vIE91dHB1dDogMTVcbmBgYFxuXG4qL1xuLypkb2Ncbi0tLVxudGl0bGU6IHotaW5kZXhcbm5hbWU6IG5uLXotaW5kZXhcbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuIFxuQmVjYXVzZSB6LWluZGljZXMgY2FuIGdldCB0cmlja3kgd2UgbWFuYWdlIHRoZW0gaW4gdGhlIHRoZW1lLnNjc3MgZ2xvYmFsbHkuXG5cbkFsd2F5cyB1c2UgdGhpcyBtaXhpbiB0byBzZXQgc2V0IGEgei1pbmRleC5cbiAgXG5SZWFkIHRoZSBCZXN0IFByYWN0aWNlIHRvIGdldCBhbiBmdWxsIGRvY3VtZW50YXRpb246XG5odHRwczovL3Byb2plY3RzLm5ldGNlbnRyaWMuYml6L3dpa2kvZGlzcGxheS9GUk9OVEVORC9Ib3crdG8rc2V0K2Erei1pbmRleFxuIFxuIFxuIyMgTGl2ZSBUZW1wbGF0ZSBhYmJyZXZpYXRpb25zXG4tLS1cbi16XG4gXG4gXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJGVsZW1lbnQgPSBOYW1lIG9mIHRoZSBlbGVtZW50IChub3JtYWxseSB0aGlzIHdpbGwgYmUgdGhlIG1vZHVsZSBuYW1lIGZvciB0aGUgbWFpbiBzdGFjaylcbkBwYXJhbWV0ZXIgJGxpc3QgPSBOYW1lIG9mIHRoZSBsaXN0IChkZWZhdWx0ICR6LWluZGljZXMpLiBNdXN0IGJlIG9ubHkgc2V0IGZvciBzdGFjayBjb250ZXh0XG5AcGFyYW1ldGVyICRtaW4gPSBTZXQgYSBtaW5pbXVtIHotaW5kZXggd2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgbGlzdC5cblxuIFxuIyMgRGVwZW5kZW5jaWVzXG4tLS1cbiR6LWluZGljZXMgdmFyaWFibGUgaW4gdGhlIHRoZW1lLnNjc3NcblxuXG4jIyBFeGFtcGxlXG4tLS1cbiAgXG5gYGBodG1sX2V4YW1wbGVcblxuLy8gSW4gdGhlIFNBU1MgdGhlbWUgZmlsZVxuXG4kei1pbmRpY2VzOiBzbGlkZXIsIG1vZGFsLCBkaWFsb2csIG5hdmlnYXRpb247XG5cblxuLy8gSW4gdGhlIFNBU1MgbW9kdWxlIGZpbGVcblxuLm1vZGFsIHtcbiAgICAmX19iYXNlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB6LWluZGV4OiBubi16LWluZGV4KG1vZGFsKTtcbiAgICB9XG59XG5gYGBcbiBcblxuIyMgU291cmNlXG4tLS1cbmh0dHA6Ly93d3cuc21hc2hpbmdtYWdhemluZS5jb20vMjAxNC8wNi8xMi9zYXNzeS16LWluZGV4LW1hbmFnZW1lbnQtZm9yLWNvbXBsZXgtbGF5b3V0cy9cblxuKi9cbi8qIGRvY1xuLS0tXG50aXRsZTogcmVtb3ZlIGV2ZXJ5IHVuaXRcbm5hbWU6IHN0cmlwLXVuaXRcbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxucmVtb3ZlIGFsbCB1bml0c1xuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJG51bWJlciA9IG51bWJlciB3aXRoIHVuaXRcblxuIyMgRXhhbXBsZVxuLS0tXG5gYGBodG1sX2V4YW1wbGVcbnN0cmlwLXVuaXQoNXB4KSAvLyBPdXRwdXQ6IDVcbmBgYFxuKi9cbi8qZG9jXG4tLS1cbnRpdGxlOiBTd2FwIGxlZnQgcmlnaHQgdmFsdWVzXG5uYW1lOiBubi1ydGxcbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuXG5Td2FwIHRoZSBuYW1lcyByaWdodCBhbmQgbGVmdCB3aGVuICRydGwgaXMgc2V0IHRvIHRydWUuXG5JZiB0aGUgdmFsdWUgaXMgbm90IHJpZ2h0IG9yIGxlZnQgaXQgcmV0dXJucyB0aGUgb3JpZ2luYWwgdmFsdWUuXG5cbkluOiAgcmlnaHRcbk91dDogbGVmdCAoaW4gcnRsKSwgcmlnaHQgKGluIGx0cilcblxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuXG5cblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW1ldGVyICRvcmlnaW4gPSByaWdodCB8IGxlZnRcblxuXG4jIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5ubi1ydGwobGVmdCk6IDEwcHg7XG5ubi1ydGwocGFkZGluZy1yaWdodCk6IDMwcHg7XG5ubi1ydGwoMCAxcHggOHB4IDEycHgpIC8vIDAgMTJweCA4cHggMXB4XG5gYGBcblxuXG4qL1xuLypkb2Ncbi0tLVxudGl0bGU6IENsZWFyZml4XG5uYW1lOiBjbGVhcmZpeFxuY2F0ZWdvcnk6IG1peGluc1xuLS0tXG5cbkNsZWFycyBhZnRlciBmbG9hdGluZyBlbGVtZW50XG5cblVzZSB0aGlzIG1peGluIG9ubHkgaW5zaWRlIG1lZGlhIHF1ZXJpZXMgd2hlcmUgeW91IGNhbid0IHVzZSB0aGVcbmFic3RyYWN0L2V4dGVuZHMvdXRpbHMvX2NsZWFyZml4IHZlcnNpb24sIHdoaWNoIGFkZHMgbGVzcyBjb2RlIHRvIGNzc1xuXG5cbiMjIExpdmUgVGVtcGxhdGUgYWJicmV2aWF0aW9uc1xuLS0tXG5cblxuXG4jIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5AaW5jbHVkZSBjbGVhcmZpeDtcbmBgYFxuXG5cbiMjIFNvdXJjZVxuLS0tXG5odHRwczovL2Nzcy10cmlja3MuY29tL3NuaXBwZXRzL2Nzcy9jbGVhci1maXgvXG4qL1xuLmljb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDMycHg7XG59XG5cbi8qIGRvY1xuLS0tXG50aXRsZTogZm9jdXMgY29sb3Jcbm5hbWU6IGZvY3VzIGNvbG9yXG5jYXRlZ29yeTogbWl4aW5zXG4tLS1cblxuQWRkIGEgZm9jdXMgY29sb3Igd2hlbiBrZXlib2FyZC1mb2N1cyBpcyBhY3RpdmF0ZWRcbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtICRudW1iZXJcblxuKi9cbi8qIGRvY1xuLS0tXG50aXRsZTogaWdub3JlLWNvbnRhaW5lclxubmFtZTogaWdub3JlLWNvbnRhaW5lclxuY2F0ZWdvcnk6IG1peGluc1xuLS0tXG5cblNldCBmdWxsIHBhZ2Ugd2lkdGggZm9yIHNvbWV0aGluZyBpbnNpZGUgYSBjb250YWluZXJcblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW0gJGNvbnRhaW5lci1zaXplXG5AcGFyYW0gJGd1dHRlclxuXG4qL1xuLyogR2VuZXJhdGVzIGFsbCB0aGUgcnVsZXMgZm9yIHRoZSBncmlkIGNvbHVtbnMgdXAgdG8gdGhlIGdpdmVuIGFtb3VudCBvZiBjb2x1bW4gKi9cbi8qIEdlbmVyYXRlcyBhbGwgdGhlIHJ1bGVzIGZvciB0aGUgZ3JpZCBjb2x1bW4gb2Zmc2V0IHVwIHRvIHRoZSBnaXZlbiBhbW91bnQgb2YgY29sdW1uICovXG4vKiBHZW5lcmF0ZXMgYWxsIHRoZSBydWxlcyBmb3IgdGhlIGdyaWQgYW5kIGNvbHVtbnMgZm9yIHRoZSBnaXZlbiBicmVhayBwb2ludCBhbmQgdG90YWwgb2YgY29sdW1ucyAqL1xuLyogQVBJIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0byBnZW5lcmF0ZSBhIGdyaWQgY29uZmlnICovXG4vKmRvY1xuLS0tXG50eXBlOiBidXR0b24gdHlwZVxuc3RhdGU6IHN0YXRlIGJ1dHRvblxuLS0tXG5cbkJ1dHRvbiBzdHlsZXNcblxuVXNlIHRoaXMgbWl4aW4gZm9yIGJ1dHRvbiBzdHlsZXM6IGNvbG9yIHRleHQsIGJhY2tncm91bmQsIGJvcmRlclxuXG5cbiMjIEV4YW1wbGVcbi0tLVxuXG5gYGBodG1sX2V4YW1wbGVcbkBpbmNsdWRlIGJ1dHRvbihwcmltYXJ5KTtcbmBgYFxuKi9cbi8qZG9jXG4tLS1cbmxpbmVMaW1pdDogVGhpcyB2YWx1ZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBsaW5lcyBhZnRlciB3aGljaCB0aGUgY29udGVudCB3aWxsIGJlIGNsYW1wZWQuIEl0IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuXG4tLS1cblxuVHJ1bmNhdGVzIHRleHQgYXQgYSBzcGVjaWZpYyBudW1iZXIgb2YgbGluZXMuXG5cblVzZSB0aGlzIG1peGluIHRvIGhpZGUgbG9uZyB0ZXh0LlxuXG4jIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5AaW5jbHVkZSBsaW5lLWNsYW1wKCRsaW5lTGltaXQ6IDQpO1xuYGBgXG4qL1xuLyogdHlwb2dyYXBoeVxuLS0tXG50aXRsZTogdHlwb2dyYXBoeVxubmFtZTogVHlwb2dyYXBoeVxuY2F0ZWdvcnk6IG1peGluc1xuLS0tXG5cbkFkZHMgZm9udCBDU1MgcHJvcGVydGllcyBieSBhIG1hcCBwcm92aWRlZFxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbSAkdC1zdHlsZVxuQHBhcmFtICRpcy1pbXBvcnRhbnQ6IGZhbHNlXG5cbiogJHQtc3R5bGUgaXMgZXhwZWN0ZWQgdG8gYmUgYSBtYXAgd2l0aCAnZGVmYXVsdCcgYW5kICdicmVha3BvaW50W3NdJyBzdWJtYXBzIHdpdGggYSBwcm9wZXJ0eVxuZm9yIGV2ZXJ5IGNzcyBwcm9wZXJ0eSB0byBiZSBzZXQuXG4qICRpcy1pbXBvcnRhbnQgcGFyYW1ldGVyIGFsbG93cyB0byBmb3JjZSB0eXBvZ3JhcGh5IHByb3BlcnRpZXMgdG8gYmUgc2V0IGFzICFpbXBvcnRhbnRcblRyeSB0byBhdm9pZCBpdHMgdXNlLCBidXQgaXQgbWlnaHQgYmUgbmVlZGVkIGZvciBzaXR1YXRpb25zIHdoZXJlIHN0eWxlcyBmb3IgYSBjb21wb25lbnRcbmFyZSB2ZXJ5IHNwZWNpZmljIGFuZCB0byBvdmVyd3JpdGUgdGhlIGdlbmVyaWMgb25lcyBpcyB0b28gY29tcGxleCAoaWYgdGhleSBoYXZlIGEgbG90IG9mIHNwZWNpZmljaXR5KVxuXG4qL1xuLyogZG9jXG4tLS1cbnRpdGxlOiBoaWRkZW5cbm5hbWU6IGhpZGRlblxuY2F0ZWdvcnk6IG1peGluc1xuLS0tXG5cbkhpZGUgZnJvbSBib3RoIHNjcmVlbnJlYWRlcnMgYW5kIGJyb3dzZXJzOiBoNWJwLmNvbS91XG4jIyBQYXJhbWV0ZXJzXG4tLS1cblxuKi9cbi8qIGRvY1xuLS0tXG50aXRsZTogb3ZlcmxheVxubmFtZTogb3ZlcmxheVxuY2F0ZWdvcnk6IG1peGluc1xuLS0tXG5cbkNyZWF0ZXMgYW4gb3ZlcmxheSB3aXRoIHRoZSBwcm92aWRlZCBiYWNrZ3JvdW5kIGNvbG9yXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbSAkYmdDb2xvclxuXG4qL1xuLm1hcmtldGxhbmd1YWdlc2VsZWN0b3Ige1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDB2dztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwYWRkaW5nOiAxMnB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHtcbiAgLm1hcmtldGxhbmd1YWdlc2VsZWN0b3Ige1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAzNSUgNjUlO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkge1xuICAubWFya2V0bGFuZ3VhZ2VzZWxlY3Rvcl9fbm8tbWFya2V0cyB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDU1JSA0NSU7XG4gIH1cbn1cblxuLm1hcmtldGxhbmd1YWdlc2VsZWN0b3JfX21lc3NhZ2Uge1xuICBtYXJnaW4tcmlnaHQ6IDE1cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mZi1yZWd1bGFyKTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tbHMtZGVmYXVsdCk7XG4gIHBhZGRpbmctdG9wOiA0cHg7XG4gIHBhZGRpbmctYm90dG9tOiA0cHg7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkge1xuICAubWFya2V0bGFuZ3VhZ2VzZWxlY3Rvcl9fbWVzc2FnZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA2MHB4O1xuICB9XG59XG5cbi5tYXJrZXRsYW5ndWFnZXNlbGVjdG9yX19jb250cm9scyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbi10b3A6IDEycHg7XG4gIG92ZXJmbG93LXk6IHZpc2libGU7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkge1xuICAubWFya2V0bGFuZ3VhZ2VzZWxlY3Rvcl9fY29udHJvbHMge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cbn1cblxuLm1hcmtldGxhbmd1YWdlc2VsZWN0b3JfX2NvbnRpbnVlIHtcbiAgbWFyZ2luOiAwIDAgMCAyNHB4O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWluLXdpZHRoOiBhdXRvO1xuICBwYWRkaW5nOiAxMnB4IDEwcHg7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubWFya2V0bGFuZ3VhZ2VzZWxlY3Rvcl9fY29udGludWUge1xuICAgIHBhZGRpbmc6IDEycHggMzJweDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHtcbiAgLm1hcmtldGxhbmd1YWdlc2VsZWN0b3JfX2NvbnRpbnVlIHtcbiAgICBtYXJnaW46IDAgNjBweDtcbiAgfVxufVxuXG4ubWFya2V0bGFuZ3VhZ2VzZWxlY3Rvcl9fY29udGludWUtLXNwbGFzaCB7XG4gIG1hcmdpbjogMDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7XG4gIC5tYXJrZXRsYW5ndWFnZXNlbGVjdG9yX19jb250aW51ZS0tc3BsYXNoIHtcbiAgICBtYXJnaW46IDAgNjBweCAwIGF1dG87XG4gIH1cbn1cblxuLm1hcmtldGxhbmd1YWdlc2VsZWN0b3JfX2Ryb3Bkb3duIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHdpZHRoOiAxMDAlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDEycHggMTBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzg4OGI4ZDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzg4OGI4ZDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tYXJrZXRsYW5ndWFnZXNlbGVjdG9yX19kcm9wZG93biB7XG4gICAgcGFkZGluZzogMTJweCAzMnB4O1xuICB9XG59XG5cbi5tYXJrZXRsYW5ndWFnZXNlbGVjdG9yX19kcm9wZG93bl9faXRlbXMge1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICM4ODhiOGQ7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM4ODhiOGQ7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuNXM7XG59XG5cbi5tYXJrZXRsYW5ndWFnZXNlbGVjdG9yX19kcm9wZG93bl9faXRlbXMgbGkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAxMnB4IDEwcHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYTdhOGE5O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1hcmtldGxhbmd1YWdlc2VsZWN0b3JfX2Ryb3Bkb3duX19pdGVtcyBsaSB7XG4gICAgcGFkZGluZzogMTJweCAzMnB4O1xuICB9XG59XG5cbi5tYXJrZXRsYW5ndWFnZXNlbGVjdG9yX19kcm9wZG93bl9faXRlbXMgbGk6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTM1NjVhO1xufVxuXG4ubWFya2V0bGFuZ3VhZ2VzZWxlY3Rvcl9fZHJvcGRvd25fX2l0ZW1zIGxpOmZpcnN0LWNoaWxkOmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYmFja2dyb3VuZDogdXJsKFwiL2NvbnRlbnQvZGFtL3ZvbHZvLW1lZGlhL2xpc3QtaWNvbnMvY2hldnJvbi11cC5zdmcjY2hldnJvbi11cC1pY29uLXcyNC12aWV3XCIpO1xuICB3aWR0aDogdmFyKC0tdi1pY29uLXNpemUpO1xuICBoZWlnaHQ6IHZhcigtLXYtaWNvbi1zaXplKTtcbiAgZmlsdGVyOiBzYXR1cmF0ZSgwJSkgYnJpZ2h0bmVzcygwJSkgaW52ZXJ0KDEwMCUpIG9wYWNpdHkoMSk7XG4gIGZpbHRlcjogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+ICAgIDxmaWx0ZXIgaWQ9XCJyZWNvbG9yXCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPiAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIiAgICAgICAgIDAgMCAwIDAgMSAgICAgICAgIDAgMCAwIDAgMSAgICAgICAgIDAgMCAwIDAgMSAgICAgICAgIDAgMCAwIDEgMCAgICAgICAgIFwiLz4gICAgPC9maWx0ZXI+ICAgIDwvc3ZnPiAgICAjcmVjb2xvcicpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAubWFya2V0bGFuZ3VhZ2VzZWxlY3Rvcl9fZHJvcGRvd25fX2l0ZW1zIGxpOmZpcnN0LWNoaWxkOmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvY29udGVudC9kYW0vdm9sdm8tbWVkaWEvbGlzdC1pY29ucy9jaGV2cm9uLXVwLnN2ZyNjaGV2cm9uLXVwLWljb24tdzE2LXZpZXdcIik7XG4gIH1cbn1cblxuLm1hcmtldGxhbmd1YWdlc2VsZWN0b3JfX2Ryb3Bkb3duX19pdGVtcyBsaTpmaXJzdC1jaGlsZCBzcGFuIHtcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbn1cblxuLm1hcmtldGxhbmd1YWdlc2VsZWN0b3JfX2Ryb3Bkb3duX19pdGVtcyBsaTpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuLm1hcmtldGxhbmd1YWdlc2VsZWN0b3JfX2Ryb3Bkb3duX19pdGVtcyBzcGFuIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aWR0aDogMTAwJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4ubWFya2V0bGFuZ3VhZ2VzZWxlY3Rvcl9fZHJvcGRvd25fX3BsYWNlaG9sZGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLm1hcmtldGxhbmd1YWdlc2VsZWN0b3JfX2Ryb3Bkb3duX19wbGFjZWhvbGRlcjphZnRlciB7XG4gIGNvbnRlbnQ6ICcnO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJhY2tncm91bmQ6IHVybChcIi9jb250ZW50L2RhbS92b2x2by1tZWRpYS9saXN0LWljb25zL2NoZXZyb24tZG93bi5zdmcjY2hldnJvbi1kb3duLWljb24tdzI0LXZpZXdcIik7XG4gIHdpZHRoOiB2YXIoLS12LWljb24tc2l6ZSk7XG4gIGhlaWdodDogdmFyKC0tdi1pY29uLXNpemUpO1xuICBmaWx0ZXI6IHNhdHVyYXRlKDAlKSBicmlnaHRuZXNzKDAlKSBpbnZlcnQoMTAwJSkgb3BhY2l0eSgxKTtcbiAgZmlsdGVyOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj4gICAgPGZpbHRlciBpZD1cInJlY29sb3JcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+ICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiICAgICAgICAgMCAwIDAgMCAxICAgICAgICAgMCAwIDAgMCAxICAgICAgICAgMCAwIDAgMCAxICAgICAgICAgMCAwIDAgMSAwICAgICAgICAgXCIvPiAgICA8L2ZpbHRlcj4gICAgPC9zdmc+ICAgICNyZWNvbG9yJyk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5tYXJrZXRsYW5ndWFnZXNlbGVjdG9yX19kcm9wZG93bl9fcGxhY2Vob2xkZXI6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9jb250ZW50L2RhbS92b2x2by1tZWRpYS9saXN0LWljb25zL2NoZXZyb24tZG93bi5zdmcjY2hldnJvbi1kb3duLWljb24tdzE2LXZpZXdcIik7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5tYXJrZXRsYW5ndWFnZXNlbGVjdG9yX19kcm9wZG93bl9fcGxhY2Vob2xkZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgfVxufVxuXG4ubWFya2V0bGFuZ3VhZ2VzZWxlY3Rvcl9fZHJvcGRvd246OmFmdGVyIHtcbiAgY29udGVudDogJyc7XG59XG5cbi50b3AtYmFubmVyX19jbG9zZSB7XG4gIHRvcDogNXB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHtcbiAgLnRvcC1iYW5uZXJfX2Nsb3NlIHtcbiAgICB0b3A6IGF1dG87XG4gIH1cbn1cblxuQHN1cHBvcnRzIG5vdCAoLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lKSB7XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIGJvZHkge1xuICAgICAgbWFyZ2luLXRvcDogdmFyKC0tbWFya2V0LWxhbmd1YWdlLWhlaWdodCk7XG4gICAgfVxuICAgIC50b3AtYmFubmVyIHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxufVxuXG4vKiMgc291cmNlTWFwcGluZ1VSTD1tYXJrZXRsYW5ndWFnZXNlbGVjdG9yLmJ1bmRsZS5jc3MubWFwICovIl19 */