@charset "UTF-8";
/*------------------------------------*    #CSSWIZARDRY
\*------------------------------------*/
/**
 * CONTENTS
 *
 * SETTINGS
 * Default..............inuitcss’ default settings.
 * Global...............Globally-available variables and settings/config.
 * Colors...............Manage our color palette in isolation.
 * Responsive...........Set up and name our breakpoints.
 *
 * TOOLS
 * Functions............inuitcss’ default functions.
 * Mixins...............inuitcss’ default mixins.
 * Mixins...............Our extension of inuitcss’ mixins.
 * Responsive...........Responsive tooling (requires responsive settings).
 * Aliases..............Aliases onto longer inuitcss variables and mixins.
 *
 * GENERIC
 * Normalize.css........A level playing field.
 * Reset................A pared back reset to remove margins.
 * Box-sizing...........Better default `box-sizing`.
 * Shared...............Sensibly and tersely share global commonalities.
 *
 * BASE
 * Page.................Page-level styles (HTML element).
 * Page.................Our extension of the inuitcss page module.
 * Headings.............Heading styles
 * Type.................Misc type styles
 * Links................Hyperlink styles
 * Lists................inuitcss list styles
 * Images...............inuitcss images
 * Quotes...............Styling for blockquotes, etc.
 *
 * OBJECTS
 * Wrappers.............Wrappers and page constraints.
 * Buttons..............inuitcss’ buttons module.
 * Layout...............inuitcss’ layout tool.
 * Box..................inuitcss’ box object.
 * Media................The media object.
 * Flag.................The flag object.
 * UI list..............inuitcss’ UI list.
 *
 * COMPONENTS
 * Page-head............Page header styles.
 * Bands................Full-width page bands.
 * Promo................Lead promo blocks on the home page.
 * Page-foot............Page footer styles.
 * Page-micro...........Page copyright styles.
 * Site-nav.............Site’s main nav area.
 * Buttons..............Extension of inuitcss’ buttons.
 * Boxes................Extension of inuitcss’ box object
 * Post.................Post-specific styles.
 * Pull-quote...........Large, featured quotes.
 * Carousel.............Pure CSS carousel component.
 * Iconic...............Iconic icon styles.
 * Sprites..............Image sprite styles.
 * Feature list.........Big blocky lists of feature items.
 * Annotate.............Pure CSS figure annotations.
 * Ads..................AdPacks overrides.
 * Client-list..........Amazing people I’ve had the pleasure of working with.
 *
 * TRUMPS
 * Clearfix.............I can’t believe we still need this in 2014.
 * Widths...............Simple width helper classes.
 * Widths-responsive....Polyfill for responsive width classes.
 * Spacing..............Micro-level spacing.
 * Show/hide............Helpers to show and side stuff.
 */
/*!
 * inuitcss, by @csswizardry
 *
 * github.com/inuitcss | inuitcss.com
 */

.center-children {
  height: 100%;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-justify-content: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center; }

/*------------------------------------*    #ALIASES
\*------------------------------------*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
/**
 * 1. Set default font family to sans-serif.
 * 2. Prevent iOS and IE text size adjust after device orientation change,
 *    without disabling user zoom.
 */
html {
  font-family: sans-serif;
  /* 1 */
  -ms-text-size-adjust: 100%;
  /* 2 */
  -webkit-text-size-adjust: 100%;
  /* 2 */ }

/**
 * Remove default margin.
 */
body {
  margin: 0; }

/* HTML5 display definitions
   ========================================================================== */
/**
 * Correct `block` display not defined for any HTML5 element in IE 8/9.
 * Correct `block` display not defined for `details` or `summary` in IE 10/11
 * and Firefox.
 * Correct `block` display not defined for `main` in IE 11.
 */
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block; }

/**
 * 1. Correct `inline-block` display not defined in IE 8/9.
 * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
 */
audio,
canvas,
progress,
video {
  display: inline-block;
  /* 1 */
  vertical-align: baseline;
  /* 2 */ }

/**
 * Prevent modern browsers from displaying `audio` without controls.
 * Remove excess height in iOS 5 devices.
 */
audio:not([controls]) {
  display: none;
  height: 0; }

/**
 * Address `[hidden]` styling not present in IE 8/9/10.
 * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
 */
[hidden],
template {
  display: none; }

/* Links
   ========================================================================== */
/**
 * Remove the gray background color from active links in IE 10.
 */
a {
  background-color: transparent; }

/**
 * Improve readability of focused elements when they are also in an
 * active/hover state.
 */
a:active,
a:hover {
  outline: 0; }

/* Text-level semantics
   ========================================================================== */
/**
 * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
 */
abbr[title] {
  border-bottom: 1px dotted; }

/**
 * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
 */
b,
strong {
  font-weight: bold; }

/**
 * Address styling not present in Safari and Chrome.
 */
dfn {
  font-style: italic; }

/**
 * Address variable `h1` font-size and margin within `section` and `article`
 * contexts in Firefox 4+, Safari, and Chrome.
 */
h1 {
  font-size: 2em;
  margin: 0.67em 0; }

/**
 * Address styling not present in IE 8/9.
 */
mark {
  background: #ff0;
  color: #000; }

/**
 * Address inconsistent and variable font size in all browsers.
 */
small {
  font-size: 80%; }

/**
 * Prevent `sub` and `sup` affecting `line-height` in all browsers.
 */
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline; }

sup {
  top: -0.5em; }

sub {
  bottom: -0.25em; }

/* Embedded content
   ========================================================================== */
/**
 * Remove border when inside `a` element in IE 8/9/10.
 */
img {
  border: 0; }

/**
 * Correct overflow not hidden in IE 9/10/11.
 */
svg:not(:root) {
  overflow: hidden; }

/* Grouping content
   ========================================================================== */
/**
 * Address margin not present in IE 8/9 and Safari.
 */
figure {
  margin: 1em 40px; }

/**
 * Address differences between Firefox and other browsers.
 */
hr {
  box-sizing: content-box;
  height: 0; }

/**
 * Contain overflow in all browsers.
 */
pre {
  overflow: auto; }

/**
 * Address odd `em`-unit font size rendering in all browsers.
 */
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em; }

/* Forms
   ========================================================================== */
/**
 * Known limitation: by default, Chrome and Safari on OS X allow very limited
 * styling of `select`, unless a `border` property is set.
 */
/**
 * 1. Correct color not being inherited.
 *    Known issue: affects color of disabled elements.
 * 2. Correct font properties not being inherited.
 * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
 */
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  /* 1 */
  font: inherit;
  /* 2 */
  margin: 0;
  /* 3 */ }

/**
 * Address `overflow` set to `hidden` in IE 8/9/10/11.
 */
button {
  overflow: visible; }

/**
 * Address inconsistent `text-transform` inheritance for `button` and `select`.
 * All other form control elements do not inherit `text-transform` values.
 * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
 * Correct `select` style inheritance in Firefox.
 */
button,
select {
  text-transform: none; }

/**
 * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
 *    and `video` controls.
 * 2. Correct inability to style clickable `input` types in iOS.
 * 3. Improve usability and consistency of cursor style between image-type
 *    `input` and others.
 */
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  /* 2 */
  cursor: pointer;
  /* 3 */ }

/**
 * Re-set default cursor for disabled elements.
 */
button[disabled],
html input[disabled] {
  cursor: default; }

/**
 * Remove inner padding and border in Firefox 4+.
 */
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0; }

/**
 * Address Firefox 4+ setting `line-height` on `input` using `!important` in
 * the UA stylesheet.
 */
input {
  line-height: normal; }

/**
 * It's recommended that you don't attempt to style these elements.
 * Firefox's implementation doesn't respect box-sizing, padding, or width.
 *
 * 1. Address box sizing set to `content-box` in IE 8/9/10.
 * 2. Remove excess padding in IE 8/9/10.
 */
input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  /* 1 */
  padding: 0;
  /* 2 */ }

/**
 * Fix the cursor style for Chrome's increment/decrement buttons. For certain
 * `font-size` values of the `input`, it causes the cursor style of the
 * decrement button to change from `default` to `text`.
 */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto; }

/**
 * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
 * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
 */
input[type="search"] {
  -webkit-appearance: textfield;
  /* 1 */
  box-sizing: content-box;
  /* 2 */ }

/**
 * Remove inner padding and search cancel button in Safari and Chrome on OS X.
 * Safari (but not Chrome) clips the cancel button when the search input has
 * padding (and `textfield` appearance).
 */
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none; }

/**
 * Define consistent border, margin, and padding.
 */
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em; }

/**
 * 1. Correct `color` not being inherited in IE 8/9/10/11.
 * 2. Remove padding so people aren't caught out if they zero out fieldsets.
 */
legend {
  border: 0;
  /* 1 */
  padding: 0;
  /* 2 */ }

/**
 * Remove default vertical scrollbar in IE 8/9/10/11.
 */
textarea {
  overflow: auto; }

/**
 * Don't inherit the `font-weight` (applied by a rule above).
 * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
 */
optgroup {
  font-weight: bold; }

/* Tables
   ========================================================================== */
/**
 * Remove most spacing between table cells.
 */
table {
  border-collapse: collapse;
  border-spacing: 0; }

td,
th {
  padding: 0; }

/*------------------------------------*    #BOX-SIZING
\*------------------------------------*/
/**
 * Set the global `box-sizing` state to `border-box`.
 *
 * css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice
 * paulirish.com/2012/box-sizing-border-box-ftw
 */
html {
  box-sizing: border-box; }

*, *:before, *:after {
  box-sizing: inherit; }

/*------------------------------------*    #RESET
\*------------------------------------*/
/**
 * As well as using normalize.css, it is often advantageous to remove all
 * margins from certain elements.
 */
body,
h1, h2, h3, h4, h5, h6,
p, blockquote, pre,
dl, dd, ol, ul,
form, fieldset, legend,
figure,
table, th, td, caption,
hr {
  margin: 0;
  padding: 0; }

/**
 * Give a help cursor to elements that give extra info on `:hover`.
 */
abbr[title],
dfn[title] {
  cursor: help; }

/**
 * Remove underlines from potentially troublesome elements.
 */
u,
ins {
  text-decoration: none; }

/**
 * Apply faux underlines to inserted text via `border-bottom`.
 */
ins {
  border-bottom: 1px solid; }

/*------------------------------------*    #SHARED
\*------------------------------------*/
/**
 * Where `margin-bottom` is concerned,this value will be the same as the
 * base line-height. This allows us to keep a consistent vertical rhythm.
 * As per: csswizardry.com/2012/06/single-direction-margin-declarations
 */
h1, h2, h3, h4, h5, h6,
ul, ol, dl,
blockquote, p, address,
hr,
table,
fieldset, figure,
pre {
  margin-bottom: 24px;
  margin-bottom: 1.5rem; }

/**
 * Where `margin-left` is concerned we want to try and indent certain elements
 * by a consistent amount. Define that amount once,here.
 */
ul, ol, dd {
  margin-left: 48px;
  margin-left: 3rem; }

/*------------------------------------*    #HEADINGS
\*------------------------------------*/
/**
 * Headings 1–6.
 */
h1 {
  font-size: 36px;
  font-size: 2.25rem;
  line-height: 1.33333; }

h2 {
  font-size: 30px;
  font-size: 1.875rem;
  line-height: 1.6; }

h3 {
  font-size: 24px;
  font-size: 1.5rem;
  line-height: 1; }

h4 {
  font-size: 20px;
  font-size: 1.25rem;
  line-height: 1.2; }

h5 {
  font-size: 16px;
  font-size: 1rem;
  line-height: 1.5; }

h6 {
  font-size: 14px;
  font-size: 0.875rem;
  line-height: 1.71429; }

/*------------------------------------*    #PARAGRAPHS
\*------------------------------------*/
/**
 * The `.lede` class is used to make the introductory text (usually a paragraph)
 * of a document slightly larger: en.wikipedia.org/wiki/Lede_(news)
 */
.lede {
  font-size: 18px;
  font-size: 1.125rem;
  line-height: 1.33333; }

/*------------------------------------*    #TYPE
\*------------------------------------*/
/**
 * Typographical base selectors.
 */
/**
 * Headings 1–6.
 */
h1, h2, h3, h4, h5, h6 {
  font-weight: 300;
  color: #FE5900; }

/**
 * A generic heading style which can be applied to any headings.
 */
.heading {
  font-size: 22px;
  font-size: 1.375rem;
  line-height: 1.09091; }

.heading--highlight {
  font-size: 20px;
  font-size: 1.25rem;
  line-height: 1.2;
  color: #fff;
  text-transform: uppercase;
  font-weight: 700; }

.heading-sub {
  font-size: 16px;
  font-size: 1rem;
  line-height: 1.5;
  font-weight: 700;
  margin-bottom: 0;
  color: #4C4945; }

.section-heading {
  font-size: 32px;
  font-size: 2rem;
  line-height: 1.5;
  position: relative;
  text-transform: uppercase; }
  @media screen and (max-width: 44.9375em) {
    .section-heading {
      font-size: 24px;
      font-size: 1.5rem;
      line-height: 1;
      line-height: 1.5; } }

.section-heading--dark {
  color: #fff; }
  .section-heading--dark > .section-heading__text:after {
    background-color: #fff; }

.section-heading--brand {
  color: #FE5900; }
  .section-heading--brand > .section-heading__text:after {
    background-color: #FE5900; }

.section-heading--top {
  margin-bottom: 0; }
  .section-heading--top > .section-heading__text:after {
    top: auto;
    bottom: 100%;
    margin-top: 0;
    margin-bottom: 12px; }

.section-heading--no-line {
  margin-bottom: 0; }
  .section-heading--no-line > .section-heading__text:after {
    content: none; }

.section-heading--right {
  text-align: right; }
  .section-heading--right > .section-heading__text:after {
    left: auto;
    right: 0; }

.section-heading__text {
  display: inline-block;
  position: relative; }
  .section-heading__text:after {
    content: '';
    width: 50%;
    height: 1px;
    background-color: #ddd;
    position: absolute;
    top: 100%;
    left: 0;
    margin-top: 12px; }

.section-heading--margin-large {
  margin-bottom: 3em; }

.section-heading--centre {
  text-align: center; }
  .section-heading--centre > .section-heading__text:after {
    left: 50%;
    -webkit-transform: translateX(-50%);
        -ms-transform: translateX(-50%);
            transform: translateX(-50%); }

/**
 * Emboldened elements.
 */
/**
 * Code-like elements.
 */
code, kbd, samp {
  color: #859900;
  font-family: Inconsolata, Monaco, Consolas, "Andale Mono", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;
  font-style: normal; }

pre {
  white-space: pre;
  word-wrap: normal;
  overflow: auto;
  padding: 12px;
  background-color: #4C4945;
  border-radius: 5px; }
  pre,
  pre code, pre kbd, pre samp {
    color: #fff; }

/**
 * Figures.
 *
 * 1. Outdent figures by an arbitrary amount at the relevant viewport size.
 * 2. Reindent figcaptions.
 */
@media screen and (min-width: 1380px) {
  figure {
    margin-left: -128px;
    /* [1] */ } }

figure > img {
  border-radius: 5px; }

figcaption {
  font-size: 12px;
  font-size: 0.75rem;
  line-height: 2; }
  @media screen and (min-width: 1380px) {
    figcaption {
      margin-left: 128px;
      /* [2] */ } }

/**
 * Horizontal rules.
 */
hr {
  border: none;
  border-bottom: 1px solid #ddd;
  margin-bottom: 23px; }

/**
 * Highlighted text.
 */
pre mark {
  background: none;
  border-bottom: 1px solid;
  color: inherit; }

/**
 * Text-alignment.
 */
.text-banner {
  text-align: center; }

.text-large {
  font-size: 32px;
  font-size: 2rem;
  line-height: 1.5;
  line-height: 2; }
  @media screen and (max-width: 44.9375em) {
    .text-large {
      font-size: 20px;
      font-size: 1.25rem;
      line-height: 1.2;
      line-height: 1.5; } }

.bold {
  font-weight: bold !important; }

.sub-heading {
  color: #FE5900;
  text-transform: uppercase;
  font-size: 16px;
  font-size: 1rem;
  line-height: 1.5;
  font-weight: bold; }

/*------------------------------------*    #LINKS
\*------------------------------------*/
a, .link-brand {
  text-decoration: none;
  color: #FE5900; }
  a:hover, a:active, a:focus, .link-brand:hover, .link-brand:active, .link-brand:focus {
    text-decoration: underline; }

.link-secret {
  color: inherit;
  font-weight: 300; }
  .link-secret:hover, .link-secret:active, .link-secret:focus {
    color: #FE5900;
    text-decoration: none; }

/*------------------------------------*    #QUOTES
\*------------------------------------*/
/**
 * Inline quotes.
 *
 */
q {
  font-style: italic;
  quotes: "‘" "’" "“" "”"; }
  q:before {
    content: open-quote; }
  q:after {
    content: close-quote; }

/**
 * Block quotes.
 *
 * 1. Hang opening punctuation.
 */
blockquote {
  margin-right: 48px;
  margin-left: 48px;
  font-style: italic;
  quotes: "“" "”"; }
  blockquote p {
    text-indent: -0.41em;
    /* [1] */ }
    blockquote p:before {
      content: open-quote; }
    blockquote p:after {
      content: no-close-quote; }
    blockquote p:last-of-type {
      margin-bottom: 0; }
      blockquote p:last-of-type:after {
        content: close-quote; }
  blockquote q {
    quotes: "‘" "’"; }
    blockquote q:before {
      content: open-quote; }
    blockquote q:after {
      content: close-quote; }

/*------------------------------------*    #LISTS
\*------------------------------------*/
/**
 * Remove extra vertical spacing when nesting lists.
 */
li > ul,
li > ol {
  margin-bottom: 0; }

/*------------------------------------*    #IMAGES
\*------------------------------------*/
/**
 * 1. Fluid images for responsive purposes.
 * 2. Offset `alt` text from surrounding copy.
 * 3. Setting `vertical-align` removes the whitespace that appears under `img`
 *    elements when they are dropped into a page as-is. Safer alternative to
 *    using `display: block;`.
 */
img {
  max-width: 100%;
  /* [1] */
  font-style: italic;
  /* [2] */
  vertical-align: middle;
  /* [3] */ }

/**
 * 1. Google Maps breaks if `max-width: 100%` acts upon it; use their selector
 *    to remove the effects.
 * 2. If a `width` and/or `height` attribute have been explicitly defined, let’s
 *    not make the image fluid.
 */
.gm-style img,
img[width],
img[height] {
  /* [2] */
  max-width: none; }

/*------------------------------------*    #PAGE
\*------------------------------------*/
/**
 * High-, page-level styling.
 *
 * 1. Set the default `font-size` and `line-height` for the entire project,
 *    sourced from our default variables. The `font-size` is calculated to exist
 *    in ems, the `line-height` is calculated to exist unitlessly.
 * 2. Force scrollbars to always be visible to prevent awkward ‘jumps’ when
 *    navigating between pages that do/do not have enough content to produce
 *    scrollbars naturally.
 * 3. Ensure the page always fills at least the entire height of the viewport.
 * 4. Prevent certain mobile browsers from automatically zooming fonts.
 * 5. Fonts on OSX will look more consistent with other systems that do not
 *    render text using sub-pixel anti-aliasing.
 */
html {
  font-size: 1em;
  /* [1] */
  line-height: 1.5;
  /* [1] */
  background-color: #fff;
  color: #4C4945;
  overflow-y: scroll;
  /* [2] */
  min-height: 100%;
  /* [3] */
  -webkit-text-size-adjust: 100%;
  /* [4] */
  -ms-text-size-adjust: 100%;
  /* [4] */
  -moz-osx-font-smoothing: grayscale;
  /* [5] */
  -webkit-font-smoothing: antialiased;
  /* [5] */ }

/*------------------------------------*    #PAGE
\*------------------------------------*/
html {
  font-family: "Lato", sans-serif;
  font-weight: 300;
  min-height: 100vh;
  overflow-y: scroll; }
  @media screen and (max-width: 44.9375em) {
    html {
      font-size: 14px; } }

html, body {
  width: 100%;
  max-width: 100%;
  overflow-x: hidden; }

body {
  height: 100%;
  overflow-y: auto; }

/*------------------------------------*    #WRAPPERS
\*------------------------------------*/
.wrapper {
  max-width: 1100px;
  margin: 0 auto;
  padding-right: 12px;
  padding-left: 12px; }
  @media screen and (min-width: 45em) {
    .wrapper {
      padding-right: 24px;
      padding-left: 24px; } }

/**
 * This is a bit of a magic number; a wrapper this wide will allow us to ‘hang’
 * one icon out of the rest of the page’s ‘grid’. It is used primarily on the
 * home page promo boxes.
 */
.wrapper--wide {
  max-width: 1276px; }

/*------------------------------------*    #BLOCK
\*------------------------------------*/
/**
 * The block object simply stacks an image on top of some text-like content.
 */
/**
 * Stacked image-with-text object. A simple abstraction to cover a very commonly
 * occurring design pattern.
 */
.block {
  display: block; }

/**
     * 1. Eliminate whitespace around images.
     */
.block__img {
  vertical-align: middle;
  /* [1] */
  margin-bottom: 24px; }

/**
     * Text-content.
     */
.block__body {
  display: block; }

/*------------------------------------*    #BOX
\*------------------------------------*/
/**
 * The box object simply boxes off content.
 */
/**
 * 1. So we can apply the `.box` class to naturally-inline elements.
 */
.box {
  display: block;
  /* [1] */
  padding: 24px; }
  .box > :last-child {
    margin-bottom: 0; }

/*------------------------------------*    #BUTTONS
\*------------------------------------*/
/**
 * A simple button object.
 */
/**
 * 1. Allow us to style box model properties.
 * 2. Line different sized buttons up a little nicer.
 * 3. Make buttons inherit font styles (often necessary when styling `input`s as
 *    buttons).
 * 4. Reset/normalize some styles.
 * 5. Force all button-styled elements to appear clickable.
 * 6. Fixes odd inner spacing in IE7.
 * 7. Subtract the border size from the padding value so that buttons do not
 *    grow larger as we add borders.
 */
.btn {
  display: inline-block;
  /* [1] */
  vertical-align: middle;
  /* [2] */
  font: inherit;
  /* [3] */
  text-align: center;
  /* [4] */
  margin: 0;
  /* [4] */
  cursor: pointer;
  /* [5] */
  overflow: visible;
  /* [6] */
  padding: 11px 23px;
  /* [7] */
  background-color: #FE5900;
  border: 1px solid #FE5900;
  border-radius: 5px; }
  .btn, .btn:hover, .btn:active, .btn:focus {
    text-decoration: none;
    /* [4] */
    color: #fff; }

/**
 * Fix a Firefox bug whereby `input type="submit"` gains 2px extra padding.
 */
.btn::-moz-focus-inner {
  border: 0;
  padding: 0; }

/**
     * Small buttons.
     */
.btn--small {
  padding: 5px 11px;
  /* [7] */ }

/**
     * Full-width buttons.
     */
.btn--full {
  width: 100%; }

/*------------------------------------*    #FLAG
\*------------------------------------*/
/**
 * The flag object is a design pattern similar to the media object, however it
 * utilises `display: table[-cell];` to give us control over the vertical
 * alignments of the text and image. csswizardry.com/2013/05/the-flag-object
 */
/**
 * 1. Allows us to control vertical alignments
 * 2. Force the object to be the full width of its parent. Combined with [1],
 *    this makes the object behave in a quasi-`display: block;` manner.
 */
.flag {
  display: table;
  /* [1] */
  width: 100%;
  /* [2] */ }

/**
     * Items within a flag object. There should only ever be one of each.
     *
     * 1. Default to aligning content to their middles.
     */
.flag__img,
.flag__body {
  display: table-cell;
  vertical-align: middle;
  /* [1] */ }

/**
     * Flag images have a space between them and the body of the object.
     */
.flag__img {
  padding-right: 24px; }
  .flag__img > img {
    display: block;
    max-width: none; }

/**
     * The container for the main content of the flag object.
     *
     * 1. Forces the `.flag__body` to take up all remaining space.
     */
.flag__body {
  width: 100%;
  /* [1] */ }
  .flag__body,
  .flag__body > :last-child {
    margin-bottom: 0; }

/**
     * Reversed flag objects have their image-content to the right, and text-content
     * to the left.
     *
     * 1. Swap the rendered direction of the object…
     * 2. …and reset it.
     * 3. Reassign margins to the correct sides.
     */
.flag--rev {
  direction: rtl;
  /* [1] */ }
  .flag--rev > .flag__img,
  .flag--rev > .flag__body {
    direction: ltr;
    /* [2] */ }
  .flag--rev > .flag__img {
    padding-right: 0;
    /* [3] */
    padding-left: 24px;
    /* [3] */ }

/**
     * Responsive flag objects.
     *
     * There is a very pragmatic, simple implementation of a responsive flag
     * object, which simply places the text-content beneath the image-content.
     *
     * We use a `max-width` media query because:
     *
     * a) it is the least verbose method in terms of amount of code required.
     * b) the flag object’s default state is image-next-to-text, so its stacked
     *    state is the exception, rather than the rule.
     */
@media screen and (max-width: 479px) {
  .flag--responsive {
    /**
                 * Disable reversal of content because there is no concept of
                 * ‘reversed’ in a stacked layout.
                 */
    direction: ltr;
    /**
             * Rework the spacings on regular flag objects.
             */ }
    .flag--responsive,
    .flag--responsive > .flag__img,
    .flag--responsive > .flag__body {
      display: block; }
    .flag--responsive > .flag__img {
      padding-right: 0;
      padding-left: 0;
      margin-bottom: 24px; } }

/*------------------------------------*    #LAYOUT
\*------------------------------------*/
/**
 * The inuitcss layout system uses `box-sizing: border-box;` and
 * `display: inline-block;` to create an extremely powerful, flexible
 * alternative to the traditional grid system. Combine the layout items with
 * the widths found in `trumps.widths`.
 */
/**
 * Begin a layout group.
 */
.layout {
  list-style: none;
  margin: 0;
  padding: 0;
  margin-left: -24px; }

/**
     * 1. Cause columns to stack side-by-side.
     * 2. Space columns apart.
     * 3. Align columns to the tops of each other.
     * 4. Full-width unless told to behave otherwise.
     * 5. Required to combine fluid widths and fixed gutters.
     */
.layout__item {
  display: inline-block;
  /* [1] */
  padding-left: 24px;
  /* [2] */
  vertical-align: top;
  /* [3] */
  width: 100%;
  /* [4] */ }

/**
     * Layouts with large gutters.
     */
.layout--large {
  margin-left: -48px; }
  .layout--large > .layout__item {
    padding-left: 48px; }

/**
     * Align layout items to the vertical centers of each other.
     */
.layout--middle > .layout__item {
  vertical-align: middle; }

/**
     * Align layout items to the vertical bottoms of each other.
     */
.layout--bottom > .layout__item {
  vertical-align: bottom; }

/**
     * Make the layout items fill up from the center outward.
     */
.layout--center {
  text-align: center; }
  .layout--center > .layout__item {
    text-align: left; }

/*------------------------------------*    #LIST-BARE
\*------------------------------------*/
/**
 * The list-bare object simply removes any indents and bullet points from lists.
 */
.list-bare {
  margin: 0;
  padding: 0;
  list-style: none; }

/*------------------------------------*    #LIST-BLOCK
\*------------------------------------*/
/**
 * The list-block object creates blocky list items out of a `ul` or `ol`.
 */
.list-block {
  margin: 0;
  padding: 0;
  list-style: none; }

.list-block__item,
.list-block > li {
  padding: 24px; }

/*------------------------------------*    #LIST-INLINE
\*------------------------------------*/
/**
 * The list-inline object simply displays a list of items in one line.
 */
.list-inline {
  margin: 0;
  padding: 0;
  list-style: none; }
  .list-inline > li {
    display: inline-block; }

/*------------------------------------*    #LIST-UI
\*------------------------------------*/
/**
 * The UI list object creates blocky list items with a keyline separator out of
 * a `ul` or `ol`.
 */
.list-ui,
.list-ui__item,
.list-ui > li {
  border: 0 solid #ddd; }

.list-ui {
  margin: 0;
  padding: 0;
  list-style: none;
  border-top-width: 1px; }

.list-ui__item,
.list-ui > li {
  padding: 24px;
  border-bottom-width: 1px; }

/**
     * Small list-uis.
     */
.list-ui--small > .list-ui__item,
.list-ui.list-ui--small > li {
  padding: 12px; }

/*------------------------------------*    #BLOCK
\*------------------------------------*/
/**
 * The block object simply stacks an image on top of some text-like content.
 */
/**
 * Stacked image-with-text object. A simple abstraction to cover a very commonly
 * occurring design pattern.
 */
.block {
  display: block; }

/**
     * 1. Eliminate whitespace around images.
     */
.block__img {
  vertical-align: middle;
  /* [1] */
  margin-bottom: 24px; }

/**
     * Text-content.
     */
.block__body {
  display: block; }

/**
     * Center-aligned blocks.
     */
.block--center {
  text-align: center; }

/**
     * Left-aligned blocks.
     */
.block--list {
  display: table-row; }
  .block--list > .block__img,
  .block--list > .block__body {
    display: table-cell; }

/*------------------------------------*    #MEDIA
\*------------------------------------*/
/**
 * Place any image- and text-like content side-by-side, as per:
 * stubbornella.org/content/2010/06/25/the-media-object-saves-hundreds-of-lines-of-code
 */
.media {
  display: block; }

.media__img {
  float: left;
  margin-right: 24px; }
  .media__img > img {
    display: block; }

.media__body {
  overflow: hidden;
  display: block; }
  .media__body,
  .media__body > :last-child {
    margin-bottom: 0; }

/*------------------------------------*    #PACK
\*------------------------------------*/
/**
 * The pack object simply causes any number of elements pack up horizontally to
 * automatically fill an equal, fluid width of their parent.
 */
/**
 * 1. Fill all available space.
 * 2. Cause children to be automatically equally sized.
 */
.pack {
  width: 100%;
  /* [1] */
  display: table;
  table-layout: fixed;
  /* [2] */ }

/**
     * Cause children to adopt table-like structure.
     */
.pack__item {
  display: table-cell; }

/*------------------------------------*    #TABLES
\*------------------------------------*/
.table {
  width: 100%; }

/*------------------------------------*    #TABS
\*------------------------------------*/
/**
 * A simple abstraction for making equal-width navigation tabs.
 */
/**
 * 1. Reset any residual styles (most likely from lists).
 * 2. Tables for layout!
 * 3. Force all `table-cell` children to have equal widths.
 * 4. Force the object to be the full width of its parent. Combined with [2],
 *    this makes the object behave in a quasi-`display: block;` manner.
 */
.tabs {
  margin: 0;
  /* [1] */
  padding: 0;
  /* [1] */
  list-style: none;
  /* [1] */
  display: table;
  /* [2] */
  table-layout: fixed;
  /* [3] */
  width: 100%;
  /* [4] */
  text-align: center; }

.tabs__item {
  display: table-cell;
  /* [2] */ }

.tabs__link {
  display: block; }

/*------------------------------------*    #PAGE-HEAD
\*------------------------------------*/
/**
 * The site’s main page-head can have two different states:
 *
 * 1) Regular page-head with no backgrounds or extra treatments; it just
 *    contains the logo and nav.
 * 2) A masthead that has a fluid-height (becoming fixed after a certain point)
 *    which has a large background image, and some supporting text.
 *
 * The regular page-head is incredibly simple, but the masthead version has some
 * slightly intermingled dependency with the wrapper that lives inside it.
 */
/**
 * 1. A slightly smaller padding on smaller viewports.
 * 2. Grow to full-sized padding on large enough viewports.
 */
.page-head {
  padding-top: 12px;
  /* [1] */
  padding-bottom: 12px;
  /* [1] */
  background-color: transparent;
  min-height: 300px; }
  @media screen and (min-width: 45em) {
    .page-head {
      padding-top: 24px;
      /* [2] */
      padding-bottom: 24px;
      /* [2] */ } }
  .page-head.triangle:before {
    background-color: #4C4945; }

/**
 * Large site headers act more like mastheads. They have a faux-fluid-height
 * which is controlled by the wrapping element inside it.
 *
 * 1. Mastheads will typically have dark backgrounds, so we need to make sure
 *    the contrast is okay. This value is subject to change as the background
 *    image changes.
 * 2. We need to delegate a lot of the masthead’s layout to its wrapper element
 *    rather than the masthead itself: it is to this wrapper that most things
 *    are positioned.
 * 3. The wrapper needs positioning context for us to lay our nav and masthead
 *    text in.
 * 4. Faux-fluid-height technique: simply create the illusion of fluid height by
 *    creating space via a percentage padding, and then position everything over
 *    the top of that. This percentage gives us a 16:9 ratio.
 * 5. When the viewport is at 758px wide, our 16:9 ratio means that the masthead
 *    is currently rendered at 480px high. Let’s…
 * 6. …seamlessly snip off the fluid feature at this height, and…
 * 7. …fix the height at 480px. This means that we should see no jumps in height
 *    as the masthead moves from fluid to fixed. This actual value takes into
 *    account the padding and the top border on the header itself.
 */
.page-head--masthead {
  background: url(/assets/hero_bg.jpg) center center #2e2620;
  background-size: cover;
  background-position: bottom left;
  color: #fff;
  /* [1] */
  position: relative; }
  .page-head--masthead > .wrapper {
    /* [2] */
    position: relative;
    /* [3] */
    min-height: 320px;
    height: 40vh;
    /* [7] */
    padding-right: 6px;
    padding-left: 6px; }
    @media screen and (min-width: 45em) {
      .page-head--masthead > .wrapper {
        min-height: 400px;
        height: 60vh;
        /* [7] */ } }
  .page-head--masthead:before {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz4KICAgIDxzdG9wIG9mZnNldD0iMzAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=);
    background: linear-gradient(to bottom, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.1) 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#80000000', endColorstr='#00000000',GradientType=0 ); }

/**
 * Mastheads will have some large text in them. Let’s position that bottom-left.
 */
.page-head__text {
  margin: 0;
  position: absolute;
  bottom: 0;
  left: auto;
  color: #fff;
  font-size: 24px;
  font-size: 1.5rem;
  line-height: 1; }
  @media screen and (min-width: 45em) {
    .page-head__text {
      font-size: 48px;
      font-size: 3rem;
      line-height: 1; } }
  @media screen and (min-width: 64em) {
    .page-head__text {
      font-size: 72px;
      font-size: 4.5rem;
      line-height: 1; } }

@-webkit-keyframes fadeEntranceExit {
  0% {
    opacity: 0;
    -webkit-transform: translateX(-80px);
            transform: translateX(-80px); }
  30% {
    opacity: 1;
    -webkit-transform: translateX(0);
            transform: translateX(0); }
  80% {
    opacity: 1;
    -webkit-transform: translateX(0);
            transform: translateX(0); }
  100% {
    opacity: 0;
    -webkit-transform: translateX(80px);
            transform: translateX(80px); } }

@keyframes fadeEntranceExit {
  0% {
    opacity: 0;
    -webkit-transform: translateX(-80px);
            transform: translateX(-80px); }
  30% {
    opacity: 1;
    -webkit-transform: translateX(0);
            transform: translateX(0); }
  80% {
    opacity: 1;
    -webkit-transform: translateX(0);
            transform: translateX(0); }
  100% {
    opacity: 0;
    -webkit-transform: translateX(80px);
            transform: translateX(80px); } }

.page-head__copy {
  position: absolute;
  top: 40%;
  left: 0;
  right: 0;
  text-align: center;
  margin-top: -12px;
  text-transform: uppercase;
  font-weight: 800;
  font-size: 22px;
  font-size: 1.375rem;
  line-height: 1.09091;
  color: #fff;
  opacity: 0;
  text-shadow: 1px 2px 4px rgba(0, 0, 0, 0.8);
  -webkit-animation-name: fadeEntranceExit;
          animation-name: fadeEntranceExit;
  -webkit-animation-duration: 4s;
          animation-duration: 4s;
  -webkit-animation-delay: 1s;
          animation-delay: 1s;
  -webkit-animation-fill-mode: forwards;
          animation-fill-mode: forwards;
  -webkit-animation-timing-function: ease;
          animation-timing-function: ease; }
  @media screen and (min-width: 45em) {
    .page-head__copy {
      font-size: 36px;
      font-size: 2.25rem;
      line-height: 1.33333; } }

/*------------------------------------*    #HERO
\*------------------------------------*/
.hero {
  position: relative; }

.hero__img-wrapper {
  text-align: right; }

.hero__img {
  margin: 96px auto 48px;
  padding: 0 24px;
  display: block;
  max-width: 300px; }
  @media screen and (min-width: 45em) {
    .hero__img {
      margin: 0 0 24px 0;
      display: inline-block; } }

.hero__heading {
  font-size: 48px;
  font-size: 3rem;
  line-height: 1.2;
  font-size: 6.66667vw;
  margin-bottom: 48px; }
  @media (min-width: 1100px) {
    .hero__heading {
      font-size: 48px;
      font-size: 3rem;
      line-height: 1.2; } }

.hero__copy {
  font-size: 18px;
  font-size: 1.125rem;
  line-height: 1.5;
  margin-bottom: 48px; }
  @media screen and (min-width: 64em) {
    .hero__copy {
      font-size: 22px;
      font-size: 1.375rem;
      line-height: 1.5; } }

.hero__logo {
  max-width: 180px;
  width: 40vw;
  display: inline-block;
  position: relative;
  margin-bottom: 12px; }
  @media screen and (min-width: 45em) {
    .hero__logo {
      width: 180px;
      margin-bottom: 24px; } }

.hero__emblems {
  text-align: center; }
  @media screen and (min-width: 45em) {
    .hero__emblems {
      text-align: right; } }

.hero__emblem {
  height: 52px;
  margin: 0 24px 48px; }
  @media screen and (min-width: 45em) {
    .hero__emblem {
      margin-left: 24px;
      height: 52px; } }

/*------------------------------------*    #BANDS
\*------------------------------------*/
.band {
  padding-top: 24px;
  padding-bottom: 24px;
  margin-top: -2px; }
  @media screen and (min-width: 64em) {
    .band {
      padding-top: 48px;
      padding-bottom: 48px; } }

.band--large {
  padding-top: 48px;
  padding-bottom: 48px; }

.band--highlight {
  background-color: #fff; }

.band--tint {
  background-color: #f2f2f2; }

.band--dark {
  background-color: #4C4945;
  color: #9B9B9B; }

/*------------------------------------*    #PAGE-FOOT
\*------------------------------------*/
.page-foot {
  font-size: 12px;
  font-size: 0.75rem;
  line-height: 2;
  padding-bottom: 0; }
  @media screen and (min-width: 64em) {
    .page-foot {
      padding-bottom: 24px; } }

/*------------------------------------*    #PAGE-MICRO
\*------------------------------------*/
.page-micro {
  background-color: #fff; }
  .page-micro,
  .page-micro a {
    color: #4C4945; }

.page-micro__copy {
  font-size: 12px;
  font-size: 0.75rem;
  line-height: 2;
  display: block; }

/*------------------------------------*    #SITE-NAV
\*------------------------------------*/
.site-nav {
  font-size: 14px;
  font-size: 0.875rem;
  line-height: 1.71429;
  font-weight: 700;
  /**
     * If the site nav exists in a masthead, we absolutely position it. We have
     * to do this because the masthead has a fixed height, partially governed by
     * a faux-fluid-height technique which utilises a zeroed `height` and a
     * large `padding-top` value, ergo, we *have* to take the nav out of flow.
     */ }
  @media screen and (min-width: 45em) {
    .site-nav {
      font-size: 16px;
      font-size: 1rem;
      line-height: 1.5; } }
  .page-head--masthead .site-nav {
    position: absolute;
    top: 0;
    right: 6px;
    left: 6px; }
    @media screen and (min-width: 45em) {
      .page-head--masthead .site-nav {
        top: 0;
        right: 24px;
        left: 24px; } }

.site-nav__home {
  display: block;
  float: left; }

.site-nav__logo {
  display: block; }
  @media screen and (max-width: 44.9375em) {
    .site-nav__logo {
      width: 60px;
      height: auto;
      padding: 5px 0; } }

.site-nav__logo-fill {
  fill: #FE5900; }
  .page-head--masthead .site-nav__logo-fill {
    fill: #fff; }

/**
     * On smaller viewports, the nav is a 2x2 grid of links that lies perfectly
     * fluch with the top and bottom of the home link. On larger viewports, the
     * nav becomes a single row of links vertically centred to the logo, but
     * way over to the right.
     */
.site-nav__list {
  margin: 0;
  padding: 0;
  list-style: none;
  overflow: hidden; }
  @media screen and (min-width: 45em) {
    .site-nav__list {
      float: right;
      overflow: visible; } }

.site-nav__item {
  display: inline-block; }

.site-nav__link {
  display: block;
  padding-left: 10px;
  padding-right: 10px;
  color: #fff;
  text-transform: uppercase;
  line-height: 32px; }
  .site-nav__link:hover, .site-nav__link:active, .site-nav__link:focus {
    text-decoration: none;
    color: #FE5900; }
  @media screen and (min-width: 45em) {
    .site-nav__link {
      padding-right: 12px;
      padding-right: 12px; } }
  .page-head--masthead .site-nav__link, .page-head--masthead .site-nav__link:hover, .page-head--masthead .site-nav__link:active, .page-head--masthead .site-nav__link:focus {
    color: #fff; }

/**
             * The current state for the nav (in large-screen view) is a notched
             * out triangle lying toward the bottom of the page head. We apply
             * this styling to a silent class which we then extend out of the
             * loop below.
             */
.page--about .site-nav__about, .page--speaking .site-nav__speaking, .page--case-studies .site-nav__case-studies, .page--hire-me .site-nav__hire-me {
  color: #FE5900; }
  @media screen and (min-width: 45em) {
    .page--about .site-nav__about, .page--speaking .site-nav__speaking, .page--case-studies .site-nav__case-studies, .page--hire-me .site-nav__hire-me {
      position: relative; }
      .page--about .site-nav__about:before, .page--speaking .site-nav__speaking:before, .page--case-studies .site-nav__case-studies:before, .page--hire-me .site-nav__hire-me:before, .page--about .site-nav__about:after, .page--speaking .site-nav__speaking:after, .page--case-studies .site-nav__case-studies:after, .page--hire-me .site-nav__hire-me:after {
        content: "";
        position: absolute;
        left: 50%;
        pointer-events: none;
        border-style: solid;
        border-color: transparent; }
      .page--about .site-nav__about:before, .page--speaking .site-nav__speaking:before, .page--case-studies .site-nav__case-studies:before, .page--hire-me .site-nav__hire-me:before {
        border-width: 12px;
        border-bottom-color: #f2f2f2;
        margin-left: -12px;
        bottom: -24px; }
      .page--about .site-nav__about:after, .page--speaking .site-nav__speaking:after, .page--case-studies .site-nav__case-studies:after, .page--hire-me .site-nav__hire-me:after {
        border-width: 11px;
        border-bottom-color: #fff;
        margin-left: -11px;
        bottom: -25px; } }

/*------------------------------------*    #BUTTONS
\*------------------------------------*/
.btn {
  transition: 0.2s;
  line-height: 1;
  text-transform: uppercase; }
  .btn:hover, .btn:active, .btn:focus {
    background-color: #cb4700;
    border-color: #cb4700; }

.btn--secondary {
  background: none;
  color: #FE5900; }

.btn--positive {
  font-weight: 300; }
  .btn--positive, .btn--positive:hover, .btn--positive:active, .btn--positive:focus {
    background-color: #3f990f;
    border-color: #3f990f; }

/*------------------------------------*    #BOXES
\*------------------------------------*/
.box {
  border-radius: 5px; }

.box--highlight {
  background-color: #fff;
  border-bottom: 1px solid #ddd; }

.box--tint {
  background-color: #f2f2f2; }

/*------------------------------------*    #POST
\*------------------------------------*/
.post__date {
  display: block;
  color: #87807A;
  margin-bottom: 0; }

.post__title {
  margin-bottom: 0; }
  .post__title > a {
    font-weight: 300; }

/*------------------------------------*    #PULL-QUOTE
\*------------------------------------*/
.pull-quote {
  font-size: 20px;
  font-size: 1.25rem;
  line-height: 1.2;
  color: #87807A;
  padding-left: 12px;
  border-left: 12px solid #f2f2f2;
  margin-right: 0;
  margin-left: 0; }
  @media screen and (min-width: 45em) {
    .pull-quote {
      margin-left: -24px; } }

.pull-quote__source {
  font-style: normal; }

/**
 * Banner-style quotes, used primarily in the homepage carousel. Unfortunately
 * we need to undo a few things that we’d already set previously.
 */
.pull-quote--banner {
  max-width: 26em;
  padding: 0 12px;
  text-indent: 0;
  border-left: none;
  margin: 0 auto;
  color: #4C4945;
  font-style: normal; }
  @media screen and (min-width: 45em) {
    .pull-quote--banner {
      font-size: 32px;
      font-size: 2rem;
      line-height: 1.4; } }

/**
 * Pull quotes that sit within the context of their surrounding copy.
 */
@media screen and (min-width: 45em) {
  .pull-quote--context {
    width: 50%;
    float: left;
    margin-right: 24px; } }

@media screen and (min-width: 45em) {
  .pull-quote--context-alt {
    width: 50%;
    float: right;
    margin-left: 24px; } }

/*------------------------------------*    #CAROUSEL
\*------------------------------------*/
.carousel {
  overflow: hidden;
  width: 100%;
  text-align: center; }

.carousel__panes {
  margin: 0;
  padding: 0;
  list-style: none;
  position: relative;
  display: table;
  width: 500%;
  overflow: hidden;
  -webkit-filter: blur(0);
  -moz-filter: blur(0);
  filter: blur(0);
  -webkit-animation: carousel 45s alternate infinite;
  animation: carousel 45s alternate infinite; }

.carousel__panes:hover {
  -webkit-animation-play-state: paused;
  animation-play-state: paused; }

.carousel__pane {
  position: relative;
  display: table-cell;
  vertical-align: middle;
  width: 20%;
  /* 100 / number of panes */ }

.carousel__link {
  color: inherit;
  border-bottom: 1px solid #ddd;
  font-weight: 300;
  transition: 0.2s border-color; }
  .carousel__link:hover, .carousel__link:active, .carousel__link:focus {
    text-decoration: none;
    border-bottom-color: #c4c4c4; }

/**
 * Scroll the carousel (all hard-coded; yuk!) and apply a subtle blur to imply
 * motion/speed. Equation for the carousel’s transitioning and delayed points in
 * order to complete an entire animation (i.e. 100%):
 *
 * nx + (n-1)y = 100
 *
 * where n is the number of slides, x is the percentage of the animation spent
 * static, and y is the percentage of the animation spent animating.
 *
 * This carousel has five panes, so:
 *
 * 5x + (5-1)y = 100
 *
 * To work out y if we know n and decide on a value for x:
 *
 * (100 - (n * x)) / n-1 = y
 *
 * If we choose that x equals 17.5 (i.e. a frame spends 17.5% of the animation’s
 * total time *not* animating), and we know that n equals 5, then y = 3.125:
 *
 * (100 - (5 * 17.5)) / 4 = 3.125
 *
 * Static for 17.5%, transition for 3.125%, and so on, until we hit 100%.
 *
 * If we were to choose that x equals 15, then we would find that y equals 6.25:
 *
 * (100 - (5 * 15)) / 4 = 6.25
 *
 * If y comes out as zero-or-below, it means the number we chose for x was too
 * large: pick again.
 *
 * N.B. We also include a halfway point in the middle of our transitioning
 *      frames to which we apply a subtle blur. This number is derived from:
 *
 *      (a * x) + (a-1 * y) + (y / 2)
 *
 *      where a is the frame in question (out of n frames).
 *
 *      The halfway point between frames 3 and 4 is:
 *
 *      (3 * 17.5) + (2 * 3.125) + (3.125 / 2) = 60.3125
 *
 * I’m pretty sure this is all a mess. To any kind person reading this who would
 * be able to improve it, I would be very grateful if you would advise :)
 */
@-webkit-keyframes carousel {
  0%,
  17.5% {
    -webkit-transform: translate3d(0, 0, 0);
    -webkit-filter: blur(0); }
  20.625%,
  38.125% {
    -webkit-transform: translate3d(-20%, 0, 0);
    -webkit-filter: blur(0); }
  41.25%,
  58.75% {
    -webkit-transform: translate3d(-40%, 0, 0);
    -webkit-filter: blur(0); }
  61.875%,
  79.375% {
    -webkit-transform: translate3d(-60%, 0, 0);
    -webkit-filter: blur(0); }
  82.5%,
  100% {
    -webkit-transform: translate3d(-80%, 0, 0);
    -webkit-filter: blur(0); }
  19.0625%,
  39.6875%,
  60.3125%,
  80.9375% {
    -webkit-filter: blur(2px); } }

@keyframes carousel {
  0%,
  17.5% {
    -webkit-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0);
    -webkit-filter: blur(0);
            filter: blur(0); }
  20.625%,
  38.125% {
    -webkit-transform: translate3d(-20%, 0, 0);
            transform: translate3d(-20%, 0, 0);
    -webkit-filter: blur(0);
            filter: blur(0); }
  41.25%,
  58.75% {
    -webkit-transform: translate3d(-40%, 0, 0);
            transform: translate3d(-40%, 0, 0);
    -webkit-filter: blur(0);
            filter: blur(0); }
  61.875%,
  79.375% {
    -webkit-transform: translate3d(-60%, 0, 0);
            transform: translate3d(-60%, 0, 0);
    -webkit-filter: blur(0);
            filter: blur(0); }
  82.5%,
  100% {
    -webkit-transform: translate3d(-80%, 0, 0);
            transform: translate3d(-80%, 0, 0);
    -webkit-filter: blur(0);
            filter: blur(0); }
  19.0625%,
  39.6875%,
  60.3125%,
  80.9375% {
    -webkit-filter: blur(2px);
            filter: blur(2px); } }

/*------------------------------------*    #ICONIC
\*------------------------------------*/
.iconic {
  width: 64px;
  height: 64px; }
  .iconic path {
    fill: #ddd; }

/*------------------------------------*    #SPRITES
\*------------------------------------*/
/**
 * A simple spriting element abstraction.
 *
 * 1. The default width of most icons on the web. Override as necessary.
 * 2. Align all sprites to the middles of whatever content they are alongside.
 * 3. Although we have used `vertical-align: middle;`, we often need to nudge
 *    sprites up by a pixel to have them look correct optically.
 * 4. Hide any text that we might be image-replacing.
 */
.sprite {
  display: inline-block;
  width: 16px;
  /* [1] */
  height: 16px;
  /* [1] */
  vertical-align: middle;
  /* [2] */
  position: relative;
  /* [3] */
  top: -1px;
  /* [3] */
  white-space: nowrap;
  /* [4] */
  overflow: hidden;
  /* [4] */
  text-indent: 100%;
  /* [4] */
  background-image: url(../img/css/sprites/main.png); }

.sprite--uk {
  height: 11px; }

.sprite--nl {
  background-position: -16px 0;
  height: 11px; }

.sprite--de {
  background-position: -32px 0;
  height: 11px; }

.sprite--hr {
  background-position: -48px 0;
  height: 11px; }

.sprite--no {
  background-position: 0 -11px;
  height: 11px; }

.sprite--pl {
  background-position: -16px -11px;
  height: 11px; }

.sprite--ro {
  background-position: -32px -11px;
  height: 11px; }

.sprite--ch {
  background-position: -48px -11px;
  height: 11px; }

.sprite--fr {
  background-position: -64px 0;
  height: 11px; }

.sprite--rs {
  background-position: -64px -11px;
  height: 11px; }

.sprite--au {
  background-position: -80px 0;
  height: 11px; }

.sprite--it {
  background-position: -80px -11px;
  height: 11px; }

.sprite--fi {
  background-position: -96px 0;
  height: 11px; }

.sprite--uy {
  background-position: -96px -11px;
  height: 11px; }

/*------------------------------------*    #FEATURE-LIST
\*------------------------------------*/
.feature-list {
  list-style: none;
  padding: 0;
  margin: 0; }

.feature-list__item {
  display: inline-block;
  vertical-align: top;
  position: relative;
  min-height: 120px;
  margin-bottom: 1em;
  padding-left: 100px; }
  @media screen and (min-width: 45em) {
    .feature-list__item {
      width: 50%;
      padding: 0 .5em;
      text-align: center; } }
  @media screen and (min-width: 64em) {
    .feature-list__item {
      width: 33.333333%;
      padding: 0 .5em;
      text-align: center; } }

.feature-list__img {
  position: absolute;
  width: 80px;
  height: 80px;
  left: 0;
  top: 0;
  transition: -webkit-transform .2s ease-in-out;
  transition: transform .2s ease-in-out; }
  @media screen and (min-width: 45em) {
    .feature-list__img {
      width: 160px;
      height: 160px;
      margin-bottom: 2em;
      position: static; } }

/*------------------------------------*    #FEATURE-LIST
\*------------------------------------*/
/**
 * The feature list component houses large, showcase-style blocks of content. It
 * is currently used on the Case Studies page.
 */
.gallery-list {
  padding: 0;
  list-style: none;
  background-color: inherit;
  margin-left: 0;
  margin-bottom: 4em; }
  @media screen and (min-width: 64em) {
    .gallery-list {
      overflow: hidden;
      margin-top: 9em;
      margin-left: -3%;
      margin-right: -3%;
      -webkit-transform: rotate(5deg);
          -ms-transform: rotate(5deg);
              transform: rotate(5deg); } }

.gallery-list__item {
  position: relative;
  background: inherit;
  height: 280px; }
  .gallery-list__item:before, .gallery-list__item:after {
    content: '';
    display: block;
    position: absolute;
    height: 100px;
    width: 4000px;
    background-color: inherit;
    z-index: 1;
    -webkit-transform: rotate(5deg);
        -ms-transform: rotate(5deg);
            transform: rotate(5deg); }
  .gallery-list__item:before {
    -webkit-transform-origin: 0 100%;
        -ms-transform-origin: 0 100%;
            transform-origin: 0 100%;
    right: 0;
    top: -220px;
    left: 50%;
    margin-left: -2000px; }
  .gallery-list__item:after {
    -webkit-transform-origin: 0 100%;
        -ms-transform-origin: 0 100%;
            transform-origin: 0 100%;
    bottom: 130px;
    right: 0;
    left: 50%;
    margin-left: -2000px; }
  @media screen and (min-width: 64em) {
    .gallery-list__item {
      float: left;
      width: 33.333333333%;
      /* [1] */
      -webkit-transform: rotate(-5deg);
          -ms-transform: rotate(-5deg);
              transform: rotate(-5deg);
      height: 360px; }
      .gallery-list__item:before, .gallery-list__item:after {
        display: none; }
      .gallery-list__item:nth-child(3n + 1):nth-last-child(2), .gallery-list__item:nth-child(3n + 1):nth-last-child(2) + li {
        width: 50%; }
      .gallery-list__item:nth-child(3n+1):last-child {
        width: 100%; } }

/**
         * 1. Faux fluid height in 16:9 ratio.
         * 2. Space items apart by two pixels…
         * 3. …except the first row and first column.
         */
.gallery-list__link {
  position: absolute;
  display: block;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #FE5900;
  background-size: cover;
  background-position: center center;
  background-repeat: no-repeat; }
  .gallery-list__link:hover .gallery-list__title {
    -webkit-transform: scale3d(1.05, 1.05, 1) translateY(-50%);
            transform: scale3d(1.05, 1.05, 1) translateY(-50%); }
  @media screen and (min-width: 64em) {
    .gallery-list__link {
      top: -20%;
      bottom: -20%; } }

.gallery-list__state {
  display: none; }
  .gallery-list__state:checked + .gallery-list__reveal {
    visibility: visible;
    opacity: 1; }
  .gallery-list__state:checked ~ .gallery-list__title {
    position: fixed;
    z-index: 10;
    -webkit-transform: scale3d(1.05, 1.05, 1) translateY(-50%);
            transform: scale3d(1.05, 1.05, 1) translateY(-50%); }

.gallery-list__close {
  display: none; }
  .gallery-list__close:checked + .gallery-list__close-btn {
    display: none; }
  .gallery-list__close:not(:checked) ~ .gallery-list__container .tint {
    -webkit-filter: none;
            filter: none;
    -webkit-transform: none;
        -ms-transform: none;
            transform: none; }
  .gallery-list__close:not(:checked) ~ .gallery-list__container .triangle {
    z-index: inherit; }
  .gallery-list__close:not(:checked) ~ .gallery-list__container .gallery-list, .gallery-list__close:not(:checked) ~ .gallery-list__container .gallery-list__item {
    -webkit-transform: none;
        -ms-transform: none;
            transform: none; }
  .gallery-list__close:not(:checked) + .gallery-list__close-btn {
    display: block; }

.gallery-list__container {
  height: auto; }

.gallery-list__close-btn {
  position: fixed;
  right: 12px;
  top: 12px;
  background-color: rgba(0, 0, 0, 0.5);
  color: white;
  border: 2px solid white;
  z-index: 9;
  padding: 5px 10px;
  border-radius: 5px;
  font-weight: bold; }

.gallery-list__reveal {
  opacity: 0;
  visibility: hidden;
  width: 100%;
  height: 100%;
  display: block;
  position: fixed;
  z-index: 8;
  left: 0;
  top: 0;
  background-color: black;
  background-size: cover;
  background-position: center center;
  background-repeat: no-repeat; }

/**
             * Sit link text over the top of the list item.
             *
             * 1. Center the text-box vertically in the list item.
             * 2. Optically sit the text itself centrally in the list item.
             */
.gallery-list__title {
  font-size: 16px;
  font-size: 1rem;
  line-height: 1.5;
  font-weight: 700;
  text-align: center;
  position: absolute;
  top: 50%;
  /* [1] */
  right: 0;
  left: 0;
  padding: 12px 48px;
  -webkit-transform: translateY(-50%);
      -ms-transform: translateY(-50%);
          transform: translateY(-50%);
  color: #fff;
  text-transform: uppercase;
  transition: all .5s ease-in-out;
  margin: 0;
  text-shadow: 0px 0px 12px rgba(0, 0, 0, 0.8); }
  @media screen and (min-width: 64em) {
    .gallery-list__title {
      font-size: 20px;
      font-size: 1.25rem;
      line-height: 1.5; } }

.gallery-list__sub {
  display: block;
  font-size: 14px;
  font-size: 0.875rem;
  line-height: 1.71429;
  margin-top: 6px; }

/*------------------------------------*    #ANNOTATE
\*------------------------------------*/
.annotate {
  position: relative; }

.annotate__image {
  display: block;
  border-radius: 5px; }

.annotate__list {
  list-style: none;
  margin: 0;
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0; }

.annotate__item {
  position: absolute;
  width: 5%;
  height: 5%;
  overflow: hidden;
  white-space: nowrap;
  text-indent: 100%;
  cursor: help;
  border-width: 2px;
  border-style: solid;
  border-color: transparent;
  border-radius: 5px;
  transition: 0.2s; }
  .annotate:hover .annotate__item {
    border-color: #ccc;
    border-color: rgba(255, 255, 255, 0.5); }
    .annotate:hover .annotate__item:hover {
      z-index: 1;
      border-color: #fff; }

.annotate__caption {
  position: relative;
  z-index: 1; }

.triangle {
  position: relative;
  z-index: 5;
  min-height: 280px;
  margin-bottom: 100px; }
  @media screen and (min-width: 45em) {
    .triangle {
      margin-bottom: 262px; } }
  .triangle.triangle--start {
    margin-bottom: 0; }
    .triangle.triangle--start:after {
      display: none; }
  .triangle.triangle--end:before {
    display: none; }

.triangle:before, .triangle:after {
  content: '';
  display: block;
  position: absolute;
  width: 3000px;
  height: 100px;
  left: 50%;
  margin-left: -1500px;
  background-color: inherit;
  z-index: -1;
  -webkit-transform: rotate(5deg);
      -ms-transform: rotate(5deg);
          transform: rotate(5deg); }
  @media screen and (min-width: 45em) {
    .triangle:before, .triangle:after {
      height: 300px; } }

.triangle:before {
  -webkit-transform-origin: 100% 0;
      -ms-transform-origin: 100% 0;
          transform-origin: 100% 0;
  top: 80px; }
  @media screen and (min-width: 45em) {
    .triangle:before {
      top: 0; } }

.triangle:after {
  -webkit-transform-origin: 0% 100%;
      -ms-transform-origin: 0% 100%;
          transform-origin: 0% 100%;
  bottom: 80px; }
  @media screen and (min-width: 45em) {
    .triangle:after {
      bottom: 0; } }

.triangle__content--adjust {
  margin-top: -40px; }
  @media screen and (min-width: 45em) {
    .triangle__content--adjust {
      margin-top: -100px; } }
  @media screen and (min-width: 64em) {
    .triangle__content--adjust {
      margin-top: -140px; } }

.punchout {
  margin-top: -300px; }

.svg-wrapper {
  display: inline-block;
  position: relative;
  vertical-align: middle;
  width: 100%; }

.svg {
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%; }

/*------------------------------------*    #CLEARFIX
\*------------------------------------*/
/**
 * Micro clearfix, as per: css-101.org/articles/clearfix/latest-new-clearfix-so-far.php
 * Extend the clearfix class with Sass to avoid the `.clearfix` class appearing
 * over and over in your markup.
 */
.clearfix:after,
.box:after,
.media:after,
.site-nav:after,
.gallery-list:after {
  content: "";
  display: table;
  clear: both; }

/*------------------------------------*    #HEADINGS
\*------------------------------------*/
/**
 * Headings 1–6’s corresponding Greek-alphabet abstract classes for double-
 * stranded heading hierarchy: csswizardry.com/2012/02/pragmatic-practical-font-sizing-in-css
 *
 * Use these helper classes to cause other elements to adopt the styling of the
 * respective heading, e.g.:
 *
   <h2 class="alpha">Lorem ipsum</h2>
 *
 */
.alpha {
  font-size: 36px;
  font-size: 2.25rem;
  line-height: 1.33333; }

.beta {
  font-size: 30px;
  font-size: 1.875rem;
  line-height: 1.6; }

.gamma {
  font-size: 24px;
  font-size: 1.5rem;
  line-height: 1; }

.delta {
  font-size: 20px;
  font-size: 1.25rem;
  line-height: 1.2; }

.epsilon {
  font-size: 16px;
  font-size: 1rem;
  line-height: 1.5; }

.zeta {
  font-size: 14px;
  font-size: 0.875rem;
  line-height: 1.71429; }

/*------------------------------------*    #SPACING
\*------------------------------------*/
/**
 * Margin and padding helper classes. Use these to tweak layout on a micro
 * level.
 *
 * `.(m|p)(t|r|b|l|h|v)(-|+|0) {}` = margin/padding top/right/bottom/left/horizontal/vertical less/more/none
 */
/**
     * Margin helper classes.
     *
     * Add margins.
     */
.m {
  margin: 24px !important; }

.mt {
  margin-top: 24px !important; }

.mr {
  margin-right: 24px !important; }

.mb {
  margin-bottom: 24px !important; }

.ml {
  margin-left: 24px !important; }

.mh {
  margin-right: 24px !important;
  margin-left: 24px !important; }

.mv {
  margin-top: 24px !important;
  margin-bottom: 24px !important; }

/**
     * Add large margins.
     */
.m\+ {
  margin: 48px !important; }

.mt\+ {
  margin-top: 48px !important; }

.mr\+ {
  margin-right: 48px !important; }

.mb\+ {
  margin-bottom: 48px !important; }

.ml\+ {
  margin-left: 48px !important; }

.mh\+ {
  margin-right: 48px !important;
  margin-left: 48px !important; }

.mv\+ {
  margin-top: 48px !important;
  margin-bottom: 48px !important; }

/**
     * Remove margins.
     */
.m0 {
  margin: 0 !important; }

.mt0 {
  margin-top: 0 !important; }

.mr0 {
  margin-right: 0 !important; }

.mb0 {
  margin-bottom: 0 !important; }

.ml0 {
  margin-left: 0 !important; }

.mh0 {
  margin-right: 0 !important;
  margin-left: 0 !important; }

.mv0 {
  margin-top: 0 !important;
  margin-bottom: 0 !important; }

/*------------------------------------*    #SPACING-RESPONSIVE
\*------------------------------------*/
/**
 * Margin and padding helper classes. Use these to tweak layout on a micro
 * level.
 *
 * `.(m|p)(t|r|b|l|h|v)(-|+|0) {}` = margin/padding top/right/bottom/left/horizontal/vertical less/more/none
 */
/*------------------------------------*    #WIDTHS
\*------------------------------------*/
/**
 * A series of width helper classes that you can use to size things like grid
 * systems. Classes can take a fraction-like format (e.g. `.u-2/3`) or a spoken-
 * word format (e.g. `.u-2-of-3`). Use these in your markup:
 *
 * <div class="u-7/12">
 */
.u-1\/1 {
  width: 100% !important; }

.u-1\/2 {
  width: 50% !important; }

.u-1\/3 {
  width: 33.33333% !important; }

.u-2\/3 {
  width: 66.66667% !important; }

.u-1\/4 {
  width: 25% !important; }

.u-2\/4 {
  width: 50% !important; }

.u-3\/4 {
  width: 75% !important; }

.u-1\/5 {
  width: 20% !important; }

.u-2\/5 {
  width: 40% !important; }

.u-3\/5 {
  width: 60% !important; }

.u-4\/5 {
  width: 80% !important; }

/*------------------------------------*    #WIDTHS-RESPONSIVE
\*------------------------------------*/
/**
 * Responsive width classes based on your responsive settings.
 */
@media screen and (max-width: 44.9375em) {
  .u-1\/1-palm {
    width: 100% !important; }
  .u-1\/2-palm {
    width: 50% !important; }
  .u-1\/3-palm {
    width: 33.33333% !important; }
  .u-2\/3-palm {
    width: 66.66667% !important; }
  .u-1\/4-palm {
    width: 25% !important; }
  .u-2\/4-palm {
    width: 50% !important; }
  .u-3\/4-palm {
    width: 75% !important; }
  .u-1\/5-palm {
    width: 20% !important; }
  .u-2\/5-palm {
    width: 40% !important; }
  .u-3\/5-palm {
    width: 60% !important; }
  .u-4\/5-palm {
    width: 80% !important; } }

@media screen and (min-width: 45em) and (max-width: 63.9375em) {
  .u-1\/1-lap {
    width: 100% !important; }
  .u-1\/2-lap {
    width: 50% !important; }
  .u-1\/3-lap {
    width: 33.33333% !important; }
  .u-2\/3-lap {
    width: 66.66667% !important; }
  .u-1\/4-lap {
    width: 25% !important; }
  .u-2\/4-lap {
    width: 50% !important; }
  .u-3\/4-lap {
    width: 75% !important; }
  .u-1\/5-lap {
    width: 20% !important; }
  .u-2\/5-lap {
    width: 40% !important; }
  .u-3\/5-lap {
    width: 60% !important; }
  .u-4\/5-lap {
    width: 80% !important; } }

@media screen and (min-width: 45em) {
  .u-1\/1-lap-and-up {
    width: 100% !important; }
  .u-1\/2-lap-and-up {
    width: 50% !important; }
  .u-1\/3-lap-and-up {
    width: 33.33333% !important; }
  .u-2\/3-lap-and-up {
    width: 66.66667% !important; }
  .u-1\/4-lap-and-up {
    width: 25% !important; }
  .u-2\/4-lap-and-up {
    width: 50% !important; }
  .u-3\/4-lap-and-up {
    width: 75% !important; }
  .u-1\/5-lap-and-up {
    width: 20% !important; }
  .u-2\/5-lap-and-up {
    width: 40% !important; }
  .u-3\/5-lap-and-up {
    width: 60% !important; }
  .u-4\/5-lap-and-up {
    width: 80% !important; } }

@media screen and (max-width: 63.9375em) {
  .u-1\/1-portable {
    width: 100% !important; }
  .u-1\/2-portable {
    width: 50% !important; }
  .u-1\/3-portable {
    width: 33.33333% !important; }
  .u-2\/3-portable {
    width: 66.66667% !important; }
  .u-1\/4-portable {
    width: 25% !important; }
  .u-2\/4-portable {
    width: 50% !important; }
  .u-3\/4-portable {
    width: 75% !important; }
  .u-1\/5-portable {
    width: 20% !important; }
  .u-2\/5-portable {
    width: 40% !important; }
  .u-3\/5-portable {
    width: 60% !important; }
  .u-4\/5-portable {
    width: 80% !important; } }

@media screen and (min-width: 64em) {
  .u-1\/1-desk {
    width: 100% !important; }
  .u-1\/2-desk {
    width: 50% !important; }
  .u-1\/3-desk {
    width: 33.33333% !important; }
  .u-2\/3-desk {
    width: 66.66667% !important; }
  .u-1\/4-desk {
    width: 25% !important; }
  .u-2\/4-desk {
    width: 50% !important; }
  .u-3\/4-desk {
    width: 75% !important; }
  .u-1\/5-desk {
    width: 20% !important; }
  .u-2\/5-desk {
    width: 40% !important; }
  .u-3\/5-desk {
    width: 60% !important; }
  .u-4\/5-desk {
    width: 80% !important; } }

@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx) {
  .u-1\/1-retina {
    width: 100% !important; }
  .u-1\/2-retina {
    width: 50% !important; }
  .u-1\/3-retina {
    width: 33.33333% !important; }
  .u-2\/3-retina {
    width: 66.66667% !important; }
  .u-1\/4-retina {
    width: 25% !important; }
  .u-2\/4-retina {
    width: 50% !important; }
  .u-3\/4-retina {
    width: 75% !important; }
  .u-1\/5-retina {
    width: 20% !important; }
  .u-2\/5-retina {
    width: 40% !important; }
  .u-3\/5-retina {
    width: 60% !important; }
  .u-4\/5-retina {
    width: 80% !important; } }

/*------------------------------------*    #PRINT
\*------------------------------------*/
/**
 * Very crude, reset-like styles taken from the HTML5 Boilerplate:
 * https://github.com/h5bp/html5-boilerplate/blob/3c3c5e64604209a4d63e1e4c48dd245d45fadfd9/css/main.css#L200-L234
 */
@media print {
  *,
  *:before,
  *:after {
    background: transparent !important;
    color: #000 !important;
    /* Black prints faster: h5bp.com/s */
    box-shadow: none !important;
    text-shadow: none !important; }
  a,
  a:visited {
    text-decoration: underline; }
  a[href]:after {
    content: " (" attr(href) ")"; }
  abbr[title]:after {
    content: " (" attr(title) ")"; }
  /**
     * Don’t show links that are fragment identifiers, or use the `javascript:`
     * pseudo protocol.
     */
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: ""; } }

/*------------------------------------*    #SHOW-HIDE
\*------------------------------------*/
.hide {
  display: none !important;
  opacity: 0 !important;
  position: absolute !important;
  height: 1px;
  width: 1px;
  overflow: hidden;
  clip: rect(1px 1px 1px 1px);
  /* IE6, IE7 */
  clip: rect(1px, 1px, 1px, 1px); }

.show {
  display: block !important; }

@media screen and (max-width: 44.9375em) {
  .hide-palm {
    display: none !important;
    opacity: 0 !important;
    position: absolute !important;
    height: 1px;
    width: 1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px);
    /* IE6, IE7 */
    clip: rect(1px, 1px, 1px, 1px); } }

.show-palm {
  display: none; }

@media screen and (max-width: 44.9375em) {
  .show-palm {
    display: block !important; } }

@media screen and (min-width: 45em) and (max-width: 63.9375em) {
  .hide-lap {
    display: none !important;
    opacity: 0 !important;
    position: absolute !important;
    height: 1px;
    width: 1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px);
    /* IE6, IE7 */
    clip: rect(1px, 1px, 1px, 1px); } }

.show-lap {
  display: none; }

@media screen and (min-width: 45em) and (max-width: 63.9375em) {
  .show-lap {
    display: block !important; } }

@media screen and (min-width: 45em) {
  .hide-lap-and-up {
    display: none !important;
    opacity: 0 !important;
    position: absolute !important;
    height: 1px;
    width: 1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px);
    /* IE6, IE7 */
    clip: rect(1px, 1px, 1px, 1px); } }

.show-lap-and-up {
  display: none; }

@media screen and (min-width: 45em) {
  .show-lap-and-up {
    display: block !important; } }

@media screen and (max-width: 63.9375em) {
  .hide-portable {
    display: none !important;
    opacity: 0 !important;
    position: absolute !important;
    height: 1px;
    width: 1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px);
    /* IE6, IE7 */
    clip: rect(1px, 1px, 1px, 1px); } }

.show-portable {
  display: none; }

@media screen and (max-width: 63.9375em) {
  .show-portable {
    display: block !important; } }

@media screen and (min-width: 64em) {
  .hide-desk {
    display: none !important;
    opacity: 0 !important;
    position: absolute !important;
    height: 1px;
    width: 1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px);
    /* IE6, IE7 */
    clip: rect(1px, 1px, 1px, 1px); } }

.show-desk {
  display: none; }

@media screen and (min-width: 64em) {
  .show-desk {
    display: block !important; } }

@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx) {
  .hide-retina {
    display: none !important;
    opacity: 0 !important;
    position: absolute !important;
    height: 1px;
    width: 1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px);
    /* IE6, IE7 */
    clip: rect(1px, 1px, 1px, 1px); } }

.show-retina {
  display: none; }

@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx) {
  .show-retina {
    display: block !important; } }

.relative {
  position: relative; }

@media screen and (min-width: 64em) {
  .tint {
    -webkit-filter: grayscale(100%);
            filter: grayscale(100%);
    transition: -webkit-filter .2s ease-in-out;
    -webkit-transform: translateZ(0);
            transform: translateZ(0); } }

.tint:before {
  content: '';
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background-color: rgba(0, 0, 0, 0.5);
  transition: background-color .2s ease-in-out; }

.tint:hover {
  -webkit-filter: none;
          filter: none; }
  .tint:hover:before {
    background-color: rgba(0, 0, 0, 0.3); }

.section-img {
  background-size: cover;
  background-position: top center;
  background-color: white;
  height: 1028px;
  width: 100%; }
  @media screen and (max-width: 44.9375em) {
    .section-img {
      height: 720px; } }

@media screen and (min-width: 64em) {
  .footer {
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
    -webkit-align-items: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-justify-content: space-between;
        -ms-flex-pack: justify;
            justify-content: space-between; } }

.footer__credit {
  position: relative;
  margin-top: 1em; }
  @media screen and (min-width: 64em) {
    .footer__credit {
      margin-top: 0; } }

.footer__credit-copy {
  display: block;
  font-weight: normal;
  font-size: .8em;
  margin-bottom: .6em; }
  @media screen and (min-width: 64em) {
    .footer__credit-copy {
      bottom: 100%;
      position: absolute; } }

.footer__img {
  height: 40px; }

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uY3NzIiwibWFpbi5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9pbnVpdC1kZWZhdWx0cy9fc2V0dGluZ3MuZGVmYXVsdHMuc2NzcyIsIl90b29scy5taXhpbnMuc2NzcyIsIl90b29scy5hbGlhc2VzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LW5vcm1hbGl6ZS9fZ2VuZXJpYy5ub3JtYWxpemUuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtYm94LXNpemluZy9fZ2VuZXJpYy5ib3gtc2l6aW5nLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LXJlc2V0L19nZW5lcmljLnJlc2V0LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LXNoYXJlZC9fZ2VuZXJpYy5zaGFyZWQuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtaGVhZGluZ3MvX2Jhc2UuaGVhZGluZ3Muc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtbWl4aW5zL190b29scy5taXhpbnMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtcGFyYWdyYXBocy9fYmFzZS5wYXJhZ3JhcGhzLnNjc3MiLCJfYmFzZS50eXBlLnNjc3MiLCJfc2V0dGluZ3MuZ2xvYmFsLnNjc3MiLCJfc2V0dGluZ3MuY29sb3JzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LXJlc3BvbnNpdmUtdG9vbHMvX3Rvb2xzLnJlc3BvbnNpdmUuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtZnVuY3Rpb25zL190b29scy5mdW5jdGlvbnMuc2NzcyIsIl9iYXNlLmxpbmtzLnNjc3MiLCJfYmFzZS5xdW90ZXMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtbGlzdHMvX2Jhc2UubGlzdHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtaW1hZ2VzL19iYXNlLmltYWdlcy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9pbnVpdC1wYWdlL19iYXNlLnBhZ2Uuc2NzcyIsIl9iYXNlLnBhZ2Uuc2NzcyIsIl9vYmplY3RzLndyYXBwZXJzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LWJsb2NrL19vYmplY3RzLmJsb2NrLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LWJveC9fb2JqZWN0cy5ib3guc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtYnV0dG9ucy9fb2JqZWN0cy5idXR0b25zLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LWZsYWcvX29iamVjdHMuZmxhZy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9pbnVpdC1sYXlvdXQvX29iamVjdHMubGF5b3V0LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LWxpc3QtYmFyZS9fb2JqZWN0cy5saXN0LWJhcmUuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtbGlzdC1ibG9jay9fb2JqZWN0cy5saXN0LWJsb2NrLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LWxpc3QtaW5saW5lL19vYmplY3RzLmxpc3QtaW5saW5lLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LWxpc3QtdWkvX29iamVjdHMubGlzdC11aS5zY3NzIiwiX29iamVjdHMuYmxvY2suc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtbWVkaWEvX29iamVjdHMubWVkaWEuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtcGFjay9fb2JqZWN0cy5wYWNrLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LXRhYmxlcy9fb2JqZWN0cy50YWJsZXMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtdGFicy9fb2JqZWN0cy50YWJzLnNjc3MiLCJfY29tcG9uZW50cy5wYWdlLWhlYWQuc2NzcyIsIl9jb21wb25lbnRzLmhlcm8uc2NzcyIsIl9jb21wb25lbnRzLmJhbmRzLnNjc3MiLCJfY29tcG9uZW50cy5wYWdlLWZvb3Quc2NzcyIsIl9jb21wb25lbnRzLnBhZ2UtbWljcm8uc2NzcyIsIl9jb21wb25lbnRzLnNpdGUtbmF2LnNjc3MiLCJfY29tcG9uZW50cy5idXR0b25zLnNjc3MiLCJfY29tcG9uZW50cy5ib3hlcy5zY3NzIiwiX2NvbXBvbmVudHMucG9zdC5zY3NzIiwiX2NvbXBvbmVudHMucHVsbC1xdW90ZS5zY3NzIiwiX2NvbXBvbmVudHMuY2Fyb3VzZWwuc2NzcyIsIl9jb21wb25lbnRzLmljb25pYy5zY3NzIiwiX2NvbXBvbmVudHMuc3ByaXRlcy5zY3NzIiwiX2NvbXBvbmVudHMuZmVhdHVyZS1saXN0LnNjc3MiLCJfY29tcG9uZW50cy5nYWxsZXJ5LWxpc3Quc2NzcyIsIl9jb21wb25lbnRzLmFubm90YXRlLnNjc3MiLCJfY29tcG9uZW50cy50cmlhbmdsZS5zY3NzIiwiX2NvbXBvbmVudHMucHVuY2hvdXQuc2NzcyIsIl9jb21wb25lbnRzLnN2Zy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9pbnVpdC1jbGVhcmZpeC9fdHJ1bXBzLmNsZWFyZml4LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LWhlYWRpbmdzLXRydW1wcy9fdHJ1bXBzLmhlYWRpbmdzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LXNwYWNpbmcvX3RydW1wcy5zcGFjaW5nLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ludWl0LXNwYWNpbmctcmVzcG9uc2l2ZS9fdHJ1bXBzLnNwYWNpbmctcmVzcG9uc2l2ZS5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9pbnVpdC13aWR0aHMvX3RydW1wcy53aWR0aHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtdG9vbHMtd2lkdGhzL190b29scy53aWR0aHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvaW51aXQtd2lkdGhzLXJlc3BvbnNpdmUvX3RydW1wcy53aWR0aHMtcmVzcG9uc2l2ZS5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9pbnVpdC1wcmludC9fdHJ1bXBzLnByaW50LnNjc3MiLCJfdHJ1bXBzLnNob3ctaGlkZS5zY3NzIiwiX3RydW1wcy5wb3NpdGlvbnMuc2NzcyIsIl90cnVtcHMuc2hhbWUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUNBakI7d0NBRXdDO0FBRXhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrRUc7QUN0RUg7Ozs7R0FJRzs7QUN3RUg7RUFDRSxhQUFhO0VBQ2Isc0JBQWM7RUFBZCxxQkFBYztFQUFkLGNBQWM7RUFDZCxnQ0FBd0I7TUFBeEIsc0JBQXdCO1VBQXhCLHdCQUF3QjtFQUN4Qiw0QkFBb0I7TUFBcEIsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUNyQjs7QUNqRkQ7d0NBRXdDO0FDRnhDLDRFQUE0RTtBQUU1RTs7OztHQUlHO0FBRUg7RUFDRSx3QkFBd0I7RUFBRSxPQUFPO0VBQ2pDLDJCQUEyQjtFQUFFLE9BQU87RUFDcEMsK0JBQStCO0VBQUUsT0FBTyxFQUN6Qzs7QUFFRDs7R0FFRztBQUVIO0VBQ0UsVUFBVSxFQUNYOztBQUVEO2dGQUNnRjtBQUVoRjs7Ozs7R0FLRztBQUVIOzs7Ozs7Ozs7Ozs7O0VBYUUsZUFBZSxFQUNoQjs7QUFFRDs7O0dBR0c7QUFFSDs7OztFQUlFLHNCQUFzQjtFQUFFLE9BQU87RUFDL0IseUJBQXlCO0VBQUUsT0FBTyxFQUNuQzs7QUFFRDs7O0dBR0c7QUFFSDtFQUNFLGNBQWM7RUFDZCxVQUFVLEVBQ1g7O0FBRUQ7OztHQUdHO0FMOEVIOztFSzFFRSxjQUFjLEVBQ2Y7O0FBRUQ7Z0ZBQ2dGO0FBRWhG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QUV3QztBQUV4Qzs7OztHQUlHO0FBQ0g7Ozs7Ozs7RUFRSSxvQk5DZ0M7RU1BaEMsc0JOQWdDLEVNQ25DOztBQU1EOzs7R0FHRztBQUNIO0VBRUksa0JBQWM7RUFDZCxrQkFBZSxFQUNsQjs7QUNqQ0Q7d0NBRXdDO0FBRXhDOztHQUVHO0FBVUg7RUN5Q0ksZ0JEaER3QjtFQ2lEeEIsbUJEakR3QjtFQ29EcEIscUJBQWlCLEVEM0N4Qjs7QUFFRDtFQ3FDSSxnQkQvQ3dCO0VDZ0R4QixvQkRoRHdCO0VDbURwQixpQkFBaUIsRUR2Q3hCOztBQUVEO0VDaUNJLGdCRDlDd0I7RUMrQ3hCLGtCRC9Dd0I7RUNrRHBCLGVBQWlCLEVEbkN4Qjs7QUFFRDtFQzZCSSxnQkQ3Q3dCO0VDOEN4QixtQkQ5Q3dCO0VDaURwQixpQkFBaUIsRUQvQnhCOztBQUVEO0VDeUJJLGdCRDVDd0I7RUM2Q3hCLGdCRDdDd0I7RUNnRHBCLGlCQUFpQixFRDNCeEI7O0FBRUQ7RUNxQkksZ0JEM0N3QjtFQzRDeEIsb0JENUN3QjtFQytDcEIscUJBQWlCLEVEdkJ4Qjs7QUV0Q0Q7d0NBRXdDO0FBRXhDOzs7R0FHRztBQUtIO0VENkNJLGdCUnhDZ0M7RVF5Q2hDLG9CUnpDZ0M7RVE0QzVCLHFCQUFpQixFQy9DeEI7O0FDZEQ7d0NBRXdDO0FBRXhDOztHQUVHO0FBRUg7O0dBRUc7QVR1RFM7RUF4QkosaUJBQWlCO0VTNUJyQixlQ1RtQixFVnVEbEI7O0FTdkNMOztHQUVHO0FBQ0g7RUZrQ0ksZ0JFakN1QjtFRmtDdkIsb0JFbEN1QjtFRnFDbkIscUJBQWlCLEVFcEN4Qjs7QUFFRDtFRjhCSSxnQkU3QnVCO0VGOEJ2QixtQkU5QnVCO0VGaUNuQixpQkFBaUI7RUVoQ3JCLFlFZm9CO0VGZ0JwQiwwQkFBMEI7RVRtQnRCLGlCQUFpQixFU2pCeEI7O0FBRUQ7RUZ1QkksZ0JFdEJ1QjtFRnVCdkIsZ0JFdkJ1QjtFRjBCbkIsaUJBQWlCO0VQWmpCLGlCQUFpQjtFU1pyQixpQkFBaUI7RUFDakIsZUVoQ3VCLEVGaUMxQjs7QUFFRDtFRmdCSSxnQkVm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Q2Isb0JyQ25Dd0IsRXFDcUMvQixFQUFBOztBQUVEO0VBQ0ksbUJBQW1CLEVBSXRCO0V4QlpPO0l3Qk9SO01BR1Esa0JBQWtCLEVBRXpCLEVBQUE7O0FBRUQ7RUFDSSxhQUFhO0VBQ2Isb0J2QnRDUyxFdUIyQ1o7RXhCckJPO0l3QmNSO01BSVEsa0JyQ2xEd0I7TXFDbUR4QixhQUFhLEVBRXBCLEVBQUE7O0FDdkVMO3dDQUV3QztBQUV4QztFQUNJLGtCdENhZ0M7RXNDWmhDLHFCdENZZ0M7RXNDWGhDLGlCQUFpQixFQU9wQjtFekJvQ1c7SXlCOUNaO01BTVEsa0J0Q2dDaUM7TXNDL0JqQyxxQnRDK0JpQyxFc0M1QnhDLEVBQUE7O0FBRUQ7RUFDSSxrQnRDeUJxQztFc0N4QnJDLHFCdEN3QnFDLEVzQ3ZCeEM7O0FBRUQ7RUFDSSx1QjFCWm9CLEUwQmF2Qjs7QUFFRDtFQUNJLDBCMUJmdUIsRTBCZ0IxQjs7QUFFRDtFQUNJLDBCMUJ4QnVCO0UwQnlCdkIsZTFCd0Z1QyxFMEJ2RjFDOztBQ2hDRDt3Q0FFd0M7QUFFeEM7RS9CcURJLGdCK0JwRHVCO0UvQnFEdkIsbUIrQnJEdUI7RS9Cd0RuQixlQUFpQjtFK0J2RHJCLGtCQUFrQixFQU1yQjtFMUJzQ1c7STBCOUNaO01BS1EscUJ2Q1M0QixFdUNObkMsRUFBQTs7QUNaRDt3Q0FFd0M7QUFFeEM7RUFDSSx1QjVCZ0ZnQyxFNEJ6RW5DO0VBUkQ7O0lBS1EsZTVCSG1CLEU0Qkl0Qjs7QUFJRDtFaEMyQ0EsZ0JnQzFDMkI7RWhDMkMzQixtQmdDM0MyQjtFaEM4Q3ZCLGVBQWlCO0VnQzdDakIsZUFBZSxFQUNsQjs7QUNqQkw7d0NBRXdDO0FBS3hDO0VqQ2tESSxnQmlDaER1QjtFakNpRHZCLG9CaUNqRHVCO0VqQ29EbkIscUJBQWlCO0VQWmpCLGlCQUFpQjtFd0NqQ3JCOzs7OztPQUtHLEVBZU47RTVCY1c7STRCM0NaO01qQ2tESSxnQmlDNUMyQjtNakM2QzNCLGdCaUM3QzJCO01qQ2dEdkIsaUJBQWlCLEVpQ3pCeEIsRUFBQTtFQWRHO0lBQ0ksbUJBQW1CO0lB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Q2pGO0VBRkQ7SUFDSSxzQkFBOEUsRUFDakY7RUFGRDtJQUNJLHNCQUE4RSxFQUNqRjtFQUZEO0lBQ0ksc0JBQThFLEVBQ2pGO0VBRkQ7SUFDSSxzQkFBOEUsRUFDakYsRUFBQTs7QS9DS0w7RStDakJBO0lBQ0ksdUJBQXVCLEVBQzFCO0VBUUc7SUFDSSxzQkFBOEUsRUFDakY7RUFGRDtJQUNJLDRCQUE4RSxFQUNqRjtFQUZEO0lBQ0ksNEJBQThFLEVBQ2pGO0VBRkQ7SUFDSSxzQkFBOEUsRUFDakY7RUFGRDtJQUNJLHNCQUE4RSxFQUNqRjtFQUZEO0lBQ0ksc0JBQThFLEVBQ2pGO0VBRkQ7SUFDSSxzQkFBOEUsRUFDakY7RUFGRDtJQUNJLHNCQUE4RSxFQUNqRjtFQUZEO0lBQ0ksc0JBQThFLEVBQ2pGO0VBRkQ7SUFDSSxzQkFBOEUsRUFDakYsRUFBQTs7QS9DS0w7RStDakJBO0lBQ0ksdUJBQXVCLEVBQzFCO0VBUUc7SUFDSSxzQkFBOEUsRUFDakY7RUFGRDtJQUNJLDRCQUE4RSxFQUNqRjtFQUZEO0lBQ0ksNEJBQThFLEVBQ2pGO0VBRkQ7SUFDSSxzQkFBOEUsRUFDakY7RUFGRDtJQUNJLHNCQUE4RSxFQUNqRjtFQUZEO0lBQ0ksc0JBQThFLEVBQ2pGO0VBRkQ7SUFDSSxzQkFBOEUsRUFDakY7RUFGRDtJQUNJLHNCQUE4RSxFQUNqRjtFQUZEO0lBQ0ksc0JBQThFLEVBQ2pGO0VBRkQ7SUFDSSxzQkFBOEUsRUFDakYsRUFBQTs7QS9DS0w7RStDakJBO0lBQ0ksdUJBQXVCLEVBQzFCO0VBUUc7SUFDSSxzQkFBOEUsRUFDakY7RUFGRDtJQUNJLDRCQUE4RSxFQUNqRjtFQUZEO0lBQ0ksNEJBQThFLEVBQ2pGO0VBRkQ7SUFDSSxzQkFBOEUsRUFDakY7RUFGRDtJQUNJLHNCQUE4RSxFQUNqRjtFQUZEO0lBQ0ksc0JBQThFLEVBQ2pGO0VBRkQ7SUFDSSxzQkFBOEUsRUFDakY7RUFGRDtJQUNJLHNCQUE4RSxFQUNqRjtFQUZEO0lBQ0ksc0JBQThFLEVBQ2pGO0VBRkQ7SUFDSSxzQkFBOEUsRUFDakYsRUFB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LEVBS3ZCO0VwRHRCVztJb0RhWjtNQU1RLGFBQWE7TUFDYixtQkFBbUIsRUFFMUIsRUFBQTs7QUFFRDtFQUNJLGFBQWEsRUFDaEIiLCJmaWxlIjoibWFpbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI0NTU1dJWkFSRFJZXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBDT05URU5UU1xuICpcbiAqIFNFVFRJTkdTXG4gKiBEZWZhdWx0Li4uLi4uLi4uLi4uLi5pbnVpdGNzc+KAmSBkZWZhdWx0IHNldHRpbmdzLlxuICogR2xvYmFsLi4uLi4uLi4uLi4uLi4uR2xvYmFsbHktYXZhaWxhYmxlIHZhcmlhYmxlcyBhbmQgc2V0dGluZ3MvY29uZmlnLlxuICogQ29sb3JzLi4uLi4uLi4uLi4uLi4uTWFuYWdlIG91ciBjb2xvciBwYWxldHRlIGluIGlzb2xhdGlvbi5cbiAqIFJlc3BvbnNpdmUuLi4uLi4uLi4uLlNldCB1cCBhbmQgbmFtZSBvdXIgYnJlYWtwb2ludHMuXG4gKlxuICogVE9PTFNcbiAqIEZ1bmN0aW9ucy4uLi4uLi4uLi4uLmludWl0Y3Nz4oCZIGRlZmF1bHQgZnVuY3Rpb25zLlxuICogTWl4aW5zLi4uLi4uLi4uLi4uLi4uaW51aXRjc3PigJkgZGVmYXVsdCBtaXhpbnMuXG4gKiBNaXhpbnMuLi4uLi4uLi4uLi4uLi5PdXIgZXh0ZW5zaW9uIG9mIGludWl0Y3Nz4oCZIG1peGlucy5cbiAqIFJlc3BvbnNpdmUuLi4uLi4uLi4uLlJlc3BvbnNpdmUgdG9vbGluZyAocmVxdWlyZXMgcmVzcG9uc2l2ZSBzZXR0aW5ncykuXG4gKiBBbGlhc2VzLi4uLi4uLi4uLi4uLi5BbGlhc2VzIG9udG8gbG9uZ2VyIGludWl0Y3NzIHZhcmlhYmxlcyBhbmQgbWl4aW5zLlxuICpcbiAqIEdFTkVSSUNcbiAqIE5vcm1hbGl6ZS5jc3MuLi4uLi4uLkEgbGV2ZWwgcGxheWluZyBmaWVsZC5cbiAqIFJlc2V0Li4uLi4uLi4uLi4uLi4uLkEgcGFyZWQgYmFjayByZXNldCB0byByZW1vdmUgbWFyZ2lucy5cbiAqIEJveC1zaXppbmcuLi4uLi4uLi4uLkJldHRlciBkZWZhdWx0IGBib3gtc2l6aW5nYC5cbiAqIFNoYXJlZC4uLi4uLi4uLi4uLi4uLlNlbnNpYmx5IGFuZCB0ZXJzZWx5IHNoYXJlIGdsb2JhbCBjb21tb25hbGl0aWVzLlxuICpcbiAqIEJBU0VcbiAqIFBhZ2UuLi4uLi4uLi4uLi4uLi4uLlBhZ2UtbGV2ZWwgc3R5bGVzIChIVE1MIGVsZW1lbnQpLlxuICogUGFnZS4uLi4uLi4uLi4uLi4uLi4uT3VyIGV4dGVuc2lvbiBvZiB0aGUgaW51aXRjc3MgcGFnZSBtb2R1bGUuXG4gKiBIZWFkaW5ncy4uLi4uLi4uLi4uLi5IZWFkaW5nIHN0eWxlc1xuICogVHlwZS4uLi4uLi4uLi4uLi4uLi4uTWlzYyB0eXBlIHN0eWxlc1xuICogTGlua3MuLi4uLi4uLi4uLi4uLi4uSHlwZXJsaW5rIHN0eWxlc1xuICogTGlzdHMuLi4uLi4uLi4uLi4uLi4uaW51aXRjc3MgbGlzdCBzdHlsZXNcbiAqIEltYWdlcy4uLi4uLi4uLi4uLi4uLmludWl0Y3NzIGltYWdlc1xuICogUXVvdGVzLi4uLi4uLi4uLi4uLi4uU3R5bGluZyBmb3IgYmxvY2txdW90ZXMsIGV0Yy5cbiAqXG4gKiBPQkpFQ1RTXG4gKiBXcmFwcGVycy4uLi4uLi4uLi4uLi5XcmFwcGVycyBhbmQgcGFnZSBjb25zdHJhaW50cy5cbiAqIEJ1dHRvbnMuLi4uLi4uLi4uLi4uLmludWl0Y3Nz4oCZIGJ1dHRvbnMgbW9kdWxlLlxuICogTGF5b3V0Li4uLi4uLi4uLi4uLi4uaW51aXRjc3PigJkgbGF5b3V0IHRvb2wuXG4gKiBCb3guLi4uLi4uLi4uLi4uLi4uLi5pbnVpdGNzc+KAmSBib3ggb2JqZWN0LlxuICogTWVkaWEuLi4uLi4uLi4uLi4uLi4uVGhlIG1lZGlhIG9iamVjdC5cbiAqIEZsYWcuLi4uLi4uLi4uLi4uLi4uLlRoZSBmbGFnIG9iamVjdC5cbiAqIFVJIGxpc3QuLi4uLi4uLi4uLi4uLmludWl0Y3Nz4oCZIFVJIGxpc3QuXG4gKlxuICogQ09NUE9ORU5UU1xuICogUGFnZS1oZWFkLi4uLi4uLi4uLi4uUGFnZSBoZWFkZXIgc3R5bGVzLlxuICogQmFuZHMuLi4uLi4uLi4uLi4uLi4uRnVsbC13aWR0aCBwYWdlIGJhbmRzLlxuICogUHJvbW8uLi4uLi4uLi4uLi4uLi4uTGVhZCBwcm9tbyBibG9ja3Mgb24gdGhlIGhvbWUgcGFnZS5cbiAqIFBhZ2UtZm9vdC4uLi4uLi4uLi4uLlBhZ2UgZm9vdGVyIHN0eWxlcy5cbiAqIFBhZ2UtbWljcm8uLi4uLi4uLi4uLlBhZ2UgY29weXJpZ2h0IHN0eWxlcy5cbiAqIFNpdGUtbmF2Li4uLi4uLi4uLi4uLlNpdGXigJlzIG1haW4gbmF2IGFyZWEuXG4gKiBCdXR0b25zLi4uLi4uLi4uLi4uLi5FeHRlbnNpb24gb2YgaW51aXRjc3PigJkgYnV0dG9ucy5cbiAqIEJveGVzLi4uLi4uLi4uLi4uLi4uLkV4dGVuc2lvbiBvZiBpbnVpdGNzc+KAmSBib3ggb2JqZWN0XG4gKiBQb3N0Li4uLi4uLi4uLi4uLi4uLi5Qb3N0LXNwZWNpZmljIHN0eWxlcy5cbiAqIFB1bGwtcXVvdGUuLi4uLi4uLi4uLkxhcmdlLCBmZWF0dXJlZCBxdW90ZXMuXG4gKiBDYXJvdXNlbC4uLi4uLi4uLi4uLi5QdXJlIENTUyBjYXJvdXNlbCBjb21wb25lbnQuXG4gKiBJY29uaWMuLi4uLi4uLi4uLi4uLi5JY29uaWMgaWNvbiBzdHlsZXMuXG4gKiBTcHJpdGVzLi4uLi4uLi4uLi4uLi5JbWFnZSBzcHJpdGUgc3R5bGVzLlxuICogRmVhdHVyZSBsaXN0Li4uLi4uLi4uQmlnIGJsb2NreSBsaXN0cyBvZiBmZWF0dXJlIGl0ZW1zLlxuICogQW5ub3RhdGUuLi4uLi4uLi4uLi4uUHVyZSBDU1MgZmlndXJlIGFubm90YXRpb25zLlxuICogQWRzLi4uLi4uLi4uLi4uLi4uLi4uQWRQYWNrcyBvdmVycmlkZXMuXG4gKiBDbGllbnQtbGlzdC4uLi4uLi4uLi5BbWF6aW5nIHBlb3BsZSBJ4oCZdmUgaGFkIHRoZSBwbGVhc3VyZSBvZiB3b3JraW5nIHdpdGguXG4gKlxuICogVFJVTVBTXG4gKiBDbGVhcmZpeC4uLi4uLi4uLi4uLi5JIGNhbuKAmXQgYmVsaWV2ZSB3ZSBzdGlsbCBuZWVkIHRoaXMgaW4gMjAxNC5cbiAqIFdpZHRocy4uLi4uLi4uLi4uLi4uLlNpbXBsZSB3aWR0aCBoZWxwZXIgY2xhc3Nlcy5cbiAqIFdpZHRocy1yZXNwb25zaXZlLi4uLlBvbHlmaWxsIGZvciByZXNwb25zaXZlIHdpZHRoIGNsYXNzZXMuXG4gKiBTcGFjaW5nLi4uLi4uLi4uLi4uLi5NaWNyby1sZXZlbCBzcGFjaW5nLlxuICogU2hvdy9oaWRlLi4uLi4uLi4uLi4uSGVscGVycyB0byBzaG93IGFuZCBzaWRlIHN0dWZmLlxuICovXG4vKiFcbiAqIGludWl0Y3NzLCBieSBAY3Nzd2l6YXJkcnlcbiAqXG4gKiBnaXRodWIuY29tL2ludWl0Y3NzIHwgaW51aXRjc3MuY29tXG4gKi9cblxuLmNlbnRlci1jaGlsZHJlbiB7XG4gIGhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNBTElBU0VTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyohIG5vcm1hbGl6ZS5jc3MgdjMuMC4zIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xuLyoqXG4gKiAxLiBTZXQgZGVmYXVsdCBmb250IGZhbWlseSB0byBzYW5zLXNlcmlmLlxuICogMi4gUHJldmVudCBpT1MgYW5kIElFIHRleHQgc2l6ZSBhZGp1c3QgYWZ0ZXIgZGV2aWNlIG9yaWVudGF0aW9uIGNoYW5nZSxcbiAqICAgIHdpdGhvdXQgZGlzYWJsaW5nIHVzZXIgem9vbS5cbiAqL1xuaHRtbCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICAvKiAxICovXG4gIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAvKiAyICovXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLyogMiAqLyB9XG5cbi8qKlxuICogUmVtb3ZlIGRlZmF1bHQgbWFyZ2luLlxuICovXG5ib2R5IHtcbiAgbWFyZ2luOiAwOyB9XG5cbi8qIEhUTUw1IGRpc3BsYXkgZGVmaW5pdGlvbnNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAqIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBhbnkgSFRNTDUgZWxlbWVudCBpbiBJRSA4LzkuXG4gKiBDb3JyZWN0IGBibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBmb3IgYGRldGFpbHNgIG9yIGBzdW1tYXJ5YCBpbiBJRSAxMC8xMVxuICogYW5kIEZpcmVmb3guXG4gKiBDb3JyZWN0IGBibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBmb3IgYG1haW5gIGluIElFIDExLlxuICovXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5tZW51LFxubmF2LFxuc2VjdGlvbixcbnN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG4vKipcbiAqIDEuIENvcnJlY3QgYGlubGluZS1ibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRSA4LzkuXG4gKiAyLiBOb3JtYWxpemUgdmVydGljYWwgYWxpZ25tZW50IG9mIGBwcm9ncmVzc2AgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4gKi9cbmF1ZGlvLFxuY2FudmFzLFxucHJvZ3Jlc3MsXG52aWRlbyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgLyogMSAqL1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIC8qIDIgKi8gfVxuXG4vKipcbiAqIFByZXZlbnQgbW9kZXJuIGJyb3dzZXJzIGZyb20gZGlzcGxheWluZyBgYXVkaW9gIHdpdGhvdXQgY29udHJvbHMuXG4gKiBSZW1vdmUgZXhjZXNzIGhlaWdodCBpbiBpT1MgNSBkZXZpY2VzLlxuICovXG5hdWRpbzpub3QoW2NvbnRyb2xzXSkge1xuICBkaXNwbGF5OiBub25lO1xuICBoZWlnaHQ6IDA7IH1cblxuLyoqXG4gKiBBZGRyZXNzIGBbaGlkZGVuXWAgc3R5bGluZyBub3QgcHJlc2VudCBpbiBJRSA4LzkvMTAuXG4gKiBIaWRlIHRoZSBgdGVtcGxhdGVgIGVsZW1lbnQgaW4gSUUgOC85LzEwLzExLCBTYWZhcmksIGFuZCBGaXJlZm94IDwgMjIuXG4gKi9cbltoaWRkZW5dLFxudGVtcGxhdGUge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbi8qIExpbmtzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBSZW1vdmUgdGhlIGdyYXkgYmFja2dyb3VuZCBjb2xvciBmcm9tIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAqL1xuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG5cbi8qKlxuICogSW1wcm92ZSByZWFkYWJpbGl0eSBvZiBmb2N1c2VkIGVsZW1lbnRzIHdoZW4gdGhleSBhcmUgYWxzbyBpbiBhblxuICogYWN0aXZlL2hvdmVyIHN0YXRlLlxuICovXG5hOmFjdGl2ZSxcbmE6aG92ZXIge1xuICBvdXRsaW5lOiAwOyB9XG5cbi8qIFRleHQtbGV2ZWwgc2VtYW50aWNzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LzEwLzExLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4gKi9cbmFiYnJbdGl0bGVdIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDsgfVxuXG4vKipcbiAqIEFkZHJlc3Mgc3R5bGUgc2V0IHRvIGBib2xkZXJgIGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cbiAqL1xuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qKlxuICogQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIFNhZmFyaSBhbmQgQ2hyb21lLlxuICovXG5kZm4ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7IH1cblxuLyoqXG4gKiBBZGRyZXNzIHZhcmlhYmxlIGBoMWAgZm9udC1zaXplIGFuZCBtYXJnaW4gd2l0aGluIGBzZWN0aW9uYCBhbmQgYGFydGljbGVgXG4gKiBjb250ZXh0cyBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4gKi9cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7IH1cblxuLyoqXG4gKiBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LlxuICovXG5tYXJrIHtcbiAgYmFja2dyb3VuZDogI2ZmMDtcbiAgY29sb3I6ICMwMDA7IH1cblxuLyoqXG4gKiBBZGRyZXNzIGluY29uc2lzdGVudCBhbmQgdmFyaWFibGUgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqL1xuc21hbGwge1xuICBmb250LXNpemU6IDgwJTsgfVxuXG4vKipcbiAqIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGFmZmVjdGluZyBgbGluZS1oZWlnaHRgIGluIGFsbCBicm93c2Vycy5cbiAqL1xuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgfVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTsgfVxuXG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07IH1cblxuLyogRW1iZWRkZWQgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogUmVtb3ZlIGJvcmRlciB3aGVuIGluc2lkZSBgYWAgZWxlbWVudCBpbiBJRSA4LzkvMTAuXG4gKi9cbmltZyB7XG4gIGJvcmRlcjogMDsgfVxuXG4vKipcbiAqIENvcnJlY3Qgb3ZlcmZsb3cgbm90IGhpZGRlbiBpbiBJRSA5LzEwLzExLlxuICovXG5zdmc6bm90KDpyb290KSB7XG4gIG92ZXJmbG93OiBoaWRkZW47IH1cblxuLyogR3JvdXBpbmcgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogQWRkcmVzcyBtYXJnaW4gbm90IHByZXNlbnQgaW4gSUUgOC85IGFuZCBTYWZhcmkuXG4gKi9cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMWVtIDQwcHg7IH1cblxuLyoqXG4gKiBBZGRyZXNzIGRpZmZlcmVuY2VzIGJldHdlZW4gRmlyZWZveCBhbmQgb3RoZXIgYnJvd3NlcnMuXG4gKi9cbmhyIHtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIGhlaWdodDogMDsgfVxuXG4vKipcbiAqIENvbnRhaW4gb3ZlcmZsb3cgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5wcmUge1xuICBvdmVyZmxvdzogYXV0bzsgfVxuXG4vKipcbiAqIEFkZHJlc3Mgb2RkIGBlbWAtdW5pdCBmb250IHNpemUgcmVuZGVyaW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMWVtOyB9XG5cbi8qIEZvcm1zXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBLbm93biBsaW1pdGF0aW9uOiBieSBkZWZhdWx0LCBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYIGFsbG93IHZlcnkgbGltaXRlZFxuICogc3R5bGluZyBvZiBgc2VsZWN0YCwgdW5sZXNzIGEgYGJvcmRlcmAgcHJvcGVydHkgaXMgc2V0LlxuICovXG4vKipcbiAqIDEuIENvcnJlY3QgY29sb3Igbm90IGJlaW5nIGluaGVyaXRlZC5cbiAqICAgIEtub3duIGlzc3VlOiBhZmZlY3RzIGNvbG9yIG9mIGRpc2FibGVkIGVsZW1lbnRzLlxuICogMi4gQ29ycmVjdCBmb250IHByb3BlcnRpZXMgbm90IGJlaW5nIGluaGVyaXRlZC5cbiAqIDMuIEFkZHJlc3MgbWFyZ2lucyBzZXQgZGlmZmVyZW50bHkgaW4gRmlyZWZveCA0KywgU2FmYXJpLCBhbmQgQ2hyb21lLlxuICovXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgLyogMSAqL1xuICBmb250OiBpbmhlcml0O1xuICAvKiAyICovXG4gIG1hcmdpbjogMDtcbiAgLyogMyAqLyB9XG5cbi8qKlxuICogQWRkcmVzcyBgb3ZlcmZsb3dgIHNldCB0byBgaGlkZGVuYCBpbiBJRSA4LzkvMTAvMTEuXG4gKi9cbmJ1dHRvbiB7XG4gIG92ZXJmbG93OiB2aXNpYmxlOyB9XG5cbi8qKlxuICogQWRkcmVzcyBpbmNvbnNpc3RlbnQgYHRleHQtdHJhbnNmb3JtYCBpbmhlcml0YW5jZSBmb3IgYGJ1dHRvbmAgYW5kIGBzZWxlY3RgLlxuICogQWxsIG90aGVyIGZvcm0gY29udHJvbCBlbGVtZW50cyBkbyBub3QgaW5oZXJpdCBgdGV4dC10cmFuc2Zvcm1gIHZhbHVlcy5cbiAqIENvcnJlY3QgYGJ1dHRvbmAgc3R5bGUgaW5oZXJpdGFuY2UgaW4gRmlyZWZveCwgSUUgOC85LzEwLzExLCBhbmQgT3BlcmEuXG4gKiBDb3JyZWN0IGBzZWxlY3RgIHN0eWxlIGluaGVyaXRhbmNlIGluIEZpcmVmb3guXG4gKi9cbmJ1dHRvbixcbnNlbGVjdCB7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lOyB9XG5cbi8qKlxuICogMS4gQXZvaWQgdGhlIFdlYktpdCBidWcgaW4gQW5kcm9pZCA0LjAuKiB3aGVyZSAoMikgZGVzdHJveXMgbmF0aXZlIGBhdWRpb2BcbiAqICAgIGFuZCBgdmlkZW9gIGNvbnRyb2xzLlxuICogMi4gQ29ycmVjdCBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIGBpbnB1dGAgdHlwZXMgaW4gaU9TLlxuICogMy4gSW1wcm92ZSB1c2FiaWxpdHkgYW5kIGNvbnNpc3RlbmN5IG9mIGN1cnNvciBzdHlsZSBiZXR3ZWVuIGltYWdlLXR5cGVcbiAqICAgIGBpbnB1dGAgYW5kIG90aGVycy5cbiAqL1xuYnV0dG9uLFxuaHRtbCBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICAvKiAyICovXG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgLyogMyAqLyB9XG5cbi8qKlxuICogUmUtc2V0IGRlZmF1bHQgY3Vyc29yIGZvciBkaXNhYmxlZCBlbGVtZW50cy5cbiAqL1xuYnV0dG9uW2Rpc2FibGVkXSxcbmh0bWwgaW5wdXRbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBkZWZhdWx0OyB9XG5cbi8qKlxuICogUmVtb3ZlIGlubmVyIHBhZGRpbmcgYW5kIGJvcmRlciBpbiBGaXJlZm94IDQrLlxuICovXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5pbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDsgfVxuXG4vKipcbiAqIEFkZHJlc3MgRmlyZWZveCA0KyBzZXR0aW5nIGBsaW5lLWhlaWdodGAgb24gYGlucHV0YCB1c2luZyBgIWltcG9ydGFudGAgaW5cbiAqIHRoZSBVQSBzdHlsZXNoZWV0LlxuICovXG5pbnB1dCB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7IH1cblxuLyoqXG4gKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGF0dGVtcHQgdG8gc3R5bGUgdGhlc2UgZWxlbWVudHMuXG4gKiBGaXJlZm94J3MgaW1wbGVtZW50YXRpb24gZG9lc24ndCByZXNwZWN0IGJveC1zaXppbmcsIHBhZGRpbmcsIG9yIHdpZHRoLlxuICpcbiAqIDEuIEFkZHJlc3MgYm94IHNpemluZyBzZXQgdG8gYGNvbnRlbnQtYm94YCBpbiBJRSA4LzkvMTAuXG4gKiAyLiBSZW1vdmUgZXhjZXNzIHBhZGRpbmcgaW4gSUUgOC85LzEwLlxuICovXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvKiAxICovXG4gIHBhZGRpbmc6IDA7XG4gIC8qIDIgKi8gfVxuXG4vKipcbiAqIEZpeCB0aGUgY3Vyc29yIHN0eWxlIGZvciBDaHJvbWUncyBpbmNyZW1lbnQvZGVjcmVtZW50IGJ1dHRvbnMuIEZvciBjZXJ0YWluXG4gKiBgZm9udC1zaXplYCB2YWx1ZXMgb2YgdGhlIGBpbnB1dGAsIGl0IGNhdXNlcyB0aGUgY3Vyc29yIHN0eWxlIG9mIHRoZVxuICogZGVjcmVtZW50IGJ1dHRvbiB0byBjaGFuZ2UgZnJvbSBgZGVmYXVsdGAgdG8gYHRleHRgLlxuICovXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bzsgfVxuXG4vKipcbiAqIDEuIEFkZHJlc3MgYGFwcGVhcmFuY2VgIHNldCB0byBgc2VhcmNoZmllbGRgIGluIFNhZmFyaSBhbmQgQ2hyb21lLlxuICogMi4gQWRkcmVzcyBgYm94LXNpemluZ2Agc2V0IHRvIGBib3JkZXItYm94YCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbiAqL1xuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICAvKiAxICovXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAvKiAyICovIH1cblxuLyoqXG4gKiBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgc2VhcmNoIGNhbmNlbCBidXR0b24gaW4gU2FmYXJpIGFuZCBDaHJvbWUgb24gT1MgWC5cbiAqIFNhZmFyaSAoYnV0IG5vdCBDaHJvbWUpIGNsaXBzIHRoZSBjYW5jZWwgYnV0dG9uIHdoZW4gdGhlIHNlYXJjaCBpbnB1dCBoYXNcbiAqIHBhZGRpbmcgKGFuZCBgdGV4dGZpZWxkYCBhcHBlYXJhbmNlKS5cbiAqL1xuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IH1cblxuLyoqXG4gKiBEZWZpbmUgY29uc2lzdGVudCBib3JkZXIsIG1hcmdpbiwgYW5kIHBhZGRpbmcuXG4gKi9cbmZpZWxkc2V0IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgbWFyZ2luOiAwIDJweDtcbiAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtOyB9XG5cbi8qKlxuICogMS4gQ29ycmVjdCBgY29sb3JgIG5vdCBiZWluZyBpbmhlcml0ZWQgaW4gSUUgOC85LzEwLzExLlxuICogMi4gUmVtb3ZlIHBhZGRpbmcgc28gcGVvcGxlIGFyZW4ndCBjYXVnaHQgb3V0IGlmIHRoZXkgemVybyBvdXQgZmllbGRzZXRzLlxuICovXG5sZWdlbmQge1xuICBib3JkZXI6IDA7XG4gIC8qIDEgKi9cbiAgcGFkZGluZzogMDtcbiAgLyogMiAqLyB9XG5cbi8qKlxuICogUmVtb3ZlIGRlZmF1bHQgdmVydGljYWwgc2Nyb2xsYmFyIGluIElFIDgvOS8xMC8xMS5cbiAqL1xudGV4dGFyZWEge1xuICBvdmVyZmxvdzogYXV0bzsgfVxuXG4vKipcbiAqIERvbid0IGluaGVyaXQgdGhlIGBmb250LXdlaWdodGAgKGFwcGxpZWQgYnkgYSBydWxlIGFib3ZlKS5cbiAqIE5PVEU6IHRoZSBkZWZhdWx0IGNhbm5vdCBzYWZlbHkgYmUgY2hhbmdlZCBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYLlxuICovXG5vcHRncm91cCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIFRhYmxlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogUmVtb3ZlIG1vc3Qgc3BhY2luZyBiZXR3ZWVuIHRhYmxlIGNlbGxzLlxuICovXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwOyB9XG5cbnRkLFxudGgge1xuICBwYWRkaW5nOiAwOyB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjQk9YLVNJWklOR1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogU2V0IHRoZSBnbG9iYWwgYGJveC1zaXppbmdgIHN0YXRlIHRvIGBib3JkZXItYm94YC5cbiAqXG4gKiBjc3MtdHJpY2tzLmNvbS9pbmhlcml0aW5nLWJveC1zaXppbmctcHJvYmFibHktc2xpZ2h0bHktYmV0dGVyLWJlc3QtcHJhY3RpY2VcbiAqIHBhdWxpcmlzaC5jb20vMjAxMi9ib3gtc2l6aW5nLWJvcmRlci1ib3gtZnR3XG4gKi9cbmh0bWwge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuXG4qLCAqOmJlZm9yZSwgKjphZnRlciB7XG4gIC13ZWJraXQtYm94LXNpemluZzogaW5oZXJpdDtcbiAgLW1vei1ib3gtc2l6aW5nOiBpbmhlcml0O1xuICBib3gtc2l6aW5nOiBpbmhlcml0OyB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjUkVTRVRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEFzIHdlbGwgYXMgdXNpbmcgbm9ybWFsaXplLmNzcywgaXQgaXMgb2Z0ZW4gYWR2YW50YWdlb3VzIHRvIHJlbW92ZSBhbGxcbiAqIG1hcmdpbnMgZnJvbSBjZXJ0YWluIGVsZW1lbnRzLlxuICovXG5ib2R5LFxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNixcbnAsIGJsb2NrcXVvdGUsIHByZSxcbmRsLCBkZCwgb2wsIHVsLFxuZm9ybSwgZmllbGRzZXQsIGxlZ2VuZCxcbmZpZ3VyZSxcbnRhYmxlLCB0aCwgdGQsIGNhcHRpb24sXG5ociB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDsgfVxuXG4vKipcbiAqIEdpdmUgYSBoZWxwIGN1cnNvciB0byBlbGVtZW50cyB0aGF0IGdpdmUgZXh0cmEgaW5mbyBvbiBgOmhvdmVyYC5cbiAqL1xuYWJiclt0aXRsZV0sXG5kZm5bdGl0bGVdIHtcbiAgY3Vyc29yOiBoZWxwOyB9XG5cbi8qKlxuICogUmVtb3ZlIHVuZGVybGluZXMgZnJvbSBwb3RlbnRpYWxseSB0cm91Ymxlc29tZSBlbGVtZW50cy5cbiAqL1xudSxcbmlucyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuXG4vKipcbiAqIEFwcGx5IGZhdXggdW5kZXJsaW5lcyB0byBpbnNlcnRlZCB0ZXh0IHZpYSBgYm9yZGVyLWJvdHRvbWAuXG4gKi9cbmlucyB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI1NIQVJFRFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogV2hlcmUgYG1hcmdpbi1ib3R0b21gIGlzIGNvbmNlcm5lZCx0aGlzIHZhbHVlIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlXG4gKiBiYXNlIGxpbmUtaGVpZ2h0LiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIGEgY29uc2lzdGVudCB2ZXJ0aWNhbCByaHl0aG0uXG4gKiBBcyBwZXI6IGNzc3dpemFyZHJ5LmNvbS8yMDEyLzA2L3NpbmdsZS1kaXJlY3Rpb24tbWFyZ2luLWRlY2xhcmF0aW9uc1xuICovXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LFxudWwsIG9sLCBkbCxcbmJsb2NrcXVvdGUsIHAsIGFkZHJlc3MsXG5ocixcbnRhYmxlLFxuZmllbGRzZXQsIGZpZ3VyZSxcbnByZSB7XG4gIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbTsgfVxuXG4vKipcbiAqIFdoZXJlIGBtYXJnaW4tbGVmdGAgaXMgY29uY2VybmVkIHdlIHdhbnQgdG8gdHJ5IGFuZCBpbmRlbnQgY2VydGFpbiBlbGVtZW50c1xuICogYnkgYSBjb25zaXN0ZW50IGFtb3VudC4gRGVmaW5lIHRoYXQgYW1vdW50IG9uY2UsaGVyZS5cbiAqL1xudWwsIG9sLCBkZCB7XG4gIG1hcmdpbi1sZWZ0OiA0OHB4O1xuICBtYXJnaW4tbGVmdDogM3JlbTsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI0hFQURJTkdTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBIZWFkaW5ncyAx4oCTNi5cbiAqL1xuaDEge1xuICBmb250LXNpemU6IDM2cHg7XG4gIGZvbnQtc2l6ZTogMi4yNXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzM7IH1cblxuaDIge1xuICBmb250LXNpemU6IDMwcHg7XG4gIGZvbnQtc2l6ZTogMS44NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjY7IH1cblxuaDMge1xuICBmb250LXNpemU6IDI0cHg7XG4gIGZvbnQtc2l6ZTogMS41cmVtO1xuICBsaW5lLWhlaWdodDogMTsgfVxuXG5oNCB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBsaW5lLWhlaWdodDogMS4yOyB9XG5cbmg1IHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7IH1cblxuaDYge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjcxNDI5OyB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjUEFSQUdSQVBIU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogVGhlIGAubGVkZWAgY2xhc3MgaXMgdXNlZCB0byBtYWtlIHRoZSBpbnRyb2R1Y3RvcnkgdGV4dCAodXN1YWxseSBhIHBhcmFncmFwaClcbiAqIG9mIGEgZG9jdW1lbnQgc2xpZ2h0bHkgbGFyZ2VyOiBlbi53aWtpcGVkaWEub3JnL3dpa2kvTGVkZV8obmV3cylcbiAqL1xuLmxlZGUge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzOyB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjVFlQRVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogVHlwb2dyYXBoaWNhbCBiYXNlIHNlbGVjdG9ycy5cbiAqL1xuLyoqXG4gKiBIZWFkaW5ncyAx4oCTNi5cbiAqL1xuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiAjRkU1OTAwOyB9XG5cbi8qKlxuICogQSBnZW5lcmljIGhlYWRpbmcgc3R5bGUgd2hpY2ggY2FuIGJlIGFwcGxpZWQgdG8gYW55IGhlYWRpbmdzLlxuICovXG4uaGVhZGluZyB7XG4gIGZvbnQtc2l6ZTogMjJweDtcbiAgZm9udC1zaXplOiAxLjM3NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMDkwOTE7IH1cblxuLmhlYWRpbmctLWhpZ2hsaWdodCB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuXG4uaGVhZGluZy1zdWIge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgY29sb3I6ICM0QzQ5NDU7IH1cblxuLnNlY3Rpb24taGVhZGluZyB7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgZm9udC1zaXplOiAycmVtO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gICAgLnNlY3Rpb24taGVhZGluZyB7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNTsgfSB9XG5cbi5zZWN0aW9uLWhlYWRpbmctLWRhcmsge1xuICBjb2xvcjogI2ZmZjsgfVxuICAuc2VjdGlvbi1oZWFkaW5nLS1kYXJrID4gLnNlY3Rpb24taGVhZGluZ19fdGV4dDphZnRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgfVxuXG4uc2VjdGlvbi1oZWFkaW5nLS1icmFuZCB7XG4gIGNvbG9yOiAjRkU1OTAwOyB9XG4gIC5zZWN0aW9uLWhlYWRpbmctLWJyYW5kID4gLnNlY3Rpb24taGVhZGluZ19fdGV4dDphZnRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZFNTkwMDsgfVxuXG4uc2VjdGlvbi1oZWFkaW5nLS10b3Age1xuICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gIC5zZWN0aW9uLWhlYWRpbmctLXRvcCA+IC5zZWN0aW9uLWhlYWRpbmdfX3RleHQ6YWZ0ZXIge1xuICAgIHRvcDogYXV0bztcbiAgICBib3R0b206IDEwMCU7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4OyB9XG5cbi5zZWN0aW9uLWhlYWRpbmctLW5vLWxpbmUge1xuICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gIC5zZWN0aW9uLWhlYWRpbmctLW5vLWxpbmUgPiAuc2VjdGlvbi1oZWFkaW5nX190ZXh0OmFmdGVyIHtcbiAgICBjb250ZW50OiBub25lOyB9XG5cbi5zZWN0aW9uLWhlYWRpbmctLXJpZ2h0IHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7IH1cbiAgLnNlY3Rpb24taGVhZGluZy0tcmlnaHQgPiAuc2VjdGlvbi1oZWFkaW5nX190ZXh0OmFmdGVyIHtcbiAgICBsZWZ0OiBhdXRvO1xuICAgIHJpZ2h0OiAwOyB9XG5cbi5zZWN0aW9uLWhlYWRpbmdfX3RleHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAuc2VjdGlvbi1oZWFkaW5nX190ZXh0OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICB3aWR0aDogNTAlO1xuICAgIGhlaWdodDogMXB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMTAwJTtcbiAgICBsZWZ0OiAwO1xuICAgIG1hcmdpbi10b3A6IDEycHg7IH1cblxuLnNlY3Rpb24taGVhZGluZy0tbWFyZ2luLWxhcmdlIHtcbiAgbWFyZ2luLWJvdHRvbTogM2VtOyB9XG5cbi5zZWN0aW9uLWhlYWRpbmctLWNlbnRyZSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAuc2VjdGlvbi1oZWFkaW5nLS1jZW50cmUgPiAuc2VjdGlvbi1oZWFkaW5nX190ZXh0OmFmdGVyIHtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOyB9XG5cbi8qKlxuICogRW1ib2xkZW5lZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBDb2RlLWxpa2UgZWxlbWVudHMuXG4gKi9cbmNvZGUsIGtiZCwgc2FtcCB7XG4gIGNvbG9yOiAjODU5OTAwO1xuICBmb250LWZhbWlseTogSW5jb25zb2xhdGEsIE1vbmFjbywgQ29uc29sYXMsIFwiQW5kYWxlIE1vbm9cIiwgXCJCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm9cIiwgXCJDb3VyaWVyIE5ld1wiLCBDb3VyaWVyLCBtb25vc3BhY2U7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxuXG5wcmUge1xuICB3aGl0ZS1zcGFjZTogcHJlO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHBhZGRpbmc6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0QzQ5NDU7XG4gIGJvcmRlci1yYWRpdXM6IDVweDsgfVxuICBwcmUsXG4gIHByZSBjb2RlLCBwcmUga2JkLCBwcmUgc2FtcCB7XG4gICAgY29sb3I6ICNmZmY7IH1cblxuLyoqXG4gKiBGaWd1cmVzLlxuICpcbiAqIDEuIE91dGRlbnQgZmlndXJlcyBieSBhbiBhcmJpdHJhcnkgYW1vdW50IGF0IHRoZSByZWxldmFudCB2aWV3cG9ydCBzaXplLlxuICogMi4gUmVpbmRlbnQgZmlnY2FwdGlvbnMuXG4gKi9cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEzODBweCkge1xuICBmaWd1cmUge1xuICAgIG1hcmdpbi1sZWZ0OiAtMTI4cHg7XG4gICAgLyogWzFdICovIH0gfVxuXG5maWd1cmUgPiBpbWcge1xuICBib3JkZXItcmFkaXVzOiA1cHg7IH1cblxuZmlnY2FwdGlvbiB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMjsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMzgwcHgpIHtcbiAgICBmaWdjYXB0aW9uIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAxMjhweDtcbiAgICAgIC8qIFsyXSAqLyB9IH1cblxuLyoqXG4gKiBIb3Jpem9udGFsIHJ1bGVzLlxuICovXG5ociB7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gIG1hcmdpbi1ib3R0b206IDIzcHg7IH1cblxuLyoqXG4gKiBIaWdobGlnaHRlZCB0ZXh0LlxuICovXG5wcmUgbWFyayB7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDtcbiAgY29sb3I6IGluaGVyaXQ7IH1cblxuLyoqXG4gKiBUZXh0LWFsaWdubWVudC5cbiAqL1xuLnRleHQtYmFubmVyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG5cbi50ZXh0LWxhcmdlIHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBmb250LXNpemU6IDJyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGxpbmUtaGVpZ2h0OiAyOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICAgIC50ZXh0LWxhcmdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgICBsaW5lLWhlaWdodDogMS41OyB9IH1cblxuLmJvbGQge1xuICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50OyB9XG5cbi5zdWItaGVhZGluZyB7XG4gIGNvbG9yOiAjRkU1OTAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNMSU5LU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmEsIC5saW5rLWJyYW5kIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogI0ZFNTkwMDsgfVxuICBhOmhvdmVyLCBhOmFjdGl2ZSwgYTpmb2N1cywgLmxpbmstYnJhbmQ6aG92ZXIsIC5saW5rLWJyYW5kOmFjdGl2ZSwgLmxpbmstYnJhbmQ6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9XG5cbi5saW5rLXNlY3JldCB7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBmb250LXdlaWdodDogMzAwOyB9XG4gIC5saW5rLXNlY3JldDpob3ZlciwgLmxpbmstc2VjcmV0OmFjdGl2ZSwgLmxpbmstc2VjcmV0OmZvY3VzIHtcbiAgICBjb2xvcjogI0ZFNTkwMDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNRVU9URVNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIElubGluZSBxdW90ZXMuXG4gKlxuICovXG5xIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBxdW90ZXM6IFwi4oCYXCIgXCLigJlcIiBcIuKAnFwiIFwi4oCdXCI7IH1cbiAgcTpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IG9wZW4tcXVvdGU7IH1cbiAgcTphZnRlciB7XG4gICAgY29udGVudDogY2xvc2UtcXVvdGU7IH1cblxuLyoqXG4gKiBCbG9jayBxdW90ZXMuXG4gKlxuICogMS4gSGFuZyBvcGVuaW5nIHB1bmN0dWF0aW9uLlxuICovXG5ibG9ja3F1b3RlIHtcbiAgbWFyZ2luLXJpZ2h0OiA0OHB4O1xuICBtYXJnaW4tbGVmdDogNDhweDtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBxdW90ZXM6IFwi4oCcXCIgXCLigJ1cIjsgfVxuICBibG9ja3F1b3RlIHAge1xuICAgIHRleHQtaW5kZW50OiAtMC40MWVtO1xuICAgIC8qIFsxXSAqLyB9XG4gICAgYmxvY2txdW90ZSBwOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBvcGVuLXF1b3RlOyB9XG4gICAgYmxvY2txdW90ZSBwOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IG5vLWNsb3NlLXF1b3RlOyB9XG4gICAgYmxvY2txdW90ZSBwOmxhc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgICBibG9ja3F1b3RlIHA6bGFzdC1vZi10eXBlOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogY2xvc2UtcXVvdGU7IH1cbiAgYmxvY2txdW90ZSBxIHtcbiAgICBxdW90ZXM6IFwi4oCYXCIgXCLigJlcIjsgfVxuICAgIGJsb2NrcXVvdGUgcTpiZWZvcmUge1xuICAgICAgY29udGVudDogb3Blbi1xdW90ZTsgfVxuICAgIGJsb2NrcXVvdGUgcTphZnRlciB7XG4gICAgICBjb250ZW50OiBjbG9zZS1xdW90ZTsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI0xJU1RTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBSZW1vdmUgZXh0cmEgdmVydGljYWwgc3BhY2luZyB3aGVuIG5lc3RpbmcgbGlzdHMuXG4gKi9cbmxpID4gdWwsXG5saSA+IG9sIHtcbiAgbWFyZ2luLWJvdHRvbTogMDsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI0lNQUdFU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogMS4gRmx1aWQgaW1hZ2VzIGZvciByZXNwb25zaXZlIHB1cnBvc2VzLlxuICogMi4gT2Zmc2V0IGBhbHRgIHRleHQgZnJvbSBzdXJyb3VuZGluZyBjb3B5LlxuICogMy4gU2V0dGluZyBgdmVydGljYWwtYWxpZ25gIHJlbW92ZXMgdGhlIHdoaXRlc3BhY2UgdGhhdCBhcHBlYXJzIHVuZGVyIGBpbWdgXG4gKiAgICBlbGVtZW50cyB3aGVuIHRoZXkgYXJlIGRyb3BwZWQgaW50byBhIHBhZ2UgYXMtaXMuIFNhZmVyIGFsdGVybmF0aXZlIHRvXG4gKiAgICB1c2luZyBgZGlzcGxheTogYmxvY2s7YC5cbiAqL1xuaW1nIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICAvKiBbMV0gKi9cbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICAvKiBbMl0gKi9cbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgLyogWzNdICovIH1cblxuLyoqXG4gKiAxLiBHb29nbGUgTWFwcyBicmVha3MgaWYgYG1heC13aWR0aDogMTAwJWAgYWN0cyB1cG9uIGl0OyB1c2UgdGhlaXIgc2VsZWN0b3JcbiAqICAgIHRvIHJlbW92ZSB0aGUgZWZmZWN0cy5cbiAqIDIuIElmIGEgYHdpZHRoYCBhbmQvb3IgYGhlaWdodGAgYXR0cmlidXRlIGhhdmUgYmVlbiBleHBsaWNpdGx5IGRlZmluZWQsIGxldOKAmXNcbiAqICAgIG5vdCBtYWtlIHRoZSBpbWFnZSBmbHVpZC5cbiAqL1xuLmdtLXN0eWxlIGltZyxcbmltZ1t3aWR0aF0sXG5pbWdbaGVpZ2h0XSB7XG4gIC8qIFsyXSAqL1xuICBtYXgtd2lkdGg6IG5vbmU7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNQQUdFXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBIaWdoLSwgcGFnZS1sZXZlbCBzdHlsaW5nLlxuICpcbiAqIDEuIFNldCB0aGUgZGVmYXVsdCBgZm9udC1zaXplYCBhbmQgYGxpbmUtaGVpZ2h0YCBmb3IgdGhlIGVudGlyZSBwcm9qZWN0LFxuICogICAgc291cmNlZCBmcm9tIG91ciBkZWZhdWx0IHZhcmlhYmxlcy4gVGhlIGBmb250LXNpemVgIGlzIGNhbGN1bGF0ZWQgdG8gZXhpc3RcbiAqICAgIGluIGVtcywgdGhlIGBsaW5lLWhlaWdodGAgaXMgY2FsY3VsYXRlZCB0byBleGlzdCB1bml0bGVzc2x5LlxuICogMi4gRm9yY2Ugc2Nyb2xsYmFycyB0byBhbHdheXMgYmUgdmlzaWJsZSB0byBwcmV2ZW50IGF3a3dhcmQg4oCYanVtcHPigJkgd2hlblxuICogICAgbmF2aWdhdGluZyBiZXR3ZWVuIHBhZ2VzIHRoYXQgZG8vZG8gbm90IGhhdmUgZW5vdWdoIGNvbnRlbnQgdG8gcHJvZHVjZVxuICogICAgc2Nyb2xsYmFycyBuYXR1cmFsbHkuXG4gKiAzLiBFbnN1cmUgdGhlIHBhZ2UgYWx3YXlzIGZpbGxzIGF0IGxlYXN0IHRoZSBlbnRpcmUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydC5cbiAqIDQuIFByZXZlbnQgY2VydGFpbiBtb2JpbGUgYnJvd3NlcnMgZnJvbSBhdXRvbWF0aWNhbGx5IHpvb21pbmcgZm9udHMuXG4gKiA1LiBGb250cyBvbiBPU1ggd2lsbCBsb29rIG1vcmUgY29uc2lzdGVudCB3aXRoIG90aGVyIHN5c3RlbXMgdGhhdCBkbyBub3RcbiAqICAgIHJlbmRlciB0ZXh0IHVzaW5nIHN1Yi1waXhlbCBhbnRpLWFsaWFzaW5nLlxuICovXG5odG1sIHtcbiAgZm9udC1zaXplOiAxZW07XG4gIC8qIFsxXSAqL1xuICBsaW5lLWhlaWdodDogMS41O1xuICAvKiBbMV0gKi9cbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0QzQ5NDU7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgLyogWzJdICovXG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIC8qIFszXSAqL1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC8qIFs0XSAqL1xuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLyogWzRdICovXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIC8qIFs1XSAqL1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLyogWzVdICovIH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNQQUdFXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuaHRtbCB7XG4gIGZvbnQtZmFtaWx5OiBcIkxhdG9cIiwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbWluLWhlaWdodDogMTAwdmg7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0NC45Mzc1ZW0pIHtcbiAgICBodG1sIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDsgfSB9XG5cbmh0bWwsIGJvZHkge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdy14OiBoaWRkZW47IH1cblxuYm9keSB7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3cteTogYXV0bzsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI1dSQVBQRVJTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLndyYXBwZXIge1xuICBtYXgtd2lkdGg6IDExMDBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmctcmlnaHQ6IDEycHg7XG4gIHBhZGRpbmctbGVmdDogMTJweDsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gICAgLndyYXBwZXIge1xuICAgICAgcGFkZGluZy1yaWdodDogMjRweDtcbiAgICAgIHBhZGRpbmctbGVmdDogMjRweDsgfSB9XG5cbi8qKlxuICogVGhpcyBpcyBhIGJpdCBvZiBhIG1hZ2ljIG51bWJlcjsgYSB3cmFwcGVyIHRoaXMgd2lkZSB3aWxsIGFsbG93IHVzIHRvIOKAmGhhbmfigJlcbiAqIG9uZSBpY29uIG91dCBvZiB0aGUgcmVzdCBvZiB0aGUgcGFnZeKAmXMg4oCYZ3JpZOKAmS4gSXQgaXMgdXNlZCBwcmltYXJpbHkgb24gdGhlXG4gKiBob21lIHBhZ2UgcHJvbW8gYm94ZXMuXG4gKi9cbi53cmFwcGVyLS13aWRlIHtcbiAgbWF4LXdpZHRoOiAxMjc2cHg7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNCTE9DS1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogVGhlIGJsb2NrIG9iamVjdCBzaW1wbHkgc3RhY2tzIGFuIGltYWdlIG9uIHRvcCBvZiBzb21lIHRleHQtbGlrZSBjb250ZW50LlxuICovXG4vKipcbiAqIFN0YWNrZWQgaW1hZ2Utd2l0aC10ZXh0IG9iamVjdC4gQSBzaW1wbGUgYWJzdHJhY3Rpb24gdG8gY292ZXIgYSB2ZXJ5IGNvbW1vbmx5XG4gKiBvY2N1cnJpbmcgZGVzaWduIHBhdHRlcm4uXG4gKi9cbi5ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi8qKlxuICAgICAqIDEuIEVsaW1pbmF0ZSB3aGl0ZXNwYWNlIGFyb3VuZCBpbWFnZXMuXG4gICAgICovXG4uYmxvY2tfX2ltZyB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIC8qIFsxXSAqL1xuICBtYXJnaW4tYm90dG9tOiAyNHB4OyB9XG5cbi8qKlxuICAgICAqIFRleHQtY29udGVudC5cbiAgICAgKi9cbi5ibG9ja19fYm9keSB7XG4gIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjQk9YXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBUaGUgYm94IG9iamVjdCBzaW1wbHkgYm94ZXMgb2ZmIGNvbnRlbnQuXG4gKi9cbi8qKlxuICogMS4gU28gd2UgY2FuIGFwcGx5IHRoZSBgLmJveGAgY2xhc3MgdG8gbmF0dXJhbGx5LWlubGluZSBlbGVtZW50cy5cbiAqL1xuLmJveCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICAvKiBbMV0gKi9cbiAgcGFkZGluZzogMjRweDsgfVxuICAuYm94ID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNCVVRUT05TXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBBIHNpbXBsZSBidXR0b24gb2JqZWN0LlxuICovXG4vKipcbiAqIDEuIEFsbG93IHVzIHRvIHN0eWxlIGJveCBtb2RlbCBwcm9wZXJ0aWVzLlxuICogMi4gTGluZSBkaWZmZXJlbnQgc2l6ZWQgYnV0dG9ucyB1cCBhIGxpdHRsZSBuaWNlci5cbiAqIDMuIE1ha2UgYnV0dG9ucyBpbmhlcml0IGZvbnQgc3R5bGVzIChvZnRlbiBuZWNlc3Nhcnkgd2hlbiBzdHlsaW5nIGBpbnB1dGBzIGFzXG4gKiAgICBidXR0b25zKS5cbiAqIDQuIFJlc2V0L25vcm1hbGl6ZSBzb21lIHN0eWxlcy5cbiAqIDUuIEZvcmNlIGFsbCBidXR0b24tc3R5bGVkIGVsZW1lbnRzIHRvIGFwcGVhciBjbGlja2FibGUuXG4gKiA2LiBGaXhlcyBvZGQgaW5uZXIgc3BhY2luZyBpbiBJRTcuXG4gKiA3LiBTdWJ0cmFjdCB0aGUgYm9yZGVyIHNpemUgZnJvbSB0aGUgcGFkZGluZyB2YWx1ZSBzbyB0aGF0IGJ1dHRvbnMgZG8gbm90XG4gKiAgICBncm93IGxhcmdlciBhcyB3ZSBhZGQgYm9yZGVycy5cbiAqL1xuLmJ0biB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgLyogWzFdICovXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIC8qIFsyXSAqL1xuICBmb250OiBpbmhlcml0O1xuICAvKiBbM10gKi9cbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAvKiBbNF0gKi9cbiAgbWFyZ2luOiAwO1xuICAvKiBbNF0gKi9cbiAgY3Vyc29yOiBwb2ludGVyO1xuICAvKiBbNV0gKi9cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIC8qIFs2XSAqL1xuICBwYWRkaW5nOiAxMXB4IDIzcHg7XG4gIC8qIFs3XSAqL1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkU1OTAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRkU1OTAwO1xuICBib3JkZXItcmFkaXVzOiA1cHg7IH1cbiAgLmJ0biwgLmJ0bjpob3ZlciwgLmJ0bjphY3RpdmUsIC5idG46Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAvKiBbNF0gKi9cbiAgICBjb2xvcjogI2ZmZjsgfVxuXG4vKipcbiAqIEZpeCBhIEZpcmVmb3ggYnVnIHdoZXJlYnkgYGlucHV0IHR5cGU9XCJzdWJtaXRcImAgZ2FpbnMgMnB4IGV4dHJhIHBhZGRpbmcuXG4gKi9cbi5idG46Oi1tb3otZm9jdXMtaW5uZXIge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7IH1cblxuLyoqXG4gICAgICogU21hbGwgYnV0dG9ucy5cbiAgICAgKi9cbi5idG4tLXNtYWxsIHtcbiAgcGFkZGluZzogNXB4IDExcHg7XG4gIC8qIFs3XSAqLyB9XG5cbi8qKlxuICAgICAqIEZ1bGwtd2lkdGggYnV0dG9ucy5cbiAgICAgKi9cbi5idG4tLWZ1bGwge1xuICB3aWR0aDogMTAwJTsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI0ZMQUdcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFRoZSBmbGFnIG9iamVjdCBpcyBhIGRlc2lnbiBwYXR0ZXJuIHNpbWlsYXIgdG8gdGhlIG1lZGlhIG9iamVjdCwgaG93ZXZlciBpdFxuICogdXRpbGlzZXMgYGRpc3BsYXk6IHRhYmxlWy1jZWxsXTtgIHRvIGdpdmUgdXMgY29udHJvbCBvdmVyIHRoZSB2ZXJ0aWNhbFxuICogYWxpZ25tZW50cyBvZiB0aGUgdGV4dCBhbmQgaW1hZ2UuIGNzc3dpemFyZHJ5LmNvbS8yMDEzLzA1L3RoZS1mbGFnLW9iamVjdFxuICovXG4vKipcbiAqIDEuIEFsbG93cyB1cyB0byBjb250cm9sIHZlcnRpY2FsIGFsaWdubWVudHNcbiAqIDIuIEZvcmNlIHRoZSBvYmplY3QgdG8gYmUgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIHBhcmVudC4gQ29tYmluZWQgd2l0aCBbMV0sXG4gKiAgICB0aGlzIG1ha2VzIHRoZSBvYmplY3QgYmVoYXZlIGluIGEgcXVhc2ktYGRpc3BsYXk6IGJsb2NrO2AgbWFubmVyLlxuICovXG4uZmxhZyB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICAvKiBbMV0gKi9cbiAgd2lkdGg6IDEwMCU7XG4gIC8qIFsyXSAqLyB9XG5cbi8qKlxuICAgICAqIEl0ZW1zIHdpdGhpbiBhIGZsYWcgb2JqZWN0LiBUaGVyZSBzaG91bGQgb25seSBldmVyIGJlIG9uZSBvZiBlYWNoLlxuICAgICAqXG4gICAgICogMS4gRGVmYXVsdCB0byBhbGlnbmluZyBjb250ZW50IHRvIHRoZWlyIG1pZGRsZXMuXG4gICAgICovXG4uZmxhZ19faW1nLFxuLmZsYWdfX2JvZHkge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAvKiBbMV0gKi8gfVxuXG4vKipcbiAgICAgKiBGbGFnIGltYWdlcyBoYXZlIGEgc3BhY2UgYmV0d2VlbiB0aGVtIGFuZCB0aGUgYm9keSBvZiB0aGUgb2JqZWN0LlxuICAgICAqL1xuLmZsYWdfX2ltZyB7XG4gIHBhZGRpbmctcmlnaHQ6IDI0cHg7IH1cbiAgLmZsYWdfX2ltZyA+IGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWF4LXdpZHRoOiBub25lOyB9XG5cbi8qKlxuICAgICAqIFRoZSBjb250YWluZXIgZm9yIHRoZSBtYWluIGNvbnRlbnQgb2YgdGhlIGZsYWcgb2JqZWN0LlxuICAgICAqXG4gICAgICogMS4gRm9yY2VzIHRoZSBgLmZsYWdfX2JvZHlgIHRvIHRha2UgdXAgYWxsIHJlbWFpbmluZyBzcGFjZS5cbiAgICAgKi9cbi5mbGFnX19ib2R5IHtcbiAgd2lkdGg6IDEwMCU7XG4gIC8qIFsxXSAqLyB9XG4gIC5mbGFnX19ib2R5LFxuICAuZmxhZ19fYm9keSA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG5cbi8qKlxuICAgICAqIFJldmVyc2VkIGZsYWcgb2JqZWN0cyBoYXZlIHRoZWlyIGltYWdlLWNvbnRlbnQgdG8gdGhlIHJpZ2h0LCBhbmQgdGV4dC1jb250ZW50XG4gICAgICogdG8gdGhlIGxlZnQuXG4gICAgICpcbiAgICAgKiAxLiBTd2FwIHRoZSByZW5kZXJlZCBkaXJlY3Rpb24gb2YgdGhlIG9iamVjdOKAplxuICAgICAqIDIuIOKApmFuZCByZXNldCBpdC5cbiAgICAgKiAzLiBSZWFzc2lnbiBtYXJnaW5zIHRvIHRoZSBjb3JyZWN0IHNpZGVzLlxuICAgICAqL1xuLmZsYWctLXJldiB7XG4gIGRpcmVjdGlvbjogcnRsO1xuICAvKiBbMV0gKi8gfVxuICAuZmxhZy0tcmV2ID4gLmZsYWdfX2ltZyxcbiAgLmZsYWctLXJldiA+IC5mbGFnX19ib2R5IHtcbiAgICBkaXJlY3Rpb246IGx0cjtcbiAgICAvKiBbMl0gKi8gfVxuICAuZmxhZy0tcmV2ID4gLmZsYWdfX2ltZyB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAvKiBbM10gKi9cbiAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgLyogWzNdICovIH1cblxuLyoqXG4gICAgICogUmVzcG9uc2l2ZSBmbGFnIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBUaGVyZSBpcyBhIHZlcnkgcHJhZ21hdGljLCBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgYSByZXNwb25zaXZlIGZsYWdcbiAgICAgKiBvYmplY3QsIHdoaWNoIHNpbXBseSBwbGFjZXMgdGhlIHRleHQtY29udGVudCBiZW5lYXRoIHRoZSBpbWFnZS1jb250ZW50LlxuICAgICAqXG4gICAgICogV2UgdXNlIGEgYG1heC13aWR0aGAgbWVkaWEgcXVlcnkgYmVjYXVzZTpcbiAgICAgKlxuICAgICAqIGEpIGl0IGlzIHRoZSBsZWFzdCB2ZXJib3NlIG1ldGhvZCBpbiB0ZXJtcyBvZiBhbW91bnQgb2YgY29kZSByZXF1aXJlZC5cbiAgICAgKiBiKSB0aGUgZmxhZyBvYmplY3TigJlzIGRlZmF1bHQgc3RhdGUgaXMgaW1hZ2UtbmV4dC10by10ZXh0LCBzbyBpdHMgc3RhY2tlZFxuICAgICAqICAgIHN0YXRlIGlzIHRoZSBleGNlcHRpb24sIHJhdGhlciB0aGFuIHRoZSBydWxlLlxuICAgICAqL1xuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDc5cHgpIHtcbiAgLmZsYWctLXJlc3BvbnNpdmUge1xuICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIERpc2FibGUgcmV2ZXJzYWwgb2YgY29udGVudCBiZWNhdXNlIHRoZXJlIGlzIG5vIGNvbmNlcHQgb2ZcbiAgICAgICAgICAgICAgICAgKiDigJhyZXZlcnNlZOKAmSBpbiBhIHN0YWNrZWQgbGF5b3V0LlxuICAgICAgICAgICAgICAgICAqL1xuICAgIGRpcmVjdGlvbjogbHRyO1xuICAgIC8qKlxuICAgICAgICAgICAgICogUmV3b3JrIHRoZSBzcGFjaW5ncyBvbiByZWd1bGFyIGZsYWcgb2JqZWN0cy5cbiAgICAgICAgICAgICAqLyB9XG4gICAgLmZsYWctLXJlc3BvbnNpdmUsXG4gICAgLmZsYWctLXJlc3BvbnNpdmUgPiAuZmxhZ19faW1nLFxuICAgIC5mbGFnLS1yZXNwb25zaXZlID4gLmZsYWdfX2JvZHkge1xuICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAuZmxhZy0tcmVzcG9uc2l2ZSA+IC5mbGFnX19pbWcge1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7IH0gfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI0xBWU9VVFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogVGhlIGludWl0Y3NzIGxheW91dCBzeXN0ZW0gdXNlcyBgYm94LXNpemluZzogYm9yZGVyLWJveDtgIGFuZFxuICogYGRpc3BsYXk6IGlubGluZS1ibG9jaztgIHRvIGNyZWF0ZSBhbiBleHRyZW1lbHkgcG93ZXJmdWwsIGZsZXhpYmxlXG4gKiBhbHRlcm5hdGl2ZSB0byB0aGUgdHJhZGl0aW9uYWwgZ3JpZCBzeXN0ZW0uIENvbWJpbmUgdGhlIGxheW91dCBpdGVtcyB3aXRoXG4gKiB0aGUgd2lkdGhzIGZvdW5kIGluIGB0cnVtcHMud2lkdGhzYC5cbiAqL1xuLyoqXG4gKiBCZWdpbiBhIGxheW91dCBncm91cC5cbiAqL1xuLmxheW91dCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luLWxlZnQ6IC0yNHB4OyB9XG5cbi8qKlxuICAgICAqIDEuIENhdXNlIGNvbHVtbnMgdG8gc3RhY2sgc2lkZS1ieS1zaWRlLlxuICAgICAqIDIuIFNwYWNlIGNvbHVtbnMgYXBhcnQuXG4gICAgICogMy4gQWxpZ24gY29sdW1ucyB0byB0aGUgdG9wcyBvZiBlYWNoIG90aGVyLlxuICAgICAqIDQuIEZ1bGwtd2lkdGggdW5sZXNzIHRvbGQgdG8gYmVoYXZlIG90aGVyd2lzZS5cbiAgICAgKiA1LiBSZXF1aXJlZCB0byBjb21iaW5lIGZsdWlkIHdpZHRocyBhbmQgZml4ZWQgZ3V0dGVycy5cbiAgICAgKi9cbi5sYXlvdXRfX2l0ZW0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIC8qIFsxXSAqL1xuICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gIC8qIFsyXSAqL1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAvKiBbM10gKi9cbiAgd2lkdGg6IDEwMCU7XG4gIC8qIFs0XSAqLyB9XG5cbi8qKlxuICAgICAqIExheW91dHMgd2l0aCBsYXJnZSBndXR0ZXJzLlxuICAgICAqL1xuLmxheW91dC0tbGFyZ2Uge1xuICBtYXJnaW4tbGVmdDogLTQ4cHg7IH1cbiAgLmxheW91dC0tbGFyZ2UgPiAubGF5b3V0X19pdGVtIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDQ4cHg7IH1cblxuLyoqXG4gICAgICogQWxpZ24gbGF5b3V0IGl0ZW1zIHRvIHRoZSB2ZXJ0aWNhbCBjZW50ZXJzIG9mIGVhY2ggb3RoZXIuXG4gICAgICovXG4ubGF5b3V0LS1taWRkbGUgPiAubGF5b3V0X19pdGVtIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuXG4vKipcbiAgICAgKiBBbGlnbiBsYXlvdXQgaXRlbXMgdG8gdGhlIHZlcnRpY2FsIGJvdHRvbXMgb2YgZWFjaCBvdGhlci5cbiAgICAgKi9cbi5sYXlvdXQtLWJvdHRvbSA+IC5sYXlvdXRfX2l0ZW0ge1xuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyB9XG5cbi8qKlxuICAgICAqIE1ha2UgdGhlIGxheW91dCBpdGVtcyBmaWxsIHVwIGZyb20gdGhlIGNlbnRlciBvdXR3YXJkLlxuICAgICAqL1xuLmxheW91dC0tY2VudGVyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gIC5sYXlvdXQtLWNlbnRlciA+IC5sYXlvdXRfX2l0ZW0ge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNMSVNULUJBUkVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFRoZSBsaXN0LWJhcmUgb2JqZWN0IHNpbXBseSByZW1vdmVzIGFueSBpbmRlbnRzIGFuZCBidWxsZXQgcG9pbnRzIGZyb20gbGlzdHMuXG4gKi9cbi5saXN0LWJhcmUge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNMSVNULUJMT0NLXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBUaGUgbGlzdC1ibG9jayBvYmplY3QgY3JlYXRlcyBibG9ja3kgbGlzdCBpdGVtcyBvdXQgb2YgYSBgdWxgIG9yIGBvbGAuXG4gKi9cbi5saXN0LWJsb2NrIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlOiBub25lOyB9XG5cbi5saXN0LWJsb2NrX19pdGVtLFxuLmxpc3QtYmxvY2sgPiBsaSB7XG4gIHBhZGRpbmc6IDI0cHg7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNMSVNULUlOTElORVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogVGhlIGxpc3QtaW5saW5lIG9iamVjdCBzaW1wbHkgZGlzcGxheXMgYSBsaXN0IG9mIGl0ZW1zIGluIG9uZSBsaW5lLlxuICovXG4ubGlzdC1pbmxpbmUge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7IH1cbiAgLmxpc3QtaW5saW5lID4gbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI0xJU1QtVUlcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFRoZSBVSSBsaXN0IG9iamVjdCBjcmVhdGVzIGJsb2NreSBsaXN0IGl0ZW1zIHdpdGggYSBrZXlsaW5lIHNlcGFyYXRvciBvdXQgb2ZcbiAqIGEgYHVsYCBvciBgb2xgLlxuICovXG4ubGlzdC11aSxcbi5saXN0LXVpX19pdGVtLFxuLmxpc3QtdWkgPiBsaSB7XG4gIGJvcmRlcjogMCBzb2xpZCAjZGRkOyB9XG5cbi5saXN0LXVpIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7IH1cblxuLmxpc3QtdWlfX2l0ZW0sXG4ubGlzdC11aSA+IGxpIHtcbiAgcGFkZGluZzogMjRweDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4OyB9XG5cbi8qKlxuICAgICAqIFNtYWxsIGxpc3QtdWlzLlxuICAgICAqL1xuLmxpc3QtdWktLXNtYWxsID4gLmxpc3QtdWlfX2l0ZW0sXG4ubGlzdC11aS5saXN0LXVpLS1zbWFsbCA+IGxpIHtcbiAgcGFkZGluZzogMTJweDsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI0JMT0NLXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBUaGUgYmxvY2sgb2JqZWN0IHNpbXBseSBzdGFja3MgYW4gaW1hZ2Ugb24gdG9wIG9mIHNvbWUgdGV4dC1saWtlIGNvbnRlbnQuXG4gKi9cbi8qKlxuICogU3RhY2tlZCBpbWFnZS13aXRoLXRleHQgb2JqZWN0LiBBIHNpbXBsZSBhYnN0cmFjdGlvbiB0byBjb3ZlciBhIHZlcnkgY29tbW9ubHlcbiAqIG9jY3VycmluZyBkZXNpZ24gcGF0dGVybi5cbiAqL1xuLmJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7IH1cblxuLyoqXG4gICAgICogMS4gRWxpbWluYXRlIHdoaXRlc3BhY2UgYXJvdW5kIGltYWdlcy5cbiAgICAgKi9cbi5ibG9ja19faW1nIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgLyogWzFdICovXG4gIG1hcmdpbi1ib3R0b206IDI0cHg7IH1cblxuLyoqXG4gICAgICogVGV4dC1jb250ZW50LlxuICAgICAqL1xuLmJsb2NrX19ib2R5IHtcbiAgZGlzcGxheTogYmxvY2s7IH1cblxuLyoqXG4gICAgICogQ2VudGVyLWFsaWduZWQgYmxvY2tzLlxuICAgICAqL1xuLmJsb2NrLS1jZW50ZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cblxuLyoqXG4gICAgICogTGVmdC1hbGlnbmVkIGJsb2Nrcy5cbiAgICAgKi9cbi5ibG9jay0tbGlzdCB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdzsgfVxuICAuYmxvY2stLWxpc3QgPiAuYmxvY2tfX2ltZyxcbiAgLmJsb2NrLS1saXN0ID4gLmJsb2NrX19ib2R5IHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOyB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjTUVESUFcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFBsYWNlIGFueSBpbWFnZS0gYW5kIHRleHQtbGlrZSBjb250ZW50IHNpZGUtYnktc2lkZSwgYXMgcGVyOlxuICogc3R1YmJvcm5lbGxhLm9yZy9jb250ZW50LzIwMTAvMDYvMjUvdGhlLW1lZGlhLW9iamVjdC1zYXZlcy1odW5kcmVkcy1vZi1saW5lcy1vZi1jb2RlXG4gKi9cbi5tZWRpYSB7XG4gIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5tZWRpYV9faW1nIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1hcmdpbi1yaWdodDogMjRweDsgfVxuICAubWVkaWFfX2ltZyA+IGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLm1lZGlhX19ib2R5IHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgZGlzcGxheTogYmxvY2s7IH1cbiAgLm1lZGlhX19ib2R5LFxuICAubWVkaWFfX2JvZHkgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI1BBQ0tcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFRoZSBwYWNrIG9iamVjdCBzaW1wbHkgY2F1c2VzIGFueSBudW1iZXIgb2YgZWxlbWVudHMgcGFjayB1cCBob3Jpem9udGFsbHkgdG9cbiAqIGF1dG9tYXRpY2FsbHkgZmlsbCBhbiBlcXVhbCwgZmx1aWQgd2lkdGggb2YgdGhlaXIgcGFyZW50LlxuICovXG4vKipcbiAqIDEuIEZpbGwgYWxsIGF2YWlsYWJsZSBzcGFjZS5cbiAqIDIuIENhdXNlIGNoaWxkcmVuIHRvIGJlIGF1dG9tYXRpY2FsbHkgZXF1YWxseSBzaXplZC5cbiAqL1xuLnBhY2sge1xuICB3aWR0aDogMTAwJTtcbiAgLyogWzFdICovXG4gIGRpc3BsYXk6IHRhYmxlO1xuICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuICAvKiBbMl0gKi8gfVxuXG4vKipcbiAgICAgKiBDYXVzZSBjaGlsZHJlbiB0byBhZG9wdCB0YWJsZS1saWtlIHN0cnVjdHVyZS5cbiAgICAgKi9cbi5wYWNrX19pdGVtIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI1RBQkxFU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi50YWJsZSB7XG4gIHdpZHRoOiAxMDAlOyB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjVEFCU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogQSBzaW1wbGUgYWJzdHJhY3Rpb24gZm9yIG1ha2luZyBlcXVhbC13aWR0aCBuYXZpZ2F0aW9uIHRhYnMuXG4gKi9cbi8qKlxuICogMS4gUmVzZXQgYW55IHJlc2lkdWFsIHN0eWxlcyAobW9zdCBsaWtlbHkgZnJvbSBsaXN0cykuXG4gKiAyLiBUYWJsZXMgZm9yIGxheW91dCFcbiAqIDMuIEZvcmNlIGFsbCBgdGFibGUtY2VsbGAgY2hpbGRyZW4gdG8gaGF2ZSBlcXVhbCB3aWR0aHMuXG4gKiA0LiBGb3JjZSB0aGUgb2JqZWN0IHRvIGJlIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBwYXJlbnQuIENvbWJpbmVkIHdpdGggWzJdLFxuICogICAgdGhpcyBtYWtlcyB0aGUgb2JqZWN0IGJlaGF2ZSBpbiBhIHF1YXNpLWBkaXNwbGF5OiBibG9jaztgIG1hbm5lci5cbiAqL1xuLnRhYnMge1xuICBtYXJnaW46IDA7XG4gIC8qIFsxXSAqL1xuICBwYWRkaW5nOiAwO1xuICAvKiBbMV0gKi9cbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgLyogWzFdICovXG4gIGRpc3BsYXk6IHRhYmxlO1xuICAvKiBbMl0gKi9cbiAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgLyogWzNdICovXG4gIHdpZHRoOiAxMDAlO1xuICAvKiBbNF0gKi9cbiAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG5cbi50YWJzX19pdGVtIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgLyogWzJdICovIH1cblxuLnRhYnNfX2xpbmsge1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI1BBR0UtSEVBRFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogVGhlIHNpdGXigJlzIG1haW4gcGFnZS1oZWFkIGNhbiBoYXZlIHR3byBkaWZmZXJlbnQgc3RhdGVzOlxuICpcbiAqIDEpIFJlZ3VsYXIgcGFnZS1oZWFkIHdpdGggbm8gYmFja2dyb3VuZHMgb3IgZXh0cmEgdHJlYXRtZW50czsgaXQganVzdFxuICogICAgY29udGFpbnMgdGhlIGxvZ28gYW5kIG5hdi5cbiAqIDIpIEEgbWFzdGhlYWQgdGhhdCBoYXMgYSBmbHVpZC1oZWlnaHQgKGJlY29taW5nIGZpeGVkIGFmdGVyIGEgY2VydGFpbiBwb2ludClcbiAqICAgIHdoaWNoIGhhcyBhIGxhcmdlIGJhY2tncm91bmQgaW1hZ2UsIGFuZCBzb21lIHN1cHBvcnRpbmcgdGV4dC5cbiAqXG4gKiBUaGUgcmVndWxhciBwYWdlLWhlYWQgaXMgaW5jcmVkaWJseSBzaW1wbGUsIGJ1dCB0aGUgbWFzdGhlYWQgdmVyc2lvbiBoYXMgc29tZVxuICogc2xpZ2h0bHkgaW50ZXJtaW5nbGVkIGRlcGVuZGVuY3kgd2l0aCB0aGUgd3JhcHBlciB0aGF0IGxpdmVzIGluc2lkZSBpdC5cbiAqL1xuLyoqXG4gKiAxLiBBIHNsaWdodGx5IHNtYWxsZXIgcGFkZGluZyBvbiBzbWFsbGVyIHZpZXdwb3J0cy5cbiAqIDIuIEdyb3cgdG8gZnVsbC1zaXplZCBwYWRkaW5nIG9uIGxhcmdlIGVub3VnaCB2aWV3cG9ydHMuXG4gKi9cbi5wYWdlLWhlYWQge1xuICBwYWRkaW5nLXRvcDogMTJweDtcbiAgLyogWzFdICovXG4gIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICAvKiBbMV0gKi9cbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIG1pbi1oZWlnaHQ6IDMwMHB4OyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgICAucGFnZS1oZWFkIHtcbiAgICAgIHBhZGRpbmctdG9wOiAyNHB4O1xuICAgICAgLyogWzJdICovXG4gICAgICBwYWRkaW5nLWJvdHRvbTogMjRweDtcbiAgICAgIC8qIFsyXSAqLyB9IH1cbiAgLnBhZ2UtaGVhZC50cmlhbmdsZTpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0QzQ5NDU7IH1cblxuLyoqXG4gKiBMYXJnZSBzaXRlIGhlYWRlcnMgYWN0IG1vcmUgbGlrZSBtYXN0aGVhZHMuIFRoZXkgaGF2ZSBhIGZhdXgtZmx1aWQtaGVpZ2h0XG4gKiB3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoZSB3cmFwcGluZyBlbGVtZW50IGluc2lkZSBpdC5cbiAqXG4gKiAxLiBNYXN0aGVhZHMgd2lsbCB0eXBpY2FsbHkgaGF2ZSBkYXJrIGJhY2tncm91bmRzLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZVxuICogICAgdGhlIGNvbnRyYXN0IGlzIG9rYXkuIFRoaXMgdmFsdWUgaXMgc3ViamVjdCB0byBjaGFuZ2UgYXMgdGhlIGJhY2tncm91bmRcbiAqICAgIGltYWdlIGNoYW5nZXMuXG4gKiAyLiBXZSBuZWVkIHRvIGRlbGVnYXRlIGEgbG90IG9mIHRoZSBtYXN0aGVhZOKAmXMgbGF5b3V0IHRvIGl0cyB3cmFwcGVyIGVsZW1lbnRcbiAqICAgIHJhdGhlciB0aGFuIHRoZSBtYXN0aGVhZCBpdHNlbGY6IGl0IGlzIHRvIHRoaXMgd3JhcHBlciB0aGF0IG1vc3QgdGhpbmdzXG4gKiAgICBhcmUgcG9zaXRpb25lZC5cbiAqIDMuIFRoZSB3cmFwcGVyIG5lZWRzIHBvc2l0aW9uaW5nIGNvbnRleHQgZm9yIHVzIHRvIGxheSBvdXIgbmF2IGFuZCBtYXN0aGVhZFxuICogICAgdGV4dCBpbi5cbiAqIDQuIEZhdXgtZmx1aWQtaGVpZ2h0IHRlY2huaXF1ZTogc2ltcGx5IGNyZWF0ZSB0aGUgaWxsdXNpb24gb2YgZmx1aWQgaGVpZ2h0IGJ5XG4gKiAgICBjcmVhdGluZyBzcGFjZSB2aWEgYSBwZXJjZW50YWdlIHBhZGRpbmcsIGFuZCB0aGVuIHBvc2l0aW9uIGV2ZXJ5dGhpbmcgb3ZlclxuICogICAgdGhlIHRvcCBvZiB0aGF0LiBUaGlzIHBlcmNlbnRhZ2UgZ2l2ZXMgdXMgYSAxNjo5IHJhdGlvLlxuICogNS4gV2hlbiB0aGUgdmlld3BvcnQgaXMgYXQgNzU4cHggd2lkZSwgb3VyIDE2OjkgcmF0aW8gbWVhbnMgdGhhdCB0aGUgbWFzdGhlYWRcbiAqICAgIGlzIGN1cnJlbnRseSByZW5kZXJlZCBhdCA0ODBweCBoaWdoLiBMZXTigJlz4oCmXG4gKiA2LiDigKZzZWFtbGVzc2x5IHNuaXAgb2ZmIHRoZSBmbHVpZCBmZWF0dXJlIGF0IHRoaXMgaGVpZ2h0LCBhbmTigKZcbiAqIDcuIOKApmZpeCB0aGUgaGVpZ2h0IGF0IDQ4MHB4LiBUaGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIHNlZSBubyBqdW1wcyBpbiBoZWlnaHRcbiAqICAgIGFzIHRoZSBtYXN0aGVhZCBtb3ZlcyBmcm9tIGZsdWlkIHRvIGZpeGVkLiBUaGlzIGFjdHVhbCB2YWx1ZSB0YWtlcyBpbnRvXG4gKiAgICBhY2NvdW50IHRoZSBwYWRkaW5nIGFuZCB0aGUgdG9wIGJvcmRlciBvbiB0aGUgaGVhZGVyIGl0c2VsZi5cbiAqL1xuLnBhZ2UtaGVhZC0tbWFzdGhlYWQge1xuICBiYWNrZ3JvdW5kOiB1cmwoL2Fzc2V0cy9oZXJvX2JnLmpwZykgY2VudGVyIGNlbnRlciAjMmUyNjIwO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b20gbGVmdDtcbiAgY29sb3I6ICNmZmY7XG4gIC8qIFsxXSAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgLnBhZ2UtaGVhZC0tbWFzdGhlYWQgPiAud3JhcHBlciB7XG4gICAgLyogWzJdICovXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIC8qIFszXSAqL1xuICAgIG1pbi1oZWlnaHQ6IDMyMHB4O1xuICAgIGhlaWdodDogNDB2aDtcbiAgICAvKiBbN10gKi9cbiAgICBwYWRkaW5nLXJpZ2h0OiA2cHg7XG4gICAgcGFkZGluZy1sZWZ0OiA2cHg7IH1cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gICAgICAucGFnZS1oZWFkLS1tYXN0aGVhZCA+IC53cmFwcGVyIHtcbiAgICAgICAgbWluLWhlaWdodDogNDAwcHg7XG4gICAgICAgIGhlaWdodDogNjB2aDtcbiAgICAgICAgLyogWzddICovIH0gfVxuICAucGFnZS1oZWFkLS1tYXN0aGVhZDpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgYmFja2dyb3VuZDogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlBL1BnbzhjM1puSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUlnZDJsa2RHZzlJakV3TUNVaUlHaGxhV2RvZEQwaU1UQXdKU0lnZG1sbGQwSnZlRDBpTUNBd0lERWdNU0lnY0hKbGMyVnlkbVZCYzNCbFkzUlNZWFJwYnowaWJtOXVaU0krQ2lBZ1BHeHBibVZoY2tkeVlXUnBaVzUwSUdsa1BTSm5jbUZrTFhWaloyY3RaMlZ1WlhKaGRHVmtJaUJuY21Ga2FXVnVkRlZ1YVhSelBTSjFjMlZ5VTNCaFkyVlBibFZ6WlNJZ2VERTlJakFsSWlCNU1UMGlNQ1VpSUhneVBTSXdKU0lnZVRJOUlqRXdNQ1VpUGdvZ0lDQWdQSE4wYjNBZ2IyWm1jMlYwUFNJd0pTSWdjM1J2Y0MxamIyeHZjajBpSXpBd01EQXdNQ0lnYzNSdmNDMXZjR0ZqYVhSNVBTSXdMalVpTHo0S0lDQWdJRHh6ZEc5d0lHOW1abk5sZEQwaU16QWxJaUJ6ZEc5d0xXTnZiRzl5UFNJak1EQXdNREF3SWlCemRHOXdMVzl3WVdOcGRIazlJakFpTHo0S0lDQWdJRHh6ZEc5d0lHOW1abk5sZEQwaU1UQXdKU0lnYzNSdmNDMWpiMnh2Y2owaUl6QXdNREF3TUNJZ2MzUnZjQzF2Y0dGamFYUjVQU0l3SWk4K0NpQWdQQzlzYVc1bFlYSkhjbUZrYVdWdWRENEtJQ0E4Y21WamRDQjRQU0l3SWlCNVBTSXdJaUIzYVdSMGFEMGlNU0lnYUdWcFoyaDBQU0l4SWlCbWFXeHNQU0oxY213b0kyZHlZV1F0ZFdOblp5MW5aVzVsY21GMFpXUXBJaUF2UGdvOEwzTjJaejQ9KTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDAuNSkgMCUsIHJnYmEoMCwgMCwgMCwgMC4xKSAxMDAlKTtcbiAgICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCggc3RhcnRDb2xvcnN0cj0nIzgwMDAwMDAwJywgZW5kQ29sb3JzdHI9JyMwMDAwMDAwMCcsR3JhZGllbnRUeXBlPTAgKTsgfVxuXG4vKipcbiAqIE1hc3RoZWFkcyB3aWxsIGhhdmUgc29tZSBsYXJnZSB0ZXh0IGluIHRoZW0uIExldOKAmXMgcG9zaXRpb24gdGhhdCBib3R0b20tbGVmdC5cbiAqL1xuLnBhZ2UtaGVhZF9fdGV4dCB7XG4gIG1hcmdpbjogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IGF1dG87XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LXNpemU6IDI0cHg7XG4gIGZvbnQtc2l6ZTogMS41cmVtO1xuICBsaW5lLWhlaWdodDogMTsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gICAgLnBhZ2UtaGVhZF9fdGV4dCB7XG4gICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICBmb250LXNpemU6IDNyZW07XG4gICAgICBsaW5lLWhlaWdodDogMTsgfSB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgICAucGFnZS1oZWFkX190ZXh0IHtcbiAgICAgIGZvbnQtc2l6ZTogNzJweDtcbiAgICAgIGZvbnQtc2l6ZTogNC41cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDE7IH0gfVxuXG5Aa2V5ZnJhbWVzIGZhZGVFbnRyYW5jZUV4aXQge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTgwcHgpOyB9XG4gIDMwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cbiAgODAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg4MHB4KTsgfSB9XG5cbi5wYWdlLWhlYWRfX2NvcHkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNDAlO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAtMTJweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgZm9udC1zaXplOiAyMnB4O1xuICBmb250LXNpemU6IDEuMzc1cmVtO1xuICBsaW5lLWhlaWdodDogMS4wOTA5MTtcbiAgY29sb3I6ICNmZmY7XG4gIG9wYWNpdHk6IDA7XG4gIHRleHQtc2hhZG93OiAxcHggMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gIGFuaW1hdGlvbi1uYW1lOiBmYWRlRW50cmFuY2VFeGl0O1xuICBhbmltYXRpb24tZHVyYXRpb246IDRzO1xuICBhbmltYXRpb24tZGVsYXk6IDFzO1xuICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gICAgLnBhZ2UtaGVhZF9fY29weSB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBmb250LXNpemU6IDIuMjVyZW07XG4gICAgICBsaW5lLWhlaWdodDogMS4zMzMzMzsgfSB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjSEVST1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5oZXJvIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG5cbi5oZXJvX19pbWctd3JhcHBlciB7XG4gIHRleHQtYWxpZ246IHJpZ2h0OyB9XG5cbi5oZXJvX19pbWcge1xuICBtYXJnaW46IDk2cHggYXV0byA0OHB4O1xuICBwYWRkaW5nOiAwIDI0cHg7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXgtd2lkdGg6IDMwMHB4OyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgICAuaGVyb19faW1nIHtcbiAgICAgIG1hcmdpbjogMCAwIDI0cHggMDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfSB9XG5cbi5oZXJvX19oZWFkaW5nIHtcbiAgZm9udC1zaXplOiA0OHB4O1xuICBmb250LXNpemU6IDNyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIGZvbnQtc2l6ZTogNi42NjY2N3Z3O1xuICBtYXJnaW4tYm90dG9tOiA0OHB4OyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiAxMTAwcHgpIHtcbiAgICAuaGVyb19faGVhZGluZyB7XG4gICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICBmb250LXNpemU6IDNyZW07XG4gICAgICBsaW5lLWhlaWdodDogMS4yOyB9IH1cblxuLmhlcm9fX2NvcHkge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIG1hcmdpbi1ib3R0b206IDQ4cHg7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjRlbSkge1xuICAgIC5oZXJvX19jb3B5IHtcbiAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4zNzVyZW07XG4gICAgICBsaW5lLWhlaWdodDogMS41OyB9IH1cblxuLmhlcm9fX2xvZ28ge1xuICBtYXgtd2lkdGg6IDE4MHB4O1xuICB3aWR0aDogNDB2dztcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1ib3R0b206IDEycHg7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkge1xuICAgIC5oZXJvX19sb2dvIHtcbiAgICAgIHdpZHRoOiAxODBweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7IH0gfVxuXG4uaGVyb19fZW1ibGVtcyB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gICAgLmhlcm9fX2VtYmxlbXMge1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0gfVxuXG4uaGVyb19fZW1ibGVtIHtcbiAgaGVpZ2h0OiA1MnB4O1xuICBtYXJnaW46IDAgMjRweCA0OHB4OyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgICAuaGVyb19fZW1ibGVtIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAyNHB4O1xuICAgICAgaGVpZ2h0OiA1MnB4OyB9IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNCQU5EU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5iYW5kIHtcbiAgcGFkZGluZy10b3A6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xuICBtYXJnaW4tdG9wOiAtMnB4OyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgICAuYmFuZCB7XG4gICAgICBwYWRkaW5nLXRvcDogNDhweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA0OHB4OyB9IH1cblxuLmJhbmQtLWxhcmdlIHtcbiAgcGFkZGluZy10b3A6IDQ4cHg7XG4gIHBhZGRpbmctYm90dG9tOiA0OHB4OyB9XG5cbi5iYW5kLS1oaWdobGlnaHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyB9XG5cbi5iYW5kLS10aW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsgfVxuXG4uYmFuZC0tZGFyayB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0QzQ5NDU7XG4gIGNvbG9yOiAjOUI5QjlCOyB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjUEFHRS1GT09UXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnBhZ2UtZm9vdCB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMjtcbiAgcGFkZGluZy1ib3R0b206IDA7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjRlbSkge1xuICAgIC5wYWdlLWZvb3Qge1xuICAgICAgcGFkZGluZy1ib3R0b206IDI0cHg7IH0gfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI1BBR0UtTUlDUk9cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4ucGFnZS1taWNybyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cbiAgLnBhZ2UtbWljcm8sXG4gIC5wYWdlLW1pY3JvIGEge1xuICAgIGNvbG9yOiAjNEM0OTQ1OyB9XG5cbi5wYWdlLW1pY3JvX19jb3B5IHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAyO1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI1NJVEUtTkFWXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnNpdGUtbmF2IHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBsaW5lLWhlaWdodDogMS43MTQyOTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgLyoqXG4gICAgICogSWYgdGhlIHNpdGUgbmF2IGV4aXN0cyBpbiBhIG1hc3RoZWFkLCB3ZSBhYnNvbHV0ZWx5IHBvc2l0aW9uIGl0LiBXZSBoYXZlXG4gICAgICogdG8gZG8gdGhpcyBiZWNhdXNlIHRoZSBtYXN0aGVhZCBoYXMgYSBmaXhlZCBoZWlnaHQsIHBhcnRpYWxseSBnb3Zlcm5lZCBieVxuICAgICAqIGEgZmF1eC1mbHVpZC1oZWlnaHQgdGVjaG5pcXVlIHdoaWNoIHV0aWxpc2VzIGEgemVyb2VkIGBoZWlnaHRgIGFuZCBhXG4gICAgICogbGFyZ2UgYHBhZGRpbmctdG9wYCB2YWx1ZSwgZXJnbywgd2UgKmhhdmUqIHRvIHRha2UgdGhlIG5hdiBvdXQgb2YgZmxvdy5cbiAgICAgKi8gfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gICAgLnNpdGUtbmF2IHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7IH0gfVxuICAucGFnZS1oZWFkLS1tYXN0aGVhZCAuc2l0ZS1uYXYge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDZweDtcbiAgICBsZWZ0OiA2cHg7IH1cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gICAgICAucGFnZS1oZWFkLS1tYXN0aGVhZCAuc2l0ZS1uYXYge1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAyNHB4O1xuICAgICAgICBsZWZ0OiAyNHB4OyB9IH1cblxuLnNpdGUtbmF2X19ob21lIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsb2F0OiBsZWZ0OyB9XG5cbi5zaXRlLW5hdl9fbG9nbyB7XG4gIGRpc3BsYXk6IGJsb2NrOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICAgIC5zaXRlLW5hdl9fbG9nbyB7XG4gICAgICB3aWR0aDogNjBweDtcbiAgICAgIGhlaWdodDogYXV0bztcbiAgICAgIHBhZGRpbmc6IDVweCAwOyB9IH1cblxuLnNpdGUtbmF2X19sb2dvLWZpbGwge1xuICBmaWxsOiAjRkU1OTAwOyB9XG4gIC5wYWdlLWhlYWQtLW1hc3RoZWFkIC5zaXRlLW5hdl9fbG9nby1maWxsIHtcbiAgICBmaWxsOiAjZmZmOyB9XG5cbi8qKlxuICAgICAqIE9uIHNtYWxsZXIgdmlld3BvcnRzLCB0aGUgbmF2IGlzIGEgMngyIGdyaWQgb2YgbGlua3MgdGhhdCBsaWVzIHBlcmZlY3RseVxuICAgICAqIGZsdWNoIHdpdGggdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBob21lIGxpbmsuIE9uIGxhcmdlciB2aWV3cG9ydHMsIHRoZVxuICAgICAqIG5hdiBiZWNvbWVzIGEgc2luZ2xlIHJvdyBvZiBsaW5rcyB2ZXJ0aWNhbGx5IGNlbnRyZWQgdG8gdGhlIGxvZ28sIGJ1dFxuICAgICAqIHdheSBvdmVyIHRvIHRoZSByaWdodC5cbiAgICAgKi9cbi5zaXRlLW5hdl9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gICAgLnNpdGUtbmF2X19saXN0IHtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOyB9IH1cblxuLnNpdGUtbmF2X19pdGVtIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG5cbi5zaXRlLW5hdl9fbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsaW5lLWhlaWdodDogMzJweDsgfVxuICAuc2l0ZS1uYXZfX2xpbms6aG92ZXIsIC5zaXRlLW5hdl9fbGluazphY3RpdmUsIC5zaXRlLW5hdl9fbGluazpmb2N1cyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGNvbG9yOiAjRkU1OTAwOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgICAuc2l0ZS1uYXZfX2xpbmsge1xuICAgICAgcGFkZGluZy1yaWdodDogMTJweDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDEycHg7IH0gfVxuICAucGFnZS1oZWFkLS1tYXN0aGVhZCAuc2l0ZS1uYXZfX2xpbmssIC5wYWdlLWhlYWQtLW1hc3RoZWFkIC5zaXRlLW5hdl9fbGluazpob3ZlciwgLnBhZ2UtaGVhZC0tbWFzdGhlYWQgLnNpdGUtbmF2X19saW5rOmFjdGl2ZSwgLnBhZ2UtaGVhZC0tbWFzdGhlYWQgLnNpdGUtbmF2X19saW5rOmZvY3VzIHtcbiAgICBjb2xvcjogI2ZmZjsgfVxuXG4vKipcbiAgICAgICAgICAgICAqIFRoZSBjdXJyZW50IHN0YXRlIGZvciB0aGUgbmF2IChpbiBsYXJnZS1zY3JlZW4gdmlldykgaXMgYSBub3RjaGVkXG4gICAgICAgICAgICAgKiBvdXQgdHJpYW5nbGUgbHlpbmcgdG93YXJkIHRoZSBib3R0b20gb2YgdGhlIHBhZ2UgaGVhZC4gV2UgYXBwbHlcbiAgICAgICAgICAgICAqIHRoaXMgc3R5bGluZyB0byBhIHNpbGVudCBjbGFzcyB3aGljaCB3ZSB0aGVuIGV4dGVuZCBvdXQgb2YgdGhlXG4gICAgICAgICAgICAgKiBsb29wIGJlbG93LlxuICAgICAgICAgICAgICovXG4ucGFnZS0tYWJvdXQgLnNpdGUtbmF2X19hYm91dCwgLnBhZ2UtLXNwZWFraW5nIC5zaXRlLW5hdl9fc3BlYWtpbmcsIC5wYWdlLS1jYXNlLXN0dWRpZXMgLnNpdGUtbmF2X19jYXNlLXN0dWRpZXMsIC5wYWdlLS1oaXJlLW1lIC5zaXRlLW5hdl9faGlyZS1tZSB7XG4gIGNvbG9yOiAjRkU1OTAwOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgICAucGFnZS0tYWJvdXQgLnNpdGUtbmF2X19hYm91dCwgLnBhZ2UtLXNwZWFraW5nIC5zaXRlLW5hdl9fc3BlYWtpbmcsIC5wYWdlLS1jYXNlLXN0dWRpZXMgLnNpdGUtbmF2X19jYXNlLXN0dWRpZXMsIC5wYWdlLS1oaXJlLW1lIC5zaXRlLW5hdl9faGlyZS1tZSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAgIC5wYWdlLS1hYm91dCAuc2l0ZS1uYXZfX2Fib3V0OmJlZm9yZSwgLnBhZ2UtLXNwZWFraW5nIC5zaXRlLW5hdl9fc3BlYWtpbmc6YmVmb3JlLCAucGFnZS0tY2FzZS1zdHVkaWVzIC5zaXRlLW5hdl9fY2FzZS1zdHVkaWVzOmJlZm9yZSwgLnBhZ2UtLWhpcmUtbWUgLnNpdGUtbmF2X19oaXJlLW1lOmJlZm9yZSwgLnBhZ2UtLWFib3V0IC5zaXRlLW5hdl9fYWJvdXQ6YWZ0ZXIsIC5wYWdlLS1zcGVha2luZyAuc2l0ZS1uYXZfX3NwZWFraW5nOmFmdGVyLCAucGFnZS0tY2FzZS1zdHVkaWVzIC5zaXRlLW5hdl9fY2FzZS1zdHVkaWVzOmFmdGVyLCAucGFnZS0taGlyZS1tZSAuc2l0ZS1uYXZfX2hpcmUtbWU6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgICAgIC5wYWdlLS1hYm91dCAuc2l0ZS1uYXZfX2Fib3V0OmJlZm9yZSwgLnBhZ2UtLXNwZWFraW5nIC5zaXRlLW5hdl9fc3BlYWtpbmc6YmVmb3JlLCAucGFnZS0tY2FzZS1zdHVkaWVzIC5zaXRlLW5hdl9fY2FzZS1zdHVkaWVzOmJlZm9yZSwgLnBhZ2UtLWhpcmUtbWUgLnNpdGUtbmF2X19oaXJlLW1lOmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci13aWR0aDogMTJweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2YyZjJmMjtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xuICAgICAgICBib3R0b206IC0yNHB4OyB9XG4gICAgICAucGFnZS0tYWJvdXQgLnNpdGUtbmF2X19hYm91dDphZnRlciwgLnBhZ2UtLXNwZWFraW5nIC5zaXRlLW5hdl9fc3BlYWtpbmc6YWZ0ZXIsIC5wYWdlLS1jYXNlLXN0dWRpZXMgLnNpdGUtbmF2X19jYXNlLXN0dWRpZXM6YWZ0ZXIsIC5wYWdlLS1oaXJlLW1lIC5zaXRlLW5hdl9faGlyZS1tZTphZnRlciB7XG4gICAgICAgIGJvcmRlci13aWR0aDogMTFweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMXB4O1xuICAgICAgICBib3R0b206IC0yNXB4OyB9IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNCVVRUT05TXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmJ0biB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogMC4ycztcbiAgLW1vei10cmFuc2l0aW9uOiAwLjJzO1xuICB0cmFuc2l0aW9uOiAwLjJzO1xuICBsaW5lLWhlaWdodDogMTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAuYnRuOmhvdmVyLCAuYnRuOmFjdGl2ZSwgLmJ0bjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2NiNDcwMDtcbiAgICBib3JkZXItY29sb3I6ICNjYjQ3MDA7IH1cblxuLmJ0bi0tc2Vjb25kYXJ5IHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgY29sb3I6ICNGRTU5MDA7IH1cblxuLmJ0bi0tcG9zaXRpdmUge1xuICBmb250LXdlaWdodDogMzAwOyB9XG4gIC5idG4tLXBvc2l0aXZlLCAuYnRuLS1wb3NpdGl2ZTpob3ZlciwgLmJ0bi0tcG9zaXRpdmU6YWN0aXZlLCAuYnRuLS1wb3NpdGl2ZTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzNmOTkwZjtcbiAgICBib3JkZXItY29sb3I6ICMzZjk5MGY7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNCT1hFU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5ib3gge1xuICBib3JkZXItcmFkaXVzOiA1cHg7IH1cblxuLmJveC0taGlnaGxpZ2h0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7IH1cblxuLmJveC0tdGludCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNQT1NUXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnBvc3RfX2RhdGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICM4NzgwN0E7XG4gIG1hcmdpbi1ib3R0b206IDA7IH1cblxuLnBvc3RfX3RpdGxlIHtcbiAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAucG9zdF9fdGl0bGUgPiBhIHtcbiAgICBmb250LXdlaWdodDogMzAwOyB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjUFVMTC1RVU9URVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5wdWxsLXF1b3RlIHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIGNvbG9yOiAjODc4MDdBO1xuICBwYWRkaW5nLWxlZnQ6IDEycHg7XG4gIGJvcmRlci1sZWZ0OiAxMnB4IHNvbGlkICNmMmYyZjI7XG4gIG1hcmdpbi1yaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6IDA7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkge1xuICAgIC5wdWxsLXF1b3RlIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMjRweDsgfSB9XG5cbi5wdWxsLXF1b3RlX19zb3VyY2Uge1xuICBmb250LXN0eWxlOiBub3JtYWw7IH1cblxuLyoqXG4gKiBCYW5uZXItc3R5bGUgcXVvdGVzLCB1c2VkIHByaW1hcmlseSBpbiB0aGUgaG9tZXBhZ2UgY2Fyb3VzZWwuIFVuZm9ydHVuYXRlbHlcbiAqIHdlIG5lZWQgdG8gdW5kbyBhIGZldyB0aGluZ3MgdGhhdCB3ZeKAmWQgYWxyZWFkeSBzZXQgcHJldmlvdXNseS5cbiAqL1xuLnB1bGwtcXVvdGUtLWJhbm5lciB7XG4gIG1heC13aWR0aDogMjZlbTtcbiAgcGFkZGluZzogMCAxMnB4O1xuICB0ZXh0LWluZGVudDogMDtcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBjb2xvcjogIzRDNDk0NTtcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgICAucHVsbC1xdW90ZS0tYmFubmVyIHtcbiAgICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7IH0gfVxuXG4vKipcbiAqIFB1bGwgcXVvdGVzIHRoYXQgc2l0IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGVpciBzdXJyb3VuZGluZyBjb3B5LlxuICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gIC5wdWxsLXF1b3RlLS1jb250ZXh0IHtcbiAgICB3aWR0aDogNTAlO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1yaWdodDogMjRweDsgfSB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgLnB1bGwtcXVvdGUtLWNvbnRleHQtYWx0IHtcbiAgICB3aWR0aDogNTAlO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBtYXJnaW4tbGVmdDogMjRweDsgfSB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjQ0FST1VTRUxcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4uY2Fyb3VzZWwge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG5cbi5jYXJvdXNlbF9fcGFuZXMge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogdGFibGU7XG4gIHdpZHRoOiA1MDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LWZpbHRlcjogYmx1cigwKTtcbiAgLW1vei1maWx0ZXI6IGJsdXIoMCk7XG4gIGZpbHRlcjogYmx1cigwKTtcbiAgLXdlYmtpdC1hbmltYXRpb246IGNhcm91c2VsIDQ1cyBhbHRlcm5hdGUgaW5maW5pdGU7XG4gIC1tb3otYW5pbWF0aW9uOiBjYXJvdXNlbCA0NXMgYWx0ZXJuYXRlIGluZmluaXRlO1xuICBhbmltYXRpb246IGNhcm91c2VsIDQ1cyBhbHRlcm5hdGUgaW5maW5pdGU7IH1cblxuLmNhcm91c2VsX19wYW5lczpob3ZlciB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLXBsYXktc3RhdGU6IHBhdXNlZDtcbiAgLW1vei1hbmltYXRpb24tcGxheS1zdGF0ZTogcGF1c2VkO1xuICBhbmltYXRpb24tcGxheS1zdGF0ZTogcGF1c2VkOyB9XG5cbi5jYXJvdXNlbF9fcGFuZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDIwJTtcbiAgLyogMTAwIC8gbnVtYmVyIG9mIHBhbmVzICovIH1cblxuLmNhcm91c2VsX19saW5rIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuICBmb250LXdlaWdodDogMzAwO1xuICAtd2Via2l0LXRyYW5zaXRpb246IDAuMnMgYm9yZGVyLWNvbG9yO1xuICAtbW96LXRyYW5zaXRpb246IDAuMnMgYm9yZGVyLWNvbG9yO1xuICB0cmFuc2l0aW9uOiAwLjJzIGJvcmRlci1jb2xvcjsgfVxuICAuY2Fyb3VzZWxfX2xpbms6aG92ZXIsIC5jYXJvdXNlbF9fbGluazphY3RpdmUsIC5jYXJvdXNlbF9fbGluazpmb2N1cyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNjNGM0YzQ7IH1cblxuLyoqXG4gKiBTY3JvbGwgdGhlIGNhcm91c2VsIChhbGwgaGFyZC1jb2RlZDsgeXVrISkgYW5kIGFwcGx5IGEgc3VidGxlIGJsdXIgdG8gaW1wbHlcbiAqIG1vdGlvbi9zcGVlZC4gRXF1YXRpb24gZm9yIHRoZSBjYXJvdXNlbOKAmXMgdHJhbnNpdGlvbmluZyBhbmQgZGVsYXllZCBwb2ludHMgaW5cbiAqIG9yZGVyIHRvIGNvbXBsZXRlIGFuIGVudGlyZSBhbmltYXRpb24gKGkuZS4gMTAwJSk6XG4gKlxuICogbnggKyAobi0xKXkgPSAxMDBcbiAqXG4gKiB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2Ygc2xpZGVzLCB4IGlzIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBhbmltYXRpb24gc3BlbnRcbiAqIHN0YXRpYywgYW5kIHkgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGFuaW1hdGlvbiBzcGVudCBhbmltYXRpbmcuXG4gKlxuICogVGhpcyBjYXJvdXNlbCBoYXMgZml2ZSBwYW5lcywgc286XG4gKlxuICogNXggKyAoNS0xKXkgPSAxMDBcbiAqXG4gKiBUbyB3b3JrIG91dCB5IGlmIHdlIGtub3cgbiBhbmQgZGVjaWRlIG9uIGEgdmFsdWUgZm9yIHg6XG4gKlxuICogKDEwMCAtIChuICogeCkpIC8gbi0xID0geVxuICpcbiAqIElmIHdlIGNob29zZSB0aGF0IHggZXF1YWxzIDE3LjUgKGkuZS4gYSBmcmFtZSBzcGVuZHMgMTcuNSUgb2YgdGhlIGFuaW1hdGlvbuKAmXNcbiAqIHRvdGFsIHRpbWUgKm5vdCogYW5pbWF0aW5nKSwgYW5kIHdlIGtub3cgdGhhdCBuIGVxdWFscyA1LCB0aGVuIHkgPSAzLjEyNTpcbiAqXG4gKiAoMTAwIC0gKDUgKiAxNy41KSkgLyA0ID0gMy4xMjVcbiAqXG4gKiBTdGF0aWMgZm9yIDE3LjUlLCB0cmFuc2l0aW9uIGZvciAzLjEyNSUsIGFuZCBzbyBvbiwgdW50aWwgd2UgaGl0IDEwMCUuXG4gKlxuICogSWYgd2Ugd2VyZSB0byBjaG9vc2UgdGhhdCB4IGVxdWFscyAxNSwgdGhlbiB3ZSB3b3VsZCBmaW5kIHRoYXQgeSBlcXVhbHMgNi4yNTpcbiAqXG4gKiAoMTAwIC0gKDUgKiAxNSkpIC8gNCA9IDYuMjVcbiAqXG4gKiBJZiB5IGNvbWVzIG91dCBhcyB6ZXJvLW9yLWJlbG93LCBpdCBtZWFucyB0aGUgbnVtYmVyIHdlIGNob3NlIGZvciB4IHdhcyB0b29cbiAqIGxhcmdlOiBwaWNrIGFnYWluLlxuICpcbiAqIE4uQi4gV2UgYWxzbyBpbmNsdWRlIGEgaGFsZndheSBwb2ludCBpbiB0aGUgbWlkZGxlIG9mIG91ciB0cmFuc2l0aW9uaW5nXG4gKiAgICAgIGZyYW1lcyB0byB3aGljaCB3ZSBhcHBseSBhIHN1YnRsZSBibHVyLiBUaGlzIG51bWJlciBpcyBkZXJpdmVkIGZyb206XG4gKlxuICogICAgICAoYSAqIHgpICsgKGEtMSAqIHkpICsgKHkgLyAyKVxuICpcbiAqICAgICAgd2hlcmUgYSBpcyB0aGUgZnJhbWUgaW4gcXVlc3Rpb24gKG91dCBvZiBuIGZyYW1lcykuXG4gKlxuICogICAgICBUaGUgaGFsZndheSBwb2ludCBiZXR3ZWVuIGZyYW1lcyAzIGFuZCA0IGlzOlxuICpcbiAqICAgICAgKDMgKiAxNy41KSArICgyICogMy4xMjUpICsgKDMuMTI1IC8gMikgPSA2MC4zMTI1XG4gKlxuICogSeKAmW0gcHJldHR5IHN1cmUgdGhpcyBpcyBhbGwgYSBtZXNzLiBUbyBhbnkga2luZCBwZXJzb24gcmVhZGluZyB0aGlzIHdobyB3b3VsZFxuICogYmUgYWJsZSB0byBpbXByb3ZlIGl0LCBJIHdvdWxkIGJlIHZlcnkgZ3JhdGVmdWwgaWYgeW91IHdvdWxkIGFkdmlzZSA6KVxuICovXG5ALXdlYmtpdC1rZXlmcmFtZXMgY2Fyb3VzZWwge1xuICAwJSxcbiAgMTcuNSUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICAtd2Via2l0LWZpbHRlcjogYmx1cigwKTsgfVxuICAyMC42MjUlLFxuICAzOC4xMjUlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTIwJSwgMCwgMCk7XG4gICAgLXdlYmtpdC1maWx0ZXI6IGJsdXIoMCk7IH1cbiAgNDEuMjUlLFxuICA1OC43NSUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtNDAlLCAwLCAwKTtcbiAgICAtd2Via2l0LWZpbHRlcjogYmx1cigwKTsgfVxuICA2MS44NzUlLFxuICA3OS4zNzUlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTYwJSwgMCwgMCk7XG4gICAgLXdlYmtpdC1maWx0ZXI6IGJsdXIoMCk7IH1cbiAgODIuNSUsXG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtODAlLCAwLCAwKTtcbiAgICAtd2Via2l0LWZpbHRlcjogYmx1cigwKTsgfVxuICAxOS4wNjI1JSxcbiAgMzkuNjg3NSUsXG4gIDYwLjMxMjUlLFxuICA4MC45Mzc1JSB7XG4gICAgLXdlYmtpdC1maWx0ZXI6IGJsdXIoMnB4KTsgfSB9XG5cbkAtbW96LWtleWZyYW1lcyBjYXJvdXNlbCB7XG4gIDAlLFxuICAxNy41JSB7XG4gICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICAgIC1tb3otZmlsdGVyOiBibHVyKDApOyB9XG4gIDIwLjYyNSUsXG4gIDM4LjEyNSUge1xuICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMjAlLCAwLCAwKTtcbiAgICAtbW96LWZpbHRlcjogYmx1cigwKTsgfVxuICA0MS4yNSUsXG4gIDU4Ljc1JSB7XG4gICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC00MCUsIDAsIDApO1xuICAgIC1tb3otZmlsdGVyOiBibHVyKDApOyB9XG4gIDYxLjg3NSUsXG4gIDc5LjM3NSUge1xuICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtNjAlLCAwLCAwKTtcbiAgICAtbW96LWZpbHRlcjogYmx1cigwKTsgfVxuICA4Mi41JSxcbiAgMTAwJSB7XG4gICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC04MCUsIDAsIDApO1xuICAgIC1tb3otZmlsdGVyOiBibHVyKDApOyB9XG4gIDE5LjA2MjUlLFxuICAzOS42ODc1JSxcbiAgNjAuMzEyNSUsXG4gIDgwLjkzNzUlIHtcbiAgICAtbW96LWZpbHRlcjogYmx1cigycHgpOyB9IH1cblxuQGtleWZyYW1lcyBjYXJvdXNlbCB7XG4gIDAlLFxuICAxNy41JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICBmaWx0ZXI6IGJsdXIoMCk7IH1cbiAgMjAuNjI1JSxcbiAgMzguMTI1JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMjAlLCAwLCAwKTtcbiAgICBmaWx0ZXI6IGJsdXIoMCk7IH1cbiAgNDEuMjUlLFxuICA1OC43NSUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTQwJSwgMCwgMCk7XG4gICAgZmlsdGVyOiBibHVyKDApOyB9XG4gIDYxLjg3NSUsXG4gIDc5LjM3NSUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTYwJSwgMCwgMCk7XG4gICAgZmlsdGVyOiBibHVyKDApOyB9XG4gIDgyLjUlLFxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC04MCUsIDAsIDApO1xuICAgIGZpbHRlcjogYmx1cigwKTsgfVxuICAxOS4wNjI1JSxcbiAgMzkuNjg3NSUsXG4gIDYwLjMxMjUlLFxuICA4MC45Mzc1JSB7XG4gICAgZmlsdGVyOiBibHVyKDJweCk7IH0gfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI0lDT05JQ1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5pY29uaWMge1xuICB3aWR0aDogNjRweDtcbiAgaGVpZ2h0OiA2NHB4OyB9XG4gIC5pY29uaWMgcGF0aCB7XG4gICAgZmlsbDogI2RkZDsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI1NQUklURVNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEEgc2ltcGxlIHNwcml0aW5nIGVsZW1lbnQgYWJzdHJhY3Rpb24uXG4gKlxuICogMS4gVGhlIGRlZmF1bHQgd2lkdGggb2YgbW9zdCBpY29ucyBvbiB0aGUgd2ViLiBPdmVycmlkZSBhcyBuZWNlc3NhcnkuXG4gKiAyLiBBbGlnbiBhbGwgc3ByaXRlcyB0byB0aGUgbWlkZGxlcyBvZiB3aGF0ZXZlciBjb250ZW50IHRoZXkgYXJlIGFsb25nc2lkZS5cbiAqIDMuIEFsdGhvdWdoIHdlIGhhdmUgdXNlZCBgdmVydGljYWwtYWxpZ246IG1pZGRsZTtgLCB3ZSBvZnRlbiBuZWVkIHRvIG51ZGdlXG4gKiAgICBzcHJpdGVzIHVwIGJ5IGEgcGl4ZWwgdG8gaGF2ZSB0aGVtIGxvb2sgY29ycmVjdCBvcHRpY2FsbHkuXG4gKiA0LiBIaWRlIGFueSB0ZXh0IHRoYXQgd2UgbWlnaHQgYmUgaW1hZ2UtcmVwbGFjaW5nLlxuICovXG4uc3ByaXRlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTZweDtcbiAgLyogWzFdICovXG4gIGhlaWdodDogMTZweDtcbiAgLyogWzFdICovXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIC8qIFsyXSAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8qIFszXSAqL1xuICB0b3A6IC0xcHg7XG4gIC8qIFszXSAqL1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAvKiBbNF0gKi9cbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLyogWzRdICovXG4gIHRleHQtaW5kZW50OiAxMDAlO1xuICAvKiBbNF0gKi9cbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9jc3Mvc3ByaXRlcy9tYWluLnBuZyk7IH1cblxuLnNwcml0ZS0tdWsge1xuICBoZWlnaHQ6IDExcHg7IH1cblxuLnNwcml0ZS0tbmwge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAwO1xuICBoZWlnaHQ6IDExcHg7IH1cblxuLnNwcml0ZS0tZGUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAwO1xuICBoZWlnaHQ6IDExcHg7IH1cblxuLnNwcml0ZS0taHIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAwO1xuICBoZWlnaHQ6IDExcHg7IH1cblxuLnNwcml0ZS0tbm8ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMXB4O1xuICBoZWlnaHQ6IDExcHg7IH1cblxuLnNwcml0ZS0tcGwge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTFweDtcbiAgaGVpZ2h0OiAxMXB4OyB9XG5cbi5zcHJpdGUtLXJvIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTExcHg7XG4gIGhlaWdodDogMTFweDsgfVxuXG4uc3ByaXRlLS1jaCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMXB4O1xuICBoZWlnaHQ6IDExcHg7IH1cblxuLnNwcml0ZS0tZnIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAwO1xuICBoZWlnaHQ6IDExcHg7IH1cblxuLnNwcml0ZS0tcnMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTFweDtcbiAgaGVpZ2h0OiAxMXB4OyB9XG5cbi5zcHJpdGUtLWF1IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggMDtcbiAgaGVpZ2h0OiAxMXB4OyB9XG5cbi5zcHJpdGUtLWl0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTExcHg7XG4gIGhlaWdodDogMTFweDsgfVxuXG4uc3ByaXRlLS1maSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IDA7XG4gIGhlaWdodDogMTFweDsgfVxuXG4uc3ByaXRlLS11eSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMXB4O1xuICBoZWlnaHQ6IDExcHg7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNGRUFUVVJFLUxJU1RcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4uZmVhdHVyZS1saXN0IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwOyB9XG5cbi5mZWF0dXJlLWxpc3RfX2l0ZW0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMTIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgcGFkZGluZy1sZWZ0OiAxMDBweDsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gICAgLmZlYXR1cmUtbGlzdF9faXRlbSB7XG4gICAgICB3aWR0aDogNTAlO1xuICAgICAgcGFkZGluZzogMCAuNWVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjRlbSkge1xuICAgIC5mZWF0dXJlLWxpc3RfX2l0ZW0ge1xuICAgICAgd2lkdGg6IDMzLjMzMzMzMyU7XG4gICAgICBwYWRkaW5nOiAwIC41ZW07XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0gfVxuXG4uZmVhdHVyZS1saXN0X19pbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiA4MHB4O1xuICBoZWlnaHQ6IDgwcHg7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gICAgLmZlYXR1cmUtbGlzdF9faW1nIHtcbiAgICAgIHdpZHRoOiAxNjBweDtcbiAgICAgIGhlaWdodDogMTYwcHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyZW07XG4gICAgICBwb3NpdGlvbjogc3RhdGljOyB9IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNGRUFUVVJFLUxJU1RcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFRoZSBmZWF0dXJlIGxpc3QgY29tcG9uZW50IGhvdXNlcyBsYXJnZSwgc2hvd2Nhc2Utc3R5bGUgYmxvY2tzIG9mIGNvbnRlbnQuIEl0XG4gKiBpcyBjdXJyZW50bHkgdXNlZCBvbiB0aGUgQ2FzZSBTdHVkaWVzIHBhZ2UuXG4gKi9cbi5nYWxsZXJ5LWxpc3Qge1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbWFyZ2luLWJvdHRvbTogNGVtOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgICAuZ2FsbGVyeS1saXN0IHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBtYXJnaW4tdG9wOiA5ZW07XG4gICAgICBtYXJnaW4tbGVmdDogLTMlO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtMyU7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg1ZGVnKTsgfSB9XG5cbi5nYWxsZXJ5LWxpc3RfX2l0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gIGhlaWdodDogMjgwcHg7IH1cbiAgLmdhbGxlcnktbGlzdF9faXRlbTpiZWZvcmUsIC5nYWxsZXJ5LWxpc3RfX2l0ZW06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBoZWlnaHQ6IDEwMHB4O1xuICAgIHdpZHRoOiA0MDAwcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgICB6LWluZGV4OiAxO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDVkZWcpOyB9XG4gIC5nYWxsZXJ5LWxpc3RfX2l0ZW06YmVmb3JlIHtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDEwMCU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAtMjIwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtMjAwMHB4OyB9XG4gIC5nYWxsZXJ5LWxpc3RfX2l0ZW06YWZ0ZXIge1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMTAwJTtcbiAgICBib3R0b206IDEzMHB4O1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLTIwMDBweDsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NGVtKSB7XG4gICAgLmdhbGxlcnktbGlzdF9faXRlbSB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMlO1xuICAgICAgLyogWzFdICovXG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZyk7XG4gICAgICBoZWlnaHQ6IDM2MHB4OyB9XG4gICAgICAuZ2FsbGVyeS1saXN0X19pdGVtOmJlZm9yZSwgLmdhbGxlcnktbGlzdF9faXRlbTphZnRlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAgIC5nYWxsZXJ5LWxpc3RfX2l0ZW06bnRoLWNoaWxkKDNuICsgMSk6bnRoLWxhc3QtY2hpbGQoMiksIC5nYWxsZXJ5LWxpc3RfX2l0ZW06bnRoLWNoaWxkKDNuICsgMSk6bnRoLWxhc3QtY2hpbGQoMikgKyBsaSB7XG4gICAgICAgIHdpZHRoOiA1MCU7IH1cbiAgICAgIC5nYWxsZXJ5LWxpc3RfX2l0ZW06bnRoLWNoaWxkKDNuKzEpOmxhc3QtY2hpbGQge1xuICAgICAgICB3aWR0aDogMTAwJTsgfSB9XG5cbi8qKlxuICAgICAgICAgKiAxLiBGYXV4IGZsdWlkIGhlaWdodCBpbiAxNjo5IHJhdGlvLlxuICAgICAgICAgKiAyLiBTcGFjZSBpdGVtcyBhcGFydCBieSB0d28gcGl4ZWxz4oCmXG4gICAgICAgICAqIDMuIOKApmV4Y2VwdCB0aGUgZmlyc3Qgcm93IGFuZCBmaXJzdCBjb2x1bW4uXG4gICAgICAgICAqL1xuLmdhbGxlcnktbGlzdF9fbGluayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkU1OTAwO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB9XG4gIC5nYWxsZXJ5LWxpc3RfX2xpbms6aG92ZXIgLmdhbGxlcnktbGlzdF9fdGl0bGUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLjA1LCAxLjA1LCAxKSB0cmFuc2xhdGVZKC01MCUpOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgICAuZ2FsbGVyeS1saXN0X19saW5rIHtcbiAgICAgIHRvcDogLTIwJTtcbiAgICAgIGJvdHRvbTogLTIwJTsgfSB9XG5cbi5nYWxsZXJ5LWxpc3RfX3N0YXRlIHtcbiAgZGlzcGxheTogbm9uZTsgfVxuICAuZ2FsbGVyeS1saXN0X19zdGF0ZTpjaGVja2VkICsgLmdhbGxlcnktbGlzdF9fcmV2ZWFsIHtcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgLmdhbGxlcnktbGlzdF9fc3RhdGU6Y2hlY2tlZCB+IC5nYWxsZXJ5LWxpc3RfX3RpdGxlIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogMTA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEuMDUsIDEuMDUsIDEpIHRyYW5zbGF0ZVkoLTUwJSk7IH1cblxuLmdhbGxlcnktbGlzdF9fY2xvc2Uge1xuICBkaXNwbGF5OiBub25lOyB9XG4gIC5nYWxsZXJ5LWxpc3RfX2Nsb3NlOmNoZWNrZWQgKyAuZ2FsbGVyeS1saXN0X19jbG9zZS1idG4ge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLmdhbGxlcnktbGlzdF9fY2xvc2U6bm90KDpjaGVja2VkKSB+IC5nYWxsZXJ5LWxpc3RfX2NvbnRhaW5lciAudGludCB7XG4gICAgZmlsdGVyOiBub25lO1xuICAgIHRyYW5zZm9ybTogbm9uZTsgfVxuICAuZ2FsbGVyeS1saXN0X19jbG9zZTpub3QoOmNoZWNrZWQpIH4gLmdhbGxlcnktbGlzdF9fY29udGFpbmVyIC50cmlhbmdsZSB7XG4gICAgei1pbmRleDogaW5oZXJpdDsgfVxuICAuZ2FsbGVyeS1saXN0X19jbG9zZTpub3QoOmNoZWNrZWQpIH4gLmdhbGxlcnktbGlzdF9fY29udGFpbmVyIC5nYWxsZXJ5LWxpc3QsIC5nYWxsZXJ5LWxpc3RfX2Nsb3NlOm5vdCg6Y2hlY2tlZCkgfiAuZ2FsbGVyeS1saXN0X19jb250YWluZXIgLmdhbGxlcnktbGlzdF9faXRlbSB7XG4gICAgdHJhbnNmb3JtOiBub25lOyB9XG4gIC5nYWxsZXJ5LWxpc3RfX2Nsb3NlOm5vdCg6Y2hlY2tlZCkgKyAuZ2FsbGVyeS1saXN0X19jbG9zZS1idG4ge1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5nYWxsZXJ5LWxpc3RfX2NvbnRhaW5lciB7XG4gIGhlaWdodDogYXV0bzsgfVxuXG4uZ2FsbGVyeS1saXN0X19jbG9zZS1idG4ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAxMnB4O1xuICB0b3A6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDJweCBzb2xpZCB3aGl0ZTtcbiAgei1pbmRleDogOTtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLmdhbGxlcnktbGlzdF9fcmV2ZWFsIHtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiA4O1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB9XG5cbi8qKlxuICAgICAgICAgICAgICogU2l0IGxpbmsgdGV4dCBvdmVyIHRoZSB0b3Agb2YgdGhlIGxpc3QgaXRlbS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiAxLiBDZW50ZXIgdGhlIHRleHQtYm94IHZlcnRpY2FsbHkgaW4gdGhlIGxpc3QgaXRlbS5cbiAgICAgICAgICAgICAqIDIuIE9wdGljYWxseSBzaXQgdGhlIHRleHQgaXRzZWxmIGNlbnRyYWxseSBpbiB0aGUgbGlzdCBpdGVtLlxuICAgICAgICAgICAgICovXG4uZ2FsbGVyeS1saXN0X190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBmb250LXdlaWdodDogNzAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIC8qIFsxXSAqL1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgcGFkZGluZzogMTJweCA0OHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICB0cmFuc2l0aW9uOiBhbGwgLjVzIGVhc2UtaW4tb3V0O1xuICBtYXJnaW46IDA7XG4gIHRleHQtc2hhZG93OiAwcHggMHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjgpOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgICAuZ2FsbGVyeS1saXN0X190aXRsZSB7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgICBsaW5lLWhlaWdodDogMS41OyB9IH1cblxuLmdhbGxlcnktbGlzdF9fc3ViIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNzE0Mjk7XG4gIG1hcmdpbi10b3A6IDZweDsgfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI0FOTk9UQVRFXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmFubm90YXRlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG5cbi5hbm5vdGF0ZV9faW1hZ2Uge1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm9yZGVyLXJhZGl1czogNXB4OyB9XG5cbi5hbm5vdGF0ZV9fbGlzdCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbjogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7IH1cblxuLmFubm90YXRlX19pdGVtIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogNSU7XG4gIGhlaWdodDogNSU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtaW5kZW50OiAxMDAlO1xuICBjdXJzb3I6IGhlbHA7XG4gIGJvcmRlci13aWR0aDogMnB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogMC4ycztcbiAgLW1vei10cmFuc2l0aW9uOiAwLjJzO1xuICB0cmFuc2l0aW9uOiAwLjJzOyB9XG4gIC5hbm5vdGF0ZTpob3ZlciAuYW5ub3RhdGVfX2l0ZW0ge1xuICAgIGJvcmRlci1jb2xvcjogI2NjYztcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgfVxuICAgIC5hbm5vdGF0ZTpob3ZlciAuYW5ub3RhdGVfX2l0ZW06aG92ZXIge1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIGJvcmRlci1jb2xvcjogI2ZmZjsgfVxuXG4uYW5ub3RhdGVfX2NhcHRpb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7IH1cblxuLnRyaWFuZ2xlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiA1O1xuICBtaW4taGVpZ2h0OiAyODBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTAwcHg7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkge1xuICAgIC50cmlhbmdsZSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNjJweDsgfSB9XG4gIC50cmlhbmdsZS50cmlhbmdsZS0tc3RhcnQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgICAudHJpYW5nbGUudHJpYW5nbGUtLXN0YXJ0OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLnRyaWFuZ2xlLnRyaWFuZ2xlLS1lbmQ6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG5cbi50cmlhbmdsZTpiZWZvcmUsIC50cmlhbmdsZTphZnRlciB7XG4gIGNvbnRlbnQ6ICcnO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMzAwMHB4O1xuICBoZWlnaHQ6IDEwMHB4O1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMTUwMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICB6LWluZGV4OiAtMTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkge1xuICAgIC50cmlhbmdsZTpiZWZvcmUsIC50cmlhbmdsZTphZnRlciB7XG4gICAgICBoZWlnaHQ6IDMwMHB4OyB9IH1cblxuLnRyaWFuZ2xlOmJlZm9yZSB7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMDtcbiAgdG9wOiA4MHB4OyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgICAudHJpYW5nbGU6YmVmb3JlIHtcbiAgICAgIHRvcDogMDsgfSB9XG5cbi50cmlhbmdsZTphZnRlciB7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAlIDEwMCU7XG4gIGJvdHRvbTogODBweDsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gICAgLnRyaWFuZ2xlOmFmdGVyIHtcbiAgICAgIGJvdHRvbTogMDsgfSB9XG5cbi50cmlhbmdsZV9fY29udGVudC0tYWRqdXN0IHtcbiAgbWFyZ2luLXRvcDogLTQwcHg7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkge1xuICAgIC50cmlhbmdsZV9fY29udGVudC0tYWRqdXN0IHtcbiAgICAgIG1hcmdpbi10b3A6IC0xMDBweDsgfSB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgICAudHJpYW5nbGVfX2NvbnRlbnQtLWFkanVzdCB7XG4gICAgICBtYXJnaW4tdG9wOiAtMTQwcHg7IH0gfVxuXG4ucHVuY2hvdXQge1xuICBtYXJnaW4tdG9wOiAtMzAwcHg7IH1cblxuLnN2Zy13cmFwcGVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlOyB9XG5cbi5zdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlOyB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjQ0xFQVJGSVhcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIE1pY3JvIGNsZWFyZml4LCBhcyBwZXI6IGNzcy0xMDEub3JnL2FydGljbGVzL2NsZWFyZml4L2xhdGVzdC1uZXctY2xlYXJmaXgtc28tZmFyLnBocFxuICogRXh0ZW5kIHRoZSBjbGVhcmZpeCBjbGFzcyB3aXRoIFNhc3MgdG8gYXZvaWQgdGhlIGAuY2xlYXJmaXhgIGNsYXNzIGFwcGVhcmluZ1xuICogb3ZlciBhbmQgb3ZlciBpbiB5b3VyIG1hcmt1cC5cbiAqL1xuLmNsZWFyZml4OmFmdGVyLFxuLmJveDphZnRlcixcbi5tZWRpYTphZnRlcixcbi5zaXRlLW5hdjphZnRlcixcbi5nYWxsZXJ5LWxpc3Q6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgY2xlYXI6IGJvdGg7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNIRUFESU5HU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogSGVhZGluZ3MgMeKAkzbigJlzIGNvcnJlc3BvbmRpbmcgR3JlZWstYWxwaGFiZXQgYWJzdHJhY3QgY2xhc3NlcyBmb3IgZG91YmxlLVxuICogc3RyYW5kZWQgaGVhZGluZyBoaWVyYXJjaHk6IGNzc3dpemFyZHJ5LmNvbS8yMDEyLzAyL3ByYWdtYXRpYy1wcmFjdGljYWwtZm9udC1zaXppbmctaW4tY3NzXG4gKlxuICogVXNlIHRoZXNlIGhlbHBlciBjbGFzc2VzIHRvIGNhdXNlIG90aGVyIGVsZW1lbnRzIHRvIGFkb3B0IHRoZSBzdHlsaW5nIG9mIHRoZVxuICogcmVzcGVjdGl2ZSBoZWFkaW5nLCBlLmcuOlxuICpcbiAgIDxoMiBjbGFzcz1cImFscGhhXCI+TG9yZW0gaXBzdW08L2gyPlxuICpcbiAqL1xuLmFscGhhIHtcbiAgZm9udC1zaXplOiAzNnB4O1xuICBmb250LXNpemU6IDIuMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzOyB9XG5cbi5iZXRhIHtcbiAgZm9udC1zaXplOiAzMHB4O1xuICBmb250LXNpemU6IDEuODc1cmVtO1xuICBsaW5lLWhlaWdodDogMS42OyB9XG5cbi5nYW1tYSB7XG4gIGZvbnQtc2l6ZTogMjRweDtcbiAgZm9udC1zaXplOiAxLjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxOyB9XG5cbi5kZWx0YSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBsaW5lLWhlaWdodDogMS4yOyB9XG5cbi5lcHNpbG9uIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7IH1cblxuLnpldGEge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjcxNDI5OyB9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAgICAjU1BBQ0lOR1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogTWFyZ2luIGFuZCBwYWRkaW5nIGhlbHBlciBjbGFzc2VzLiBVc2UgdGhlc2UgdG8gdHdlYWsgbGF5b3V0IG9uIGEgbWljcm9cbiAqIGxldmVsLlxuICpcbiAqIGAuKG18cCkodHxyfGJ8bHxofHYpKC18K3wwKSB7fWAgPSBtYXJnaW4vcGFkZGluZyB0b3AvcmlnaHQvYm90dG9tL2xlZnQvaG9yaXpvbnRhbC92ZXJ0aWNhbCBsZXNzL21vcmUvbm9uZVxuICovXG4vKipcbiAgICAgKiBNYXJnaW4gaGVscGVyIGNsYXNzZXMuXG4gICAgICpcbiAgICAgKiBBZGQgbWFyZ2lucy5cbiAgICAgKi9cbi5tIHtcbiAgbWFyZ2luOiAyNHB4ICFpbXBvcnRhbnQ7IH1cblxuLm10IHtcbiAgbWFyZ2luLXRvcDogMjRweCAhaW1wb3J0YW50OyB9XG5cbi5tciB7XG4gIG1hcmdpbi1yaWdodDogMjRweCAhaW1wb3J0YW50OyB9XG5cbi5tYiB7XG4gIG1hcmdpbi1ib3R0b206IDI0cHggIWltcG9ydGFudDsgfVxuXG4ubWwge1xuICBtYXJnaW4tbGVmdDogMjRweCAhaW1wb3J0YW50OyB9XG5cbi5taCB7XG4gIG1hcmdpbi1yaWdodDogMjRweCAhaW1wb3J0YW50O1xuICBtYXJnaW4tbGVmdDogMjRweCAhaW1wb3J0YW50OyB9XG5cbi5tdiB7XG4gIG1hcmdpbi10b3A6IDI0cHggIWltcG9ydGFudDtcbiAgbWFyZ2luLWJvdHRvbTogMjRweCAhaW1wb3J0YW50OyB9XG5cbi8qKlxuICAgICAqIEFkZCBsYXJnZSBtYXJnaW5zLlxuICAgICAqL1xuLm1cXCsge1xuICBtYXJnaW46IDQ4cHggIWltcG9ydGFudDsgfVxuXG4ubXRcXCsge1xuICBtYXJnaW4tdG9wOiA0OHB4ICFpbXBvcnRhbnQ7IH1cblxuLm1yXFwrIHtcbiAgbWFyZ2luLXJpZ2h0OiA0OHB4ICFpbXBvcnRhbnQ7IH1cblxuLm1iXFwrIHtcbiAgbWFyZ2luLWJvdHRvbTogNDhweCAhaW1wb3J0YW50OyB9XG5cbi5tbFxcKyB7XG4gIG1hcmdpbi1sZWZ0OiA0OHB4ICFpbXBvcnRhbnQ7IH1cblxuLm1oXFwrIHtcbiAgbWFyZ2luLXJpZ2h0OiA0OHB4ICFpbXBvcnRhbnQ7XG4gIG1hcmdpbi1sZWZ0OiA0OHB4ICFpbXBvcnRhbnQ7IH1cblxuLm12XFwrIHtcbiAgbWFyZ2luLXRvcDogNDhweCAhaW1wb3J0YW50O1xuICBtYXJnaW4tYm90dG9tOiA0OHB4ICFpbXBvcnRhbnQ7IH1cblxuLyoqXG4gICAgICogUmVtb3ZlIG1hcmdpbnMuXG4gICAgICovXG4ubTAge1xuICBtYXJnaW46IDAgIWltcG9ydGFudDsgfVxuXG4ubXQwIHtcbiAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OyB9XG5cbi5tcjAge1xuICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsgfVxuXG4ubWIwIHtcbiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50OyB9XG5cbi5tbDAge1xuICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OyB9XG5cbi5taDAge1xuICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDtcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfVxuXG4ubXYwIHtcbiAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xuICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNTUEFDSU5HLVJFU1BPTlNJVkVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIE1hcmdpbiBhbmQgcGFkZGluZyBoZWxwZXIgY2xhc3Nlcy4gVXNlIHRoZXNlIHRvIHR3ZWFrIGxheW91dCBvbiBhIG1pY3JvXG4gKiBsZXZlbC5cbiAqXG4gKiBgLihtfHApKHR8cnxifGx8aHx2KSgtfCt8MCkge31gID0gbWFyZ2luL3BhZGRpbmcgdG9wL3JpZ2h0L2JvdHRvbS9sZWZ0L2hvcml6b250YWwvdmVydGljYWwgbGVzcy9tb3JlL25vbmVcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNXSURUSFNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEEgc2VyaWVzIG9mIHdpZHRoIGhlbHBlciBjbGFzc2VzIHRoYXQgeW91IGNhbiB1c2UgdG8gc2l6ZSB0aGluZ3MgbGlrZSBncmlkXG4gKiBzeXN0ZW1zLiBDbGFzc2VzIGNhbiB0YWtlIGEgZnJhY3Rpb24tbGlrZSBmb3JtYXQgKGUuZy4gYC51LTIvM2ApIG9yIGEgc3Bva2VuLVxuICogd29yZCBmb3JtYXQgKGUuZy4gYC51LTItb2YtM2ApLiBVc2UgdGhlc2UgaW4geW91ciBtYXJrdXA6XG4gKlxuICogPGRpdiBjbGFzcz1cInUtNy8xMlwiPlxuICovXG4udS0xXFwvMSB7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cblxuLnUtMVxcLzIge1xuICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7IH1cblxuLnUtMVxcLzMge1xuICB3aWR0aDogMzMuMzMzMzMlICFpbXBvcnRhbnQ7IH1cblxuLnUtMlxcLzMge1xuICB3aWR0aDogNjYuNjY2NjclICFpbXBvcnRhbnQ7IH1cblxuLnUtMVxcLzQge1xuICB3aWR0aDogMjUlICFpbXBvcnRhbnQ7IH1cblxuLnUtMlxcLzQge1xuICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7IH1cblxuLnUtM1xcLzQge1xuICB3aWR0aDogNzUlICFpbXBvcnRhbnQ7IH1cblxuLnUtMVxcLzUge1xuICB3aWR0aDogMjAlICFpbXBvcnRhbnQ7IH1cblxuLnUtMlxcLzUge1xuICB3aWR0aDogNDAlICFpbXBvcnRhbnQ7IH1cblxuLnUtM1xcLzUge1xuICB3aWR0aDogNjAlICFpbXBvcnRhbnQ7IH1cblxuLnUtNFxcLzUge1xuICB3aWR0aDogODAlICFpbXBvcnRhbnQ7IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNXSURUSFMtUkVTUE9OU0lWRVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogUmVzcG9uc2l2ZSB3aWR0aCBjbGFzc2VzIGJhc2VkIG9uIHlvdXIgcmVzcG9uc2l2ZSBzZXR0aW5ncy5cbiAqL1xuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC51LTFcXC8xLXBhbG0ge1xuICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzItcGFsbSB7XG4gICAgd2lkdGg6IDUwJSAhaW1wb3J0YW50OyB9XG4gIC51LTFcXC8zLXBhbG0ge1xuICAgIHdpZHRoOiAzMy4zMzMzMyUgIWltcG9ydGFudDsgfVxuICAudS0yXFwvMy1wYWxtIHtcbiAgICB3aWR0aDogNjYuNjY2NjclICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzQtcGFsbSB7XG4gICAgd2lkdGg6IDI1JSAhaW1wb3J0YW50OyB9XG4gIC51LTJcXC80LXBhbG0ge1xuICAgIHdpZHRoOiA1MCUgIWltcG9ydGFudDsgfVxuICAudS0zXFwvNC1wYWxtIHtcbiAgICB3aWR0aDogNzUlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzUtcGFsbSB7XG4gICAgd2lkdGg6IDIwJSAhaW1wb3J0YW50OyB9XG4gIC51LTJcXC81LXBhbG0ge1xuICAgIHdpZHRoOiA0MCUgIWltcG9ydGFudDsgfVxuICAudS0zXFwvNS1wYWxtIHtcbiAgICB3aWR0aDogNjAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtNFxcLzUtcGFsbSB7XG4gICAgd2lkdGg6IDgwJSAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkgYW5kIChtYXgtd2lkdGg6IDYzLjkzNzVlbSkge1xuICAudS0xXFwvMS1sYXAge1xuICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzItbGFwIHtcbiAgICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzMtbGFwIHtcbiAgICB3aWR0aDogMzMuMzMzMzMlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMlxcLzMtbGFwIHtcbiAgICB3aWR0aDogNjYuNjY2NjclICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzQtbGFwIHtcbiAgICB3aWR0aDogMjUlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMlxcLzQtbGFwIHtcbiAgICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtM1xcLzQtbGFwIHtcbiAgICB3aWR0aDogNzUlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzUtbGFwIHtcbiAgICB3aWR0aDogMjAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMlxcLzUtbGFwIHtcbiAgICB3aWR0aDogNDAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtM1xcLzUtbGFwIHtcbiAgICB3aWR0aDogNjAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtNFxcLzUtbGFwIHtcbiAgICB3aWR0aDogODAlICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gIC51LTFcXC8xLWxhcC1hbmQtdXAge1xuICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzItbGFwLWFuZC11cCB7XG4gICAgd2lkdGg6IDUwJSAhaW1wb3J0YW50OyB9XG4gIC51LTFcXC8zLWxhcC1hbmQtdXAge1xuICAgIHdpZHRoOiAzMy4zMzMzMyUgIWltcG9ydGFudDsgfVxuICAudS0yXFwvMy1sYXAtYW5kLXVwIHtcbiAgICB3aWR0aDogNjYuNjY2NjclICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzQtbGFwLWFuZC11cCB7XG4gICAgd2lkdGg6IDI1JSAhaW1wb3J0YW50OyB9XG4gIC51LTJcXC80LWxhcC1hbmQtdXAge1xuICAgIHdpZHRoOiA1MCUgIWltcG9ydGFudDsgfVxuICAudS0zXFwvNC1sYXAtYW5kLXVwIHtcbiAgICB3aWR0aDogNzUlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzUtbGFwLWFuZC11cCB7XG4gICAgd2lkdGg6IDIwJSAhaW1wb3J0YW50OyB9XG4gIC51LTJcXC81LWxhcC1hbmQtdXAge1xuICAgIHdpZHRoOiA0MCUgIWltcG9ydGFudDsgfVxuICAudS0zXFwvNS1sYXAtYW5kLXVwIHtcbiAgICB3aWR0aDogNjAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtNFxcLzUtbGFwLWFuZC11cCB7XG4gICAgd2lkdGg6IDgwJSAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjMuOTM3NWVtKSB7XG4gIC51LTFcXC8xLXBvcnRhYmxlIHtcbiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyB9XG4gIC51LTFcXC8yLXBvcnRhYmxlIHtcbiAgICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzMtcG9ydGFibGUge1xuICAgIHdpZHRoOiAzMy4zMzMzMyUgIWltcG9ydGFudDsgfVxuICAudS0yXFwvMy1wb3J0YWJsZSB7XG4gICAgd2lkdGg6IDY2LjY2NjY3JSAhaW1wb3J0YW50OyB9XG4gIC51LTFcXC80LXBvcnRhYmxlIHtcbiAgICB3aWR0aDogMjUlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMlxcLzQtcG9ydGFibGUge1xuICAgIHdpZHRoOiA1MCUgIWltcG9ydGFudDsgfVxuICAudS0zXFwvNC1wb3J0YWJsZSB7XG4gICAgd2lkdGg6IDc1JSAhaW1wb3J0YW50OyB9XG4gIC51LTFcXC81LXBvcnRhYmxlIHtcbiAgICB3aWR0aDogMjAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMlxcLzUtcG9ydGFibGUge1xuICAgIHdpZHRoOiA0MCUgIWltcG9ydGFudDsgfVxuICAudS0zXFwvNS1wb3J0YWJsZSB7XG4gICAgd2lkdGg6IDYwJSAhaW1wb3J0YW50OyB9XG4gIC51LTRcXC81LXBvcnRhYmxlIHtcbiAgICB3aWR0aDogODAlICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NGVtKSB7XG4gIC51LTFcXC8xLWRlc2sge1xuICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzItZGVzayB7XG4gICAgd2lkdGg6IDUwJSAhaW1wb3J0YW50OyB9XG4gIC51LTFcXC8zLWRlc2sge1xuICAgIHdpZHRoOiAzMy4zMzMzMyUgIWltcG9ydGFudDsgfVxuICAudS0yXFwvMy1kZXNrIHtcbiAgICB3aWR0aDogNjYuNjY2NjclICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzQtZGVzayB7XG4gICAgd2lkdGg6IDI1JSAhaW1wb3J0YW50OyB9XG4gIC51LTJcXC80LWRlc2sge1xuICAgIHdpZHRoOiA1MCUgIWltcG9ydGFudDsgfVxuICAudS0zXFwvNC1kZXNrIHtcbiAgICB3aWR0aDogNzUlICFpbXBvcnRhbnQ7IH1cbiAgLnUtMVxcLzUtZGVzayB7XG4gICAgd2lkdGg6IDIwJSAhaW1wb3J0YW50OyB9XG4gIC51LTJcXC81LWRlc2sge1xuICAgIHdpZHRoOiA0MCUgIWltcG9ydGFudDsgfVxuICAudS0zXFwvNS1kZXNrIHtcbiAgICB3aWR0aDogNjAlICFpbXBvcnRhbnQ7IH1cbiAgLnUtNFxcLzUtZGVzayB7XG4gICAgd2lkdGg6IDgwJSAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCAobWluLXJlc29sdXRpb246IDE5MmRwaSksIChtaW4tcmVzb2x1dGlvbjogMmRwcHgpIHtcbiAgLnUtMVxcLzEtcmV0aW5hIHtcbiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyB9XG4gIC51LTFcXC8yLXJldGluYSB7XG4gICAgd2lkdGg6IDUwJSAhaW1wb3J0YW50OyB9XG4gIC51LTFcXC8zLXJldGluYSB7XG4gICAgd2lkdGg6IDMzLjMzMzMzJSAhaW1wb3J0YW50OyB9XG4gIC51LTJcXC8zLXJldGluYSB7XG4gICAgd2lkdGg6IDY2LjY2NjY3JSAhaW1wb3J0YW50OyB9XG4gIC51LTFcXC80LXJldGluYSB7XG4gICAgd2lkdGg6IDI1JSAhaW1wb3J0YW50OyB9XG4gIC51LTJcXC80LXJldGluYSB7XG4gICAgd2lkdGg6IDUwJSAhaW1wb3J0YW50OyB9XG4gIC51LTNcXC80LXJldGluYSB7XG4gICAgd2lkdGg6IDc1JSAhaW1wb3J0YW50OyB9XG4gIC51LTFcXC81LXJldGluYSB7XG4gICAgd2lkdGg6IDIwJSAhaW1wb3J0YW50OyB9XG4gIC51LTJcXC81LXJldGluYSB7XG4gICAgd2lkdGg6IDQwJSAhaW1wb3J0YW50OyB9XG4gIC51LTNcXC81LXJldGluYSB7XG4gICAgd2lkdGg6IDYwJSAhaW1wb3J0YW50OyB9XG4gIC51LTRcXC81LXJldGluYSB7XG4gICAgd2lkdGg6IDgwJSAhaW1wb3J0YW50OyB9IH1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qICAgICNQUklOVFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogVmVyeSBjcnVkZSwgcmVzZXQtbGlrZSBzdHlsZXMgdGFrZW4gZnJvbSB0aGUgSFRNTDUgQm9pbGVycGxhdGU6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9ibG9iLzNjM2M1ZTY0NjA0MjA5YTRkNjNlMWU0YzQ4ZGQyNDVkNDVmYWRmZDkvY3NzL21haW4uY3NzI0wyMDAtTDIzNFxuICovXG5AbWVkaWEgcHJpbnQge1xuICAqLFxuICAqOmJlZm9yZSxcbiAgKjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICBjb2xvcjogIzAwMCAhaW1wb3J0YW50O1xuICAgIC8qIEJsYWNrIHByaW50cyBmYXN0ZXI6IGg1YnAuY29tL3MgKi9cbiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsgfVxuICBhLFxuICBhOnZpc2l0ZWQge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9XG4gIGFbaHJlZl06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKGhyZWYpIFwiKVwiOyB9XG4gIGFiYnJbdGl0bGVdOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiAoXCIgYXR0cih0aXRsZSkgXCIpXCI7IH1cbiAgLyoqXG4gICAgICogRG9u4oCZdCBzaG93IGxpbmtzIHRoYXQgYXJlIGZyYWdtZW50IGlkZW50aWZpZXJzLCBvciB1c2UgdGhlIGBqYXZhc2NyaXB0OmBcbiAgICAgKiBwc2V1ZG8gcHJvdG9jb2wuXG4gICAgICovXG4gIGFbaHJlZl49XCIjXCJdOmFmdGVyLFxuICBhW2hyZWZePVwiamF2YXNjcmlwdDpcIl06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7IH0gfVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogICAgI1NIT1ctSElERVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5oaWRlIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDFweDtcbiAgd2lkdGg6IDFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY2xpcDogcmVjdCgxcHggMXB4IDFweCAxcHgpO1xuICAvKiBJRTYsIElFNyAqL1xuICBjbGlwOiByZWN0KDFweCwgMXB4LCAxcHgsIDFweCk7IH1cblxuLnNob3cge1xuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICAuaGlkZS1wYWxtIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMXB4O1xuICAgIHdpZHRoOiAxcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBjbGlwOiByZWN0KDFweCAxcHggMXB4IDFweCk7XG4gICAgLyogSUU2LCBJRTcgKi9cbiAgICBjbGlwOiByZWN0KDFweCwgMXB4LCAxcHgsIDFweCk7IH0gfVxuXG4uc2hvdy1wYWxtIHtcbiAgZGlzcGxheTogbm9uZTsgfVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0NC45Mzc1ZW0pIHtcbiAgLnNob3ctcGFsbSB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIGFuZCAobWF4LXdpZHRoOiA2My45Mzc1ZW0pIHtcbiAgLmhpZGUtbGFwIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMXB4O1xuICAgIHdpZHRoOiAxcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBjbGlwOiByZWN0KDFweCAxcHggMXB4IDFweCk7XG4gICAgLyogSUU2LCBJRTcgKi9cbiAgICBjbGlwOiByZWN0KDFweCwgMXB4LCAxcHgsIDFweCk7IH0gfVxuXG4uc2hvdy1sYXAge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIGFuZCAobWF4LXdpZHRoOiA2My45Mzc1ZW0pIHtcbiAgLnNob3ctbGFwIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkge1xuICAuaGlkZS1sYXAtYW5kLXVwIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMXB4O1xuICAgIHdpZHRoOiAxcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBjbGlwOiByZWN0KDFweCAxcHggMXB4IDFweCk7XG4gICAgLyogSUU2LCBJRTcgKi9cbiAgICBjbGlwOiByZWN0KDFweCwgMXB4LCAxcHgsIDFweCk7IH0gfVxuXG4uc2hvdy1sYXAtYW5kLXVwIHtcbiAgZGlzcGxheTogbm9uZTsgfVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gIC5zaG93LWxhcC1hbmQtdXAge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2My45Mzc1ZW0pIHtcbiAgLmhpZGUtcG9ydGFibGUge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgd2lkdGg6IDFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNsaXA6IHJlY3QoMXB4IDFweCAxcHggMXB4KTtcbiAgICAvKiBJRTYsIElFNyAqL1xuICAgIGNsaXA6IHJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTsgfSB9XG5cbi5zaG93LXBvcnRhYmxlIHtcbiAgZGlzcGxheTogbm9uZTsgfVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2My45Mzc1ZW0pIHtcbiAgLnNob3ctcG9ydGFibGUge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NGVtKSB7XG4gIC5oaWRlLWRlc2sge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgd2lkdGg6IDFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNsaXA6IHJlY3QoMXB4IDFweCAxcHggMXB4KTtcbiAgICAvKiBJRTYsIElFNyAqL1xuICAgIGNsaXA6IHJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTsgfSB9XG5cbi5zaG93LWRlc2sge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgLnNob3ctZGVzayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpLCAobWluLXJlc29sdXRpb246IDJkcHB4KSB7XG4gIC5oaWRlLXJldGluYSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIG9wYWNpdHk6IDAgIWltcG9ydGFudDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICB3aWR0aDogMXB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgY2xpcDogcmVjdCgxcHggMXB4IDFweCAxcHgpO1xuICAgIC8qIElFNiwgSUU3ICovXG4gICAgY2xpcDogcmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpOyB9IH1cblxuLnNob3ctcmV0aW5hIHtcbiAgZGlzcGxheTogbm9uZTsgfVxuXG5AbWVkaWEgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCkge1xuICAuc2hvdy1yZXRpbmEge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH0gfVxuXG4ucmVsYXRpdmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjRlbSkge1xuICAudGludCB7XG4gICAgZmlsdGVyOiBncmF5c2NhbGUoMTAwJSk7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LWZpbHRlciAuMnMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogLXdlYmtpdC1maWx0ZXIgLjJzIGVhc2UtaW4tb3V0O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsgfSB9XG5cbi50aW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dDsgfVxuXG4udGludDpob3ZlciB7XG4gIGZpbHRlcjogbm9uZTsgfVxuICAudGludDpob3ZlcjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zKTsgfVxuXG4uc2VjdGlvbi1pbWcge1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AgY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgaGVpZ2h0OiAxMDI4cHg7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICAgIC5zZWN0aW9uLWltZyB7XG4gICAgICBoZWlnaHQ6IDcyMHB4OyB9IH1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjRlbSkge1xuICAuZm9vdGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9IH1cblxuLmZvb3Rlcl9fY3JlZGl0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tdG9wOiAxZW07IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjRlbSkge1xuICAgIC5mb290ZXJfX2NyZWRpdCB7XG4gICAgICBtYXJnaW4tdG9wOiAwOyB9IH1cblxuLmZvb3Rlcl9fY3JlZGl0LWNvcHkge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAuOGVtO1xuICBtYXJnaW4tYm90dG9tOiAuNmVtOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgICAuZm9vdGVyX19jcmVkaXQtY29weSB7XG4gICAgICBib3R0b206IDEwMCU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IH0gfVxuXG4uZm9vdGVyX19pbWcge1xuICBoZWlnaHQ6IDQwcHg7IH1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI0NTU1dJWkFSRFJZXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIENPTlRFTlRTXG4gKlxuICogU0VUVElOR1NcbiAqIERlZmF1bHQuLi4uLi4uLi4uLi4uLmludWl0Y3Nz4oCZIGRlZmF1bHQgc2V0dGluZ3MuXG4gKiBHbG9iYWwuLi4uLi4uLi4uLi4uLi5HbG9iYWxseS1hdmFpbGFibGUgdmFyaWFibGVzIGFuZCBzZXR0aW5ncy9jb25maWcuXG4gKiBDb2xvcnMuLi4uLi4uLi4uLi4uLi5NYW5hZ2Ugb3VyIGNvbG9yIHBhbGV0dGUgaW4gaXNvbGF0aW9uLlxuICogUmVzcG9uc2l2ZS4uLi4uLi4uLi4uU2V0IHVwIGFuZCBuYW1lIG91ciBicmVha3BvaW50cy5cbiAqXG4gKiBUT09MU1xuICogRnVuY3Rpb25zLi4uLi4uLi4uLi4uaW51aXRjc3PigJkgZGVmYXVsdCBmdW5jdGlvbnMuXG4gKiBNaXhpbnMuLi4uLi4uLi4uLi4uLi5pbnVpdGNzc+KAmSBkZWZhdWx0IG1peGlucy5cbiAqIE1peGlucy4uLi4uLi4uLi4uLi4uLk91ciBleHRlbnNpb24gb2YgaW51aXRjc3PigJkgbWl4aW5zLlxuICogUmVzcG9uc2l2ZS4uLi4uLi4uLi4uUmVzcG9uc2l2ZSB0b29saW5nIChyZXF1aXJlcyByZXNwb25zaXZlIHNldHRpbmdzKS5cbiAqIEFsaWFzZXMuLi4uLi4uLi4uLi4uLkFsaWFzZXMgb250byBsb25nZXIgaW51aXRjc3MgdmFyaWFibGVzIGFuZCBtaXhpbnMuXG4gKlxuICogR0VORVJJQ1xuICogTm9ybWFsaXplLmNzcy4uLi4uLi4uQSBsZXZlbCBwbGF5aW5nIGZpZWxkLlxuICogUmVzZXQuLi4uLi4uLi4uLi4uLi4uQSBwYXJlZCBiYWNrIHJlc2V0IHRvIHJlbW92ZSBtYXJnaW5zLlxuICogQm94LXNpemluZy4uLi4uLi4uLi4uQmV0dGVyIGRlZmF1bHQgYGJveC1zaXppbmdgLlxuICogU2hhcmVkLi4uLi4uLi4uLi4uLi4uU2Vuc2libHkgYW5kIHRlcnNlbHkgc2hhcmUgZ2xvYmFsIGNvbW1vbmFsaXRpZXMuXG4gKlxuICogQkFTRVxuICogUGFnZS4uLi4uLi4uLi4uLi4uLi4uUGFnZS1sZXZlbCBzdHlsZXMgKEhUTUwgZWxlbWVudCkuXG4gKiBQYWdlLi4uLi4uLi4uLi4uLi4uLi5PdXIgZXh0ZW5zaW9uIG9mIHRoZSBpbnVpdGNzcyBwYWdlIG1vZHVsZS5cbiAqIEhlYWRpbmdzLi4uLi4uLi4uLi4uLkhlYWRpbmcgc3R5bGVzXG4gKiBUeXBlLi4uLi4uLi4uLi4uLi4uLi5NaXNjIHR5cGUgc3R5bGVzXG4gKiBMaW5rcy4uLi4uLi4uLi4uLi4uLi5IeXBlcmxpbmsgc3R5bGVzXG4gKiBMaXN0cy4uLi4uLi4uLi4uLi4uLi5pbnVpdGNzcyBsaXN0IHN0eWxlc1xuICogSW1hZ2VzLi4uLi4uLi4uLi4uLi4uaW51aXRjc3MgaW1hZ2VzXG4gKiBRdW90ZXMuLi4uLi4uLi4uLi4uLi5TdHlsaW5nIGZvciBibG9ja3F1b3RlcywgZXRjLlxuICpcbiAqIE9CSkVDVFNcbiAqIFdyYXBwZXJzLi4uLi4uLi4uLi4uLldyYXBwZXJzIGFuZCBwYWdlIGNvbnN0cmFpbnRzLlxuICogQnV0dG9ucy4uLi4uLi4uLi4uLi4uaW51aXRjc3PigJkgYnV0dG9ucyBtb2R1bGUuXG4gKiBMYXlvdXQuLi4uLi4uLi4uLi4uLi5pbnVpdGNzc+KAmSBsYXlvdXQgdG9vbC5cbiAqIEJveC4uLi4uLi4uLi4uLi4uLi4uLmludWl0Y3Nz4oCZIGJveCBvYmplY3QuXG4gKiBNZWRpYS4uLi4uLi4uLi4uLi4uLi5UaGUgbWVkaWEgb2JqZWN0LlxuICogRmxhZy4uLi4uLi4uLi4uLi4uLi4uVGhlIGZsYWcgb2JqZWN0LlxuICogVUkgbGlzdC4uLi4uLi4uLi4uLi4uaW51aXRjc3PigJkgVUkgbGlzdC5cbiAqXG4gKiBDT01QT05FTlRTXG4gKiBQYWdlLWhlYWQuLi4uLi4uLi4uLi5QYWdlIGhlYWRlciBzdHlsZXMuXG4gKiBCYW5kcy4uLi4uLi4uLi4uLi4uLi5GdWxsLXdpZHRoIHBhZ2UgYmFuZHMuXG4gKiBQcm9tby4uLi4uLi4uLi4uLi4uLi5MZWFkIHByb21vIGJsb2NrcyBvbiB0aGUgaG9tZSBwYWdlLlxuICogUGFnZS1mb290Li4uLi4uLi4uLi4uUGFnZSBmb290ZXIgc3R5bGVzLlxuICogUGFnZS1taWNyby4uLi4uLi4uLi4uUGFnZSBjb3B5cmlnaHQgc3R5bGVzLlxuICogU2l0ZS1uYXYuLi4uLi4uLi4uLi4uU2l0ZeKAmXMgbWFpbiBuYXYgYXJlYS5cbiAqIEJ1dHRvbnMuLi4uLi4uLi4uLi4uLkV4dGVuc2lvbiBvZiBpbnVpdGNzc+KAmSBidXR0b25zLlxuICogQm94ZXMuLi4uLi4uLi4uLi4uLi4uRXh0ZW5zaW9uIG9mIGludWl0Y3Nz4oCZIGJveCBvYmplY3RcbiAqIFBvc3QuLi4uLi4uLi4uLi4uLi4uLlBvc3Qtc3BlY2lmaWMgc3R5bGVzLlxuICogUHVsbC1xdW90ZS4uLi4uLi4uLi4uTGFyZ2UsIGZlYXR1cmVkIHF1b3Rlcy5cbiAqIENhcm91c2VsLi4uLi4uLi4uLi4uLlB1cmUgQ1NTIGNhcm91c2VsIGNvbXBvbmVudC5cbiAqIEljb25pYy4uLi4uLi4uLi4uLi4uLkljb25pYyBpY29uIHN0eWxlcy5cbiAqIFNwcml0ZXMuLi4uLi4uLi4uLi4uLkltYWdlIHNwcml0ZSBzdHlsZXMuXG4gKiBGZWF0dXJlIGxpc3QuLi4uLi4uLi5CaWcgYmxvY2t5IGxpc3RzIG9mIGZlYXR1cmUgaXRlbXMuXG4gKiBBbm5vdGF0ZS4uLi4uLi4uLi4uLi5QdXJlIENTUyBmaWd1cmUgYW5ub3RhdGlvbnMuXG4gKiBBZHMuLi4uLi4uLi4uLi4uLi4uLi5BZFBhY2tzIG92ZXJyaWRlcy5cbiAqIENsaWVudC1saXN0Li4uLi4uLi4uLkFtYXppbmcgcGVvcGxlIEnigJl2ZSBoYWQgdGhlIHBsZWFzdXJlIG9mIHdvcmtpbmcgd2l0aC5cbiAqXG4gKiBUUlVNUFNcbiAqIENsZWFyZml4Li4uLi4uLi4uLi4uLkkgY2Fu4oCZdCBiZWxpZXZlIHdlIHN0aWxsIG5lZWQgdGhpcyBpbiAyMDE0LlxuICogV2lkdGhzLi4uLi4uLi4uLi4uLi4uU2ltcGxlIHdpZHRoIGhlbHBlciBjbGFzc2VzLlxuICogV2lkdGhzLXJlc3BvbnNpdmUuLi4uUG9seWZpbGwgZm9yIHJlc3BvbnNpdmUgd2lkdGggY2xhc3Nlcy5cbiAqIFNwYWNpbmcuLi4uLi4uLi4uLi4uLk1pY3JvLWxldmVsIHNwYWNpbmcuXG4gKiBTaG93L2hpZGUuLi4uLi4uLi4uLi5IZWxwZXJzIHRvIHNob3cgYW5kIHNpZGUgc3R1ZmYuXG4gKi9cblxuLy8gU0VUVElOR1M6XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1kZWZhdWx0cy9zZXR0aW5ncy5kZWZhdWx0c1wiO1xuQGltcG9ydCBcInNldHRpbmdzLmdsb2JhbFwiO1xuQGltcG9ydCBcInNldHRpbmdzLmNvbG9yc1wiO1xuQGltcG9ydCBcInNldHRpbmdzLndyYXBwZXJzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1yZXNwb25zaXZlLXNldHRpbmdzL3NldHRpbmdzLnJlc3BvbnNpdmVcIjtcblxuLy8gVE9PTFM6XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1mdW5jdGlvbnMvdG9vbHMuZnVuY3Rpb25zXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1taXhpbnMvdG9vbHMubWl4aW5zXCI7XG5AaW1wb3J0IFwidG9vbHMubWl4aW5zXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1yZXNwb25zaXZlLXRvb2xzL3Rvb2xzLnJlc3BvbnNpdmVcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ludWl0LXRvb2xzLXdpZHRocy90b29scy53aWR0aHNcIjtcbkBpbXBvcnQgXCJ0b29scy5hbGlhc2VzXCI7XG5cbiRkZWJ1ZzogdHJ1ZTtcbkBpbXBvcnQgXCJ0b29scy5kZWJ1Z1wiO1xuXG4vLyBHRU5FUklDOlxuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtbm9ybWFsaXplL2dlbmVyaWMubm9ybWFsaXplXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1ib3gtc2l6aW5nL2dlbmVyaWMuYm94LXNpemluZ1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtcmVzZXQvZ2VuZXJpYy5yZXNldFwiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtc2hhcmVkL2dlbmVyaWMuc2hhcmVkXCI7XG5cbi8vIEJBU0U6XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1oZWFkaW5ncy9iYXNlLmhlYWRpbmdzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1wYXJhZ3JhcGhzL2Jhc2UucGFyYWdyYXBoc1wiO1xuQGltcG9ydCBcImJhc2UudHlwZVwiO1xuQGltcG9ydCBcImJhc2UubGlua3NcIjtcbkBpbXBvcnQgXCJiYXNlLnF1b3Rlc1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtbGlzdHMvYmFzZS5saXN0c1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtaW1hZ2VzL2Jhc2UuaW1hZ2VzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1wYWdlL2Jhc2UucGFnZVwiO1xuQGltcG9ydCBcImJhc2UucGFnZVwiO1xuXG4vLyBPQkpFQ1RTOlxuQGltcG9ydCBcIm9iamVjdHMud3JhcHBlcnNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ludWl0LWJsb2NrL29iamVjdHMuYmxvY2tcIjtcblxuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtYm94L29iamVjdHMuYm94XCI7XG5cbiRpbnVpdC1idG4tYmFja2dyb3VuZDogICAgICAkY29sb3ItYnRuO1xuJGludWl0LWJ0bi1yYWRpdXM6ICAgICAgICAgICRiYXNlLXJvdW5kO1xuJGludWl0LWJ0bi1ib3JkZXItd2lkdGg6ICAgIDFweDtcbiRpbnVpdC1lbmFibGUtYnRuLS1zbWFsbDogICB0cnVlO1xuJGludWl0LWVuYWJsZS1idG4tLWZ1bGw6ICAgIHRydWU7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1idXR0b25zL29iamVjdHMuYnV0dG9uc1wiO1xuXG4kaW51aXQtZW5hYmxlLWZsYWctLXJldjogICAgICAgIHRydWU7XG4kaW51aXQtZW5hYmxlLWZsYWctLXJlc3BvbnNpdmU6IHRydWU7XG4kaW51aXQtZmxhZy1jb2xsYXBzZS1hdDogICAgICAgIDQ3OXB4ICFkZWZhdWx0O1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtZmxhZy9vYmplY3RzLmZsYWdcIjtcblxuJGludWl0LWVuYWJsZS1sYXlvdXQtLW1pZGRsZTogICB0cnVlO1xuJGludWl0LWVuYWJsZS1sYXlvdXQtLWJvdHRvbTogICB0cnVlO1xuJGludWl0LWVuYWJsZS1sYXlvdXQtLWxhcmdlOiAgICB0cnVlO1xuJGludWl0LWVuYWJsZS1sYXlvdXQtLWNlbnRlcjogICB0cnVlO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtbGF5b3V0L29iamVjdHMubGF5b3V0XCI7XG5cbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ludWl0LWxpc3QtYmFyZS9vYmplY3RzLmxpc3QtYmFyZVwiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtbGlzdC1ibG9jay9vYmplY3RzLmxpc3QtYmxvY2tcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ludWl0LWxpc3QtaW5saW5lL29iamVjdHMubGlzdC1pbmxpbmVcIjtcblxuJGludWl0LWxpc3QtdWktYm9yZGVyLWNvbG9yOiAgICAkY29sb3ItZ3JheS11aTtcbiRpbnVpdC1lbmFibGUtbGlzdC11aS0tc21hbGw6ICAgdHJ1ZTtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ludWl0LWxpc3QtdWkvb2JqZWN0cy5saXN0LXVpXCI7XG5cbiRpbnVpdC1lbmFibGUtYmxvY2stLWNlbnRlcjogICAgdHJ1ZTtcbiRpbnVpdC1lbmFibGUtYmxvY2stLWxpc3Q6ICAgIHRydWU7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1ibG9jay9vYmplY3RzLmJsb2NrXCI7XG5AaW1wb3J0IFwib2JqZWN0cy5ibG9ja1wiO1xuXG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1tZWRpYS9vYmplY3RzLm1lZGlhXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1wYWNrL29iamVjdHMucGFja1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtdGFibGVzL29iamVjdHMudGFibGVzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC10YWJzL29iamVjdHMudGFic1wiO1xuXG4vLyBDT01QT05URU5UUzpcbkBpbXBvcnQgXCJjb21wb25lbnRzLnBhZ2UtaGVhZFwiO1xuQGltcG9ydCBcImNvbXBvbmVudHMuaGVyb1wiO1xuQGltcG9ydCBcImNvbXBvbmVudHMuYmFuZHNcIjtcbkBpbXBvcnQgXCJjb21wb25lbnRzLnBhZ2UtZm9vdFwiO1xuQGltcG9ydCBcImNvbXBvbmVudHMucGFnZS1taWNyb1wiO1xuQGltcG9ydCBcImNvbXBvbmVudHMuc2l0ZS1uYXZcIjtcbkBpbXBvcnQgXCJjb21wb25lbnRzLmJ1dHRvbnNcIjtcbkBpbXBvcnQgXCJjb21wb25lbnRzLmJveGVzXCI7XG5AaW1wb3J0IFwiY29tcG9uZW50cy5wb3N0XCI7XG5AaW1wb3J0IFwiY29tcG9uZW50cy5wdWxsLXF1b3RlXCI7XG5AaW1wb3J0IFwiY29tcG9uZW50cy5jYXJvdXNlbFwiO1xuQGltcG9ydCBcImNvbXBvbmVudHMuaWNvbmljXCI7XG5AaW1wb3J0IFwiY29tcG9uZW50cy5zcHJpdGVzXCI7XG5AaW1wb3J0IFwiY29tcG9uZW50cy5mZWF0dXJlLWxpc3RcIjtcbkBpbXBvcnQgXCJjb21wb25lbnRzLmdhbGxlcnktbGlzdFwiO1xuXG5AaW1wb3J0IFwiY29tcG9uZW50cy5hbm5vdGF0ZVwiO1xuQGltcG9ydCBcImNvbXBvbmVudHMudHJpYW5nbGVcIjtcbkBpbXBvcnQgXCJjb21wb25lbnRzLnB1bmNob3V0XCI7XG5AaW1wb3J0IFwiY29tcG9uZW50cy5zdmdcIjtcblxuLy8gVFJVTVBTOlxuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtY2xlYXJmaXgvdHJ1bXBzLmNsZWFyZml4XCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1oZWFkaW5ncy10cnVtcHMvdHJ1bXBzLmhlYWRpbmdzXCI7XG5cbiRpbnVpdC1lbmFibGUtbWFyZ2luczogICAgICAgICAgdHJ1ZTtcbiRpbnVpdC1lbmFibGUtbWFyZ2lucy0tbGFyZ2U6ICAgIHRydWU7XG4kaW51aXQtZW5hYmxlLW1hcmdpbnMtLW5vbmU6ICAgIHRydWU7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC1zcGFjaW5nL3RydW1wcy5zcGFjaW5nXCI7XG5cbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ludWl0LXNwYWNpbmctcmVzcG9uc2l2ZS90cnVtcHMuc3BhY2luZy1yZXNwb25zaXZlXCI7XG5cbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ludWl0LXdpZHRocy90cnVtcHMud2lkdGhzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9pbnVpdC13aWR0aHMtcmVzcG9uc2l2ZS90cnVtcHMud2lkdGhzLXJlc3BvbnNpdmVcIjtcblxuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvaW51aXQtcHJpbnQvdHJ1bXBzLnByaW50XCI7XG5cbkBpbXBvcnQgXCJfdHJ1bXBzLnNob3ctaGlkZS5zY3NzXCI7XG5AaW1wb3J0IFwiX3RydW1wcy5wb3NpdGlvbnMuc2Nzc1wiO1xuQGltcG9ydCBcIl90cnVtcHMuc2hhbWUuc2Nzc1wiO1xuIiwiLyohXG4gKiBpbnVpdGNzcywgYnkgQGNzc3dpemFyZHJ5XG4gKlxuICogZ2l0aHViLmNvbS9pbnVpdGNzcyB8IGludWl0Y3NzLmNvbVxuICovXG4vLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4vLyAgICAjREVGQVVMVFNcbi8vXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLy8gVGhlc2UgdmFyaWFibGVzIGFyZSBpbnVpdGNzc+KAmSBkZWZhdWx0czsgdGhleSBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yXG4vLyBhZGp1c3RlZCBkaXJlY3RseTsgeW91IHNob3VsZCBwcmVkZWZpbmUgdGhlIHZhcmlhYmxlcyBpbiB5b3VyIG93biBwcm9qZWN0LlxuXG5cblxuXG5cbi8vIEhpZ2gtbGV2ZWwgYmFzZSBzZXR0aW5ncy5cbiRpbnVpdC1iYXNlLWZvbnQtc2l6ZTogICAgICAgICAgMTZweCAhZGVmYXVsdDtcbiRpbnVpdC1iYXNlLWxpbmUtaGVpZ2h0OiAgICAgICAgMjRweCAhZGVmYXVsdDtcbiRpbnVpdC1iYXNlLXRleHQtY29sb3I6ICAgICAgICAgIzMzMyAhZGVmYXVsdDtcbiRpbnVpdC1iYXNlLWJhY2tncm91bmQtY29sb3I6ICAgI2ZmZiAhZGVmYXVsdDtcblxuXG5cblxuXG4vLyBOYW1lc3BhY2UuXG4vL1xuLy8gV291bGQgeW91IGxpa2UgaW51aXRjc3PigJkgY2xhc3NlcyB0byBiZSBwcmVwZW5kZWQgd2l0aCBhIG5hbWVzcGFjZT8gSWYgc28sXG4vLyBkZWZpbmUgaXQgaGVyZS5cbiRpbnVpdC1uYW1lc3BhY2U6ICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcblxuXG5cblxuXG4vLyBUaGVzZSB2YXJpYWJsZXMgYXJlIGZyYW1ld29yayB2YXJpYWJsZXMsIHNvdXJjZWQgZnJvbSB2YXJpYWJsZXMgZGVmaW5lZFxuLy8gYWJvdmUuIEZlZWwgZnJlZSB0byB1c2UgdGhlc2UgdmFyaWFibGVzIHRocm91Z2hvdXQgeW91ciBwcm9qZWN0LCBidXQgZG8gbm90XG4vLyBtb2RpZnkgb3IgcmVhc3NpZ24gdGhlbS5cbiRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdDogICAgICAgICAgICRpbnVpdC1iYXNlLWxpbmUtaGVpZ2h0O1xuJGludWl0LWJhc2Utc3BhY2luZy11bml0LS10aW55OiAgICAgcm91bmQoJGludWl0LWJhc2Utc3BhY2luZy11bml0IC8gNCk7XG4kaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQtLXNtYWxsOiAgICByb3VuZCgkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQgLyAyKTtcbiRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdC0tbGFyZ2U6ICAgIHJvdW5kKCRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdCAqIDIpO1xuJGludWl0LWJhc2Utc3BhY2luZy11bml0LS1odWdlOiAgICAgcm91bmQoJGludWl0LWJhc2Utc3BhY2luZy11bml0ICogNCk7XG4iLCIvLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4vLyAgICAjTUlYSU5TXG4vL1xcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8vIFNwaXQgb3V0IHZlbmRvciBwcmVmaXhlcyBpbiBvbmUgZ28uIFZlcnkgcHJhZ21hdGljLCBmYXIgZnJvbSBwZXJmZWN0LlxuQG1peGluIHZlbmRvcigkcHJvcGVydHksICR2YWx1ZS4uLikge1xuICAgIC13ZWJraXQtI3skcHJvcGVydHl9OiAkdmFsdWU7XG4gICAgICAgLW1vei0jeyRwcm9wZXJ0eX06ICR2YWx1ZTtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJHZhbHVlO1xufVxuXG4vLyBBcHBseSDigJhhdHRlbnRpb27igJkgc3R5bGVzIGluIG9uZSBnby5cbkBtaXhpbiBhdHRlbnRpb24oJHNlbGY6IGZhbHNlKSB7XG5cbiAgICBAaWYoJHNlbGYgIT0gZmFsc2UpIHtcblxuICAgICAgICAmLFxuICAgICAgICAmOmhvdmVyLFxuICAgICAgICAmOmFjdGl2ZSxcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgQGVsc2Uge1xuXG4gICAgICAgICY6aG92ZXIsXG4gICAgICAgICY6YWN0aXZlLFxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuLy8gR2VuZXJhdGUgSGVsdmV0aWNhIE5ldWXigJlzIG51bWJlcmVkIGZvbnQtd2VpZ2h0cyBmcm9tIHRoZWlyIGFsaWFzZXMuXG5AbWl4aW4gZm9udC13ZWlnaHQoJGZvbnQtd2VpZ2h0KSB7XG5cbiAgICBAaWYgKCRmb250LXdlaWdodCA9PSBcInJlZ3VsYXJcIikge1xuICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgIH1cblxuICAgIEBpZiAoJGZvbnQtd2VpZ2h0ID09IFwibWVkaXVtXCIpIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB9XG5cbiAgICBAaWYgKCRmb250LXdlaWdodCA9PSBcImJvbGRcIikge1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgIH0gICAgXG5cbn1cblxuLy8gQ3JlYXRlIGFsbCBzcGVjaWZpZWQgaGVhZGluZyBzdHlsZXMgaW4gb25lIGdvLlxuQG1peGluIGhlYWRpbmdzKCRmcm9tOiAxLCAkdG86IDYpIHtcblxuICAgICViYXNlLWhlYWRpbmcge1xuICAgICAgICBAY29udGVudDtcbiAgICB9XG5cbiAgICBAaWYgJGZyb20gPj0gMSBhbmQgJHRvIDw9IDZ7XG5cbiAgICAgICAgQGZvciAkaSBmcm9tICRmcm9tIHRocm91Z2ggJHRve1xuXG4gICAgICAgICAgICBoI3skaX0ge1xuICAgICAgICAgICAgICAgIEBleHRlbmQgJWJhc2UtaGVhZGluZztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuJWNlbnRlci1jaGlsZHJlbixcbi5jZW50ZXItY2hpbGRyZW4ge1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG5AZnVuY3Rpb24gZ2V0LXZ3KCR0YXJnZXQsICRjb250ZXh0LXdpZHRoKSB7XG4gICAgLy8gMXZ3IGlzIGVxdWFsIHRvIDElIG9mIHRoZSB2aWV3cG9ydCB3aWR0aFxuICAgICR2dy1jb250ZXh0OiAoJGNvbnRleHQtd2lkdGggKiAuMDEpO1xuICAgIEByZXR1cm4gKCR0YXJnZXQgLyAkdnctY29udGV4dCkgKiAxdnc7XG59XG5cbkBtaXhpbiB2dygkc2l6ZSwgJGxpbmUtaGVpZ2h0LCAkY29udGV4dC13aWR0aDogJHdyYXBwZXIpIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJHNpemUsICRsaW5lLWhlaWdodCk7XG4gICAgZm9udC1zaXplOiBnZXQtdncoJHNpemUsICRjb250ZXh0LXdpZHRoKTtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJHdyYXBwZXIpIHtcbiAgICAgICAgQGluY2x1ZGUgZm9udC1zaXplKCRzaXplLCAkbGluZS1oZWlnaHQpO1xuICAgIH1cbn0iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNBTElBU0VTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kc3BhY2luZy11bml0OiAgICAgICAgICAkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQ7XG4kc3BhY2luZy11bml0LS10aW55OiAgICRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdC0tdGlueTtcbiRzcGFjaW5nLXVuaXQtLXNtYWxsOiAgICRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdC0tc21hbGw7XG4kc3BhY2luZy11bml0LS1sYXJnZTogICAkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQtLWxhcmdlO1xuXG5AbWl4aW4gZm9udC1zaXplKCRhcmdzLi4uKSB7XG4gICAgQGluY2x1ZGUgaW51aXQtZm9udC1zaXplKCRhcmdzLi4uKTtcbn1cbiIsIi8qISBub3JtYWxpemUuY3NzIHYzLjAuMyB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi9cblxuLyoqXG4gKiAxLiBTZXQgZGVmYXVsdCBmb250IGZhbWlseSB0byBzYW5zLXNlcmlmLlxuICogMi4gUHJldmVudCBpT1MgYW5kIElFIHRleHQgc2l6ZSBhZGp1c3QgYWZ0ZXIgZGV2aWNlIG9yaWVudGF0aW9uIGNoYW5nZSxcbiAqICAgIHdpdGhvdXQgZGlzYWJsaW5nIHVzZXIgem9vbS5cbiAqL1xuXG5odG1sIHtcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IC8qIDEgKi9cbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8qIDIgKi9cbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIGRlZmF1bHQgbWFyZ2luLlxuICovXG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5cbi8qIEhUTUw1IGRpc3BsYXkgZGVmaW5pdGlvbnNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQ29ycmVjdCBgYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgZm9yIGFueSBIVE1MNSBlbGVtZW50IGluIElFIDgvOS5cbiAqIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgZGV0YWlsc2Agb3IgYHN1bW1hcnlgIGluIElFIDEwLzExXG4gKiBhbmQgRmlyZWZveC5cbiAqIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgbWFpbmAgaW4gSUUgMTEuXG4gKi9cblxuYXJ0aWNsZSxcbmFzaWRlLFxuZGV0YWlscyxcbmZpZ2NhcHRpb24sXG5maWd1cmUsXG5mb290ZXIsXG5oZWFkZXIsXG5oZ3JvdXAsXG5tYWluLFxubWVudSxcbm5hdixcbnNlY3Rpb24sXG5zdW1tYXJ5IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCBgaW5saW5lLWJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGluIElFIDgvOS5cbiAqIDIuIE5vcm1hbGl6ZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgYHByb2dyZXNzYCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cbiAqL1xuXG5hdWRpbyxcbmNhbnZhcyxcbnByb2dyZXNzLFxudmlkZW8ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIDEgKi9cbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyAvKiAyICovXG59XG5cbi8qKlxuICogUHJldmVudCBtb2Rlcm4gYnJvd3NlcnMgZnJvbSBkaXNwbGF5aW5nIGBhdWRpb2Agd2l0aG91dCBjb250cm9scy5cbiAqIFJlbW92ZSBleGNlc3MgaGVpZ2h0IGluIGlPUyA1IGRldmljZXMuXG4gKi9cblxuYXVkaW86bm90KFtjb250cm9sc10pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgaGVpZ2h0OiAwO1xufVxuXG4vKipcbiAqIEFkZHJlc3MgYFtoaWRkZW5dYCBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS8xMC5cbiAqIEhpZGUgdGhlIGB0ZW1wbGF0ZWAgZWxlbWVudCBpbiBJRSA4LzkvMTAvMTEsIFNhZmFyaSwgYW5kIEZpcmVmb3ggPCAyMi5cbiAqL1xuXG5baGlkZGVuXSxcbnRlbXBsYXRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogTGlua3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBncmF5IGJhY2tncm91bmQgY29sb3IgZnJvbSBhY3RpdmUgbGlua3MgaW4gSUUgMTAuXG4gKi9cblxuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4vKipcbiAqIEltcHJvdmUgcmVhZGFiaWxpdHkgb2YgZm9jdXNlZCBlbGVtZW50cyB3aGVuIHRoZXkgYXJlIGFsc28gaW4gYW5cbiAqIGFjdGl2ZS9ob3ZlciBzdGF0ZS5cbiAqL1xuXG5hOmFjdGl2ZSxcbmE6aG92ZXIge1xuICBvdXRsaW5lOiAwO1xufVxuXG4vKiBUZXh0LWxldmVsIHNlbWFudGljc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LzEwLzExLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4gKi9cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkO1xufVxuXG4vKipcbiAqIEFkZHJlc3Mgc3R5bGUgc2V0IHRvIGBib2xkZXJgIGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cbiAqL1xuXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi8qKlxuICogQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIFNhZmFyaSBhbmQgQ2hyb21lLlxuICovXG5cbmRmbiB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLyoqXG4gKiBBZGRyZXNzIHZhcmlhYmxlIGBoMWAgZm9udC1zaXplIGFuZCBtYXJnaW4gd2l0aGluIGBzZWN0aW9uYCBhbmQgYGFydGljbGVgXG4gKiBjb250ZXh0cyBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4gKi9cblxuaDEge1xuICBmb250LXNpemU6IDJlbTtcbiAgbWFyZ2luOiAwLjY3ZW0gMDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LlxuICovXG5cbm1hcmsge1xuICBiYWNrZ3JvdW5kOiAjZmYwO1xuICBjb2xvcjogIzAwMDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIGluY29uc2lzdGVudCBhbmQgdmFyaWFibGUgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODAlO1xufVxuXG4vKipcbiAqIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGFmZmVjdGluZyBgbGluZS1oZWlnaHRgIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG4vKiBFbWJlZGRlZCBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSBib3JkZXIgd2hlbiBpbnNpZGUgYGFgIGVsZW1lbnQgaW4gSUUgOC85LzEwLlxuICovXG5cbmltZyB7XG4gIGJvcmRlcjogMDtcbn1cblxuLyoqXG4gKiBDb3JyZWN0IG92ZXJmbG93IG5vdCBoaWRkZW4gaW4gSUUgOS8xMC8xMS5cbiAqL1xuXG5zdmc6bm90KDpyb290KSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8qIEdyb3VwaW5nIGNvbnRlbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkcmVzcyBtYXJnaW4gbm90IHByZXNlbnQgaW4gSUUgOC85IGFuZCBTYWZhcmkuXG4gKi9cblxuZmlndXJlIHtcbiAgbWFyZ2luOiAxZW0gNDBweDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIGRpZmZlcmVuY2VzIGJldHdlZW4gRmlyZWZveCBhbmQgb3RoZXIgYnJvd3NlcnMuXG4gKi9cblxuaHIge1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgaGVpZ2h0OiAwO1xufVxuXG4vKipcbiAqIENvbnRhaW4gb3ZlcmZsb3cgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbnByZSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4vKipcbiAqIEFkZHJlc3Mgb2RkIGBlbWAtdW5pdCBmb250IHNpemUgcmVuZGVyaW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbi8qIEZvcm1zXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIEtub3duIGxpbWl0YXRpb246IGJ5IGRlZmF1bHQsIENocm9tZSBhbmQgU2FmYXJpIG9uIE9TIFggYWxsb3cgdmVyeSBsaW1pdGVkXG4gKiBzdHlsaW5nIG9mIGBzZWxlY3RgLCB1bmxlc3MgYSBgYm9yZGVyYCBwcm9wZXJ0eSBpcyBzZXQuXG4gKi9cblxuLyoqXG4gKiAxLiBDb3JyZWN0IGNvbG9yIG5vdCBiZWluZyBpbmhlcml0ZWQuXG4gKiAgICBLbm93biBpc3N1ZTogYWZmZWN0cyBjb2xvciBvZiBkaXNhYmxlZCBlbGVtZW50cy5cbiAqIDIuIENvcnJlY3QgZm9udCBwcm9wZXJ0aWVzIG5vdCBiZWluZyBpbmhlcml0ZWQuXG4gKiAzLiBBZGRyZXNzIG1hcmdpbnMgc2V0IGRpZmZlcmVudGx5IGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cbiAqL1xuXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBjb2xvcjogaW5oZXJpdDsgLyogMSAqL1xuICBmb250OiBpbmhlcml0OyAvKiAyICovXG4gIG1hcmdpbjogMDsgLyogMyAqL1xufVxuXG4vKipcbiAqIEFkZHJlc3MgYG92ZXJmbG93YCBzZXQgdG8gYGhpZGRlbmAgaW4gSUUgOC85LzEwLzExLlxuICovXG5cbmJ1dHRvbiB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4vKipcbiAqIEFkZHJlc3MgaW5jb25zaXN0ZW50IGB0ZXh0LXRyYW5zZm9ybWAgaW5oZXJpdGFuY2UgZm9yIGBidXR0b25gIGFuZCBgc2VsZWN0YC5cbiAqIEFsbCBvdGhlciBmb3JtIGNvbnRyb2wgZWxlbWVudHMgZG8gbm90IGluaGVyaXQgYHRleHQtdHJhbnNmb3JtYCB2YWx1ZXMuXG4gKiBDb3JyZWN0IGBidXR0b25gIHN0eWxlIGluaGVyaXRhbmNlIGluIEZpcmVmb3gsIElFIDgvOS8xMC8xMSwgYW5kIE9wZXJhLlxuICogQ29ycmVjdCBgc2VsZWN0YCBzdHlsZSBpbmhlcml0YW5jZSBpbiBGaXJlZm94LlxuICovXG5cbmJ1dHRvbixcbnNlbGVjdCB7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4vKipcbiAqIDEuIEF2b2lkIHRoZSBXZWJLaXQgYnVnIGluIEFuZHJvaWQgNC4wLiogd2hlcmUgKDIpIGRlc3Ryb3lzIG5hdGl2ZSBgYXVkaW9gXG4gKiAgICBhbmQgYHZpZGVvYCBjb250cm9scy5cbiAqIDIuIENvcnJlY3QgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSBgaW5wdXRgIHR5cGVzIGluIGlPUy5cbiAqIDMuIEltcHJvdmUgdXNhYmlsaXR5IGFuZCBjb25zaXN0ZW5jeSBvZiBjdXJzb3Igc3R5bGUgYmV0d2VlbiBpbWFnZS10eXBlXG4gKiAgICBgaW5wdXRgIGFuZCBvdGhlcnMuXG4gKi9cblxuYnV0dG9uLFxuaHRtbCBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLCAvKiAxICovXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0sXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDIgKi9cbiAgY3Vyc29yOiBwb2ludGVyOyAvKiAzICovXG59XG5cbi8qKlxuICogUmUtc2V0IGRlZmF1bHQgY3Vyc29yIGZvciBkaXNhYmxlZCBlbGVtZW50cy5cbiAqL1xuXG5idXR0b25bZGlzYWJsZWRdLFxuaHRtbCBpbnB1dFtkaXNhYmxlZF0ge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8qKlxuICogUmVtb3ZlIGlubmVyIHBhZGRpbmcgYW5kIGJvcmRlciBpbiBGaXJlZm94IDQrLlxuICovXG5cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcbmlucHV0OjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG4vKipcbiAqIEFkZHJlc3MgRmlyZWZveCA0KyBzZXR0aW5nIGBsaW5lLWhlaWdodGAgb24gYGlucHV0YCB1c2luZyBgIWltcG9ydGFudGAgaW5cbiAqIHRoZSBVQSBzdHlsZXNoZWV0LlxuICovXG5cbmlucHV0IHtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuLyoqXG4gKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGF0dGVtcHQgdG8gc3R5bGUgdGhlc2UgZWxlbWVudHMuXG4gKiBGaXJlZm94J3MgaW1wbGVtZW50YXRpb24gZG9lc24ndCByZXNwZWN0IGJveC1zaXppbmcsIHBhZGRpbmcsIG9yIHdpZHRoLlxuICpcbiAqIDEuIEFkZHJlc3MgYm94IHNpemluZyBzZXQgdG8gYGNvbnRlbnQtYm94YCBpbiBJRSA4LzkvMTAuXG4gKiAyLiBSZW1vdmUgZXhjZXNzIHBhZGRpbmcgaW4gSUUgOC85LzEwLlxuICovXG5cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IC8qIDEgKi9cbiAgcGFkZGluZzogMDsgLyogMiAqL1xufVxuXG4vKipcbiAqIEZpeCB0aGUgY3Vyc29yIHN0eWxlIGZvciBDaHJvbWUncyBpbmNyZW1lbnQvZGVjcmVtZW50IGJ1dHRvbnMuIEZvciBjZXJ0YWluXG4gKiBgZm9udC1zaXplYCB2YWx1ZXMgb2YgdGhlIGBpbnB1dGAsIGl0IGNhdXNlcyB0aGUgY3Vyc29yIHN0eWxlIG9mIHRoZVxuICogZGVjcmVtZW50IGJ1dHRvbiB0byBjaGFuZ2UgZnJvbSBgZGVmYXVsdGAgdG8gYHRleHRgLlxuICovXG5cbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4vKipcbiAqIDEuIEFkZHJlc3MgYGFwcGVhcmFuY2VgIHNldCB0byBgc2VhcmNoZmllbGRgIGluIFNhZmFyaSBhbmQgQ2hyb21lLlxuICogMi4gQWRkcmVzcyBgYm94LXNpemluZ2Agc2V0IHRvIGBib3JkZXItYm94YCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbiAqL1xuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cbiAgYm94LXNpemluZzogY29udGVudC1ib3g7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgc2VhcmNoIGNhbmNlbCBidXR0b24gaW4gU2FmYXJpIGFuZCBDaHJvbWUgb24gT1MgWC5cbiAqIFNhZmFyaSAoYnV0IG5vdCBDaHJvbWUpIGNsaXBzIHRoZSBjYW5jZWwgYnV0dG9uIHdoZW4gdGhlIHNlYXJjaCBpbnB1dCBoYXNcbiAqIHBhZGRpbmcgKGFuZCBgdGV4dGZpZWxkYCBhcHBlYXJhbmNlKS5cbiAqL1xuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLyoqXG4gKiBEZWZpbmUgY29uc2lzdGVudCBib3JkZXIsIG1hcmdpbiwgYW5kIHBhZGRpbmcuXG4gKi9cblxuZmllbGRzZXQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICBtYXJnaW46IDAgMnB4O1xuICBwYWRkaW5nOiAwLjM1ZW0gMC42MjVlbSAwLjc1ZW07XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCBgY29sb3JgIG5vdCBiZWluZyBpbmhlcml0ZWQgaW4gSUUgOC85LzEwLzExLlxuICogMi4gUmVtb3ZlIHBhZGRpbmcgc28gcGVvcGxlIGFyZW4ndCBjYXVnaHQgb3V0IGlmIHRoZXkgemVybyBvdXQgZmllbGRzZXRzLlxuICovXG5cbmxlZ2VuZCB7XG4gIGJvcmRlcjogMDsgLyogMSAqL1xuICBwYWRkaW5nOiAwOyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIGRlZmF1bHQgdmVydGljYWwgc2Nyb2xsYmFyIGluIElFIDgvOS8xMC8xMS5cbiAqL1xuXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4vKipcbiAqIERvbid0IGluaGVyaXQgdGhlIGBmb250LXdlaWdodGAgKGFwcGxpZWQgYnkgYSBydWxlIGFib3ZlKS5cbiAqIE5PVEU6IHRoZSBkZWZhdWx0IGNhbm5vdCBzYWZlbHkgYmUgY2hhbmdlZCBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYLlxuICovXG5cbm9wdGdyb3VwIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi8qIFRhYmxlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgbW9zdCBzcGFjaW5nIGJldHdlZW4gdGFibGUgY2VsbHMuXG4gKi9cblxudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDtcbn1cblxudGQsXG50aCB7XG4gIHBhZGRpbmc6IDA7XG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNCT1gtU0laSU5HXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIFNldCB0aGUgZ2xvYmFsIGBib3gtc2l6aW5nYCBzdGF0ZSB0byBgYm9yZGVyLWJveGAuXG4gKlxuICogY3NzLXRyaWNrcy5jb20vaW5oZXJpdGluZy1ib3gtc2l6aW5nLXByb2JhYmx5LXNsaWdodGx5LWJldHRlci1iZXN0LXByYWN0aWNlXG4gKiBwYXVsaXJpc2guY29tLzIwMTIvYm94LXNpemluZy1ib3JkZXItYm94LWZ0d1xuICovXG5odG1sIHtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuKiB7XG5cbiAgICAmLFxuICAgICY6YmVmb3JlLFxuICAgICY6YWZ0ZXIge1xuICAgICAgICAtd2Via2l0LWJveC1zaXppbmc6IGluaGVyaXQ7XG4gICAgICAgICAgIC1tb3otYm94LXNpemluZzogaW5oZXJpdDtcbiAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBpbmhlcml0O1xuICAgICAgICB9XG5cbn1cblxuXG5cblxuXG4vLyBJZiB3ZSBoYXZlIGluY2x1ZGVkIHRoaXMgZmlsZSwgc2V0IGEgdmFyaWFibGUgdG8gdGVsbCB0aGUgcmVzdCBvZiB0aGVcbi8vIGZyYW1ld29yayB0aGF0IGdsb2JhbCBgYm94LXNpemluZzogYm9yZGVyLWJveGAgaGFzIGJlZW4gc2V0LlxuJGludWl0LWdsb2JhbC1ib3JkZXItYm94OiB0cnVlO1xuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjUkVTRVRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogQXMgd2VsbCBhcyB1c2luZyBub3JtYWxpemUuY3NzLCBpdCBpcyBvZnRlbiBhZHZhbnRhZ2VvdXMgdG8gcmVtb3ZlIGFsbFxuICogbWFyZ2lucyBmcm9tIGNlcnRhaW4gZWxlbWVudHMuXG4gKi9cbmJvZHksXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LFxucCwgYmxvY2txdW90ZSwgcHJlLFxuZGwsIGRkLCBvbCwgdWwsXG5mb3JtLCBmaWVsZHNldCwgbGVnZW5kLFxuZmlndXJlLFxudGFibGUsIHRoLCB0ZCwgY2FwdGlvbixcbmhyIHtcbiAgICBtYXJnaW46ICAwO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cblxuXG5cblxuLyoqXG4gKiBHaXZlIGEgaGVscCBjdXJzb3IgdG8gZWxlbWVudHMgdGhhdCBnaXZlIGV4dHJhIGluZm8gb24gYDpob3ZlcmAuXG4gKi9cbmFiYnJbdGl0bGVdLFxuZGZuW3RpdGxlXSB7XG4gICAgY3Vyc29yOiBoZWxwO1xufVxuXG5cblxuXG5cbi8qKlxuICogUmVtb3ZlIHVuZGVybGluZXMgZnJvbSBwb3RlbnRpYWxseSB0cm91Ymxlc29tZSBlbGVtZW50cy5cbiAqL1xudSxcbmlucyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG5cblxuXG5cbi8qKlxuICogQXBwbHkgZmF1eCB1bmRlcmxpbmVzIHRvIGluc2VydGVkIHRleHQgdmlhIGBib3JkZXItYm90dG9tYC5cbiAqL1xuaW5zIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7XG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNTSEFSRURcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogV2hlcmUgYG1hcmdpbi1ib3R0b21gIGlzIGNvbmNlcm5lZCx0aGlzIHZhbHVlIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlXG4gKiBiYXNlIGxpbmUtaGVpZ2h0LiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIGEgY29uc2lzdGVudCB2ZXJ0aWNhbCByaHl0aG0uXG4gKiBBcyBwZXI6IGNzc3dpemFyZHJ5LmNvbS8yMDEyLzA2L3NpbmdsZS1kaXJlY3Rpb24tbWFyZ2luLWRlY2xhcmF0aW9uc1xuICovXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LFxudWwsIG9sLCBkbCxcbmJsb2NrcXVvdGUsIHAsIGFkZHJlc3MsXG5ocixcbnRhYmxlLFxuZmllbGRzZXQsIGZpZ3VyZSxcbnByZSxcbiVtYXJnaW4tYm90dG9tIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQ7XG4gICAgbWFyZ2luLWJvdHRvbTogKCRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdCAvICRpbnVpdC1iYXNlLWZvbnQtc2l6ZSkgKiAxcmVtO1xufVxuXG5cblxuXG5cbi8qKlxuICogV2hlcmUgYG1hcmdpbi1sZWZ0YCBpcyBjb25jZXJuZWQgd2Ugd2FudCB0byB0cnkgYW5kIGluZGVudCBjZXJ0YWluIGVsZW1lbnRzXG4gKiBieSBhIGNvbnNpc3RlbnQgYW1vdW50LiBEZWZpbmUgdGhhdCBhbW91bnQgb25jZSxoZXJlLlxuICovXG51bCwgb2wsIGRkLFxuJW1hcmdpbi1sZWZ0IHtcbiAgICBtYXJnaW4tbGVmdDogMiAqICRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdDtcbiAgICBtYXJnaW4tbGVmdDogKDIgKiAkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQgLyAkaW51aXQtYmFzZS1mb250LXNpemUpICogMXJlbTtcbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI0hFQURJTkdTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEhlYWRpbmdzIDHigJM2LlxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtaGVhZGluZy1zaXplLTE6ICAzNnB4ICFkZWZhdWx0O1xuJGludWl0LWhlYWRpbmctc2l6ZS0yOiAgMzBweCAhZGVmYXVsdDtcbiRpbnVpdC1oZWFkaW5nLXNpemUtMzogIDI0cHggIWRlZmF1bHQ7XG4kaW51aXQtaGVhZGluZy1zaXplLTQ6ICAyMHB4ICFkZWZhdWx0O1xuJGludWl0LWhlYWRpbmctc2l6ZS01OiAgMTZweCAhZGVmYXVsdDtcbiRpbnVpdC1oZWFkaW5nLXNpemUtNjogIDE0cHggIWRlZmF1bHQ7XG5cbmgxIHtcbiAgICBAaW5jbHVkZSBpbnVpdC1mb250LXNpemUoJGludWl0LWhlYWRpbmctc2l6ZS0xKTtcbn1cblxuaDIge1xuICAgIEBpbmNsdWRlIGludWl0LWZvbnQtc2l6ZSgkaW51aXQtaGVhZGluZy1zaXplLTIpO1xufVxuXG5oMyB7XG4gICAgQGluY2x1ZGUgaW51aXQtZm9udC1zaXplKCRpbnVpdC1oZWFkaW5nLXNpemUtMyk7XG59XG5cbmg0IHtcbiAgICBAaW5jbHVkZSBpbnVpdC1mb250LXNpemUoJGludWl0LWhlYWRpbmctc2l6ZS00KTtcbn1cblxuaDUge1xuICAgIEBpbmNsdWRlIGludWl0LWZvbnQtc2l6ZSgkaW51aXQtaGVhZGluZy1zaXplLTUpO1xufVxuXG5oNiB7XG4gICAgQGluY2x1ZGUgaW51aXQtZm9udC1zaXplKCRpbnVpdC1oZWFkaW5nLXNpemUtNik7XG59XG4iLCIvLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4vLyAgICAjTUlYSU5TXG4vL1xcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8vIGludWl0Y3NzIGhhcyBhIG51bWJlciBvZiBkZWZhdWx0IG1peGlucyB0aGF0IHRoZSBmcmFtZXdvcmssIGFuZCBkZXZlbG9wZXJzXG4vLyB3b3JraW5nIHdpdGggaXQsIGNhbiBtYWtlIHVzZSBvZi5cblxuXG5cblxuXG4vLyBDcmVhdGUgYSBmdWxseSBmb3JtZWQgdHlwZSBzdHlsZSAoc2l6aW5nIGFuZCB2ZXJ0aWNhbCByaHl0aG0pIGJ5IHBhc3NpbmcgaW4gYVxuLy8gc2luZ2xlIHZhbHVlLCBlLmcuOlxuLy9cbi8vIC5mb28ge1xuLy8gICAgIEBpbmNsdWRlIGludWl0LWZvbnQtc2l6ZSgxMnB4KTtcbi8vIH1cbi8vXG4vLyBUaGlzIHdpbGwgZ2VuZXJhdGUgYSByZW0tYmFzZWQgZm9udC1zaXplIHdpdGggaXRzIHBpeGVsIGZhbGxiYWNrLCBhcyB3ZWxsIGFzXG4vLyBhIHVuaXRsZXNzIGxpbmUtaGVpZ2h0IHdoaWNoIHdpbGwgcGxhY2UgdGhlIGVsZW1lbnQgb24geW91ciBiYXNlbGluZSwgZS5nLjpcbi8vXG4vLyAuZm9vIHtcbi8vICAgICBmb250LXNpemU6IDEycHg7XG4vLyAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuLy8gICAgIGxpbmUtaGVpZ2h0OiAyO1xuLy8gfVxuLy9cbi8vIElmIHlvdSBkbyBub3Qgd2FudCBpbnVpdGNzcyB0byBnZW5lcmF0ZSB5b3UgYSBsaW5lLWhlaWdodCBhdXRvbWF0aWNhbGx5LCB5b3Vcbi8vIHNpbXBseSBwYXNzIGluIHlvdXIgb3duIGFzIGEgc2Vjb25kIHBhcmFtYXRlcjpcbi8vXG4vLyAuZm9vIHtcbi8vICAgICBAaW5jbHVkZSBpbnVpdC1mb250LXNpemUoMTJweCwgMS41KTtcbi8vIH1cbi8vXG4vLyBUaGlzIHdpbGwgeWllbGQ6XG4vL1xuLy8gLmZvbyB7XG4vLyAgICAgZm9udC1zaXplOiAxMnB4O1xuLy8gICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbi8vICAgICBsaW5lLWhlaWdodDogMS41O1xuLy8gfVxuLy9cbi8vIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgaW50ZWdlciwg4oCYaW5oZXJpdOKAmSwgb3Ig4oCYbm9ybWFs4oCZLiBJZiB5b3UgZG9u4oCZdCB3YW50XG4vLyBhIGxpbmUtaGVpZ2h0IGF0IGFsbCwgcGFzcyBpbiBhIHNlY29uZCBwYXJhbWF0ZXIgb2Yg4oCYbm9uZeKAmSBvciDigJhmYWxzZeKAmTpcbi8vXG4vLyAuZm9vIHtcbi8vICAgICBAaW5jbHVkZSBpbnVpdC1mb250LXNpemUoMTJweCwgbm9uZSk7XG4vLyB9XG4vL1xuLy8gVGhpcyB3aWxsIHlpZWxkOlxuLy9cbi8vIC5mb28ge1xuLy8gICAgIGZvbnQtc2l6ZTogMTJweDtcbi8vICAgICBmb250LXNpemU6IDAuNzVyZW07XG4vLyB9XG5cbkBtaXhpbiBpbnVpdC1mb250LXNpemUoJGludWl0LWZvbnQtc2l6ZSwgJGludWl0LWxpbmUtaGVpZ2h0OiBhdXRvKSB7XG4gICAgZm9udC1zaXplOiAkaW51aXQtZm9udC1zaXplO1xuICAgIGZvbnQtc2l6ZTogKCRpbnVpdC1mb250LXNpemUgLyAkaW51aXQtYmFzZS1mb250LXNpemUpICogMXJlbTtcblxuICAgIEBpZiAkaW51aXQtbGluZS1oZWlnaHQgPT0gYXV0byB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiBjZWlsKCRpbnVpdC1mb250LXNpemUgLyAkaW51aXQtYmFzZS1saW5lLWhlaWdodCkgKiAoJGludWl0LWJhc2UtbGluZS1oZWlnaHQgLyAkaW51aXQtZm9udC1zaXplKTtcbiAgICB9XG5cbiAgICBAZWxzZSB7XG5cbiAgICAgICAgQGlmICh0eXBlLW9mKCRpbnVpdC1saW5lLWhlaWdodCkgPT0gbnVtYmVyIG9yICRpbnVpdC1saW5lLWhlaWdodCA9PSBpbmhlcml0IG9yICRpbnVpdC1saW5lLWhlaWdodCA9PSBub3JtYWwpIHtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAkaW51aXQtbGluZS1oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBAZWxzZWlmICgkaW51aXQtbGluZS1oZWlnaHQgIT0gbm9uZSBhbmQgJGludWl0LWxpbmUtaGVpZ2h0ICE9IGZhbHNlKSB7XG4gICAgICAgICAgICBAd2FybiBcIkTigJlvaCEg4oCYI3skaW51aXQtbGluZS1oZWlnaHR94oCZIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciBgbGluZS1oZWlnaHRgLlwiXG4gICAgICAgIH1cblxuICAgIH1cblxufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjUEFSQUdSQVBIU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBUaGUgYC5sZWRlYCBjbGFzcyBpcyB1c2VkIHRvIG1ha2UgdGhlIGludHJvZHVjdG9yeSB0ZXh0ICh1c3VhbGx5IGEgcGFyYWdyYXBoKVxuICogb2YgYSBkb2N1bWVudCBzbGlnaHRseSBsYXJnZXI6IGVuLndpa2lwZWRpYS5vcmcvd2lraS9MZWRlXyhuZXdzKVxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtbGVkZS1zaXplOiAgIDEuMTI1ICFkZWZhdWx0O1xuXG4uI3skaW51aXQtbmFtZXNwYWNlfWxlZGUsXG4lI3skaW51aXQtbmFtZXNwYWNlfWxlZGUge1xuICAgIEBpbmNsdWRlIGludWl0LWZvbnQtc2l6ZSgkaW51aXQtYmFzZS1mb250LXNpemUgKiAkaW51aXQtbGVkZS1zaXplKTtcbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI1RZUEVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogVHlwb2dyYXBoaWNhbCBiYXNlIHNlbGVjdG9ycy5cbiAqL1xuXG4vKipcbiAqIEhlYWRpbmdzIDHigJM2LlxuICovXG5AaW5jbHVkZSBoZWFkaW5ncygpIHtcbiAgICBAaW5jbHVkZSBmb250LXdlaWdodChyZWd1bGFyKTtcbiAgICBjb2xvcjogJGNvbG9yLWhlYWRpbmdzO1xufVxuXG5cblxuXG5cbi8qKlxuICogQSBnZW5lcmljIGhlYWRpbmcgc3R5bGUgd2hpY2ggY2FuIGJlIGFwcGxpZWQgdG8gYW55IGhlYWRpbmdzLlxuICovXG4uaGVhZGluZyB7XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKDIycHgpO1xufVxuXG4uaGVhZGluZy0taGlnaGxpZ2h0IHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoMjBweCk7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIEBpbmNsdWRlIGZvbnQtd2VpZ2h0KGJvbGQpO1xufVxuXG4uaGVhZGluZy1zdWIge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgxNnB4KTtcbiAgICBAaW5jbHVkZSBmb250LXdlaWdodChib2xkKTtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIGNvbG9yOiAkY29sb3ItaGVhZGluZy1zdWI7XG59XG5cbi5zZWN0aW9uLWhlYWRpbmcge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgzMnB4KTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShwYWxtKSB7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgyNHB4KTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICB9XG59XG5cbi5zZWN0aW9uLWhlYWRpbmctLWRhcmsge1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgJiA+IC5zZWN0aW9uLWhlYWRpbmdfX3RleHQge1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnNlY3Rpb24taGVhZGluZy0tYnJhbmQge1xuICAgIGNvbG9yOiAkY29sb3ItYnJhbmQ7XG4gICAgJiA+IC5zZWN0aW9uLWhlYWRpbmdfX3RleHQge1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1icmFuZDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnNlY3Rpb24taGVhZGluZy0tdG9wIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICYgPiAuc2VjdGlvbi1oZWFkaW5nX190ZXh0IHtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICB0b3A6IGF1dG87XG4gICAgICAgICAgICBib3R0b206IDEwMCU7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogaGFsdmUoJGludWl0LWJhc2Utc3BhY2luZy11bml0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnNlY3Rpb24taGVhZGluZy0tbm8tbGluZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAmID4gLnNlY3Rpb24taGVhZGluZ19fdGV4dCB7XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnNlY3Rpb24taGVhZGluZy0tcmlnaHQge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICYgPiAuc2VjdGlvbi1oZWFkaW5nX190ZXh0IHtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiAgICAuc2VjdGlvbi1oZWFkaW5nX190ZXh0IHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIHdpZHRoOiA1MCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1ncmF5LXVpO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiAxMDAlO1xuICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IGhhbHZlKCRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbi5zZWN0aW9uLWhlYWRpbmctLW1hcmdpbi1sYXJnZXtcbiAgICBtYXJnaW4tYm90dG9tOiAzZW07XG59XG5cbi5zZWN0aW9uLWhlYWRpbmctLWNlbnRyZSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgJiA+IC5zZWN0aW9uLWhlYWRpbmdfX3RleHQge1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuICAgIFxuXG5cblxuXG4vKipcbiAqIEVtYm9sZGVuZWQgZWxlbWVudHMuXG4gKi9cbmEsXG5zdHJvbmcsIGIsXG5kdCB7XG4gICAgLy9AaW5jbHVkZSBmb250LXdlaWdodChib2xkKTtcbn1cblxuXG5cblxuXG4vKipcbiAqIENvZGUtbGlrZSBlbGVtZW50cy5cbiAqL1xuY29kZSwga2JkLCBzYW1wIHtcbiAgICBjb2xvcjogJGNvbG9yLWNvZGU7XG4gICAgZm9udC1mYW1pbHk6IEluY29uc29sYXRhLCBNb25hY28sIENvbnNvbGFzLCBcIkFuZGFsZSBNb25vXCIsIFwiQml0c3RyZWFtIFZlcmEgU2FucyBNb25vXCIsIFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cblxucHJlIHtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIHdvcmQtd3JhcDogbm9ybWFsO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIHBhZGRpbmc6ICRzcGFjaW5nLXVuaXQtLXNtYWxsO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1wcmUtYmFja2dyb3VuZDtcbiAgICBib3JkZXItcmFkaXVzOiAkYmFzZS1yb3VuZDtcblxuICAgICYsXG4gICAgY29kZSwga2JkLCBzYW1wIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1wcmU7XG4gICAgfVxuXG59XG5cblxuXG5cblxuLyoqXG4gKiBGaWd1cmVzLlxuICpcbiAqIDEuIE91dGRlbnQgZmlndXJlcyBieSBhbiBhcmJpdHJhcnkgYW1vdW50IGF0IHRoZSByZWxldmFudCB2aWV3cG9ydCBzaXplLlxuICogMi4gUmVpbmRlbnQgZmlnY2FwdGlvbnMuXG4gKi9cbmZpZ3VyZSB7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMzgwcHgpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMjhweDsgLyogWzFdICovXG4gICAgfVxuXG4gICAgPiBpbWcge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAkYmFzZS1yb3VuZDtcbiAgICB9XG5cbn1cblxuICAgIGZpZ2NhcHRpb24ge1xuICAgICAgICBAaW5jbHVkZSBmb250LXNpemUoMTJweCk7XG5cbiAgICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTM4MHB4KSB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMTI4cHg7IC8qIFsyXSAqL1xuICAgICAgICB9XG5cbiAgICB9XG5cblxuXG5cblxuLyoqXG4gKiBIb3Jpem9udGFsIHJ1bGVzLlxuICovXG5ociB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkY29sb3ItZ3JheS11aTtcbiAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy11bml0IC0gMXB4O1xufVxuXG5cblxuXG5cbi8qKlxuICogSGlnaGxpZ2h0ZWQgdGV4dC5cbiAqL1xubWFyayB7XG5cbiAgICBwcmUgJiB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuXG59XG5cblxuXG5cblxuLyoqXG4gKiBUZXh0LWFsaWdubWVudC5cbiAqL1xuLnRleHQtYmFubmVyIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cblxuLnRleHQtbGFyZ2Uge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgzMnB4KTtcbiAgICBsaW5lLWhlaWdodDogMjtcbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShwYWxtKXtcbiAgICAgICAgQGluY2x1ZGUgZm9udC1zaXplKDIwcHgpO1xuICAgICAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIH1cbn1cblxuLmJvbGQge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7XG59XG5cbi5zdWItaGVhZGluZyB7XG4gICAgY29sb3I6ICRjb2xvci1icmFuZDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgxNnB4KTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbn1cbiIsIi8vLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbi8vICAgICNHTE9CQUxcbi8vXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGJyYW5kLWNvbG9yOiAgICNGRTU5MDA7XG4kYnJhbmQtcm91bmQ6ICAgNXB4O1xuJGJhc2Utcm91bmQ6ICAgICRicmFuZC1yb3VuZDtcbiIsIi8vLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbi8vICAgICNDT0xPUlNcbi8vXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGNvbG9yLWJyYW5kOiAgICAgICAkYnJhbmQtY29sb3I7XG4kY29sb3ItcGluazogICAgICAgICRjb2xvci1icmFuZDtcbiRjb2xvci1ncmF5OiAgICAgICAgIzRDNDk0NTtcbiRjb2xvci1ncmF5LWxpZ2h0OiAgIzg3ODA3QTtcbiRjb2xvci1ncmF5LXVpOiAgICAgI2RkZDtcbiRjb2xvci1ncmVlbjogICAgICAgIzg1OTkwMDtcbiRjb2xvci1oaWdobGlnaHQ6ICAgI2ZmZjtcbiRjb2xvci10aW50OiAgICAgICAgI2YyZjJmMjtcbiRjb2xvci1wb3NpdGl2ZTogICAgIzNmOTkwZjtcbiRjb2xvci1uZWdhdGl2ZTogICAgIzlmMTAyZTtcbiRjb2xvci13aGl0ZTogICAgICAgI2ZmZjtcblxuXG5cblxuXG4vLyBQYWdlXG4kaW51aXQtYmFzZS1iYWNrZ3JvdW5kLWNvbG9yOiAgICRjb2xvci13aGl0ZTtcbiRpbnVpdC1iYXNlLXRleHQtY29sb3I6ICAgICAgICAgJGNvbG9yLWdyYXk7XG5cblxuXG5cblxuLy8gTGlua3NcbiRjb2xvci1saW5rczogICAgICAgICAgICRjb2xvci1waW5rO1xuJGNvbG9yLWxpbmtzLWNhcm91c2VsOiAgJGNvbG9yLWdyYXktdWk7XG5cblxuXG5cblxuLy8gVGV4dFxuJGNvbG9yLWNvZGU6ICAgICAgICAgICAgJGNvbG9yLWdyZWVuO1xuJGNvbG9yLXByZS1iYWNrZ3JvdW5kOiAgJGNvbG9yLWdyYXk7XG4kY29sb3ItcHJlOiAgICAgICAgICAgICAjZmZmO1xuXG5cblxuXG5cbi8vIEJ1dHRvbnNcbiRjb2xvci1idG46ICAgICAkY29sb3ItbGlua3M7XG5cblxuXG5cblxuLy8gSWNvbmljXG4kY29sb3ItaWNvbmljOiAgJGNvbG9yLWdyYXktdWk7XG5cblxuXG5cblxuLy8gUGFnZSBoZWFkXG4kY29sb3ItbWFzdGhlYWQ6ICAgICAgICAgICAgICAgICNmZmY7XG4kY29sb3ItcGFnZS1oZWFkLWJvcmRlcjogICAgICAgICRjb2xvci1waW5rO1xuJGNvbG9yLXBhZ2UtaGVhZDogICAgICAgICAgICAgICAjZmZmO1xuJGNvbG9yLXBhZ2UtaGVhZC1iYWNrZ3JvdW5kOiAgICAkY29sb3ItZ3JheTtcblxuXG5cblxuXG4vLyBTaXRlIG5hdlxuJGNvbG9yLXNpdGUtbmF2OiAgICAjZmZmO1xuXG5cblxuXG5cbi8vIFBhZ2UgZm9vdFxuJGNvbG9yLXBhZ2UtZm9vdDogICAgICAgICAgICAgICAjZmZmO1xuXG5cblxuXG5cbi8vIFBhZ2UgbWljcm9cbiRjb2xvci1wYWdlLW1pY3JvOiAgICAgICAgICAgICAgJGNvbG9yLWdyYXk7XG4kY29sb3ItcGFnZS1taWNyby1iYWNrZ3JvdW5kOiAgICNmZmY7XG5cblxuXG5cblxuLy8gSGVhZGluZ3NcbiRjb2xvci1oZWFkaW5nczogICAgJGNvbG9yLWJyYW5kO1xuJGNvbG9yLWhlYWRpbmctc3ViOiAkY29sb3ItZ3JheTtcblxuXG5cblxuXG4vLyBRdW90ZXNcbiRjb2xvci1xdW90ZTogICAgICAgICAgICRjb2xvci1ncmF5LWxpZ2h0O1xuJGNvbG9yLXF1b3RlLS1iYW5uZXI6ICAgJGNvbG9yLWdyYXk7XG5cblxuXG5cblxuLy8gQm94ZXNcbiRjb2xvci1ib3gtaGlnaGxpZ2h0LWJhY2tncm91bmQ6ICAgICRjb2xvci1oaWdobGlnaHQ7XG4kY29sb3ItYm94LWhpZ2hsaWdodC1ib3JkZXI6ICAgICAgICAkY29sb3ItZ3JheS11aTtcbiRjb2xvci1ib3gtdGludC1iYWNrZ3JvdW5kOiAgICAgICAgICRjb2xvci10aW50O1xuXG5cblxuXG5cbi8vIEJhbmRzXG4kY29sb3ItYmFuZC1oaWdobGlnaHQtYmFja2dyb3VuZDogICAkY29sb3ItaGlnaGxpZ2h0O1xuJGNvbG9yLWJhbmQtdGludC1iYWNrZ3JvdW5kOiAgICAgICAgJGNvbG9yLXRpbnQ7XG4kY29sb3ItYmFuZC1kYXJrOiAgICAgICAgICAgICAgICAgICAjOUI5QjlCO1xuJGNvbG9yLWJhbmQtZGFyay1iYWNrZ3JvdW5kOiAgICAgICAgJGNvbG9yLWdyYXk7XG4iLCIvLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4vLyAgICAjVE9PTFMtUkVTUE9OU0lWRVxuLy9cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vLyBIZXJlIHdlIHNldCBhIHZhcmlhYmxlIGFzc3VtaW5nIHRoYXQgcmVzcG9uc2l2ZSBzZXR0aW5ncyBhcmUgbm90IHNldFxuLy8gZ2xvYmFsbHkuIElmIHRoZXkgaGF2ZSBiZWVuIHByZXZpb3VzbHkgYmVlbiBkZWZpbmVkLCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlXG4vLyB3aWxsIGJlIG92ZXJyaWRlbiBhbmQgd2lsbCBiZSBzZXQgdG8gYHRydWVgLlxuJGludWl0LXJlc3BvbnNpdmUtc2V0dGluZ3M6IGZhbHNlICFkZWZhdWx0O1xuXG5AaWYgKCRpbnVpdC1yZXNwb25zaXZlLXNldHRpbmdzID09IGZhbHNlKSB7XG4gICAgQHdhcm4gXCJPb3BzISBIYXZlIHlvdSBpbmNsdWRlZCBhIHJlc3BvbnNpdmUgc2V0dGluZ3MgZmlsZT9cIlxufVxuXG5cblxuXG5cbi8vIEEgc2ltcGxlIG1peGluIHRvIHF1aWNrbHkgZ2VuZXJhdGUgd2hvbGUgbWVkaWEgcXVlcmllcyBmcm9tIHRoZSBhbGlhc2VzIGFuZFxuLy8gY29uZGl0aW9ucyBkZWZpbmVkIGluIGBfc2V0dGluZ3MucmVzcG9uc2l2ZS5zY3NzYC5cbi8vXG4vLyBVc2FnZTpcbi8vXG4vLyAuZm9vIHtcbi8vICAgICBjb2xvcjogZ3JlZW47XG4vL1xuLy8gICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KHBhbG0pIHtcbi8vICAgICAgICAgY29sb3I6IHJlZDtcbi8vICAgICB9XG4vL1xuLy8gfVxuXG5AbWl4aW4gbWVkaWEtcXVlcnkoJG1xKSB7XG5cbiAgICAkYnJlYWtwb2ludC1mb3VuZDogZmFsc2U7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgd2XigJl2ZSBwcm92aWRlZCBpbiBvdXIgc2V0dGluZ3MgZmlsZS5cbiAgICBAZWFjaCAkYnJlYWtwb2ludCBpbiAkYnJlYWtwb2ludHMge1xuXG4gICAgICAgIC8vIEdyYWIgdGhlIGFsaWFzIGFuZCB0aGUgY29uZGl0aW9uIGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBsb2NhdGlvbnMgaW5cbiAgICAgICAgLy8gdGhlIGxpc3QuXG4gICAgICAgICRhbGlhczogICAgIG50aCgkYnJlYWtwb2ludCwgMSk7XG4gICAgICAgICRjb25kaXRpb246IG50aCgkYnJlYWtwb2ludCwgMik7XG5cbiAgICAgICAgLy8gSWYgdGhlIG1lZGlhIHF1ZXJ5IHdl4oCZdmUgc3BlY2lmaWVkIGhhcyBhbiBhbGlhcyBhbmQgYSBjb25kaXRpb24uLi5cbiAgICAgICAgQGlmICRtcSA9PSAkYWxpYXMgYW5kICRjb25kaXRpb24ge1xuXG4gICAgICAgICAgICAvLyAuLi50ZWxsIHRoZSBtaXhpbiB0aGF0IHdl4oCZdmUgZm91bmQgaXQuLi5cbiAgICAgICAgICAgICRicmVha3BvaW50LWZvdW5kOiB0cnVlO1xuXG4gICAgICAgICAgICAvLyAuLi5hbmQgc3BpdCBpdCBvdXQgaGVyZS5cbiAgICAgICAgICAgIEBtZWRpYSAjeyRjb25kaXRpb259IHtcbiAgICAgICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgdXNlciBzcGVjaWZpZXMgYSBub24tZXhpdGVudCBhbGlhcywgc2VuZCB0aGVtIGEgd2FybmluZy5cbiAgICBAaWYgJGJyZWFrcG9pbnQtZm91bmQgPT0gZmFsc2V7XG4gICAgICAgIEB3YXJuIFwiT29wcyEgQnJlYWtwb2ludCDigJgjeyRtcX3igJkgZG9lcyBub3QgZXhpc3QuXCJcbiAgICB9XG5cbn1cbiIsIi8vLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbi8vICAgICNGVU5DVElPTlNcbi8vXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLy8gaW51aXRjc3MgbWFrZXMgdXNlIG9mIGEgZmV3IGZ1bmN0aW9ucyB0aGF0IGFyZSBhbHNvIGF2YWlsYWJsZSBmb3IgeW91IHRvIHVzZVxuLy8gbGF0ZXIgb24gaW4geW91ciBleHRlbnNpb24gb2YgdGhlIGZyYW1ld29yay5cblxuXG5cblxuXG4vLyBNYXRocyBoZWxwZXJzLlxuLy9cbi8vIEhhbHZlIGFuZCBkb3VibGUgbnVtYmVycywgcmV0dXJuaW5nIHJvdW5kZWQgaW50ZWdlcnMuIEUuZy46XG4vL1xuLy8gLmZvbyB7XG4vLyAgICAgcGFkZGluZzogaGFsdmUoMy4ycHgpO1xuLy8gfVxuLy9cbkBmdW5jdGlvbiBxdWFydGVyKCRpbnVpdC1udW1iZXIpIHtcbiAgICBAcmV0dXJuIHJvdW5kKCRpbnVpdC1udW1iZXIgLyA0KTtcbn1cblxuQGZ1bmN0aW9uIGhhbHZlKCRpbnVpdC1udW1iZXIpIHtcbiAgICBAcmV0dXJuIHJvdW5kKCRpbnVpdC1udW1iZXIgLyAyKTtcbn1cblxuQGZ1bmN0aW9uIGRvdWJsZSgkaW51aXQtbnVtYmVyKSB7XG4gICAgQHJldHVybiByb3VuZCgkaW51aXQtbnVtYmVyICogMik7XG59XG5cbkBmdW5jdGlvbiBxdWFkcnVwbGUoJGludWl0LW51bWJlcikge1xuICAgIEByZXR1cm4gcm91bmQoJGludWl0LW51bWJlciAqIDQpO1xufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjTElOS1NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmEsIC5saW5rLWJyYW5kIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY29sb3I6ICRjb2xvci1saW5rcztcblxuICAgIEBpbmNsdWRlIGF0dGVudGlvbigpIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuXG59XG5cbi8vLmxpbmstcXVpZXQge1xuLy8gICAgY29sb3I6ICRjb2xvci1ncmF5LWxpZ2h0O1xuLy8gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4vL1xuLy8gICAgQGluY2x1ZGUgYXR0ZW50aW9uKCkge1xuLy8gICAgICAgIGNvbG9yOiAkY29sb3ItbGlua3M7XG4vLyAgICB9XG4vL1xuLy99XG5cbi5saW5rLXNlY3JldCB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgQGluY2x1ZGUgZm9udC13ZWlnaHQocmVndWxhcik7XG5cbiAgICBAaW5jbHVkZSBhdHRlbnRpb24oKSB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItbGlua3M7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG5cbn0iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNRVU9URVNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogSW5saW5lIHF1b3Rlcy5cbiAqXG4gKi9cbnEge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBxdW90ZXM6IFwi4oCYXCIgXCLigJlcIiBcIuKAnFwiIFwi4oCdXCI7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IG9wZW4tcXVvdGU7XG4gICAgfVxuXG4gICAgJjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IGNsb3NlLXF1b3RlO1xuICAgIH1cblxufVxuXG5cblxuXG5cbi8qKlxuICogQmxvY2sgcXVvdGVzLlxuICpcbiAqIDEuIEhhbmcgb3BlbmluZyBwdW5jdHVhdGlvbi5cbiAqL1xuYmxvY2txdW90ZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAyICogJHNwYWNpbmctdW5pdDtcbiAgICBtYXJnaW4tbGVmdDogIDIgKiAkc3BhY2luZy11bml0O1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBxdW90ZXM6IFwi4oCcXCIgXCLigJ1cIjtcblxuICAgIHAge1xuICAgICAgICB0ZXh0LWluZGVudDogLTAuNDFlbTsgLyogWzFdICovXG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgY29udGVudDogb3Blbi1xdW90ZTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogbm8tY2xvc2UtcXVvdGU7XG4gICAgICAgIH1cblxuICAgICAgICAmOmxhc3Qtb2YtdHlwZSB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBjbG9zZS1xdW90ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBxIHtcbiAgICAgICAgcXVvdGVzOiBcIuKAmFwiIFwi4oCZXCI7XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgY29udGVudDogb3Blbi1xdW90ZTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogY2xvc2UtcXVvdGU7XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjTElTVFNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogUmVtb3ZlIGV4dHJhIHZlcnRpY2FsIHNwYWNpbmcgd2hlbiBuZXN0aW5nIGxpc3RzLlxuICovXG5saSB7XG5cbiAgICA+IHVsLFxuICAgID4gb2wge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cblxufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjSU1BR0VTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIDEuIEZsdWlkIGltYWdlcyBmb3IgcmVzcG9uc2l2ZSBwdXJwb3Nlcy5cbiAqIDIuIE9mZnNldCBgYWx0YCB0ZXh0IGZyb20gc3Vycm91bmRpbmcgY29weS5cbiAqIDMuIFNldHRpbmcgYHZlcnRpY2FsLWFsaWduYCByZW1vdmVzIHRoZSB3aGl0ZXNwYWNlIHRoYXQgYXBwZWFycyB1bmRlciBgaW1nYFxuICogICAgZWxlbWVudHMgd2hlbiB0aGV5IGFyZSBkcm9wcGVkIGludG8gYSBwYWdlIGFzLWlzLiBTYWZlciBhbHRlcm5hdGl2ZSB0b1xuICogICAgdXNpbmcgYGRpc3BsYXk6IGJsb2NrO2AuXG4gKi9cbmltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlOyAvKiBbMV0gKi9cbiAgICBmb250LXN0eWxlOiBpdGFsaWM7IC8qIFsyXSAqL1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IC8qIFszXSAqL1xufVxuXG5cblxuLyoqXG4gKiAxLiBHb29nbGUgTWFwcyBicmVha3MgaWYgYG1heC13aWR0aDogMTAwJWAgYWN0cyB1cG9uIGl0OyB1c2UgdGhlaXIgc2VsZWN0b3JcbiAqICAgIHRvIHJlbW92ZSB0aGUgZWZmZWN0cy5cbiAqIDIuIElmIGEgYHdpZHRoYCBhbmQvb3IgYGhlaWdodGAgYXR0cmlidXRlIGhhdmUgYmVlbiBleHBsaWNpdGx5IGRlZmluZWQsIGxldOKAmXNcbiAqICAgIG5vdCBtYWtlIHRoZSBpbWFnZSBmbHVpZC5cbiAqL1xuLmdtLXN0eWxlIGltZywgLyogWzFdICovXG5pbWdbd2lkdGhdLCAvKiBbMl0gKi9cbmltZ1toZWlnaHRdIHsgIC8qIFsyXSAqL1xuICAgIG1heC13aWR0aDogbm9uZTtcbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI1BBR0VcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogSGlnaC0sIHBhZ2UtbGV2ZWwgc3R5bGluZy5cbiAqXG4gKiAxLiBTZXQgdGhlIGRlZmF1bHQgYGZvbnQtc2l6ZWAgYW5kIGBsaW5lLWhlaWdodGAgZm9yIHRoZSBlbnRpcmUgcHJvamVjdCxcbiAqICAgIHNvdXJjZWQgZnJvbSBvdXIgZGVmYXVsdCB2YXJpYWJsZXMuIFRoZSBgZm9udC1zaXplYCBpcyBjYWxjdWxhdGVkIHRvIGV4aXN0XG4gKiAgICBpbiBlbXMsIHRoZSBgbGluZS1oZWlnaHRgIGlzIGNhbGN1bGF0ZWQgdG8gZXhpc3QgdW5pdGxlc3NseS5cbiAqIDIuIEZvcmNlIHNjcm9sbGJhcnMgdG8gYWx3YXlzIGJlIHZpc2libGUgdG8gcHJldmVudCBhd2t3YXJkIOKAmGp1bXBz4oCZIHdoZW5cbiAqICAgIG5hdmlnYXRpbmcgYmV0d2VlbiBwYWdlcyB0aGF0IGRvL2RvIG5vdCBoYXZlIGVub3VnaCBjb250ZW50IHRvIHByb2R1Y2VcbiAqICAgIHNjcm9sbGJhcnMgbmF0dXJhbGx5LlxuICogMy4gRW5zdXJlIHRoZSBwYWdlIGFsd2F5cyBmaWxscyBhdCBsZWFzdCB0aGUgZW50aXJlIGhlaWdodCBvZiB0aGUgdmlld3BvcnQuXG4gKiA0LiBQcmV2ZW50IGNlcnRhaW4gbW9iaWxlIGJyb3dzZXJzIGZyb20gYXV0b21hdGljYWxseSB6b29taW5nIGZvbnRzLlxuICogNS4gRm9udHMgb24gT1NYIHdpbGwgbG9vayBtb3JlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzeXN0ZW1zIHRoYXQgZG8gbm90XG4gKiAgICByZW5kZXIgdGV4dCB1c2luZyBzdWItcGl4ZWwgYW50aS1hbGlhc2luZy5cbiAqL1xuaHRtbCB7XG4gICAgZm9udC1zaXplOiAoJGludWl0LWJhc2UtZm9udC1zaXplIC8gMTZweCkgKiAxZW07IC8qIFsxXSAqL1xuICAgIGxpbmUtaGVpZ2h0OiAkaW51aXQtYmFzZS1saW5lLWhlaWdodCAvICRpbnVpdC1iYXNlLWZvbnQtc2l6ZTsgLyogWzFdICovXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGludWl0LWJhc2UtYmFja2dyb3VuZC1jb2xvcjtcbiAgICBjb2xvcjogJGludWl0LWJhc2UtdGV4dC1jb2xvcjtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7IC8qIFsyXSAqL1xuICAgIG1pbi1oZWlnaHQ6IDEwMCU7IC8qIFszXSAqL1xuICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogWzRdICovXG4gICAgICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiBbNF0gKi9cbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOyAvKiBbNV0gKi9cbiAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7IC8qIFs1XSAqL1xufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjUEFHRVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuaHRtbCB7XG4gICAgZm9udC1mYW1pbHk6IFwiTGF0b1wiLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgXG4gICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkocGFsbSkge1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgfVxuICAgIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cblxuaHRtbCwgYm9keSB7XG4gICAgXG4gICAgLy9taW4taGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgXG5cbn1cblxuYm9keSB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG59IiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjV1JBUFBFUlNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi53cmFwcGVyIHtcbiAgICBtYXgtd2lkdGg6IDExMDBweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc3BhY2luZy11bml0LS1zbWFsbDtcbiAgICBwYWRkaW5nLWxlZnQ6ICAkc3BhY2luZy11bml0LS1zbWFsbDtcblxuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcC1hbmQtdXApIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogJHNwYWNpbmctdW5pdDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAgJHNwYWNpbmctdW5pdDtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBUaGlzIGlzIGEgYml0IG9mIGEgbWFnaWMgbnVtYmVyOyBhIHdyYXBwZXIgdGhpcyB3aWRlIHdpbGwgYWxsb3cgdXMgdG8g4oCYaGFuZ+KAmVxuICogb25lIGljb24gb3V0IG9mIHRoZSByZXN0IG9mIHRoZSBwYWdl4oCZcyDigJhncmlk4oCZLiBJdCBpcyB1c2VkIHByaW1hcmlseSBvbiB0aGVcbiAqIGhvbWUgcGFnZSBwcm9tbyBib3hlcy5cbiAqL1xuLndyYXBwZXItLXdpZGUge1xuICAgIG1heC13aWR0aDogMTI3NnB4O1xufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjQkxPQ0tcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogVGhlIGJsb2NrIG9iamVjdCBzaW1wbHkgc3RhY2tzIGFuIGltYWdlIG9uIHRvcCBvZiBzb21lIHRleHQtbGlrZSBjb250ZW50LlxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtYmxvY2stbmFtZXNwYWNlOiAgICAgJGludWl0LW5hbWVzcGFjZSAhZGVmYXVsdDtcblxuJGludWl0LWJsb2NrLWd1dHRlcjogICAgICAgICAgICAkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQgIWRlZmF1bHQ7XG4kaW51aXQtYmxvY2stZ3V0dGVyLS10aW55OiAgICAgICAgcXVhcnRlcigkaW51aXQtYmxvY2stZ3V0dGVyKSAhZGVmYXVsdDtcbiRpbnVpdC1ibG9jay1ndXR0ZXItLXNtYWxsOiAgICAgICAgIGhhbHZlKCRpbnVpdC1ibG9jay1ndXR0ZXIpICFkZWZhdWx0O1xuJGludWl0LWJsb2NrLWd1dHRlci0tbGFyZ2U6ICAgICAgICBkb3VibGUoJGludWl0LWJsb2NrLWd1dHRlcikgIWRlZmF1bHQ7XG4kaW51aXQtYmxvY2stZ3V0dGVyLS1odWdlOiAgICAgIHF1YWRydXBsZSgkaW51aXQtYmxvY2stZ3V0dGVyKSAhZGVmYXVsdDtcblxuJGludWl0LWVuYWJsZS1ibG9jay0tZmx1c2g6ICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtYmxvY2stLXRpbnk6ICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWJsb2NrLS1zbWFsbDogICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1ibG9jay0tbGFyZ2U6ICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtYmxvY2stLWh1Z2U6ICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWJsb2NrLS1jZW50ZXI6ICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1ibG9jay0tcmlnaHQ6ICAgICBmYWxzZSAhZGVmYXVsdDtcblxuXG5cblxuXG4vKipcbiAqIFN0YWNrZWQgaW1hZ2Utd2l0aC10ZXh0IG9iamVjdC4gQSBzaW1wbGUgYWJzdHJhY3Rpb24gdG8gY292ZXIgYSB2ZXJ5IGNvbW1vbmx5XG4gKiBvY2N1cnJpbmcgZGVzaWduIHBhdHRlcm4uXG4gKi9cbi4jeyRpbnVpdC1ibG9jay1uYW1lc3BhY2V9YmxvY2ssXG4lI3skaW51aXQtYmxvY2stbmFtZXNwYWNlfWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuXG4gICAgLyoqXG4gICAgICogMS4gRWxpbWluYXRlIHdoaXRlc3BhY2UgYXJvdW5kIGltYWdlcy5cbiAgICAgKi9cbiAgICAuI3skaW51aXQtYmxvY2stbmFtZXNwYWNlfWJsb2NrX19pbWcsXG4gICAgJSN7JGludWl0LWJsb2NrLW5hbWVzcGFjZX1ibG9ja19faW1nIHtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgLyogWzFdICovXG4gICAgICAgIG1hcmdpbi1ib3R0b206ICRpbnVpdC1ibG9jay1ndXR0ZXI7XG5cbiAgICAgICAgQGlmICgkaW51aXQtZW5hYmxlLWJsb2NrLS1mbHVzaCA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTm8gc3BhY2UgYmV0d2VlbiB0aGUgaW1hZ2UgYW5kIHRoZSB0ZXh0IGNvbnRlbnQuXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgLiN7JGludWl0LWJsb2NrLW5hbWVzcGFjZX1ibG9jay0tZmx1c2ggPiAmLFxuICAgICAgICAgICAgJSN7JGludWl0LWJsb2NrLW5hbWVzcGFjZX1ibG9jay0tZmx1c2ggPiAmIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKCRpbnVpdC1lbmFibGUtYmxvY2stLXRpbnkgPT0gdHJ1ZSkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRpbnkgc3BhY2UgYmV0d2VlbiB0aGUgaW1hZ2UgYW5kIHRoZSB0ZXh0IGNvbnRlbnQuXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgLiN7JGludWl0LWJsb2NrLW5hbWVzcGFjZX1ibG9jay0tdGlueSA+ICYsXG4gICAgICAgICAgICAlI3skaW51aXQtYmxvY2stbmFtZXNwYWNlfWJsb2NrLS10aW55ID4gJiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJGludWl0LWJsb2NrLWd1dHRlci0tdGlueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgQGlmICgkaW51aXQtZW5hYmxlLWJsb2NrLS1zbWFsbCA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU21hbGwgc3BhY2UgYmV0d2VlbiB0aGUgaW1hZ2UgYW5kIHRoZSB0ZXh0IGNvbnRlbnQuXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgLiN7JGludWl0LWJsb2NrLW5hbWVzcGFjZX1ibG9jay0tc21hbGwgPiAmLFxuICAgICAgICAgICAgJSN7JGludWl0LWJsb2NrLW5hbWVzcGFjZX1ibG9jay0tc21hbGwgPiAmIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkaW51aXQtYmxvY2stZ3V0dGVyLS1zbWFsbFxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKCRpbnVpdC1lbmFibGUtYmxvY2stLWxhcmdlID09IHRydWUpIHtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBMYXJnZSBzcGFjZSBiZXR3ZWVuIHRoZSBpbWFnZSBhbmQgdGhlIHRleHQgY29udGVudC5cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAuI3skaW51aXQtYmxvY2stbmFtZXNwYWNlfWJsb2NrLS1sYXJnZSA+ICYsXG4gICAgICAgICAgICAlI3skaW51aXQtYmxvY2stbmFtZXNwYWNlfWJsb2NrLS1sYXJnZSA+ICYge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRpbnVpdC1ibG9jay1ndXR0ZXItLWxhcmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKCRpbnVpdC1lbmFibGUtYmxvY2stLWh1Z2UgPT0gdHJ1ZSkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEh1Z2Ugc3BhY2UgYmV0d2VlbiB0aGUgaW1hZ2UgYW5kIHRoZSB0ZXh0IGNvbnRlbnQuXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgLiN7JGludWl0LWJsb2NrLW5hbWVzcGFjZX1ibG9jay0taHVnZSA+ICYsXG4gICAgICAgICAgICAlI3skaW51aXQtYmxvY2stbmFtZXNwYWNlfWJsb2NrLS1odWdlID4gJiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJGludWl0LWJsb2NrLWd1dHRlci0taHVnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9XG5cblxuXG5cblxuICAgIC8qKlxuICAgICAqIFRleHQtY29udGVudC5cbiAgICAgKi9cbiAgICAuI3skaW51aXQtYmxvY2stbmFtZXNwYWNlfWJsb2NrX19ib2R5LFxuICAgICUjeyRpbnVpdC1ibG9jay1uYW1lc3BhY2V9YmxvY2tfX2JvZHkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLWJsb2NrLS1yaWdodCA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBSaWdodC1hbGlnbmVkIGJsb2Nrcy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1ibG9jay1uYW1lc3BhY2V9YmxvY2stLXJpZ2h0LFxuICAgICUjeyRpbnVpdC1ibG9jay1uYW1lc3BhY2V9YmxvY2stLXJpZ2h0IHtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuXG59XG5cbkBpZiAoJGludWl0LWVuYWJsZS1ibG9jay0tY2VudGVyID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIENlbnRlci1hbGlnbmVkIGJsb2Nrcy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1ibG9jay1uYW1lc3BhY2V9YmxvY2stLWNlbnRlcixcbiAgICAlI3skaW51aXQtYmxvY2stbmFtZXNwYWNlfWJsb2NrLS1jZW50ZXIge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNCT1hcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogVGhlIGJveCBvYmplY3Qgc2ltcGx5IGJveGVzIG9mZiBjb250ZW50LlxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtYm94LW5hbWVzcGFjZTogICAgICAgJGludWl0LW5hbWVzcGFjZSAhZGVmYXVsdDtcblxuJGludWl0LWJveC1wYWRkaW5nOiAgICAgICAgICRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdCAhZGVmYXVsdDtcbiRpbnVpdC1ib3gtcGFkZGluZy0tdGlueTogICAgIHF1YXJ0ZXIoJGludWl0LWJveC1wYWRkaW5nKSAhZGVmYXVsdDtcbiRpbnVpdC1ib3gtcGFkZGluZy0tc21hbGw6ICAgICAgaGFsdmUoJGludWl0LWJveC1wYWRkaW5nKSAhZGVmYXVsdDtcbiRpbnVpdC1ib3gtcGFkZGluZy0tbGFyZ2U6ICAgICBkb3VibGUoJGludWl0LWJveC1wYWRkaW5nKSAhZGVmYXVsdDtcbiRpbnVpdC1ib3gtcGFkZGluZy0taHVnZTogICBxdWFkcnVwbGUoJGludWl0LWJveC1wYWRkaW5nKSAhZGVmYXVsdDtcblxuJGludWl0LWVuYWJsZS1ib3gtLWZsdXNoOiAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1ib3gtLXRpbnk6ICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1ib3gtLXNtYWxsOiAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1ib3gtLWxhcmdlOiAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1ib3gtLWh1Z2U6ICAgIGZhbHNlICFkZWZhdWx0O1xuXG5cblxuXG5cbi8qKlxuICogMS4gU28gd2UgY2FuIGFwcGx5IHRoZSBgLmJveGAgY2xhc3MgdG8gbmF0dXJhbGx5LWlubGluZSBlbGVtZW50cy5cbiAqL1xuLiN7JGludWl0LWJveC1uYW1lc3BhY2V9Ym94LFxuJSN7JGludWl0LWJveC1uYW1lc3BhY2V9Ym94IHtcbiAgICBAZXh0ZW5kICVjbGVhcmZpeDtcbiAgICBkaXNwbGF5OiBibG9jazsgLyogWzFdICovXG4gICAgcGFkZGluZzogJGludWl0LWJveC1wYWRkaW5nO1xuXG4gICAgPiA6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLWJveC0tZmx1c2ggPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogRmx1c2ggKGkuZS4gbm8gcGFkZGluZykgYm94LlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LWJveC1uYW1lc3BhY2V9Ym94LS1mbHVzaCxcbiAgICAlI3skaW51aXQtYm94LW5hbWVzcGFjZX1ib3gtLWZsdXNoIHtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICB9XG5cbn1cblxuQGlmICgkaW51aXQtZW5hYmxlLWJveC0tdGlueSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGJveC5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1ib3gtbmFtZXNwYWNlfWJveC0tdGlueSxcbiAgICAlI3skaW51aXQtYm94LW5hbWVzcGFjZX1ib3gtLXRpbnkge1xuICAgICAgICBwYWRkaW5nOiAkaW51aXQtYm94LXBhZGRpbmctLXRpbnk7XG4gICAgfVxuXG59XG5cbkBpZiAoJGludWl0LWVuYWJsZS1ib3gtLXNtYWxsID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFNtYWxsIGJveC5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1ib3gtbmFtZXNwYWNlfWJveC0tc21hbGwsXG4gICAgJSN7JGludWl0LWJveC1uYW1lc3BhY2V9Ym94LS1zbWFsbCB7XG4gICAgICAgIHBhZGRpbmc6ICRpbnVpdC1ib3gtcGFkZGluZy0tc21hbGw7XG4gICAgfVxuXG59XG5cbkBpZiAoJGludWl0LWVuYWJsZS1ib3gtLWxhcmdlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIExhcmdlIGJveC5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1ib3gtbmFtZXNwYWNlfWJveC0tbGFyZ2UsXG4gICAgJSN7JGludWl0LWJveC1uYW1lc3BhY2V9Ym94LS1sYXJnZSB7XG4gICAgICAgIHBhZGRpbmc6ICRpbnVpdC1ib3gtcGFkZGluZy0tbGFyZ2U7XG4gICAgfVxuXG59XG5cbkBpZiAoJGludWl0LWVuYWJsZS1ib3gtLWh1Z2UgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogSHVnZSBib3guXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtYm94LW5hbWVzcGFjZX1ib3gtLWh1Z2UsXG4gICAgJSN7JGludWl0LWJveC1uYW1lc3BhY2V9Ym94LS1odWdlIHtcbiAgICAgICAgcGFkZGluZzogJGludWl0LWJveC1wYWRkaW5nLS1odWdlO1xuICAgIH1cblxufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjQlVUVE9OU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBBIHNpbXBsZSBidXR0b24gb2JqZWN0LlxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtYnRuLW5hbWVzcGFjZTogICAgICAgJGludWl0LW5hbWVzcGFjZSAhZGVmYXVsdDtcblxuJGludWl0LWJ0bi1wYWRkaW5nOiAgICAgICAgIGhhbHZlKCRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdCkgIWRlZmF1bHQ7XG4kaW51aXQtYnRuLXBhZGRpbmctLXNtYWxsOiAgaGFsdmUoJGludWl0LWJ0bi1wYWRkaW5nKSAhZGVmYXVsdDtcbiRpbnVpdC1idG4tcGFkZGluZy0tbGFyZ2U6ICBkb3VibGUoJGludWl0LWJ0bi1wYWRkaW5nKSAhZGVmYXVsdDtcbiRpbnVpdC1idG4tYmFja2dyb3VuZDogICAgICAjNGE4ZWMyICFkZWZhdWx0O1xuJGludWl0LWJ0bi1jb2xvcjogICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kaW51aXQtYnRuLWJvcmRlci13aWR0aDogICAgMXB4ICFkZWZhdWx0O1xuJGludWl0LWJ0bi1ib3JkZXItc3R5bGU6ICAgIHNvbGlkICFkZWZhdWx0O1xuJGludWl0LWJ0bi1ib3JkZXItY29sb3I6ICAgICRpbnVpdC1idG4tYmFja2dyb3VuZCAhZGVmYXVsdDtcbiRpbnVpdC1idG4tcmFkaXVzOiAgICAgICAgICAwICFkZWZhdWx0O1xuXG4kaW51aXQtZW5hYmxlLWJ0bi0tc21hbGw6ICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWJ0bi0tbGFyZ2U6ICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWJ0bi0tZnVsbDogICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWJ0bi0tcGlsbDogICAgZmFsc2UgIWRlZmF1bHQ7XG5cblxuXG5cblxuLy8gSGVyZSB3ZSBzZXQgYSB2YXJpYWJsZSBhc3N1bWluZyB0aGF0IGBib3gtc2l6aW5nOiBib3JkZXItYm94O2AgaXMgbm90IHNldFxuLy8gZ2xvYmFsbHkuIElmIGl0IGhhcyBiZWVuIHByZXZpb3VzbHkgYmVlbiBkZWZpbmVkLCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIHdpbGxcbi8vIGJlIG92ZXJyaWRlbiBhbmQgd2lsbCBiZSBzZXQgdG8gYHRydWVgLlxuJGludWl0LWdsb2JhbC1ib3JkZXItYm94OiBmYWxzZSAhZGVmYXVsdDtcblxuXG5cblxuXG4vKipcbiAqIDEuIEFsbG93IHVzIHRvIHN0eWxlIGJveCBtb2RlbCBwcm9wZXJ0aWVzLlxuICogMi4gTGluZSBkaWZmZXJlbnQgc2l6ZWQgYnV0dG9ucyB1cCBhIGxpdHRsZSBuaWNlci5cbiAqIDMuIE1ha2UgYnV0dG9ucyBpbmhlcml0IGZvbnQgc3R5bGVzIChvZnRlbiBuZWNlc3Nhcnkgd2hlbiBzdHlsaW5nIGBpbnB1dGBzIGFzXG4gKiAgICBidXR0b25zKS5cbiAqIDQuIFJlc2V0L25vcm1hbGl6ZSBzb21lIHN0eWxlcy5cbiAqIDUuIEZvcmNlIGFsbCBidXR0b24tc3R5bGVkIGVsZW1lbnRzIHRvIGFwcGVhciBjbGlja2FibGUuXG4gKiA2LiBGaXhlcyBvZGQgaW5uZXIgc3BhY2luZyBpbiBJRTcuXG4gKiA3LiBTdWJ0cmFjdCB0aGUgYm9yZGVyIHNpemUgZnJvbSB0aGUgcGFkZGluZyB2YWx1ZSBzbyB0aGF0IGJ1dHRvbnMgZG8gbm90XG4gKiAgICBncm93IGxhcmdlciBhcyB3ZSBhZGQgYm9yZGVycy5cbiAqL1xuLiN7JGludWl0LWJ0bi1uYW1lc3BhY2V9YnRuLFxuJSN7JGludWl0LWJ0bi1uYW1lc3BhY2V9YnRuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIFsxXSAqL1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IC8qIFsyXSAqL1xuICAgIGZvbnQ6IGluaGVyaXQ7IC8qIFszXSAqL1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgLyogWzRdICovXG4gICAgbWFyZ2luOiAgMDsgLyogWzRdICovXG4gICAgY3Vyc29yOiBwb2ludGVyOyAvKiBbNV0gKi9cbiAgICBvdmVyZmxvdzogdmlzaWJsZTsgLyogWzZdICovXG4gICAgcGFkZGluZzogJGludWl0LWJ0bi1wYWRkaW5nIC0gJGludWl0LWJ0bi1ib3JkZXItd2lkdGggIGRvdWJsZSgkaW51aXQtYnRuLXBhZGRpbmcpIC0gJGludWl0LWJ0bi1ib3JkZXItd2lkdGg7IC8qIFs3XSAqL1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnVpdC1idG4tYmFja2dyb3VuZDtcblxuICAgIEBpZigkaW51aXQtYnRuLWJvcmRlci13aWR0aCAhPSAwKSB7XG4gICAgICAgIGJvcmRlcjogJGludWl0LWJ0bi1ib3JkZXItd2lkdGggJGludWl0LWJ0bi1ib3JkZXItc3R5bGUgJGludWl0LWJ0bi1ib3JkZXItY29sb3I7XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIGJvcmRlcjogbm9uZTsgLyogWzRdICovXG4gICAgfVxuXG4gICAgQGlmKCRpbnVpdC1idG4tcmFkaXVzICE9IDApIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJGludWl0LWJ0bi1yYWRpdXM7XG4gICAgfVxuXG4gICAgJixcbiAgICAmOmhvdmVyLFxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC8qIFs0XSAqL1xuICAgICAgICBjb2xvcjogJGludWl0LWJ0bi1jb2xvcjtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBGaXggYSBGaXJlZm94IGJ1ZyB3aGVyZWJ5IGBpbnB1dCB0eXBlPVwic3VibWl0XCJgIGdhaW5zIDJweCBleHRyYSBwYWRkaW5nLlxuICovXG4uI3skaW51aXQtYnRuLW5hbWVzcGFjZX1idG46Oi1tb3otZm9jdXMtaW5uZXIsXG4lI3skaW51aXQtYnRuLW5hbWVzcGFjZX1idG46Oi1tb3otZm9jdXMtaW5uZXIge1xuICAgIGJvcmRlcjogIDA7XG4gICAgcGFkZGluZzogMDtcbn1cblxuXG5cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtYnRuLS1zbWFsbCA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBTbWFsbCBidXR0b25zLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LWJ0bi1uYW1lc3BhY2V9YnRuLS1zbWFsbCxcbiAgICAlI3skaW51aXQtYnRuLW5hbWVzcGFjZX1idG4tLXNtYWxsIHtcbiAgICAgICAgcGFkZGluZzogJGludWl0LWJ0bi1wYWRkaW5nLS1zbWFsbCAtICRpbnVpdC1idG4tYm9yZGVyLXdpZHRoICBkb3VibGUoJGludWl0LWJ0bi1wYWRkaW5nLS1zbWFsbCkgLSAkaW51aXQtYnRuLWJvcmRlci13aWR0aDsgLyogWzddICovXG4gICAgfVxuXG59XG5cbkBpZiAoJGludWl0LWVuYWJsZS1idG4tLWxhcmdlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIExhcmdlIGJ1dHRvbnMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtYnRuLW5hbWVzcGFjZX1idG4tLWxhcmdlLFxuICAgICUjeyRpbnVpdC1idG4tbmFtZXNwYWNlfWJ0bi0tbGFyZ2Uge1xuICAgICAgICBwYWRkaW5nOiAkaW51aXQtYnRuLXBhZGRpbmctLWxhcmdlIC0gJGludWl0LWJ0bi1ib3JkZXItd2lkdGggIGRvdWJsZSgkaW51aXQtYnRuLXBhZGRpbmctLWxhcmdlKSAtICRpbnVpdC1idG4tYm9yZGVyLXdpZHRoOyAvKiBbN10gKi9cbiAgICB9XG5cbn1cblxuXG5cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtYnRuLS1mdWxsID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIEZ1bGwtd2lkdGggYnV0dG9ucy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1idG4tbmFtZXNwYWNlfWJ0bi0tZnVsbCxcbiAgICAlI3skaW51aXQtYnRuLW5hbWVzcGFjZX1idG4tLWZ1bGwge1xuICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICBAaWYgJGludWl0LWdsb2JhbC1ib3JkZXItYm94ID09IGZhbHNlIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVtb3ZlIHBhZGRpbmdzIHNvIHRoYXQgd2lkdGhzIGFuZCBwYWRkaW5ncyBkb27igJl0IGNvbmZsaWN0LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAgMDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLWJ0bi0tcGlsbCA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBSb3VuZC1lbmRlZCBidXR0b25zLlxuICAgICAqXG4gICAgICogMS4gT3Zlcmx5LWxhcmdlIHZhbHVlIHRvIGVuc3VyZSB0aGUgcmFkaXVzIHJvdW5kcyB0aGUgd2hvbGUgZW5kIG9mIHRoZVxuICAgICAqICAgIGJ1dHRvbi5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1idG4tbmFtZXNwYWNlfWJ0bi0tcGlsbCxcbiAgICAlI3skaW51aXQtYnRuLW5hbWVzcGFjZX1idG4tLXBpbGwge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDBweDsgLyogWzFdICovXG4gICAgfVxuXG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNGTEFHXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIFRoZSBmbGFnIG9iamVjdCBpcyBhIGRlc2lnbiBwYXR0ZXJuIHNpbWlsYXIgdG8gdGhlIG1lZGlhIG9iamVjdCwgaG93ZXZlciBpdFxuICogdXRpbGlzZXMgYGRpc3BsYXk6IHRhYmxlWy1jZWxsXTtgIHRvIGdpdmUgdXMgY29udHJvbCBvdmVyIHRoZSB2ZXJ0aWNhbFxuICogYWxpZ25tZW50cyBvZiB0aGUgdGV4dCBhbmQgaW1hZ2UuIGNzc3dpemFyZHJ5LmNvbS8yMDEzLzA1L3RoZS1mbGFnLW9iamVjdFxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtZmxhZy1uYW1lc3BhY2U6ICAgICAgICAgICRpbnVpdC1uYW1lc3BhY2UgIWRlZmF1bHQ7XG5cbiRpbnVpdC1mbGFnLWd1dHRlcjogICAgICAgICAgICAgJGludWl0LWJhc2Utc3BhY2luZy11bml0ICFkZWZhdWx0O1xuJGludWl0LWZsYWctZ3V0dGVyLS10aW55OiAgICAgICAgIHF1YXJ0ZXIoJGludWl0LWZsYWctZ3V0dGVyKSAhZGVmYXVsdDtcbiRpbnVpdC1mbGFnLWd1dHRlci0tc21hbGw6ICAgICAgICAgIGhhbHZlKCRpbnVpdC1mbGFnLWd1dHRlcikgIWRlZmF1bHQ7XG4kaW51aXQtZmxhZy1ndXR0ZXItLWxhcmdlOiAgICAgICAgIGRvdWJsZSgkaW51aXQtZmxhZy1ndXR0ZXIpICFkZWZhdWx0O1xuJGludWl0LWZsYWctZ3V0dGVyLS1odWdlOiAgICAgICBxdWFkcnVwbGUoJGludWl0LWZsYWctZ3V0dGVyKSAhZGVmYXVsdDtcblxuJGludWl0LWVuYWJsZS1mbGFnLS10aW55OiAgICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtZmxhZy0tc21hbGw6ICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWZsYWctLWxhcmdlOiAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1mbGFnLS1odWdlOiAgICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtZmxhZy0tcmV2OiAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWZsYWctLWZsdXNoOiAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1mbGFnLS10b3A6ICAgICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtZmxhZy0tYm90dG9tOiAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWZsYWctLXJlc3BvbnNpdmU6IGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWZsYWctY29sbGFwc2UtYXQ6ICAgICAgICA3MjBweCAhZGVmYXVsdDtcblxuXG5cblxuXG4vKipcbiAqIDEuIEFsbG93cyB1cyB0byBjb250cm9sIHZlcnRpY2FsIGFsaWdubWVudHNcbiAqIDIuIEZvcmNlIHRoZSBvYmplY3QgdG8gYmUgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIHBhcmVudC4gQ29tYmluZWQgd2l0aCBbMV0sXG4gKiAgICB0aGlzIG1ha2VzIHRoZSBvYmplY3QgYmVoYXZlIGluIGEgcXVhc2ktYGRpc3BsYXk6IGJsb2NrO2AgbWFubmVyLlxuICovXG4uI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZyxcbiUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnIHtcbiAgICBkaXNwbGF5OiB0YWJsZTsgLyogWzFdICovXG4gICAgd2lkdGg6IDEwMCU7IC8qIFsyXSAqL1xufVxuXG4gICAgLyoqXG4gICAgICogSXRlbXMgd2l0aGluIGEgZmxhZyBvYmplY3QuIFRoZXJlIHNob3VsZCBvbmx5IGV2ZXIgYmUgb25lIG9mIGVhY2guXG4gICAgICpcbiAgICAgKiAxLiBEZWZhdWx0IHRvIGFsaWduaW5nIGNvbnRlbnQgdG8gdGhlaXIgbWlkZGxlcy5cbiAgICAgKi9cbiAgICAuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nLFxuICAgICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2JvZHksXG4gICAgJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2JvZHkge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAvKiBbMV0gKi9cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIGltYWdlcyBoYXZlIGEgc3BhY2UgYmV0d2VlbiB0aGVtIGFuZCB0aGUgYm9keSBvZiB0aGUgb2JqZWN0LlxuICAgICAqL1xuICAgIC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRpbnVpdC1mbGFnLWd1dHRlcjtcblxuICAgICAgICA+IGltZyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRhaW5lciBmb3IgdGhlIG1haW4gY29udGVudCBvZiB0aGUgZmxhZyBvYmplY3QuXG4gICAgICpcbiAgICAgKiAxLiBGb3JjZXMgdGhlIGAuZmxhZ19fYm9keWAgdG8gdGFrZSB1cCBhbGwgcmVtYWluaW5nIHNwYWNlLlxuICAgICAqL1xuICAgIC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19ib2R5LFxuICAgICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19ib2R5IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7IC8qIFsxXSAqL1xuXG4gICAgICAgICYsXG4gICAgICAgID4gOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cblxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1mbGFnLS10aW55ID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgZmxhZ3MuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tdGlueSxcbiAgICAlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tdGlueSB7XG5cbiAgICAgICAgPiAuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nLFxuICAgICAgICA+ICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcge1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJGludWl0LWZsYWctZ3V0dGVyLS10aW55O1xuICAgICAgICB9XG5cbiAgICAgICAgQGlmICgkaW51aXQtZW5hYmxlLWZsYWctLXJldiA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGlueSByZXZlcnNlZCBmbGFncy5cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAmLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWctLXJldixcbiAgICAgICAgICAgICYlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tcmV2IHtcblxuICAgICAgICAgICAgICAgID4gLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyxcbiAgICAgICAgICAgICAgICA+ICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICAkaW51aXQtZmxhZy1ndXR0ZXItLXRpbnk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cbkBpZiAoJGludWl0LWVuYWJsZS1mbGFnLS1zbWFsbCA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBTbWFsbCBmbGFncy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS1zbWFsbCxcbiAgICAlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tc21hbGwge1xuXG4gICAgICAgID4gLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyxcbiAgICAgICAgPiAlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nIHtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRpbnVpdC1mbGFnLWd1dHRlci0tc21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKCRpbnVpdC1lbmFibGUtZmxhZy0tcmV2ID09IHRydWUpIHtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTbWFsbCByZXZlcnNlZCBmbGFncy5cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAmLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWctLXJldixcbiAgICAgICAgICAgICYlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tcmV2IHtcblxuICAgICAgICAgICAgICAgID4gLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyxcbiAgICAgICAgICAgICAgICA+ICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICAkaW51aXQtZmxhZy1ndXR0ZXItLXNtYWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5AaWYgKCRpbnVpdC1lbmFibGUtZmxhZy0tbGFyZ2UgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogTGFyZ2UgZmxhZ3MuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tbGFyZ2UsXG4gICAgJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWctLWxhcmdlIHtcblxuICAgICAgICA+IC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgICAgID4gJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyB7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkaW51aXQtZmxhZy1ndXR0ZXItLWxhcmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgQGlmICgkaW51aXQtZW5hYmxlLWZsYWctLXJldiA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTGFyZ2UgcmV2ZXJzZWQgZmxhZ3MuXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgJi4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS1yZXYsXG4gICAgICAgICAgICAmJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWctLXJldiB7XG5cbiAgICAgICAgICAgICAgICA+IC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgICAgICAgICAgICAgPiAlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAgJGludWl0LWZsYWctZ3V0dGVyLS1sYXJnZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuQGlmICgkaW51aXQtZW5hYmxlLWZsYWctLWh1Z2UgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogSHVnZSBmbGFncy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS1odWdlLFxuICAgICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS1odWdlIHtcblxuICAgICAgICA+IC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgICAgID4gJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyB7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkaW51aXQtZmxhZy1ndXR0ZXItLWh1Z2U7XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKCRpbnVpdC1lbmFibGUtZmxhZy0tcmV2ID09IHRydWUpIHtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBIdWdlIHJldmVyc2VkIGZsYWdzLlxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgICYuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tcmV2LFxuICAgICAgICAgICAgJiUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS1yZXYge1xuXG4gICAgICAgICAgICAgICAgPiAuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nLFxuICAgICAgICAgICAgICAgID4gJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogICRpbnVpdC1mbGFnLWd1dHRlci0taHVnZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuXG5cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtZmxhZy0tcmV2ID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFJldmVyc2VkIGZsYWcgb2JqZWN0cyBoYXZlIHRoZWlyIGltYWdlLWNvbnRlbnQgdG8gdGhlIHJpZ2h0LCBhbmQgdGV4dC1jb250ZW50XG4gICAgICogdG8gdGhlIGxlZnQuXG4gICAgICpcbiAgICAgKiAxLiBTd2FwIHRoZSByZW5kZXJlZCBkaXJlY3Rpb24gb2YgdGhlIG9iamVjdOKAplxuICAgICAqIDIuIOKApmFuZCByZXNldCBpdC5cbiAgICAgKiAzLiBSZWFzc2lnbiBtYXJnaW5zIHRvIHRoZSBjb3JyZWN0IHNpZGVzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWctLXJldixcbiAgICAlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tcmV2IHtcbiAgICAgICAgZGlyZWN0aW9uOiBydGw7IC8qIFsxXSAqL1xuXG4gICAgICAgID4gLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyxcbiAgICAgICAgPiAlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nLFxuICAgICAgICA+IC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19ib2R5LFxuICAgICAgICA+ICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19ib2R5IHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogbHRyOyAvKiBbMl0gKi9cbiAgICAgICAgfVxuXG4gICAgICAgID4gLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyxcbiAgICAgICAgPiAlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nIHtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IC8qIFszXSAqL1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkaW51aXQtZmxhZy1ndXR0ZXI7IC8qIFszXSAqL1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuXG5cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtZmxhZy0tZmx1c2ggPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogRmx1c2ggZmxhZyBvYmplY3RzIGhhdmUgbm8gc3BhY2UgYmV0d2VlbiB0aGUgaW1hZ2UtIGFuZCB0ZXh0LWNvbnRlbnQuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tZmx1c2gsXG4gICAgJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWctLWZsdXNoIHtcblxuICAgICAgICA+IC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgICAgID4gJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyB7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAgMDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLWZsYWctLXRvcCA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBWZXJ0aWNhbGx5IHRvcCBhbGlnbmVkIGZsYWcgb2JqZWN0cy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS10b3AsXG4gICAgJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWctLXRvcCB7XG5cbiAgICAgICAgPiAuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nLFxuICAgICAgICA+ICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgICAgID4gLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2JvZHksXG4gICAgICAgID4gJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2JvZHkge1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cbkBpZiAoJGludWl0LWVuYWJsZS1mbGFnLS1ib3R0b20gPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogVmVydGljYWxseSBib3R0b20gYWxpZ25lZCBmbGFnIG9iamVjdHMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tYm90dG9tLFxuICAgICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS1ib3R0b20ge1xuXG4gICAgICAgID4gLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyxcbiAgICAgICAgPiAlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nLFxuICAgICAgICA+IC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19ib2R5LFxuICAgICAgICA+ICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19ib2R5IHtcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtZmxhZy0tcmVzcG9uc2l2ZSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBSZXNwb25zaXZlIGZsYWcgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZXJlIGlzIGEgdmVyeSBwcmFnbWF0aWMsIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlc3BvbnNpdmUgZmxhZ1xuICAgICAqIG9iamVjdCwgd2hpY2ggc2ltcGx5IHBsYWNlcyB0aGUgdGV4dC1jb250ZW50IGJlbmVhdGggdGhlIGltYWdlLWNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBXZSB1c2UgYSBgbWF4LXdpZHRoYCBtZWRpYSBxdWVyeSBiZWNhdXNlOlxuICAgICAqXG4gICAgICogYSkgaXQgaXMgdGhlIGxlYXN0IHZlcmJvc2UgbWV0aG9kIGluIHRlcm1zIG9mIGFtb3VudCBvZiBjb2RlIHJlcXVpcmVkLlxuICAgICAqIGIpIHRoZSBmbGFnIG9iamVjdOKAmXMgZGVmYXVsdCBzdGF0ZSBpcyBpbWFnZS1uZXh0LXRvLXRleHQsIHNvIGl0cyBzdGFja2VkXG4gICAgICogICAgc3RhdGUgaXMgdGhlIGV4Y2VwdGlvbiwgcmF0aGVyIHRoYW4gdGhlIHJ1bGUuXG4gICAgICovXG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkaW51aXQtZmxhZy1jb2xsYXBzZS1hdCkge1xuXG4gICAgICAgIC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS1yZXNwb25zaXZlLFxuICAgICAgICAlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tcmVzcG9uc2l2ZSB7XG5cbiAgICAgICAgICAgIEBpZiAoJGludWl0LWVuYWJsZS1mbGFnLS1yZXYgPT0gdHJ1ZSkge1xuXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogRGlzYWJsZSByZXZlcnNhbCBvZiBjb250ZW50IGJlY2F1c2UgdGhlcmUgaXMgbm8gY29uY2VwdCBvZlxuICAgICAgICAgICAgICAgICAqIOKAmHJldmVyc2Vk4oCZIGluIGEgc3RhY2tlZCBsYXlvdXQuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBsdHI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYsXG4gICAgICAgICAgICA+IC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgICAgICAgICA+ICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgICAgICAgICA+IC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19ib2R5LFxuICAgICAgICAgICAgPiAlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19fYm9keSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV3b3JrIHRoZSBzcGFjaW5ncyBvbiByZWd1bGFyIGZsYWcgb2JqZWN0cy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgPiAuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nLFxuICAgICAgICAgICAgPiAlI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogIDA7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJGludWl0LWZsYWctZ3V0dGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKCRpbnVpdC1lbmFibGUtZmxhZy0tdGlueSA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBUaW55IHJlc3BvbnNpdmUgZmxhZ3MuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBUYWtlIGEgbGl0dGxlIG1vcmUgaGVhdnktaGFuZGVkIGFwcHJvYWNoIHRvIHJld29ya2luZ1xuICAgICAgICAgICAgICAgICAqIHNwYWNpbmdzIG9uIGZsYWdzIHRoYXQgYXJlIGFsc28gdGlueSBmbGFncyBpbiB0aGVpciByZWd1bGFyXG4gICAgICAgICAgICAgICAgICogc3RhdGUuXG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgICAgICAmLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWctLXRpbnksXG4gICAgICAgICAgICAgICAgJiUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS10aW55IHtcblxuICAgICAgICAgICAgICAgICAgICA+IC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgICAgICAgICAgICAgICAgID4gJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRpbnVpdC1mbGFnLWd1dHRlci0tdGlueTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoJGludWl0LWVuYWJsZS1mbGFnLS1zbWFsbCA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBTbWFsbCByZXNwb25zaXZlIGZsYWdzLlxuICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICogVGFrZSBhIGxpdHRsZSBtb3JlIGhlYXZ5LWhhbmRlZCBhcHByb2FjaCB0byByZXdvcmtpbmdcbiAgICAgICAgICAgICAgICAgKiBzcGFjaW5ncyBvbiBmbGFncyB0aGF0IGFyZSBhbHNvIHNtYWxsIGZsYWdzIGluIHRoZWlyIHJlZ3VsYXJcbiAgICAgICAgICAgICAgICAgKiBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgICAgICYuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZy0tc21hbGwsXG4gICAgICAgICAgICAgICAgJiUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS1zbWFsbCB7XG5cbiAgICAgICAgICAgICAgICAgICAgPiAuI3skaW51aXQtZmxhZy1uYW1lc3BhY2V9ZmxhZ19faW1nLFxuICAgICAgICAgICAgICAgICAgICA+ICUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkaW51aXQtZmxhZy1ndXR0ZXItLXNtYWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmICgkaW51aXQtZW5hYmxlLWZsYWctLWxhcmdlID09IHRydWUpIHtcblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIExhcmdlIHJlc3BvbnNpdmUgZmxhZ3MuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBUYWtlIGEgbGl0dGxlIG1vcmUgaGVhdnktaGFuZGVkIGFwcHJvYWNoIHRvIHJld29ya2luZ1xuICAgICAgICAgICAgICAgICAqIHNwYWNpbmdzIG9uIGZsYWdzIHRoYXQgYXJlIGFsc28gbGFyZ2UgZmxhZ3MgaW4gdGhlaXIgcmVndWxhclxuICAgICAgICAgICAgICAgICAqIHN0YXRlLlxuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAgICAgJi4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS1sYXJnZSxcbiAgICAgICAgICAgICAgICAmJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWctLWxhcmdlIHtcblxuICAgICAgICAgICAgICAgICAgICA+IC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgICAgICAgICAgICAgICAgID4gJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRpbnVpdC1mbGFnLWd1dHRlci0tbGFyZ2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKCRpbnVpdC1lbmFibGUtZmxhZy0taHVnZSA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBIdWdlIHJlc3BvbnNpdmUgZmxhZ3MuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBUYWtlIGEgbGl0dGxlIG1vcmUgaGVhdnktaGFuZGVkIGFwcHJvYWNoIHRvIHJld29ya2luZ1xuICAgICAgICAgICAgICAgICAqIHNwYWNpbmdzIG9uIGZsYWdzIHRoYXQgYXJlIGFsc28gaHVnZSBmbGFncyBpbiB0aGVpciByZWd1bGFyXG4gICAgICAgICAgICAgICAgICogc3RhdGUuXG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgICAgICAmLiN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWctLWh1Z2UsXG4gICAgICAgICAgICAgICAgJiUjeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnLS1odWdlIHtcblxuICAgICAgICAgICAgICAgICAgICA+IC4jeyRpbnVpdC1mbGFnLW5hbWVzcGFjZX1mbGFnX19pbWcsXG4gICAgICAgICAgICAgICAgICAgID4gJSN7JGludWl0LWZsYWctbmFtZXNwYWNlfWZsYWdfX2ltZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRpbnVpdC1mbGFnLWd1dHRlci0taHVnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNMQVlPVVRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogVGhlIGludWl0Y3NzIGxheW91dCBzeXN0ZW0gdXNlcyBgYm94LXNpemluZzogYm9yZGVyLWJveDtgIGFuZFxuICogYGRpc3BsYXk6IGlubGluZS1ibG9jaztgIHRvIGNyZWF0ZSBhbiBleHRyZW1lbHkgcG93ZXJmdWwsIGZsZXhpYmxlXG4gKiBhbHRlcm5hdGl2ZSB0byB0aGUgdHJhZGl0aW9uYWwgZ3JpZCBzeXN0ZW0uIENvbWJpbmUgdGhlIGxheW91dCBpdGVtcyB3aXRoXG4gKiB0aGUgd2lkdGhzIGZvdW5kIGluIGB0cnVtcHMud2lkdGhzYC5cbiAqL1xuXG4vLyBQcmVkZWZpbmUgdGhlIHZhcmlhYmxlcyBiZWxvdyBpbiBvcmRlciB0byBhbHRlciBhbmQgZW5hYmxlIHNwZWNpZmljIGZlYXR1cmVzLlxuJGludWl0LWxheW91dC1uYW1lc3BhY2U6ICAgICAgICAkaW51aXQtbmFtZXNwYWNlICFkZWZhdWx0O1xuXG4kaW51aXQtbGF5b3V0LWd1dHRlcjogICAgICAgICAgICRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdCAhZGVmYXVsdDtcbiRpbnVpdC1sYXlvdXQtZ3V0dGVyLS10aW55OiAgICAgICBxdWFydGVyKCRpbnVpdC1sYXlvdXQtZ3V0dGVyKSAhZGVmYXVsdDtcbiRpbnVpdC1sYXlvdXQtZ3V0dGVyLS1zbWFsbDogICAgICAgIGhhbHZlKCRpbnVpdC1sYXlvdXQtZ3V0dGVyKSAhZGVmYXVsdDtcbiRpbnVpdC1sYXlvdXQtZ3V0dGVyLS1sYXJnZTogICAgICAgZG91YmxlKCRpbnVpdC1sYXlvdXQtZ3V0dGVyKSAhZGVmYXVsdDtcbiRpbnVpdC1sYXlvdXQtZ3V0dGVyLS1odWdlOiAgICAgcXVhZHJ1cGxlKCRpbnVpdC1sYXlvdXQtZ3V0dGVyKSAhZGVmYXVsdDtcblxuJGludWl0LWVuYWJsZS1sYXlvdXQtLXRpbnk6ICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtbGF5b3V0LS1zbWFsbDogICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWxheW91dC0tbGFyZ2U6ICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1sYXlvdXQtLWh1Z2U6ICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtbGF5b3V0LS1mbHVzaDogICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWxheW91dC0tcmV2OiAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1sYXlvdXQtLW1pZGRsZTogICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtbGF5b3V0LS1ib3R0b206ICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWxheW91dC0tcmlnaHQ6ICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1sYXlvdXQtLWNlbnRlcjogICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtbGF5b3V0LS1hdXRvOiAgICAgZmFsc2UgIWRlZmF1bHQ7XG5cblxuXG5cblxuLy8gSGVyZSB3ZSBzZXQgYSB2YXJpYWJsZSBhc3N1bWluZyB0aGF0IGBib3gtc2l6aW5nOiBib3JkZXItYm94O2AgaXMgbm90IHNldFxuLy8gZ2xvYmFsbHkuIElmIGl0IGhhcyBiZWVuIHByZXZpb3VzbHkgYmVlbiBkZWZpbmVkLCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIHdpbGxcbi8vIGJlIG92ZXJyaWRlbiBhbmQgd2lsbCBiZSBzZXQgdG8gYHRydWVgLlxuJGludWl0LWdsb2JhbC1ib3JkZXItYm94OiBmYWxzZSAhZGVmYXVsdDtcblxuXG5cblxuXG4vKipcbiAqIEJlZ2luIGEgbGF5b3V0IGdyb3VwLlxuICovXG4uI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQsXG4lI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAgMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAtJGludWl0LWxheW91dC1ndXR0ZXI7XG59XG5cbiAgICAvKipcbiAgICAgKiAxLiBDYXVzZSBjb2x1bW5zIHRvIHN0YWNrIHNpZGUtYnktc2lkZS5cbiAgICAgKiAyLiBTcGFjZSBjb2x1bW5zIGFwYXJ0LlxuICAgICAqIDMuIEFsaWduIGNvbHVtbnMgdG8gdGhlIHRvcHMgb2YgZWFjaCBvdGhlci5cbiAgICAgKiA0LiBGdWxsLXdpZHRoIHVubGVzcyB0b2xkIHRvIGJlaGF2ZSBvdGhlcndpc2UuXG4gICAgICogNS4gUmVxdWlyZWQgdG8gY29tYmluZSBmbHVpZCB3aWR0aHMgYW5kIGZpeGVkIGd1dHRlcnMuXG4gICAgICovXG4gICAgLiN7JGludWl0LWxheW91dC1uYW1lc3BhY2V9bGF5b3V0X19pdGVtLFxuICAgICUjeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9faXRlbSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogWzFdICovXG4gICAgICAgIHBhZGRpbmctbGVmdDogJGludWl0LWxheW91dC1ndXR0ZXI7IC8qIFsyXSAqL1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOyAvKiBbM10gKi9cbiAgICAgICAgd2lkdGg6IDEwMCU7IC8qIFs0XSAqL1xuXG4gICAgICAgIEBpZiAkaW51aXQtZ2xvYmFsLWJvcmRlci1ib3ggPT0gZmFsc2Uge1xuICAgICAgICAgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiBbNV0gKi9cbiAgICAgICAgICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsgLyogWzVdICovXG4gICAgICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IC8qIFs1XSAqL1xuICAgICAgICB9XG5cbiAgICB9XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLWxheW91dC0tdGlueSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBMYXlvdXRzIHdpdGggdGlueSBndXR0ZXJzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LWxheW91dC1uYW1lc3BhY2V9bGF5b3V0LS10aW55LFxuICAgICUjeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dC0tdGlueSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtKCRpbnVpdC1sYXlvdXQtZ3V0dGVyLS10aW55KTtcblxuICAgICAgICA+IC4jeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9faXRlbSxcbiAgICAgICAgPiAlI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2l0ZW0ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkaW51aXQtbGF5b3V0LWd1dHRlci0tdGlueTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cbkBpZiAoJGludWl0LWVuYWJsZS1sYXlvdXQtLXNtYWxsID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIExheW91dHMgd2l0aCBzbWFsbCBndXR0ZXJzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LWxheW91dC1uYW1lc3BhY2V9bGF5b3V0LS1zbWFsbCxcbiAgICAlI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQtLXNtYWxsIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0oJGludWl0LWxheW91dC1ndXR0ZXItLXNtYWxsKTtcblxuICAgICAgICA+IC4jeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9faXRlbSxcbiAgICAgICAgPiAlI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2l0ZW0ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkaW51aXQtbGF5b3V0LWd1dHRlci0tc21hbGw7XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbGF5b3V0LS1sYXJnZSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBMYXlvdXRzIHdpdGggbGFyZ2UgZ3V0dGVycy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dC0tbGFyZ2UsXG4gICAgJSN7JGludWl0LWxheW91dC1uYW1lc3BhY2V9bGF5b3V0LS1sYXJnZSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtKCRpbnVpdC1sYXlvdXQtZ3V0dGVyLS1sYXJnZSk7XG5cbiAgICAgICAgPiAuI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2l0ZW0sXG4gICAgICAgID4gJSN7JGludWl0LWxheW91dC1uYW1lc3BhY2V9bGF5b3V0X19pdGVtIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJGludWl0LWxheW91dC1ndXR0ZXItLWxhcmdlO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuQGlmICgkaW51aXQtZW5hYmxlLWxheW91dC0taHVnZSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBMYXlvdXRzIHdpdGggaHVnZSBndXR0ZXJzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LWxheW91dC1uYW1lc3BhY2V9bGF5b3V0LS1odWdlLFxuICAgICUjeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dC0taHVnZSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtKCRpbnVpdC1sYXlvdXQtZ3V0dGVyLS1odWdlKTtcblxuICAgICAgICA+IC4jeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9faXRlbSxcbiAgICAgICAgPiAlI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2l0ZW0ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAkaW51aXQtbGF5b3V0LWd1dHRlci0taHVnZTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLWxheW91dC0tZmx1c2ggPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogTGF5b3V0cyB3aXRoIG5vIGd1dHRlcnMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQtLWZsdXNoLFxuICAgICUjeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dC0tZmx1c2gge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcblxuICAgICAgICA+IC4jeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9faXRlbSxcbiAgICAgICAgPiAlI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2l0ZW0ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuXG5cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbGF5b3V0LS1yZXYgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogUmV2ZXJzZWQgcmVuZGVyZWQgb3JkZXIgb2YgbGF5b3V0IGl0ZW1zLCBlLmcuIGl0ZW1zIDEsIDIsIDMsIDQgaW4geW91clxuICAgICAqIG1hcmt1cCB3aWxsIGRpc3BsYXkgaW4gb3JkZXIgNCwgMywgMiwgMSBvbiB5b3VyIHBhZ2UuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQtLXJldixcbiAgICAlI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQtLXJldiB7XG4gICAgICAgIGRpcmVjdGlvbjogcnRsO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgICAgID4gLiN7JGludWl0LWxheW91dC1uYW1lc3BhY2V9bGF5b3V0X19pdGVtLFxuICAgICAgICA+ICUjeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9faXRlbSB7XG4gICAgICAgICAgICBkaXJlY3Rpb246IGx0cjtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5cblxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1sYXlvdXQtLW1pZGRsZSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBBbGlnbiBsYXlvdXQgaXRlbXMgdG8gdGhlIHZlcnRpY2FsIGNlbnRlcnMgb2YgZWFjaCBvdGhlci5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dC0tbWlkZGxlLFxuICAgICUjeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dC0tbWlkZGxlIHtcblxuICAgICAgICA+IC4jeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9faXRlbSxcbiAgICAgICAgPiAlI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2l0ZW0ge1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cbkBpZiAoJGludWl0LWVuYWJsZS1sYXlvdXQtLWJvdHRvbSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBBbGlnbiBsYXlvdXQgaXRlbXMgdG8gdGhlIHZlcnRpY2FsIGJvdHRvbXMgb2YgZWFjaCBvdGhlci5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dC0tYm90dG9tLFxuICAgICUjeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dC0tYm90dG9tIHtcblxuICAgICAgICA+IC4jeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9faXRlbSxcbiAgICAgICAgPiAlI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2l0ZW0ge1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLWxheW91dC0tcmlnaHQgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogTWFrZSB0aGUgbGF5b3V0IGl0ZW1zIGZpbGwgdXAgZnJvbSB0aGUgcmlnaHQgaGFuZCBzaWRlLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LWxheW91dC1uYW1lc3BhY2V9bGF5b3V0LS1yaWdodCxcbiAgICAlI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQtLXJpZ2h0IHtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG5cbiAgICAgICAgPiAuI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2l0ZW0sXG4gICAgICAgID4gJSN7JGludWl0LWxheW91dC1uYW1lc3BhY2V9bGF5b3V0X19pdGVtIHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbGF5b3V0LS1jZW50ZXIgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogTWFrZSB0aGUgbGF5b3V0IGl0ZW1zIGZpbGwgdXAgZnJvbSB0aGUgY2VudGVyIG91dHdhcmQuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQtLWNlbnRlcixcbiAgICAlI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXQtLWNlbnRlciB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgICA+IC4jeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dF9faXRlbSxcbiAgICAgICAgPiAlI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2l0ZW0ge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLWxheW91dC0tYXV0byA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBDYXVzZSBsYXlvdXQgaXRlbXMgdG8gdGFrZSB1cCBhIG5vbi1leHBsaWNpdCBhbW91bnQgb2Ygd2lkdGguXG4gICAgICovXG4gICAgLiN7JGludWl0LWxheW91dC1uYW1lc3BhY2V9bGF5b3V0LS1hdXRvLFxuICAgICUjeyRpbnVpdC1sYXlvdXQtbmFtZXNwYWNlfWxheW91dC0tYXV0byB7XG5cbiAgICAgICAgPiAuI3skaW51aXQtbGF5b3V0LW5hbWVzcGFjZX1sYXlvdXRfX2l0ZW0sXG4gICAgICAgID4gJSN7JGludWl0LWxheW91dC1uYW1lc3BhY2V9bGF5b3V0X19pdGVtIHtcbiAgICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI0xJU1QtQkFSRVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBUaGUgbGlzdC1iYXJlIG9iamVjdCBzaW1wbHkgcmVtb3ZlcyBhbnkgaW5kZW50cyBhbmQgYnVsbGV0IHBvaW50cyBmcm9tIGxpc3RzLlxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtbGlzdC1iYXJlLW5hbWVzcGFjZTogJGludWl0LW5hbWVzcGFjZSAhZGVmYXVsdDtcblxuLiN7JGludWl0LWxpc3QtYmFyZS1uYW1lc3BhY2V9bGlzdC1iYXJlLFxuJSN7JGludWl0LWxpc3QtYmFyZS1uYW1lc3BhY2V9bGlzdC1iYXJlIHtcbiAgICBtYXJnaW46ICAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI0xJU1QtQkxPQ0tcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogVGhlIGxpc3QtYmxvY2sgb2JqZWN0IGNyZWF0ZXMgYmxvY2t5IGxpc3QgaXRlbXMgb3V0IG9mIGEgYHVsYCBvciBgb2xgLlxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtbGlzdC1ibG9jay1uYW1lc3BhY2U6ICAgICAgICAkaW51aXQtbmFtZXNwYWNlICFkZWZhdWx0O1xuXG4kaW51aXQtbGlzdC1ibG9jay1wYWRkaW5nOiAgICAgICAgICAkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQgIWRlZmF1bHQ7XG4kaW51aXQtbGlzdC1ibG9jay1wYWRkaW5nLS10aW55OiAgICAgIHF1YXJ0ZXIoJGludWl0LWxpc3QtYmxvY2stcGFkZGluZykgIWRlZmF1bHQ7XG4kaW51aXQtbGlzdC1ibG9jay1wYWRkaW5nLS1zbWFsbDogICAgICAgaGFsdmUoJGludWl0LWxpc3QtYmxvY2stcGFkZGluZykgIWRlZmF1bHQ7XG4kaW51aXQtbGlzdC1ibG9jay1wYWRkaW5nLS1sYXJnZTogICAgICBkb3VibGUoJGludWl0LWxpc3QtYmxvY2stcGFkZGluZykgIWRlZmF1bHQ7XG4kaW51aXQtbGlzdC1ibG9jay1wYWRkaW5nLS1odWdlOiAgICBxdWFkcnVwbGUoJGludWl0LWxpc3QtYmxvY2stcGFkZGluZykgIWRlZmF1bHQ7XG5cbiRpbnVpdC1lbmFibGUtbGlzdC1ibG9jay0tdGlueTogICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1saXN0LWJsb2NrLS1zbWFsbDogICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWxpc3QtYmxvY2stLWxhcmdlOiAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtbGlzdC1ibG9jay0taHVnZTogICAgIGZhbHNlICFkZWZhdWx0O1xuXG4uI3skaW51aXQtbGlzdC1ibG9jay1uYW1lc3BhY2V9bGlzdC1ibG9jayxcbiUjeyRpbnVpdC1saXN0LWJsb2NrLW5hbWVzcGFjZX1saXN0LWJsb2NrIHtcbiAgICBtYXJnaW46ICAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcblxuICAgID4gbGkge1xuICAgICAgICBAZXh0ZW5kICUjeyRpbnVpdC1saXN0LWJsb2NrLW5hbWVzcGFjZX1saXN0LWJsb2NrX19pdGVtO1xuICAgIH1cblxufVxuXG4gICAgLiN7JGludWl0LWxpc3QtYmxvY2stbmFtZXNwYWNlfWxpc3QtYmxvY2tfX2l0ZW0sXG4gICAgJSN7JGludWl0LWxpc3QtYmxvY2stbmFtZXNwYWNlfWxpc3QtYmxvY2tfX2l0ZW0ge1xuICAgICAgICBwYWRkaW5nOiAkaW51aXQtbGlzdC1ibG9jay1wYWRkaW5nO1xuICAgIH1cblxuXG5cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbGlzdC1ibG9jay0tdGlueSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpc3QtYmxvY2tzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LWxpc3QtYmxvY2stbmFtZXNwYWNlfWxpc3QtYmxvY2stLXRpbnksXG4gICAgJSN7JGludWl0LWxpc3QtYmxvY2stbmFtZXNwYWNlfWxpc3QtYmxvY2stLXRpbnkge1xuXG4gICAgICAgID4gLiN7JGludWl0LWxpc3QtYmxvY2stbmFtZXNwYWNlfWxpc3QtYmxvY2tfX2l0ZW0sXG4gICAgICAgID4gJSN7JGludWl0LWxpc3QtYmxvY2stbmFtZXNwYWNlfWxpc3QtYmxvY2tfX2l0ZW0ge1xuICAgICAgICAgICAgcGFkZGluZzogJGludWl0LWxpc3QtYmxvY2stcGFkZGluZy0tdGlueTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cbkBpZiAoJGludWl0LWVuYWJsZS1saXN0LWJsb2NrLS1zbWFsbCA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBTbWFsbCBsaXN0LWJsb2Nrcy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1saXN0LWJsb2NrLW5hbWVzcGFjZX1saXN0LWJsb2NrLS1zbWFsbCxcbiAgICAlI3skaW51aXQtbGlzdC1ibG9jay1uYW1lc3BhY2V9bGlzdC1ibG9jay0tc21hbGwge1xuXG4gICAgICAgID4gLiN7JGludWl0LWxpc3QtYmxvY2stbmFtZXNwYWNlfWxpc3QtYmxvY2tfX2l0ZW0sXG4gICAgICAgID4gJSN7JGludWl0LWxpc3QtYmxvY2stbmFtZXNwYWNlfWxpc3QtYmxvY2tfX2l0ZW0ge1xuICAgICAgICAgICAgcGFkZGluZzogJGludWl0LWxpc3QtYmxvY2stcGFkZGluZy0tc21hbGw7XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbGlzdC1ibG9jay0tbGFyZ2UgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogTGFyZ2UgbGlzdC1ibG9ja3MuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtbGlzdC1ibG9jay1uYW1lc3BhY2V9bGlzdC1ibG9jay0tbGFyZ2UsXG4gICAgJSN7JGludWl0LWxpc3QtYmxvY2stbmFtZXNwYWNlfWxpc3QtYmxvY2stLWxhcmdlIHtcblxuICAgICAgICA+IC4jeyRpbnVpdC1saXN0LWJsb2NrLW5hbWVzcGFjZX1saXN0LWJsb2NrX19pdGVtLFxuICAgICAgICA+ICUjeyRpbnVpdC1saXN0LWJsb2NrLW5hbWVzcGFjZX1saXN0LWJsb2NrX19pdGVtIHtcbiAgICAgICAgICAgIHBhZGRpbmc6ICRpbnVpdC1saXN0LWJsb2NrLXBhZGRpbmctLWxhcmdlO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuQGlmICgkaW51aXQtZW5hYmxlLWxpc3QtYmxvY2stLWh1Z2UgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogSHVnZSBsaXN0LWJsb2Nrcy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1saXN0LWJsb2NrLW5hbWVzcGFjZX1saXN0LWJsb2NrLS1odWdlLFxuICAgICUjeyRpbnVpdC1saXN0LWJsb2NrLW5hbWVzcGFjZX1saXN0LWJsb2NrLS1odWdlIHtcblxuICAgICAgICA+IC4jeyRpbnVpdC1saXN0LWJsb2NrLW5hbWVzcGFjZX1saXN0LWJsb2NrX19pdGVtLFxuICAgICAgICA+ICUjeyRpbnVpdC1saXN0LWJsb2NrLW5hbWVzcGFjZX1saXN0LWJsb2NrX19pdGVtIHtcbiAgICAgICAgICAgIHBhZGRpbmc6ICRpbnVpdC1saXN0LWJsb2NrLXBhZGRpbmctLWh1Z2U7XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjTElTVC1JTkxJTkVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogVGhlIGxpc3QtaW5saW5lIG9iamVjdCBzaW1wbHkgZGlzcGxheXMgYSBsaXN0IG9mIGl0ZW1zIGluIG9uZSBsaW5lLlxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtbGlzdC1pbmxpbmUtbmFtZXNwYWNlOiAgICAgICAgICAgJGludWl0LW5hbWVzcGFjZSAhZGVmYXVsdDtcblxuJGludWl0LWVuYWJsZS1saXN0LWlubGluZS0tZGVsaW1pdGVkOiAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWxpc3QtaW5saW5lLWRlbGltaXQtY2hhcmFjdGVyOiAgIFwiLFxcMDBBMFwiICFkZWZhdWx0O1xuXG4uI3skaW51aXQtbGlzdC1pbmxpbmUtbmFtZXNwYWNlfWxpc3QtaW5saW5lLFxuJSN7JGludWl0LWxpc3QtaW5saW5lLW5hbWVzcGFjZX1saXN0LWlubGluZSB7XG4gICAgbWFyZ2luOiAgMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG5cbiAgICA+IGxpIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cblxufVxuXG5cblxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1saXN0LWlubGluZS0tZGVsaW1pdGVkID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIENvbW1hIGRlbGltaXRlZCBsaXN0IHRvIHNlbWFudGljYWxseSBtYXJrIHVwIGxpc3RzIG9mIHRhZ3MsIGV0Yy5cbiAgICAgKlxuICAgICAqIE4uQi4gVGhpcyBjb21wb25lbnQgcmVxdWlyZXMgdGhhdCB5b3UgcmVtb3ZlIHRoZSB3aGl0ZXNwYWNlIGJldHdlZW4gTElzLlxuICAgICAqICAgICAgVGhlIHNpbXBsZXN0IChhbmQgdmFsaWQpIHdheSB0byBhY2hpZXZlIHRoaXMgaXMgYnkgb21pdHRpbmcgdGhlXG4gICAgICogICAgICBjbG9zaW5nIGA8L2xpPmAgdGFnLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LWxpc3QtaW5saW5lLW5hbWVzcGFjZX1saXN0LWlubGluZS0tZGVsaW1pdGVkLFxuICAgICUjeyRpbnVpdC1saXN0LWlubGluZS1uYW1lc3BhY2V9bGlzdC1pbmxpbmUtLWRlbGltaXRlZCB7XG5cbiAgICAgICAgPiBsaSArIGxpIHtcblxuICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiI3skaW51aXQtbGlzdC1pbmxpbmUtZGVsaW1pdC1jaGFyYWN0ZXJ9XCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNMSVNULVVJXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIFRoZSBVSSBsaXN0IG9iamVjdCBjcmVhdGVzIGJsb2NreSBsaXN0IGl0ZW1zIHdpdGggYSBrZXlsaW5lIHNlcGFyYXRvciBvdXQgb2ZcbiAqIGEgYHVsYCBvciBgb2xgLlxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtbGlzdC11aS1uYW1lc3BhY2U6ICAgICAgICRpbnVpdC1uYW1lc3BhY2UgIWRlZmF1bHQ7XG5cbiRpbnVpdC1saXN0LXVpLXBhZGRpbmc6ICAgICAgICAgJGludWl0LWJhc2Utc3BhY2luZy11bml0ICFkZWZhdWx0O1xuJGludWl0LWxpc3QtdWktcGFkZGluZy0tdGlueTogICAgIHF1YXJ0ZXIoJGludWl0LWxpc3QtdWktcGFkZGluZykgIWRlZmF1bHQ7XG4kaW51aXQtbGlzdC11aS1wYWRkaW5nLS1zbWFsbDogICAgICBoYWx2ZSgkaW51aXQtbGlzdC11aS1wYWRkaW5nKSAhZGVmYXVsdDtcbiRpbnVpdC1saXN0LXVpLXBhZGRpbmctLWxhcmdlOiAgICAgZG91YmxlKCRpbnVpdC1saXN0LXVpLXBhZGRpbmcpICFkZWZhdWx0O1xuJGludWl0LWxpc3QtdWktcGFkZGluZy0taHVnZTogICBxdWFkcnVwbGUoJGludWl0LWxpc3QtdWktcGFkZGluZykgIWRlZmF1bHQ7XG5cbiRpbnVpdC1saXN0LXVpLWJvcmRlci13aWR0aDogICAgMXB4ICFkZWZhdWx0O1xuJGludWl0LWxpc3QtdWktYm9yZGVyLXN0eWxlOiAgICBzb2xpZCAhZGVmYXVsdDtcbiRpbnVpdC1saXN0LXVpLWJvcmRlci1jb2xvcjogICAgI2NjYyAhZGVmYXVsdDtcblxuJGludWl0LWVuYWJsZS1saXN0LXVpLS10aW55OiAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtbGlzdC11aS0tc21hbGw6ICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLWxpc3QtdWktLWxhcmdlOiAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1saXN0LXVpLS1odWdlOiAgICBmYWxzZSAhZGVmYXVsdDtcblxuLiN7JGludWl0LWxpc3QtdWktbmFtZXNwYWNlfWxpc3QtdWksXG4lI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aSxcbiAgICAuI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aV9faXRlbSxcbiAgICAlI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aV9faXRlbSB7XG4gICAgICAgIGJvcmRlcjogMCAkaW51aXQtbGlzdC11aS1ib3JkZXItc3R5bGUgJGludWl0LWxpc3QtdWktYm9yZGVyLWNvbG9yO1xuICAgIH1cblxuLiN7JGludWl0LWxpc3QtdWktbmFtZXNwYWNlfWxpc3QtdWksXG4lI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aSB7XG4gICAgbWFyZ2luOiAgMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgYm9yZGVyLXRvcC13aWR0aDogJGludWl0LWxpc3QtdWktYm9yZGVyLXdpZHRoO1xuXG4gICAgPiBsaSB7XG4gICAgICAgIEBleHRlbmQgJSN7JGludWl0LWxpc3QtdWktbmFtZXNwYWNlfWxpc3QtdWlfX2l0ZW07XG4gICAgfVxuXG59XG5cbiAgICAuI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aV9faXRlbSxcbiAgICAlI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aV9faXRlbSB7XG4gICAgICAgIHBhZGRpbmc6ICRpbnVpdC1saXN0LXVpLXBhZGRpbmc7XG4gICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6ICRpbnVpdC1saXN0LXVpLWJvcmRlci13aWR0aDtcbiAgICB9XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLWxpc3QtdWktLXRpbnkgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogVGlueSBsaXN0LXVpcy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1saXN0LXVpLW5hbWVzcGFjZX1saXN0LXVpLS10aW55LFxuICAgICUjeyRpbnVpdC1saXN0LXVpLW5hbWVzcGFjZX1saXN0LXVpLS10aW55IHtcblxuICAgICAgICA+IC4jeyRpbnVpdC1saXN0LXVpLW5hbWVzcGFjZX1saXN0LXVpX19pdGVtLFxuICAgICAgICA+ICUjeyRpbnVpdC1saXN0LXVpLW5hbWVzcGFjZX1saXN0LXVpX19pdGVtIHtcbiAgICAgICAgICAgIHBhZGRpbmc6ICRpbnVpdC1saXN0LXVpLXBhZGRpbmctLXRpbnk7XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbGlzdC11aS0tc21hbGwgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogU21hbGwgbGlzdC11aXMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aS0tc21hbGwsXG4gICAgJSN7JGludWl0LWxpc3QtdWktbmFtZXNwYWNlfWxpc3QtdWktLXNtYWxsIHtcblxuICAgICAgICA+IC4jeyRpbnVpdC1saXN0LXVpLW5hbWVzcGFjZX1saXN0LXVpX19pdGVtLFxuICAgICAgICA+ICUjeyRpbnVpdC1saXN0LXVpLW5hbWVzcGFjZX1saXN0LXVpX19pdGVtIHtcbiAgICAgICAgICAgIHBhZGRpbmc6ICRpbnVpdC1saXN0LXVpLXBhZGRpbmctLXNtYWxsO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuQGlmICgkaW51aXQtZW5hYmxlLWxpc3QtdWktLWxhcmdlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIExhcmdlIGxpc3QtdWlzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LWxpc3QtdWktbmFtZXNwYWNlfWxpc3QtdWktLWxhcmdlLFxuICAgICUjeyRpbnVpdC1saXN0LXVpLW5hbWVzcGFjZX1saXN0LXVpLS1sYXJnZSB7XG5cbiAgICAgICAgPiAuI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aV9faXRlbSxcbiAgICAgICAgPiAlI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aV9faXRlbSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAkaW51aXQtbGlzdC11aS1wYWRkaW5nLS1sYXJnZTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cbkBpZiAoJGludWl0LWVuYWJsZS1saXN0LXVpLS1odWdlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIEh1Z2UgbGlzdC11aXMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aS0taHVnZSxcbiAgICAlI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aS0taHVnZSB7XG5cbiAgICAgICAgPiAuI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aV9faXRlbSxcbiAgICAgICAgPiAlI3skaW51aXQtbGlzdC11aS1uYW1lc3BhY2V9bGlzdC11aV9faXRlbSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAkaW51aXQtbGlzdC11aS1wYWRkaW5nLS1odWdlO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cbiIsIiRpbnVpdC1lbmFibGUtYmxvY2stLWxpc3Q6ICAgICBmYWxzZSAhZGVmYXVsdDtcblxuQGlmICgkaW51aXQtZW5hYmxlLWJsb2NrLS1saXN0ID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIExlZnQtYWxpZ25lZCBibG9ja3MuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtYmxvY2stbmFtZXNwYWNlfWJsb2NrLS1saXN0LFxuICAgICUjeyRpbnVpdC1ibG9jay1uYW1lc3BhY2V9YmxvY2stLWxpc3Qge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XG5cbiAgICAgICAgJiA+LiN7JGludWl0LWJsb2NrLW5hbWVzcGFjZX1ibG9ja19faW1nLFxuICAgICAgICAmID4gJSN7JGludWl0LWJsb2NrLW5hbWVzcGFjZX1ibG9ja19faW1nLFxuICAgICAgICAmID4gLiN7JGludWl0LWJsb2NrLW5hbWVzcGFjZX1ibG9ja19fYm9keSxcbiAgICAgICAgJiA+ICUjeyRpbnVpdC1ibG9jay1uYW1lc3BhY2V9YmxvY2tfX2JvZHkge1xuICAgICAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjTUVESUFcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogUGxhY2UgYW55IGltYWdlLSBhbmQgdGV4dC1saWtlIGNvbnRlbnQgc2lkZS1ieS1zaWRlLCBhcyBwZXI6XG4gKiBzdHViYm9ybmVsbGEub3JnL2NvbnRlbnQvMjAxMC8wNi8yNS90aGUtbWVkaWEtb2JqZWN0LXNhdmVzLWh1bmRyZWRzLW9mLWxpbmVzLW9mLWNvZGVcbiAqL1xuXG4vLyBQcmVkZWZpbmUgdGhlIHZhcmlhYmxlcyBiZWxvdyBpbiBvcmRlciB0byBhbHRlciBhbmQgZW5hYmxlIHNwZWNpZmljIGZlYXR1cmVzLlxuJGludWl0LW1lZGlhLW5hbWVzcGFjZTogICAgICAgICAgICAgJGludWl0LW5hbWVzcGFjZSAhZGVmYXVsdDtcblxuJGludWl0LW1lZGlhLWd1dHRlcjogICAgICAgICAgICAgICAgJGludWl0LWJhc2Utc3BhY2luZy11bml0ICFkZWZhdWx0O1xuJGludWl0LW1lZGlhLWd1dHRlci0tdGlueTogICAgICAgICAgICBxdWFydGVyKCRpbnVpdC1tZWRpYS1ndXR0ZXIpICFkZWZhdWx0O1xuJGludWl0LW1lZGlhLWd1dHRlci0tc21hbGw6ICAgICAgICAgICAgIGhhbHZlKCRpbnVpdC1tZWRpYS1ndXR0ZXIpICFkZWZhdWx0O1xuJGludWl0LW1lZGlhLWd1dHRlci0tbGFyZ2U6ICAgICAgICAgICAgZG91YmxlKCRpbnVpdC1tZWRpYS1ndXR0ZXIpICFkZWZhdWx0O1xuJGludWl0LW1lZGlhLWd1dHRlci0taHVnZTogICAgICAgICAgcXVhZHJ1cGxlKCRpbnVpdC1tZWRpYS1ndXR0ZXIpICFkZWZhdWx0O1xuXG4kaW51aXQtZW5hYmxlLW1lZGlhLS10aW55OiAgICAgICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtbWVkaWEtLXNtYWxsOiAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1tZWRpYS0tbGFyZ2U6ICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLW1lZGlhLS1odWdlOiAgICAgICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtbWVkaWEtLXJldjogICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1tZWRpYS0tZmx1c2g6ICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLW1lZGlhLS1yZXNwb25zaXZlOiAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1tZWRpYS1jb2xsYXBzZS1hdDogICAgICAgICAgIDcyMHB4ICFkZWZhdWx0O1xuXG5cblxuXG5cbi4jeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWEsXG4lI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhIHtcbiAgICBAZXh0ZW5kICVjbGVhcmZpeDtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuICAgIC4jeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2ltZyxcbiAgICAlI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhX19pbWcge1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAkaW51aXQtbWVkaWEtZ3V0dGVyO1xuXG4gICAgICAgID4gaW1nIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAuI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhX19ib2R5LFxuICAgICUjeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2JvZHkge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgICAmLFxuICAgICAgICA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cblxuICAgIH1cblxuXG5cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbWVkaWEtLXRpbnkgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogVGlueSBtZWRpYSBvYmplY3RzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0tdGlueSxcbiAgICAlI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhLS10aW55IHtcblxuICAgICAgICA+IC4jeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2ltZyxcbiAgICAgICAgPiAlI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhX19pbWcge1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAkaW51aXQtbWVkaWEtZ3V0dGVyLS10aW55O1xuICAgICAgICB9XG5cbiAgICAgICAgQGlmICgkaW51aXQtZW5hYmxlLW1lZGlhLS1yZXYgPT0gdHJ1ZSkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRpbnkgcmV2ZXJzZWQgbWVkaWEgb2JqZWN0cy5cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAmLiN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0tcmV2LFxuICAgICAgICAgICAgJiUjeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWEtLXJldiB7XG5cbiAgICAgICAgICAgICAgICA+IC4jeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2ltZyxcbiAgICAgICAgICAgICAgICA+ICUjeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2ltZyB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6ICAkaW51aXQtbWVkaWEtZ3V0dGVyLS10aW55O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbWVkaWEtLXNtYWxsID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFNtYWxsIG1lZGlhIG9iamVjdHMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhLS1zbWFsbCxcbiAgICAlI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhLS1zbWFsbCB7XG5cbiAgICAgICAgPiAuI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhX19pbWcsXG4gICAgICAgID4gJSN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYV9faW1nIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJGludWl0LW1lZGlhLWd1dHRlci0tc21hbGw7XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKCRpbnVpdC1lbmFibGUtbWVkaWEtLXJldiA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU21hbGwgcmV2ZXJzZWQgbWVkaWEgb2JqZWN0cy5cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAmLiN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0tcmV2LFxuICAgICAgICAgICAgJiUjeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWEtLXJldiB7XG5cbiAgICAgICAgICAgICAgICA+IC4jeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2ltZyxcbiAgICAgICAgICAgICAgICA+ICUjeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2ltZyB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6ICAkaW51aXQtbWVkaWEtZ3V0dGVyLS1zbWFsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuQGlmICgkaW51aXQtZW5hYmxlLW1lZGlhLS1sYXJnZSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBMYXJnZSBtZWRpYSBvYmplY3RzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0tbGFyZ2UsXG4gICAgJSN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0tbGFyZ2Uge1xuXG4gICAgICAgID4gLiN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYV9faW1nLFxuICAgICAgICA+ICUjeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2ltZyB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6ICRpbnVpdC1tZWRpYS1ndXR0ZXItLWxhcmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgQGlmICgkaW51aXQtZW5hYmxlLW1lZGlhLS1yZXYgPT0gdHJ1ZSkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIExhcmdlIHJldmVyc2VkIG1lZGlhIG9iamVjdHMuXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgJi4jeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWEtLXJldixcbiAgICAgICAgICAgICYlI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhLS1yZXYge1xuXG4gICAgICAgICAgICAgICAgPiAubWVkaWFfX2ltZyxcbiAgICAgICAgICAgICAgICA+ICVtZWRpYV9faW1nIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogICRpbnVpdC1tZWRpYS1ndXR0ZXItLWxhcmdlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbWVkaWEtLWh1Z2UgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogSHVnZSBtZWRpYSBvYmplY3RzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0taHVnZSxcbiAgICAlI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhLS1odWdlIHtcblxuICAgICAgICA+IC4jeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2ltZyxcbiAgICAgICAgPiAlI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhX19pbWcge1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAkaW51aXQtbWVkaWEtZ3V0dGVyLS1odWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgQGlmICgkaW51aXQtZW5hYmxlLW1lZGlhLS1yZXYgPT0gdHJ1ZSkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEh1Z2UgcmV2ZXJzZWQgbWVkaWEgb2JqZWN0cy5cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAmLiN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0tcmV2LFxuICAgICAgICAgICAgJiUjeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWEtLXJldiB7XG5cbiAgICAgICAgICAgICAgICA+IC5tZWRpYV9faW1nLFxuICAgICAgICAgICAgICAgID4gJW1lZGlhX19pbWcge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAgJGludWl0LW1lZGlhLWd1dHRlci0taHVnZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuXG5cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbWVkaWEtLXJldiA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnNlZCBpbWFnZSBsb2NhdGlvbiAocmlnaHQgaW5zdGVhZCBvZiBsZWZ0KS4gRXh0ZW5kcyBgLm1lZGlhYC5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWEtLXJldixcbiAgICAlI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhLS1yZXYge1xuXG4gICAgICAgID4gLiN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYV9faW1nLFxuICAgICAgICA+ICUjeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2ltZyB7XG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogJGludWl0LW1lZGlhLWd1dHRlcjtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLW1lZGlhLS1mbHVzaCA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBGbHVzaCBtZWRpYSBvYmplY3RzIGhhdmUgbm8gc3BhY2UgYmV0d2VlbiB0aGUgaW1hZ2UtIGFuZCB0ZXh0LWNvbnRlbnQuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhLS1mbHVzaCxcbiAgICAlI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhLS1mbHVzaCB7XG5cbiAgICAgICAgPiAuI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhX19pbWcsXG4gICAgICAgID4gJSN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYV9faW1nIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAgMDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLW1lZGlhLS1yZXNwb25zaXZlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFJlc3BvbnNpdmUgbWVkaWEgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZXJlIGlzIGEgdmVyeSBwcmFnbWF0aWMsIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlc3BvbnNpdmUgbWVkaWFcbiAgICAgKiBvYmplY3QsIHdoaWNoIHNpbXBseSBwbGFjZXMgdGhlIHRleHQtY29udGVudCBiZW5lYXRoIHRoZSBpbWFnZS1jb250ZW50LlxuICAgICAqXG4gICAgICogV2UgdXNlIGEgYG1heC13aWR0aGAgbWVkaWEgcXVlcnkgYmVjYXVzZTpcbiAgICAgKlxuICAgICAqIGEpIGl0IGlzIHRoZSBsZWFzdCB2ZXJib3NlIG1ldGhvZCBpbiB0ZXJtcyBvZiBhbW91bnQgb2YgY29kZSByZXF1aXJlZC5cbiAgICAgKiBiKSB0aGUgbWVkaWEgb2JqZWN04oCZcyBkZWZhdWx0IHN0YXRlIGlzIGltYWdlLW5leHQtdG8tdGV4dCwgc28gaXRzIHN0YWNrZWRcbiAgICAgKiAgICBzdGF0ZSBpcyB0aGUgZXhjZXB0aW9uLCByYXRoZXIgdGhhbiB0aGUgcnVsZS5cbiAgICAgKi9cblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRpbnVpdC1tZWRpYS1jb2xsYXBzZS1hdCkge1xuXG4gICAgICAgIC4jeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWEtLXJlc3BvbnNpdmUsXG4gICAgICAgICUjeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWEtLXJlc3BvbnNpdmUge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJld29yayB0aGUgc3BhY2luZ3Mgb24gcmVndWxhciBtZWRpYSBvYmplY3RzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICA+IC4jeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2ltZyxcbiAgICAgICAgICAgID4gJSN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYV9faW1nIHtcbiAgICAgICAgICAgICAgICBmbG9hdDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJGludWl0LW1lZGlhLWd1dHRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogIDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoJGludWl0LWVuYWJsZS1tZWRpYS0tdGlueSA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBUaW55IHJlc3BvbnNpdmUgbWVkaWEgb2JqZWN0cy5cbiAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAqIFRha2UgYSBsaXR0bGUgbW9yZSBoZWF2eS1oYW5kZWQgYXBwcm9hY2ggdG8gcmV3b3JraW5nXG4gICAgICAgICAgICAgICAgICogc3BhY2luZ3Mgb24gbWVkaWEgb2JqZWN0cyB0aGF0IGFyZSBhbHNvIHRpbnkgbWVkaWEgb2JqZWN0c1xuICAgICAgICAgICAgICAgICAqIGluIHRoZWlyIHJlZ3VsYXIgc3RhdGUuXG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgICAgICAmLiN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0tdGlueSxcbiAgICAgICAgICAgICAgICAmJSN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0tdGlueSB7XG5cbiAgICAgICAgICAgICAgICAgICAgPiAuI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhX19pbWcsXG4gICAgICAgICAgICAgICAgICAgID4gJSN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYV9faW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRpbnVpdC1tZWRpYS1ndXR0ZXItLXRpbnk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKCRpbnVpdC1lbmFibGUtbWVkaWEtLXNtYWxsID09IHRydWUpIHtcblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFNtYWxsIHJlc3BvbnNpdmUgbWVkaWEgb2JqZWN0cy5cbiAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAqIFRha2UgYSBsaXR0bGUgbW9yZSBoZWF2eS1oYW5kZWQgYXBwcm9hY2ggdG8gcmV3b3JraW5nXG4gICAgICAgICAgICAgICAgICogc3BhY2luZ3Mgb24gbWVkaWEgb2JqZWN0cyB0aGF0IGFyZSBhbHNvIHNtYWxsIG1lZGlhIG9iamVjdHNcbiAgICAgICAgICAgICAgICAgKiBpbiB0aGVpciByZWd1bGFyIHN0YXRlLlxuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAgICAgJi4jeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWEtLXNtYWxsLFxuICAgICAgICAgICAgICAgICYlI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhLS1zbWFsbCB7XG5cbiAgICAgICAgICAgICAgICAgICAgPiAuI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhX19pbWcsXG4gICAgICAgICAgICAgICAgICAgID4gJSN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYV9faW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRpbnVpdC1tZWRpYS1ndXR0ZXItLXNtYWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmICgkaW51aXQtZW5hYmxlLW1lZGlhLS1sYXJnZSA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBMYXJnZSByZXNwb25zaXZlIG1lZGlhIG9iamVjdHMuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBUYWtlIGEgbGl0dGxlIG1vcmUgaGVhdnktaGFuZGVkIGFwcHJvYWNoIHRvIHJld29ya2luZ1xuICAgICAgICAgICAgICAgICAqIHNwYWNpbmdzIG9uIG1lZGlhIG9iamVjdHMgdGhhdCBhcmUgYWxzbyBsYXJnZSBtZWRpYSBvYmplY3RzXG4gICAgICAgICAgICAgICAgICogaW4gdGhlaXIgcmVndWxhciBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgICAgICYuI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhLS1sYXJnZSxcbiAgICAgICAgICAgICAgICAmJSN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0tbGFyZ2Uge1xuXG4gICAgICAgICAgICAgICAgICAgID4gLiN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYV9faW1nLFxuICAgICAgICAgICAgICAgICAgICA+ICUjeyRpbnVpdC1tZWRpYS1uYW1lc3BhY2V9bWVkaWFfX2ltZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkaW51aXQtbWVkaWEtZ3V0dGVyLS1sYXJnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoJGludWl0LWVuYWJsZS1tZWRpYS0taHVnZSA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBIdWdlIHJlc3BvbnNpdmUgbWVkaWEgb2JqZWN0cy5cbiAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAqIFRha2UgYSBsaXR0bGUgbW9yZSBoZWF2eS1oYW5kZWQgYXBwcm9hY2ggdG8gcmV3b3JraW5nXG4gICAgICAgICAgICAgICAgICogc3BhY2luZ3Mgb24gbWVkaWEgb2JqZWN0cyB0aGF0IGFyZSBhbHNvIGh1Z2UgbWVkaWEgb2JqZWN0c1xuICAgICAgICAgICAgICAgICAqIGluIHRoZWlyIHJlZ3VsYXIgc3RhdGUuXG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgICAgICAmLiN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0taHVnZSxcbiAgICAgICAgICAgICAgICAmJSN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYS0taHVnZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgPiAuI3skaW51aXQtbWVkaWEtbmFtZXNwYWNlfW1lZGlhX19pbWcsXG4gICAgICAgICAgICAgICAgICAgID4gJSN7JGludWl0LW1lZGlhLW5hbWVzcGFjZX1tZWRpYV9faW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRpbnVpdC1tZWRpYS1ndXR0ZXItLWh1Z2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH1cblxufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjUEFDS1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBUaGUgcGFjayBvYmplY3Qgc2ltcGx5IGNhdXNlcyBhbnkgbnVtYmVyIG9mIGVsZW1lbnRzIHBhY2sgdXAgaG9yaXpvbnRhbGx5IHRvXG4gKiBhdXRvbWF0aWNhbGx5IGZpbGwgYW4gZXF1YWwsIGZsdWlkIHdpZHRoIG9mIHRoZWlyIHBhcmVudC5cbiAqL1xuXG4vLyBQcmVkZWZpbmUgdGhlIHZhcmlhYmxlcyBiZWxvdyBpbiBvcmRlciB0byBhbHRlciBhbmQgZW5hYmxlIHNwZWNpZmljIGZlYXR1cmVzLlxuJGludWl0LXBhY2stbmFtZXNwYWNlOiAgICAgICRpbnVpdC1uYW1lc3BhY2UgIWRlZmF1bHQ7XG5cbiRpbnVpdC1wYWNrLWd1dHRlcjogICAgICAgICAkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQgIWRlZmF1bHQ7XG4kaW51aXQtcGFjay1ndXR0ZXItLXRpbnk6ICAgICBxdWFydGVyKCRpbnVpdC1wYWNrLWd1dHRlcikgIWRlZmF1bHQ7XG4kaW51aXQtcGFjay1ndXR0ZXItLXNtYWxsOiAgICAgIGhhbHZlKCRpbnVpdC1wYWNrLWd1dHRlcikgIWRlZmF1bHQ7XG4kaW51aXQtcGFjay1ndXR0ZXItLWxhcmdlOiAgICAgZG91YmxlKCRpbnVpdC1wYWNrLWd1dHRlcikgIWRlZmF1bHQ7XG4kaW51aXQtcGFjay1ndXR0ZXItLWh1Z2U6ICAgcXVhZHJ1cGxlKCRpbnVpdC1wYWNrLWd1dHRlcikgIWRlZmF1bHQ7XG5cbiRpbnVpdC1lbmFibGUtcGFjay0tYXV0bzogICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtcGFjay0tdGlueTogICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtcGFjay0tc21hbGw6ICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtcGFjay0tbGFyZ2U6ICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtcGFjay0taHVnZTogICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtcGFjay0tcmV2OiAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtcGFjay0tbWlkZGxlOiBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtcGFjay0tYm90dG9tOiBmYWxzZSAhZGVmYXVsdDtcblxuXG5cblxuXG4vKipcbiAqIDEuIEZpbGwgYWxsIGF2YWlsYWJsZSBzcGFjZS5cbiAqIDIuIENhdXNlIGNoaWxkcmVuIHRvIGJlIGF1dG9tYXRpY2FsbHkgZXF1YWxseSBzaXplZC5cbiAqL1xuLiN7JGludWl0LXBhY2stbmFtZXNwYWNlfXBhY2ssXG4lI3skaW51aXQtcGFjay1uYW1lc3BhY2V9cGFjayB7XG4gICAgd2lkdGg6IDEwMCU7IC8qIFsxXSAqL1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIHRhYmxlLWxheW91dDogZml4ZWQ7IC8qIFsyXSAqL1xufVxuXG4gICAgLyoqXG4gICAgICogQ2F1c2UgY2hpbGRyZW4gdG8gYWRvcHQgdGFibGUtbGlrZSBzdHJ1Y3R1cmUuXG4gICAgICovXG4gICAgLiN7JGludWl0LXBhY2stbmFtZXNwYWNlfXBhY2tfX2l0ZW0sXG4gICAgJSN7JGludWl0LXBhY2stbmFtZXNwYWNlfXBhY2tfX2l0ZW0ge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuXG4gICAgICAgIEBpZiAoJGludWl0LWVuYWJsZS1wYWNrLS1taWRkbGUgPT0gdHJ1ZSkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFsbCBpdGVtcyBhcmUgYWxpZ25lZCB0byB0aGUgbWlkZGxlcyBvZiBlYWNoIG90aGVyLlxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIC4jeyRpbnVpdC1wYWNrLW5hbWVzcGFjZX1wYWNrLS1taWRkbGUgPiAmLFxuICAgICAgICAgICAgJSN7JGludWl0LXBhY2stbmFtZXNwYWNlfXBhY2stLW1pZGRsZSA+ICYge1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoJGludWl0LWVuYWJsZS1wYWNrLS1ib3R0b20gPT0gdHJ1ZSkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFsbCBpdGVtcyBhcmUgYWxpZ25lZCB0byB0aGUgYm90dG9tcyBvZiBlYWNoIG90aGVyLlxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIC4jeyRpbnVpdC1wYWNrLW5hbWVzcGFjZX1wYWNrLS1ib3R0b20gPiAmLFxuICAgICAgICAgICAgJSN7JGludWl0LXBhY2stbmFtZXNwYWNlfXBhY2stLWJvdHRvbSA+ICYge1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfVxuXG5cblxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1wYWNrLS1hdXRvID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIENhdXNlIGNoaWxkcmVuIHRvIHBhY2sgdXAgaW50byBhdmFpbGFibGUgc3BhY2UsIGJ1dCBub3QgZXF1YWxseSBzaXplZC5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1wYWNrLW5hbWVzcGFjZX1wYWNrLS1hdXRvLFxuICAgICUjeyRpbnVpdC1wYWNrLW5hbWVzcGFjZX1wYWNrLS1hdXRvIHtcbiAgICAgICAgdGFibGUtbGF5b3V0OiBhdXRvO1xuICAgIH1cblxufVxuXG5cblxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1wYWNrLS10aW55ID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgZ3V0dGVycyBiZXR3ZWVuIGl0ZW1zLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LXBhY2stbmFtZXNwYWNlfXBhY2stLXRpbnksXG4gICAgJSN7JGludWl0LXBhY2stbmFtZXNwYWNlfXBhY2stLXRpbnkge1xuICAgICAgICBib3JkZXItc3BhY2luZzogJGludWl0LXBhY2stZ3V0dGVyLS10aW55O1xuICAgIH1cblxufVxuXG5AaWYgKCRpbnVpdC1lbmFibGUtcGFjay0tc21hbGwgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogU21hbGwgZ3V0dGVycyBiZXR3ZWVuIGl0ZW1zLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LXBhY2stbmFtZXNwYWNlfXBhY2stLXNtYWxsLFxuICAgICUjeyRpbnVpdC1wYWNrLW5hbWVzcGFjZX1wYWNrLS1zbWFsbCB7XG4gICAgICAgIGJvcmRlci1zcGFjaW5nOiAkaW51aXQtcGFjay1ndXR0ZXItLXNtYWxsO1xuICAgIH1cblxufVxuXG5AaWYgKCRpbnVpdC1lbmFibGUtcGFjay0tbGFyZ2UgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogTGFyZ2UgZ3V0dGVycyBiZXR3ZWVuIGl0ZW1zLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LXBhY2stbmFtZXNwYWNlfXBhY2stLWxhcmdlLFxuICAgICUjeyRpbnVpdC1wYWNrLW5hbWVzcGFjZX1wYWNrLS1sYXJnZSB7XG4gICAgICAgIGJvcmRlci1zcGFjaW5nOiAkaW51aXQtcGFjay1ndXR0ZXItLWxhcmdlO1xuICAgIH1cblxufVxuXG5AaWYgKCRpbnVpdC1lbmFibGUtcGFjay0taHVnZSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBIdWdlIGd1dHRlcnMgYmV0d2VlbiBpdGVtcy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1wYWNrLW5hbWVzcGFjZX1wYWNrLS1odWdlLFxuICAgICUjeyRpbnVpdC1wYWNrLW5hbWVzcGFjZX1wYWNrLS1odWdlIHtcbiAgICAgICAgYm9yZGVyLXNwYWNpbmc6ICRpbnVpdC1wYWNrLWd1dHRlci0taHVnZTtcbiAgICB9XG5cbn1cblxuXG5cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtcGFjay0tcmV2ID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFJldmVyc2VkIG9yZGVyIHBhY2tzLlxuICAgICAqL1xuICAgIFxuICAgIC4jeyRpbnVpdC1wYWNrLW5hbWVzcGFjZX1wYWNrLS1yZXYsXG4gICAgJSN7JGludWl0LXBhY2stbmFtZXNwYWNlfXBhY2stLXJldiB7XG4gICAgICAgIGRpcmVjdGlvbjogcnRsO1xuICAgIFxuICAgICAgICA+IC4jeyRpbnVpdC1wYWNrLW5hbWVzcGFjZX1wYWNrX19pdGVtLFxuICAgICAgICA+ICUjeyRpbnVpdC1wYWNrLW5hbWVzcGFjZX1wYWNrX19pdGVtIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogbHRyO1xuICAgICAgICB9XG4gICAgXG4gICAgfVxuXG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNUQUJMRVNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtdGFibGUtbmFtZXNwYWNlOiAgICAgICAgICRpbnVpdC1uYW1lc3BhY2UgIWRlZmF1bHQ7XG5cbiRpbnVpdC10YWJsZS1wYWRkaW5nLS1jb21wYWN0OiAgcXVhcnRlcigkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQpICFkZWZhdWx0O1xuJGludWl0LXRhYmxlLXBhZGRpbmctLWNvc3k6ICAgICBoYWx2ZSgkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQpICFkZWZhdWx0O1xuJGludWl0LXRhYmxlLXBhZGRpbmctLWNvbWZ5OiAgICAkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQgIWRlZmF1bHQ7XG5cbiRpbnVpdC10YWJsZS1ib3JkZXItd2lkdGg6ICAgICAgMXB4ICFkZWZhdWx0O1xuJGludWl0LXRhYmxlLWJvcmRlci1zdHlsZTogICAgICBzb2xpZCAhZGVmYXVsdDtcbiRpbnVpdC10YWJsZS1ib3JkZXItY29sb3I6ICAgICAgI2NjYyAhZGVmYXVsdDtcblxuJGludWl0LWVuYWJsZS10YWJsZS0tZml4ZWQ6ICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtdGFibGUtLWNvbXBhY3Q6ICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLXRhYmxlLS1jb3N5OiAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS10YWJsZS0tY29tZnk6ICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtdGFibGUtLWNlbGxzOiAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLXRhYmxlLS1yb3dzOiAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS10YWJsZS0tY29sdW1uczogICBmYWxzZSAhZGVmYXVsdDtcblxuXG5cblxuXG4uI3skaW51aXQtdGFibGUtbmFtZXNwYWNlfXRhYmxlLFxuJSN7JGludWl0LXRhYmxlLW5hbWVzcGFjZX10YWJsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXRhYmxlLS1maXhlZCA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBGb3JjZSB0YWJsZXMgaW50byBoYXZpbmcgZXF1YWwtd2lkdGggY29sdW1ucy5cbiAgICAgKi9cbiAgICAuI3skaW51aXQtdGFibGUtbmFtZXNwYWNlfXRhYmxlLS1maXhlZCxcbiAgICAlI3skaW51aXQtdGFibGUtbmFtZXNwYWNlfXRhYmxlLS1maXhlZCB7XG4gICAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gICAgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXRhYmxlLS1jb21wYWN0ID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFRhYmxlcyB3aXRoIHZlcnkgdGlnaHRseSBwYWNrZWQgY2VsbHMuXG4gICAgICovXG4gICAgLiN7JGludWl0LXRhYmxlLW5hbWVzcGFjZX10YWJsZS0tY29tcGFjdCxcbiAgICAlI3skaW51aXQtdGFibGUtbmFtZXNwYWNlfXRhYmxlLS1jb21wYWN0IHtcbiAgICBcbiAgICAgICAgdGgsXG4gICAgICAgIHRkIHtcbiAgICAgICAgICAgIHBhZGRpbmc6ICRpbnVpdC10YWJsZS1wYWRkaW5nLS1jb21wYWN0O1xuICAgICAgICB9XG4gICAgXG4gICAgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXRhYmxlLS1jb3N5ID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIExpZ2h0bHkgcGFja2VkIGNlbGxzLlxuICAgICAqL1xuICAgIC4jeyRpbnVpdC10YWJsZS1uYW1lc3BhY2V9dGFibGUtLWNvc3ksXG4gICAgJSN7JGludWl0LXRhYmxlLW5hbWVzcGFjZX10YWJsZS0tY29zeSB7XG4gICAgXG4gICAgICAgIHRoLFxuICAgICAgICB0ZCB7XG4gICAgICAgICAgICBwYWRkaW5nOiAkaW51aXQtdGFibGUtcGFkZGluZy0tY29zeTtcbiAgICAgICAgfVxuICAgIFxuICAgIH1cblxufVxuXG5cblxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS10YWJsZS0tY29tZnkgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogVGFibGVzIHdpdGggdmVyeSB3aWRlbHkgcGFkZGVkIGNlbGxzLlxuICAgICAqL1xuICAgIC4jeyRpbnVpdC10YWJsZS1uYW1lc3BhY2V9dGFibGUtLWNvbWZ5LFxuICAgICUjeyRpbnVpdC10YWJsZS1uYW1lc3BhY2V9dGFibGUtLWNvbWZ5IHtcbiAgICBcbiAgICAgICAgdGgsXG4gICAgICAgIHRkIHtcbiAgICAgICAgICAgIHBhZGRpbmc6ICRpbnVpdC10YWJsZS1wYWRkaW5nLS1jb21meTtcbiAgICAgICAgfVxuICAgIFxuICAgIH1cblxufVxuXG5cblxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS10YWJsZS0tY2VsbHMgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogQWRkIGJvcmRlcnMgYXJvdW5kIGEgYHRhYmxlYC5cbiAgICAgKi9cbiAgICAuI3skaW51aXQtdGFibGUtbmFtZXNwYWNlfXRhYmxlLS1jZWxscyxcbiAgICAlI3skaW51aXQtdGFibGUtbmFtZXNwYWNlfXRhYmxlLS1jZWxscyB7XG4gICAgXG4gICAgICAgIHRoLFxuICAgICAgICB0ZCB7XG4gICAgICAgICAgICBib3JkZXI6ICRpbnVpdC10YWJsZS1ib3JkZXItd2lkdGggJGludWl0LXRhYmxlLWJvcmRlci1zdHlsZSAkaW51aXQtdGFibGUtYm9yZGVyLWNvbG9yO1xuICAgICAgICB9XG4gICAgXG4gICAgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXRhYmxlLS1yb3dzID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIEFkZCBib3JkZXJzIG9ubHkgdG8gYHRhYmxlYOKAmXMgcm93cy5cbiAgICAgKi9cbiAgICAuI3skaW51aXQtdGFibGUtbmFtZXNwYWNlfXRhYmxlLS1yb3dzLFxuICAgICUjeyRpbnVpdC10YWJsZS1uYW1lc3BhY2V9dGFibGUtLXJvd3Mge1xuICAgIFxuICAgICAgICAmLFxuICAgICAgICB0aCxcbiAgICAgICAgdGQge1xuICAgICAgICAgICAgYm9yZGVyOiAwICRpbnVpdC10YWJsZS1ib3JkZXItc3R5bGUgJGludWl0LXRhYmxlLWJvcmRlci1jb2xvcjtcbiAgICAgICAgfVxuICAgIFxuICAgIH1cbiAgICBcbiAgICAuI3skaW51aXQtdGFibGUtbmFtZXNwYWNlfXRhYmxlLS1yb3dzLFxuICAgICUjeyRpbnVpdC10YWJsZS1uYW1lc3BhY2V9dGFibGUtLXJvd3Mge1xuICAgICAgICBib3JkZXItdG9wLXdpZHRoOiAkaW51aXQtdGFibGUtYm9yZGVyLXdpZHRoO1xuICAgIFxuICAgICAgICB0aCxcbiAgICAgICAgdGQge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogJGludWl0LXRhYmxlLWJvcmRlci13aWR0aDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cblxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS10YWJsZS0tY29sdW1ucyA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYm9yZGVycyBvbmx5IHRvIGB0YWJsZWDigJlzIGNvbHVtbnMuXG4gICAgICovXG4gICAgLiN7JGludWl0LXRhYmxlLW5hbWVzcGFjZX10YWJsZS0tY29sdW1ucyxcbiAgICAlI3skaW51aXQtdGFibGUtbmFtZXNwYWNlfXRhYmxlLS1jb2x1bW5zIHtcbiAgICBcbiAgICAgICAgJixcbiAgICAgICAgdGgsXG4gICAgICAgIHRkIHtcbiAgICAgICAgICAgIGJvcmRlcjogMCAkaW51aXQtdGFibGUtYm9yZGVyLXN0eWxlICRpbnVpdC10YWJsZS1ib3JkZXItY29sb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLiN7JGludWl0LXRhYmxlLW5hbWVzcGFjZX10YWJsZS0tY29sdW1ucyxcbiAgICAlI3skaW51aXQtdGFibGUtbmFtZXNwYWNlfXRhYmxlLS1jb2x1bW5zIHtcbiAgICAgICAgYm9yZGVyLWxlZnQtd2lkdGg6ICRpbnVpdC10YWJsZS1ib3JkZXItd2lkdGg7XG4gICAgXG4gICAgICAgIHRoLFxuICAgICAgICB0ZCB7XG4gICAgICAgICAgICBib3JkZXItcmlnaHQtd2lkdGg6ICRpbnVpdC10YWJsZS1ib3JkZXItd2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI1RBQlNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogQSBzaW1wbGUgYWJzdHJhY3Rpb24gZm9yIG1ha2luZyBlcXVhbC13aWR0aCBuYXZpZ2F0aW9uIHRhYnMuXG4gKi9cblxuLy8gUHJlZGVmaW5lIHRoZSB2YXJpYWJsZXMgYmVsb3cgaW4gb3JkZXIgdG8gYWx0ZXIgYW5kIGVuYWJsZSBzcGVjaWZpYyBmZWF0dXJlcy5cbiRpbnVpdC10YWJzLW5hbWVzcGFjZTogJGludWl0LW5hbWVzcGFjZSAhZGVmYXVsdDtcblxuLyoqXG4gKiAxLiBSZXNldCBhbnkgcmVzaWR1YWwgc3R5bGVzIChtb3N0IGxpa2VseSBmcm9tIGxpc3RzKS5cbiAqIDIuIFRhYmxlcyBmb3IgbGF5b3V0IVxuICogMy4gRm9yY2UgYWxsIGB0YWJsZS1jZWxsYCBjaGlsZHJlbiB0byBoYXZlIGVxdWFsIHdpZHRocy5cbiAqIDQuIEZvcmNlIHRoZSBvYmplY3QgdG8gYmUgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIHBhcmVudC4gQ29tYmluZWQgd2l0aCBbMl0sXG4gKiAgICB0aGlzIG1ha2VzIHRoZSBvYmplY3QgYmVoYXZlIGluIGEgcXVhc2ktYGRpc3BsYXk6IGJsb2NrO2AgbWFubmVyLlxuICovXG4uI3skaW51aXQtdGFicy1uYW1lc3BhY2V9dGFicyxcbiUjeyRpbnVpdC10YWJzLW5hbWVzcGFjZX10YWJzIHtcbiAgICBtYXJnaW46ICAwOyAvKiBbMV0gKi9cbiAgICBwYWRkaW5nOiAwOyAvKiBbMV0gKi9cbiAgICBsaXN0LXN0eWxlOiBub25lOyAvKiBbMV0gKi9cbiAgICBkaXNwbGF5OiB0YWJsZTsgLyogWzJdICovXG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZDsgLyogWzNdICovXG4gICAgd2lkdGg6IDEwMCU7IC8qIFs0XSAqL1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuICAgIC4jeyRpbnVpdC10YWJzLW5hbWVzcGFjZX10YWJzX19pdGVtLFxuICAgICUjeyRpbnVpdC10YWJzLW5hbWVzcGFjZX10YWJzX19pdGVtIHtcbiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsgLyogWzJdICovXG4gICAgfVxuXG4gICAgICAgIC4jeyRpbnVpdC10YWJzLW5hbWVzcGFjZX10YWJzX19saW5rLFxuICAgICAgICAlI3skaW51aXQtdGFicy1uYW1lc3BhY2V9dGFic19fbGluayB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjUEFHRS1IRUFEXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kaGVhZGVyLWJvcmRlci13aWR0aDogICA2cHg7XG4kaGVhZGVyLW1heC1oZWlnaHQ6ICAgICA0ODBweDtcblxuLyoqXG4gKiBUaGUgc2l0ZeKAmXMgbWFpbiBwYWdlLWhlYWQgY2FuIGhhdmUgdHdvIGRpZmZlcmVudCBzdGF0ZXM6XG4gKlxuICogMSkgUmVndWxhciBwYWdlLWhlYWQgd2l0aCBubyBiYWNrZ3JvdW5kcyBvciBleHRyYSB0cmVhdG1lbnRzOyBpdCBqdXN0XG4gKiAgICBjb250YWlucyB0aGUgbG9nbyBhbmQgbmF2LlxuICogMikgQSBtYXN0aGVhZCB0aGF0IGhhcyBhIGZsdWlkLWhlaWdodCAoYmVjb21pbmcgZml4ZWQgYWZ0ZXIgYSBjZXJ0YWluIHBvaW50KVxuICogICAgd2hpY2ggaGFzIGEgbGFyZ2UgYmFja2dyb3VuZCBpbWFnZSwgYW5kIHNvbWUgc3VwcG9ydGluZyB0ZXh0LlxuICpcbiAqIFRoZSByZWd1bGFyIHBhZ2UtaGVhZCBpcyBpbmNyZWRpYmx5IHNpbXBsZSwgYnV0IHRoZSBtYXN0aGVhZCB2ZXJzaW9uIGhhcyBzb21lXG4gKiBzbGlnaHRseSBpbnRlcm1pbmdsZWQgZGVwZW5kZW5jeSB3aXRoIHRoZSB3cmFwcGVyIHRoYXQgbGl2ZXMgaW5zaWRlIGl0LlxuICovXG5cblxuLyoqXG4gKiAxLiBBIHNsaWdodGx5IHNtYWxsZXIgcGFkZGluZyBvbiBzbWFsbGVyIHZpZXdwb3J0cy5cbiAqIDIuIEdyb3cgdG8gZnVsbC1zaXplZCBwYWRkaW5nIG9uIGxhcmdlIGVub3VnaCB2aWV3cG9ydHMuXG4gKi9cbi5wYWdlLWhlYWQge1xuICAgIHBhZGRpbmctdG9wOiAgICAkc3BhY2luZy11bml0LS1zbWFsbDsgLyogWzFdICovXG4gICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXVuaXQtLXNtYWxsOyAvKiBbMV0gKi9cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBtaW4taGVpZ2h0OiAzMDBweDtcblxuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcC1hbmQtdXApIHtcbiAgICAgICAgcGFkZGluZy10b3A6ICAgICRzcGFjaW5nLXVuaXQ7IC8qIFsyXSAqL1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmctdW5pdDsgLyogWzJdICovXG4gICAgfVxuXG5cbiAgICAmLnRyaWFuZ2xlOmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1wYWdlLWhlYWQtYmFja2dyb3VuZDtcbiAgICB9XG5cbn1cblxuXG5cblxuXG4vKipcbiAqIExhcmdlIHNpdGUgaGVhZGVycyBhY3QgbW9yZSBsaWtlIG1hc3RoZWFkcy4gVGhleSBoYXZlIGEgZmF1eC1mbHVpZC1oZWlnaHRcbiAqIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHdyYXBwaW5nIGVsZW1lbnQgaW5zaWRlIGl0LlxuICpcbiAqIDEuIE1hc3RoZWFkcyB3aWxsIHR5cGljYWxseSBoYXZlIGRhcmsgYmFja2dyb3VuZHMsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlXG4gKiAgICB0aGUgY29udHJhc3QgaXMgb2theS4gVGhpcyB2YWx1ZSBpcyBzdWJqZWN0IHRvIGNoYW5nZSBhcyB0aGUgYmFja2dyb3VuZFxuICogICAgaW1hZ2UgY2hhbmdlcy5cbiAqIDIuIFdlIG5lZWQgdG8gZGVsZWdhdGUgYSBsb3Qgb2YgdGhlIG1hc3RoZWFk4oCZcyBsYXlvdXQgdG8gaXRzIHdyYXBwZXIgZWxlbWVudFxuICogICAgcmF0aGVyIHRoYW4gdGhlIG1hc3RoZWFkIGl0c2VsZjogaXQgaXMgdG8gdGhpcyB3cmFwcGVyIHRoYXQgbW9zdCB0aGluZ3NcbiAqICAgIGFyZSBwb3NpdGlvbmVkLlxuICogMy4gVGhlIHdyYXBwZXIgbmVlZHMgcG9zaXRpb25pbmcgY29udGV4dCBmb3IgdXMgdG8gbGF5IG91ciBuYXYgYW5kIG1hc3RoZWFkXG4gKiAgICB0ZXh0IGluLlxuICogNC4gRmF1eC1mbHVpZC1oZWlnaHQgdGVjaG5pcXVlOiBzaW1wbHkgY3JlYXRlIHRoZSBpbGx1c2lvbiBvZiBmbHVpZCBoZWlnaHQgYnlcbiAqICAgIGNyZWF0aW5nIHNwYWNlIHZpYSBhIHBlcmNlbnRhZ2UgcGFkZGluZywgYW5kIHRoZW4gcG9zaXRpb24gZXZlcnl0aGluZyBvdmVyXG4gKiAgICB0aGUgdG9wIG9mIHRoYXQuIFRoaXMgcGVyY2VudGFnZSBnaXZlcyB1cyBhIDE2OjkgcmF0aW8uXG4gKiA1LiBXaGVuIHRoZSB2aWV3cG9ydCBpcyBhdCA3NThweCB3aWRlLCBvdXIgMTY6OSByYXRpbyBtZWFucyB0aGF0IHRoZSBtYXN0aGVhZFxuICogICAgaXMgY3VycmVudGx5IHJlbmRlcmVkIGF0IDQ4MHB4IGhpZ2guIExldOKAmXPigKZcbiAqIDYuIOKApnNlYW1sZXNzbHkgc25pcCBvZmYgdGhlIGZsdWlkIGZlYXR1cmUgYXQgdGhpcyBoZWlnaHQsIGFuZOKAplxuICogNy4g4oCmZml4IHRoZSBoZWlnaHQgYXQgNDgwcHguIFRoaXMgbWVhbnMgdGhhdCB3ZSBzaG91bGQgc2VlIG5vIGp1bXBzIGluIGhlaWdodFxuICogICAgYXMgdGhlIG1hc3RoZWFkIG1vdmVzIGZyb20gZmx1aWQgdG8gZml4ZWQuIFRoaXMgYWN0dWFsIHZhbHVlIHRha2VzIGludG9cbiAqICAgIGFjY291bnQgdGhlIHBhZGRpbmcgYW5kIHRoZSB0b3AgYm9yZGVyIG9uIHRoZSBoZWFkZXIgaXRzZWxmLlxuICovXG4ucGFnZS1oZWFkLS1tYXN0aGVhZCB7XG4gICAgYmFja2dyb3VuZDogdXJsKC9hc3NldHMvaGVyb19iZy5qcGcpIGNlbnRlciBjZW50ZXIgIzJlMjYyMDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSBsZWZ0O1xuICAgIGNvbG9yOiAkY29sb3ItbWFzdGhlYWQ7IC8qIFsxXSAqL1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgID4gLndyYXBwZXIgeyAvKiBbMl0gKi9cbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBbM10gKi9cbiAgICAgICAgbWluLWhlaWdodDogMzIwcHg7XG4gICAgICAgIGhlaWdodDogNDB2aDsgLyogWzddICovXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDZweDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAgNnB4O1xuICAgICAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiA0MDBweDtcbiAgICAgICAgICAgIGhlaWdodDogNjB2aDsgLyogWzddICovXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgfVxuXG4gICAgJjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcblxuICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUEvUGdvOGMzWm5JSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SWdkMmxrZEdnOUlqRXdNQ1VpSUdobGFXZG9kRDBpTVRBd0pTSWdkbWxsZDBKdmVEMGlNQ0F3SURFZ01TSWdjSEpsYzJWeWRtVkJjM0JsWTNSU1lYUnBiejBpYm05dVpTSStDaUFnUEd4cGJtVmhja2R5WVdScFpXNTBJR2xrUFNKbmNtRmtMWFZqWjJjdFoyVnVaWEpoZEdWa0lpQm5jbUZrYVdWdWRGVnVhWFJ6UFNKMWMyVnlVM0JoWTJWUGJsVnpaU0lnZURFOUlqQWxJaUI1TVQwaU1DVWlJSGd5UFNJd0pTSWdlVEk5SWpFd01DVWlQZ29nSUNBZ1BITjBiM0FnYjJabWMyVjBQU0l3SlNJZ2MzUnZjQzFqYjJ4dmNqMGlJekF3TURBd01DSWdjM1J2Y0MxdmNHRmphWFI1UFNJd0xqVWlMejRLSUNBZ0lEeHpkRzl3SUc5bVpuTmxkRDBpTXpBbElpQnpkRzl3TFdOdmJHOXlQU0lqTURBd01EQXdJaUJ6ZEc5d0xXOXdZV05wZEhrOUlqQWlMejRLSUNBZ0lEeHpkRzl3SUc5bVpuTmxkRDBpTVRBd0pTSWdjM1J2Y0MxamIyeHZjajBpSXpBd01EQXdNQ0lnYzNSdmNDMXZjR0ZqYVhSNVBTSXdJaTgrQ2lBZ1BDOXNhVzVsWVhKSGNtRmthV1Z1ZEQ0S0lDQThjbVZqZENCNFBTSXdJaUI1UFNJd0lpQjNhV1IwYUQwaU1TSWdhR1ZwWjJoMFBTSXhJaUJtYVd4c1BTSjFjbXdvSTJkeVlXUXRkV05uWnkxblpXNWxjbUYwWldRcElpQXZQZ284TDNOMlp6ND0pO1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsMCwwLC41KSAwJSwgcmdiYSgwLDAsMCwwLjEpIDEwMCUpO1xuICAgICAgICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCggc3RhcnRDb2xvcnN0cj0nIzgwMDAwMDAwJywgZW5kQ29sb3JzdHI9JyMwMDAwMDAwMCcsR3JhZGllbnRUeXBlPTAgKTtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBNYXN0aGVhZHMgd2lsbCBoYXZlIHNvbWUgbGFyZ2UgdGV4dCBpbiB0aGVtLiBMZXTigJlzIHBvc2l0aW9uIHRoYXQgYm90dG9tLWxlZnQuXG4gKi9cbi5wYWdlLWhlYWRfX3RleHQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IGF1dG87XG4gICAgY29sb3I6ICRjb2xvci1tYXN0aGVhZDtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoMjRweCk7XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSg0OHB4KTtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShkZXNrKSB7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSg3MnB4KTtcbiAgICB9XG5cbn1cblxuQGtleWZyYW1lcyBmYWRlRW50cmFuY2VFeGl0IHtcbiAgMCUge29wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtODBweCk7fVxuICAzMCUge29wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTt9XG4gIDgwJSB7b3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO31cbiAgMTAwJSB7b3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDgwcHgpO31cbn1cblxuLnBhZ2UtaGVhZF9fY29weSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNDAlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IC0xMnB4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoMjJweCk7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0ZXh0LXNoYWRvdzogMXB4IDJweCA0cHggcmdiYShibGFjaywgLjgpO1xuXG4gICAgYW5pbWF0aW9uLW5hbWU6IGZhZGVFbnRyYW5jZUV4aXQ7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiA0cztcbiAgICBhbmltYXRpb24tZGVsYXk6IDFzO1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgzNnB4KTtcbiAgICB9XG5cbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI0hFUk9cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5oZXJve1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuICAgIC5oZXJvX19ib2R5IHtcblxuICAgIH1cblxuICAgIC5oZXJvX19pbWctd3JhcHBlciB7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIH1cblxuICAgIC5oZXJvX19pbWcge1xuICAgICAgICBtYXJnaW46IHF1YWRydXBsZSgkc3BhY2luZy11bml0KSBhdXRvIGRvdWJsZSgkc3BhY2luZy11bml0KTtcbiAgICAgICAgcGFkZGluZzogMCAkc3BhY2luZy11bml0O1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcblxuICAgICAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgICAgICBtYXJnaW46IDAgMCAkc3BhY2luZy11bml0IDA7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuaGVyb19faGVhZGluZyB7XG4gICAgICAgIEBpbmNsdWRlIHZ3KDQ4cHgsIDEuMiwgNzIwcHgpO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiBkb3VibGUoJHNwYWNpbmctdW5pdCk7XG4gICAgfVxuXG4gICAgLmhlcm9fX2NvcHkge1xuICAgICAgICBAaW5jbHVkZSBmb250LXNpemUoMThweCwgMS41KTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogZG91YmxlKCRzcGFjaW5nLXVuaXQpO1xuICAgICAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShkZXNrKSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb250LXNpemUoMjJweCwgMS41KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5oZXJvX19jdGEge1xuXG4gICAgfVxuXG4gICAgLmhlcm9fX2xvZ28ge1xuICAgICAgICBtYXgtd2lkdGg6IDE4MHB4O1xuICAgICAgICB3aWR0aDogNDB2dztcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IGhhbHZlKCRzcGFjaW5nLXVuaXQpO1xuICAgICAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgICAgICB3aWR0aDogMTgwcHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy11bml0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmhlcm9fX2VtYmxlbXMge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcC1hbmQtdXApIHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmhlcm9fX2VtYmxlbSB7XG4gICAgICAgIGhlaWdodDogNTJweDtcbiAgICAgICAgbWFyZ2luOiAwICRzcGFjaW5nLXVuaXQgZG91YmxlKCRzcGFjaW5nLXVuaXQpO1xuICAgICAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogJHNwYWNpbmctdW5pdDtcbiAgICAgICAgICAgIGhlaWdodDogNTJweDtcbiAgICAgICAgfVxuICAgIH0iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNCQU5EU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLmJhbmQge1xuICAgIHBhZGRpbmctdG9wOiAgICAkc3BhY2luZy11bml0O1xuICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy11bml0O1xuICAgIG1hcmdpbi10b3A6IC0ycHg7XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShkZXNrKSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAgICAkc3BhY2luZy11bml0LS1sYXJnZTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nLXVuaXQtLWxhcmdlO1xuICAgIH1cblxufVxuXG4uYmFuZC0tbGFyZ2Uge1xuICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZy11bml0LS1sYXJnZTtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmctdW5pdC0tbGFyZ2U7XG59XG5cbi5iYW5kLS1oaWdobGlnaHQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1iYW5kLWhpZ2hsaWdodC1iYWNrZ3JvdW5kO1xufVxuXG4uYmFuZC0tdGludCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWJhbmQtdGludC1iYWNrZ3JvdW5kO1xufVxuXG4uYmFuZC0tZGFyayB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWJhbmQtZGFyay1iYWNrZ3JvdW5kO1xuICAgIGNvbG9yOiAkY29sb3ItYmFuZC1kYXJrO1xufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjUEFHRS1GT09UXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4ucGFnZS1mb290IHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoMTJweCk7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShkZXNrKSB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZy11bml0O1xuICAgIH1cblxufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjUEFHRS1NSUNST1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLnBhZ2UtbWljcm8ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1wYWdlLW1pY3JvLWJhY2tncm91bmQ7XG4gICAgXG4gICAgJixcbiAgICBhIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1wYWdlLW1pY3JvO1xuICAgIH1cblxufVxuXG4gICAgLnBhZ2UtbWljcm9fX2NvcHkge1xuICAgICAgICBAaW5jbHVkZSBmb250LXNpemUoMTJweCk7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI1NJVEUtTkFWXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vLyBJbnRlcm5hbCB2YXJpYWJsZXMuXG4kbG9nby1oZWlnaHQ6ICAgMzJweDtcblxuLnNpdGUtbmF2IHtcbiAgICBAZXh0ZW5kICVjbGVhcmZpeDtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoMTRweCk7XG4gICAgQGluY2x1ZGUgZm9udC13ZWlnaHQoYm9sZCk7XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgxNnB4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgc2l0ZSBuYXYgZXhpc3RzIGluIGEgbWFzdGhlYWQsIHdlIGFic29sdXRlbHkgcG9zaXRpb24gaXQuIFdlIGhhdmVcbiAgICAgKiB0byBkbyB0aGlzIGJlY2F1c2UgdGhlIG1hc3RoZWFkIGhhcyBhIGZpeGVkIGhlaWdodCwgcGFydGlhbGx5IGdvdmVybmVkIGJ5XG4gICAgICogYSBmYXV4LWZsdWlkLWhlaWdodCB0ZWNobmlxdWUgd2hpY2ggdXRpbGlzZXMgYSB6ZXJvZWQgYGhlaWdodGAgYW5kIGFcbiAgICAgKiBsYXJnZSBgcGFkZGluZy10b3BgIHZhbHVlLCBlcmdvLCB3ZSAqaGF2ZSogdG8gdGFrZSB0aGUgbmF2IG91dCBvZiBmbG93LlxuICAgICAqL1xuICAgIC5wYWdlLWhlYWQtLW1hc3RoZWFkICYge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogICAwO1xuICAgICAgICByaWdodDogNnB4O1xuICAgICAgICBsZWZ0OiAgNnB4O1xuXG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcC1hbmQtdXApIHtcbiAgICAgICAgICAgIHRvcDogICAwO1xuICAgICAgICAgICAgcmlnaHQ6ICRzcGFjaW5nLXVuaXQ7XG4gICAgICAgICAgICBsZWZ0OiAgJHNwYWNpbmctdW5pdDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG5cbiAgICAuc2l0ZS1uYXZfX2hvbWUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgfVxuXG4gICAgICAgIC5zaXRlLW5hdl9fbG9nbyB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkocGFsbSkge1xuICAgICAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICAgICAuc2l0ZS1uYXZfX2xvZ28tZmlsbCB7XG4gICAgICAgICAgICAgICAgZmlsbDogJGNvbG9yLWJyYW5kO1xuXG4gICAgICAgICAgICAgICAgLnBhZ2UtaGVhZC0tbWFzdGhlYWQgJiB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICRjb2xvci1wYWdlLWhlYWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBzbWFsbGVyIHZpZXdwb3J0cywgdGhlIG5hdiBpcyBhIDJ4MiBncmlkIG9mIGxpbmtzIHRoYXQgbGllcyBwZXJmZWN0bHlcbiAgICAgKiBmbHVjaCB3aXRoIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgaG9tZSBsaW5rLiBPbiBsYXJnZXIgdmlld3BvcnRzLCB0aGVcbiAgICAgKiBuYXYgYmVjb21lcyBhIHNpbmdsZSByb3cgb2YgbGlua3MgdmVydGljYWxseSBjZW50cmVkIHRvIHRoZSBsb2dvLCBidXRcbiAgICAgKiB3YXkgb3ZlciB0byB0aGUgcmlnaHQuXG4gICAgICovXG4gICAgLnNpdGUtbmF2X19saXN0IHtcbiAgICAgICAgbWFyZ2luOiAgMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgICAgIC5zaXRlLW5hdl9faXRlbSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgICAgICAgfVxuXG4gICAgICAgICAgICAuc2l0ZS1uYXZfX2xpbmsge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMTBweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itc2l0ZS1uYXY7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogJGxvZ28taGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgYXR0ZW50aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkY29sb3ItbGlua3M7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkobGFwLWFuZC11cCkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5wYWdlLWhlYWQtLW1hc3RoZWFkICYge1xuXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGF0dGVudGlvbihzZWxmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJGNvbG9yLW1hc3RoZWFkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYXR0ZW50aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIGN1cnJlbnQgc3RhdGUgZm9yIHRoZSBuYXYgKGluIGxhcmdlLXNjcmVlbiB2aWV3KSBpcyBhIG5vdGNoZWRcbiAgICAgICAgICAgICAqIG91dCB0cmlhbmdsZSBseWluZyB0b3dhcmQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBoZWFkLiBXZSBhcHBseVxuICAgICAgICAgICAgICogdGhpcyBzdHlsaW5nIHRvIGEgc2lsZW50IGNsYXNzIHdoaWNoIHdlIHRoZW4gZXh0ZW5kIG91dCBvZiB0aGVcbiAgICAgICAgICAgICAqIGxvb3AgYmVsb3cuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICVzaXRlLW5hdl9fY3VycmVudCB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRjb2xvci1saW5rcztcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcC1hbmQtdXApIHtcblxuICAgICAgICAgICAgICAgICAgICAkbm90Y2gtc2l6ZTogaGFsdmUoJHNwYWNpbmctdW5pdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICY6YmVmb3JlLFxuICAgICAgICAgICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAkbm90Y2gtc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmMmYyZjI7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLSRub3RjaC1zaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAtJHNwYWNpbmctdW5pdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAkbm90Y2gtc2l6ZSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkaW51aXQtYmFzZS1iYWNrZ3JvdW5kLWNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0oJG5vdGNoLXNpemUgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbTogLSgkc3BhY2luZy11bml0ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAZWFjaCAkcGFnZSBpbiBhYm91dCwgc3BlYWtpbmcsIGNhc2Utc3R1ZGllcywgaGlyZS1tZSB7XG5cbiAgICAgICAgICAgICAgICAucGFnZS0tI3skcGFnZX0gLnNpdGUtbmF2X18jeyRwYWdlfSB7XG4gICAgICAgICAgICAgICAgICAgIEBleHRlbmQgJXNpdGUtbmF2X19jdXJyZW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjQlVUVE9OU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLmJ0biB7XG4gICAgQGluY2x1ZGUgdmVuZG9yKHRyYW5zaXRpb24sIDAuMnMpO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cbiAgICBAaW5jbHVkZSBhdHRlbnRpb24oKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkY29sb3ItYnRuLCAxMCUpO1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNvbG9yLWJ0biwgMTAlKTtcbiAgICB9XG5cbn1cblxuLmJ0bi0tc2Vjb25kYXJ5IHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGNvbG9yOiAkY29sb3ItYnRuO1xuXG4gICAgQGluY2x1ZGUgYXR0ZW50aW9uKCkge1xuICAgICAgICAvLyBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICAvLyBjb2xvcjogZGFya2VuKCRjb2xvci1idG4sIDEwJSk7XG4gICAgfVxuXG59XG5cbi5idG4tLXBvc2l0aXZlIHtcbiAgICBAaW5jbHVkZSBmb250LXdlaWdodChyZWd1bGFyKTtcblxuICAgIEBpbmNsdWRlIGF0dGVudGlvbihzZWxmKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1wb3NpdGl2ZTtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLXBvc2l0aXZlO1xuICAgIH1cblxufVxuXG4vLy5idG4tLW5lZ2F0aXZlIHtcbi8vICAgIEBpbmNsdWRlIGZvbnQtd2VpZ2h0KHJlZ3VsYXIpO1xuLy9cbi8vICAgIEBpbmNsdWRlIGF0dGVudGlvbihzZWxmKSB7XG4vLyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLW5lZ2F0aXZlO1xuLy8gICAgICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1uZWdhdGl2ZTtcbi8vICAgIH1cbi8vXG4vL31cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI0JPWEVTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4uYm94IHtcbiAgICBib3JkZXItcmFkaXVzOiAkYmFzZS1yb3VuZFxufVxuXG4uYm94LS1oaWdobGlnaHQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1ib3gtaGlnaGxpZ2h0LWJhY2tncm91bmQ7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjb2xvci1ib3gtaGlnaGxpZ2h0LWJvcmRlcjtcbn1cblxuLmJveC0tdGludCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWJveC10aW50LWJhY2tncm91bmQ7XG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNQT1NUXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4ucG9zdCB7XG59XG5cbiAgICAucG9zdF9fZGF0ZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb2xvcjogJGNvbG9yLWdyYXktbGlnaHQ7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuXG4gICAgLnBvc3RfX3RpdGxlIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcblxuICAgICAgICA+IGEge1xuICAgICAgICAgICAgQGluY2x1ZGUgZm9udC13ZWlnaHQocmVndWxhcik7XG4gICAgICAgIH1cblxuICAgIH1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI1BVTEwtUVVPVEVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5wdWxsLXF1b3RlIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoMjBweCk7XG4gICAgY29sb3I6ICRjb2xvci1xdW90ZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNSAqICRzcGFjaW5nLXVuaXQ7XG4gICAgYm9yZGVyLWxlZnQ6IDAuNSAqICRzcGFjaW5nLXVuaXQgc29saWQgJGNvbG9yLXRpbnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAgMDtcblxuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcC1hbmQtdXApIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0kc3BhY2luZy11bml0O1xuICAgIH1cblxufVxuXG4gICAgLnB1bGwtcXVvdGVfX3NvdXJjZSB7XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICB9XG5cbi8qKlxuICogQmFubmVyLXN0eWxlIHF1b3RlcywgdXNlZCBwcmltYXJpbHkgaW4gdGhlIGhvbWVwYWdlIGNhcm91c2VsLiBVbmZvcnR1bmF0ZWx5XG4gKiB3ZSBuZWVkIHRvIHVuZG8gYSBmZXcgdGhpbmdzIHRoYXQgd2XigJlkIGFscmVhZHkgc2V0IHByZXZpb3VzbHkuXG4gKi9cbi5wdWxsLXF1b3RlLS1iYW5uZXIge1xuICAgIG1heC13aWR0aDogMjZlbTtcbiAgICBwYWRkaW5nOiAwICRzcGFjaW5nLXVuaXQtLXNtYWxsO1xuICAgIHRleHQtaW5kZW50OiAwO1xuICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGNvbG9yOiAkY29sb3ItcXVvdGUtLWJhbm5lcjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgzMnB4LCBmYWxzZSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgfVxuXG59XG5cbi8qKlxuICogUHVsbCBxdW90ZXMgdGhhdCBzaXQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZWlyIHN1cnJvdW5kaW5nIGNvcHkuXG4gKi9cbi5wdWxsLXF1b3RlLS1jb250ZXh0IHtcblxuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcC1hbmQtdXApIHtcbiAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIG1hcmdpbi1yaWdodDogJHNwYWNpbmctdW5pdDtcbiAgICB9XG5cbn1cblxuLnB1bGwtcXVvdGUtLWNvbnRleHQtYWx0IHtcblxuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcC1hbmQtdXApIHtcbiAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICBtYXJnaW4tbGVmdDogJHNwYWNpbmctdW5pdDtcbiAgICB9XG5cbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI0NBUk9VU0VMXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmNhcm91c2VsIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuICAgIC5jYXJvdXNlbF9fcGFuZXMge1xuICAgICAgICBtYXJnaW46ICAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgICAgICB3aWR0aDogNTAwJTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgQGluY2x1ZGUgdmVuZG9yKGZpbHRlciwgYmx1cigwKSk7XG5cbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGNhcm91c2VsIDQ1cyBhbHRlcm5hdGUgaW5maW5pdGU7XG4gICAgICAgICAgIC1tb3otYW5pbWF0aW9uOiBjYXJvdXNlbCA0NXMgYWx0ZXJuYXRlIGluZmluaXRlO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogY2Fyb3VzZWwgNDVzIGFsdGVybmF0ZSBpbmZpbml0ZTtcbiAgICB9XG5cbiAgICAuY2Fyb3VzZWxfX3BhbmVzOmhvdmVyIHtcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tcGxheS1zdGF0ZTogcGF1c2VkO1xuICAgICAgICAgICAtbW96LWFuaW1hdGlvbi1wbGF5LXN0YXRlOiBwYXVzZWQ7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLXBsYXktc3RhdGU6IHBhdXNlZDtcbiAgICB9XG4gICAgICAgIFxuICAgICAgICAuY2Fyb3VzZWxfX3BhbmUge1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICB3aWR0aDogMjAlOyAvKiAxMDAgLyBudW1iZXIgb2YgcGFuZXMgKi9cbiAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2Fyb3VzZWxfX2xpbmsge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkY29sb3ItbGlua3MtY2Fyb3VzZWw7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9udC13ZWlnaHQocmVndWxhcik7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgdmVuZG9yKHRyYW5zaXRpb24sIDAuMnMgYm9yZGVyLWNvbG9yKTtcblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGF0dGVudGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBkYXJrZW4oJGNvbG9yLWxpbmtzLWNhcm91c2VsLCAxMCUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG5cblxuXG5cbi8qKlxuICogU2Nyb2xsIHRoZSBjYXJvdXNlbCAoYWxsIGhhcmQtY29kZWQ7IHl1ayEpIGFuZCBhcHBseSBhIHN1YnRsZSBibHVyIHRvIGltcGx5XG4gKiBtb3Rpb24vc3BlZWQuIEVxdWF0aW9uIGZvciB0aGUgY2Fyb3VzZWzigJlzIHRyYW5zaXRpb25pbmcgYW5kIGRlbGF5ZWQgcG9pbnRzIGluXG4gKiBvcmRlciB0byBjb21wbGV0ZSBhbiBlbnRpcmUgYW5pbWF0aW9uIChpLmUuIDEwMCUpOlxuICpcbiAqIG54ICsgKG4tMSl5ID0gMTAwXG4gKlxuICogd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIHNsaWRlcywgeCBpcyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgYW5pbWF0aW9uIHNwZW50XG4gKiBzdGF0aWMsIGFuZCB5IGlzIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBhbmltYXRpb24gc3BlbnQgYW5pbWF0aW5nLlxuICpcbiAqIFRoaXMgY2Fyb3VzZWwgaGFzIGZpdmUgcGFuZXMsIHNvOlxuICpcbiAqIDV4ICsgKDUtMSl5ID0gMTAwXG4gKlxuICogVG8gd29yayBvdXQgeSBpZiB3ZSBrbm93IG4gYW5kIGRlY2lkZSBvbiBhIHZhbHVlIGZvciB4OlxuICpcbiAqICgxMDAgLSAobiAqIHgpKSAvIG4tMSA9IHlcbiAqXG4gKiBJZiB3ZSBjaG9vc2UgdGhhdCB4IGVxdWFscyAxNy41IChpLmUuIGEgZnJhbWUgc3BlbmRzIDE3LjUlIG9mIHRoZSBhbmltYXRpb27igJlzXG4gKiB0b3RhbCB0aW1lICpub3QqIGFuaW1hdGluZyksIGFuZCB3ZSBrbm93IHRoYXQgbiBlcXVhbHMgNSwgdGhlbiB5ID0gMy4xMjU6XG4gKlxuICogKDEwMCAtICg1ICogMTcuNSkpIC8gNCA9IDMuMTI1XG4gKlxuICogU3RhdGljIGZvciAxNy41JSwgdHJhbnNpdGlvbiBmb3IgMy4xMjUlLCBhbmQgc28gb24sIHVudGlsIHdlIGhpdCAxMDAlLlxuICpcbiAqIElmIHdlIHdlcmUgdG8gY2hvb3NlIHRoYXQgeCBlcXVhbHMgMTUsIHRoZW4gd2Ugd291bGQgZmluZCB0aGF0IHkgZXF1YWxzIDYuMjU6XG4gKlxuICogKDEwMCAtICg1ICogMTUpKSAvIDQgPSA2LjI1XG4gKlxuICogSWYgeSBjb21lcyBvdXQgYXMgemVyby1vci1iZWxvdywgaXQgbWVhbnMgdGhlIG51bWJlciB3ZSBjaG9zZSBmb3IgeCB3YXMgdG9vXG4gKiBsYXJnZTogcGljayBhZ2Fpbi5cbiAqXG4gKiBOLkIuIFdlIGFsc28gaW5jbHVkZSBhIGhhbGZ3YXkgcG9pbnQgaW4gdGhlIG1pZGRsZSBvZiBvdXIgdHJhbnNpdGlvbmluZ1xuICogICAgICBmcmFtZXMgdG8gd2hpY2ggd2UgYXBwbHkgYSBzdWJ0bGUgYmx1ci4gVGhpcyBudW1iZXIgaXMgZGVyaXZlZCBmcm9tOlxuICpcbiAqICAgICAgKGEgKiB4KSArIChhLTEgKiB5KSArICh5IC8gMilcbiAqXG4gKiAgICAgIHdoZXJlIGEgaXMgdGhlIGZyYW1lIGluIHF1ZXN0aW9uIChvdXQgb2YgbiBmcmFtZXMpLlxuICpcbiAqICAgICAgVGhlIGhhbGZ3YXkgcG9pbnQgYmV0d2VlbiBmcmFtZXMgMyBhbmQgNCBpczpcbiAqXG4gKiAgICAgICgzICogMTcuNSkgKyAoMiAqIDMuMTI1KSArICgzLjEyNSAvIDIpID0gNjAuMzEyNVxuICpcbiAqIEnigJltIHByZXR0eSBzdXJlIHRoaXMgaXMgYWxsIGEgbWVzcy4gVG8gYW55IGtpbmQgcGVyc29uIHJlYWRpbmcgdGhpcyB3aG8gd291bGRcbiAqIGJlIGFibGUgdG8gaW1wcm92ZSBpdCwgSSB3b3VsZCBiZSB2ZXJ5IGdyYXRlZnVsIGlmIHlvdSB3b3VsZCBhZHZpc2UgOilcbiAqL1xuQC13ZWJraXQta2V5ZnJhbWVzIGNhcm91c2Vse1xuICAgIDAlLFxuICAgIDE3LjUlICAgICAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCAgIDAgLCAwLCAwKTsgLXdlYmtpdC1maWx0ZXI6IGJsdXIoMCAgKTsgfVxuICAgIDIwLjYyNSUsXG4gICAgMzguMTI1JSAgICAgeyAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoIC0yMCUsIDAsIDApOyAtd2Via2l0LWZpbHRlcjogYmx1cigwICApOyB9XG4gICAgNDEuMjUlLFxuICAgIDU4Ljc1JSAgICAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCAtNDAlLCAwLCAwKTsgLXdlYmtpdC1maWx0ZXI6IGJsdXIoMCAgKTsgfVxuICAgIDYxLjg3NSUsXG4gICAgNzkuMzc1JSAgICAgeyAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoIC02MCUsIDAsIDApOyAtd2Via2l0LWZpbHRlcjogYmx1cigwICApOyB9XG4gICAgODIuNSUsXG4gICAgMTAwJSAgICAgICAgeyAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoIC04MCUsIDAsIDApOyAtd2Via2l0LWZpbHRlcjogYmx1cigwICApOyB9XG4gICAgMTkuMDYyNSUsXG4gICAgMzkuNjg3NSUsXG4gICAgNjAuMzEyNSUsXG4gICAgODAuOTM3NSUgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtd2Via2l0LWZpbHRlcjogYmx1cigycHgpOyB9XG59XG5cbkAtbW96LWtleWZyYW1lcyBjYXJvdXNlbHtcbiAgICAwJSxcbiAgICAxNy41JSAgICAgICB7ICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCggICAwICwgMCwgMCk7ICAgIC1tb3otZmlsdGVyOiBibHVyKDAgICk7IH1cbiAgICAyMC42MjUlLFxuICAgIDM4LjEyNSUgICAgIHsgICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCAtMjAlLCAwLCAwKTsgICAgLW1vei1maWx0ZXI6IGJsdXIoMCAgKTsgfVxuICAgIDQxLjI1JSxcbiAgICA1OC43NSUgICAgICB7ICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCggLTQwJSwgMCwgMCk7ICAgIC1tb3otZmlsdGVyOiBibHVyKDAgICk7IH1cbiAgICA2MS44NzUlLFxuICAgIDc5LjM3NSUgICAgIHsgICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCAtNjAlLCAwLCAwKTsgICAgLW1vei1maWx0ZXI6IGJsdXIoMCAgKTsgfVxuICAgIDgyLjUlLFxuICAgIDEwMCUgICAgICAgIHsgICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCAtODAlLCAwLCAwKTsgICAgLW1vei1maWx0ZXI6IGJsdXIoMCAgKTsgfVxuICAgIDE5LjA2MjUlLFxuICAgIDM5LjY4NzUlLFxuICAgIDYwLjMxMjUlLFxuICAgIDgwLjkzNzUlICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1vei1maWx0ZXI6IGJsdXIoMnB4KTsgfVxufVxuXG5Aa2V5ZnJhbWVzIGNhcm91c2Vse1xuICAgIDAlLFxuICAgIDE3LjUlICAgICAgIHsgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCAgIDAgLCAwLCAwKTsgICAgICAgICBmaWx0ZXI6IGJsdXIoMCAgKTsgfVxuICAgIDIwLjYyNSUsXG4gICAgMzguMTI1JSAgICAgeyAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoIC0yMCUsIDAsIDApOyAgICAgICAgIGZpbHRlcjogYmx1cigwICApOyB9XG4gICAgNDEuMjUlLFxuICAgIDU4Ljc1JSAgICAgIHsgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCAtNDAlLCAwLCAwKTsgICAgICAgICBmaWx0ZXI6IGJsdXIoMCAgKTsgfVxuICAgIDYxLjg3NSUsXG4gICAgNzkuMzc1JSAgICAgeyAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoIC02MCUsIDAsIDApOyAgICAgICAgIGZpbHRlcjogYmx1cigwICApOyB9XG4gICAgODIuNSUsXG4gICAgMTAwJSAgICAgICAgeyAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoIC04MCUsIDAsIDApOyAgICAgICAgIGZpbHRlcjogYmx1cigwICApOyB9XG4gICAgMTkuMDYyNSUsXG4gICAgMzkuNjg3NSUsXG4gICAgNjAuMzEyNSUsXG4gICAgODAuOTM3NSUgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogYmx1cigycHgpOyB9XG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNJQ09OSUNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5pY29uaWMge1xuICAgIHdpZHRoOiAgNjRweDtcbiAgICBoZWlnaHQ6IDY0cHg7XG5cbiAgICBwYXRoIHtcbiAgICAgICAgZmlsbDogJGNvbG9yLWljb25pYztcbiAgICB9XG5cbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI1NQUklURVNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogQSBzaW1wbGUgc3ByaXRpbmcgZWxlbWVudCBhYnN0cmFjdGlvbi5cbiAqXG4gKiAxLiBUaGUgZGVmYXVsdCB3aWR0aCBvZiBtb3N0IGljb25zIG9uIHRoZSB3ZWIuIE92ZXJyaWRlIGFzIG5lY2Vzc2FyeS5cbiAqIDIuIEFsaWduIGFsbCBzcHJpdGVzIHRvIHRoZSBtaWRkbGVzIG9mIHdoYXRldmVyIGNvbnRlbnQgdGhleSBhcmUgYWxvbmdzaWRlLlxuICogMy4gQWx0aG91Z2ggd2UgaGF2ZSB1c2VkIGB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2AsIHdlIG9mdGVuIG5lZWQgdG8gbnVkZ2VcbiAqICAgIHNwcml0ZXMgdXAgYnkgYSBwaXhlbCB0byBoYXZlIHRoZW0gbG9vayBjb3JyZWN0IG9wdGljYWxseS5cbiAqIDQuIEhpZGUgYW55IHRleHQgdGhhdCB3ZSBtaWdodCBiZSBpbWFnZS1yZXBsYWNpbmcuXG4gKi9cbi5zcHJpdGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogIDE2cHg7IC8qIFsxXSAqL1xuICAgIGhlaWdodDogMTZweDsgLyogWzFdICovXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgLyogWzJdICovXG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBbM10gKi9cbiAgICB0b3A6IC0xcHg7IC8qIFszXSAqL1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IC8qIFs0XSAqL1xuICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIFs0XSAqL1xuICAgIHRleHQtaW5kZW50OiAxMDAlOyAvKiBbNF0gKi9cbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL2Nzcy9zcHJpdGVzL21haW4ucG5nKTtcbn1cblxuLnNwcml0ZS0tdWsge1xuICAgIGhlaWdodDogMTFweDtcbn1cblxuLnNwcml0ZS0tbmwge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDA7XG4gICAgaGVpZ2h0OiAxMXB4O1xufVxuXG4uc3ByaXRlLS1kZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggMDtcbiAgICBoZWlnaHQ6IDExcHg7XG59XG5cbi5zcHJpdGUtLWhyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAwO1xuICAgIGhlaWdodDogMTFweDtcbn1cblxuLnNwcml0ZS0tbm8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTExcHg7XG4gICAgaGVpZ2h0OiAxMXB4O1xufVxuXG4uc3ByaXRlLS1wbCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTExcHg7XG4gICAgaGVpZ2h0OiAxMXB4O1xufVxuXG4uc3ByaXRlLS1ybyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTExcHg7XG4gICAgaGVpZ2h0OiAxMXB4O1xufVxuXG4uc3ByaXRlLS1jaCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTExcHg7XG4gICAgaGVpZ2h0OiAxMXB4O1xufVxuXG4uc3ByaXRlLS1mciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggMDtcbiAgICBoZWlnaHQ6IDExcHg7XG59XG5cbi5zcHJpdGUtLXJzIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTFweDtcbiAgICBoZWlnaHQ6IDExcHg7XG59XG5cbi5zcHJpdGUtLWF1IHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAwO1xuICAgIGhlaWdodDogMTFweDtcbn1cblxuLnNwcml0ZS0taXQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMXB4O1xuICAgIGhlaWdodDogMTFweDtcbn1cblxuLnNwcml0ZS0tZmkge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IDA7XG4gICAgaGVpZ2h0OiAxMXB4O1xufVxuXG4uc3ByaXRlLS11eSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTExcHg7XG4gICAgaGVpZ2h0OiAxMXB4O1xufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjRkVBVFVSRS1MSVNUXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4uZmVhdHVyZS1saXN0e1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDA7XG59XG5cbiAgICAuZmVhdHVyZS1saXN0X19pdGVte1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMDBweDtcbiAgICAgICAgXG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcC1hbmQtdXApIHtcbiAgICAgICAgICAgIHdpZHRoOiA1MCU7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIC41ZW07XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGRlc2spIHtcbiAgICAgICAgICAgIHdpZHRoOiAzMy4zMzMzMzMlO1xuICAgICAgICAgICAgcGFkZGluZzogMCAuNWVtO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAmOmhvdmVye1xuICAgICAgICAgICAgLmZlYXR1cmUtbGlzdF9faW1ne1xuICAgICAgICAgICAgICAgIC8vdHJhbnNmb3JtOiBzY2FsZVgoMS4wNSkgc2NhbGVZKDEuMDUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmZlYXR1cmUtbGlzdF9faW1ne1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHdpZHRoOiA4MHB4O1xuICAgICAgICBoZWlnaHQ6IDgwcHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDtcbiAgICAgICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkobGFwLWFuZC11cCkge1xuICAgICAgICAgICAgd2lkdGg6IDE2MHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAxNjBweDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDJlbTtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkoZGVzaykge1xuICAgICAgICAgICAgXG4gICAgICAgIH1cbiAgICB9XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNGRUFUVVJFLUxJU1RcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogVGhlIGZlYXR1cmUgbGlzdCBjb21wb25lbnQgaG91c2VzIGxhcmdlLCBzaG93Y2FzZS1zdHlsZSBibG9ja3Mgb2YgY29udGVudC4gSXRcbiAqIGlzIGN1cnJlbnRseSB1c2VkIG9uIHRoZSBDYXNlIFN0dWRpZXMgcGFnZS5cbiAqL1xuXG4uZ2FsbGVyeS1saXN0IHtcbiAgICBAZXh0ZW5kICVjbGVhcmZpeDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiA0ZW07XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShkZXNrKSB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIG1hcmdpbi10b3A6IDllbTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0zJTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMyU7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDVkZWcpO1xuICAgIH1cbiAgICBcbiAgICBcbn1cblxuICAgIC5nYWxsZXJ5LWxpc3RfX2l0ZW0ge1xuICAgIFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgICAgIGhlaWdodDogMjgwcHg7XG4gICAgICAgIFxuICAgICAgICAmOmJlZm9yZSwgJjphZnRlciB7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDBweDtcbiAgICAgICAgICAgIHdpZHRoOiA0MDAwcHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDVkZWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAxMDAlO1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICB0b3A6IC0yMjBweDtcbiAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMjAwMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDEwMCU7XG4gICAgICAgICAgICBib3R0b206IDEzMHB4O1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogLTIwMDBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGRlc2spIHtcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICAgICAgd2lkdGg6IDMzLjMzMzMzMzMzMyU7IC8qIFsxXSAqL1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpO1xuICAgICAgICAgICAgaGVpZ2h0OiAzNjBweDtcbiAgICAgICAgXG4gICAgICAgICAgICAmOmJlZm9yZSwgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJjpudGgtY2hpbGQoM24gKyAxKTpudGgtbGFzdC1jaGlsZCgyKSB7XG4gICAgICAgICAgICAgICAgJiwgJiArIGxpIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6bnRoLWNoaWxkKDNuKzEpOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogMS4gRmF1eCBmbHVpZCBoZWlnaHQgaW4gMTY6OSByYXRpby5cbiAgICAgICAgICogMi4gU3BhY2UgaXRlbXMgYXBhcnQgYnkgdHdvIHBpeGVsc+KAplxuICAgICAgICAgKiAzLiDigKZleGNlcHQgdGhlIGZpcnN0IHJvdyBhbmQgZmlyc3QgY29sdW1uLlxuICAgICAgICAgKi9cbiAgICAgICAgLmdhbGxlcnktbGlzdF9fbGluayB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgYm90dG9tOiAwO1xuXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItbGlua3M7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICY6aG92ZXJ7XG4gICAgICAgICAgICAgICAgLmdhbGxlcnktbGlzdF9fdGl0bGUge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMS4wNSwxLjA1LDEpIHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShkZXNrKSB7XG4gICAgICAgICAgICAgICAgdG9wOiAtMjAlO1xuICAgICAgICAgICAgICAgIGJvdHRvbTogLTIwJTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgICAgIC5nYWxsZXJ5LWxpc3RfX3N0YXRlIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgICY6Y2hlY2tlZCB7XG4gICAgICAgICAgICAgICAgICAgICYgKyAuZ2FsbGVyeS1saXN0X19yZXZlYWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAmIH4gLmdhbGxlcnktbGlzdF9fdGl0bGUge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMS4wNSwxLjA1LDEpIHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5nYWxsZXJ5LWxpc3RfX2Nsb3NlIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAgICAgICAgICAgJjpjaGVja2VkIHtcbiAgICAgICAgICAgICAgICAgICAgKyAuZ2FsbGVyeS1saXN0X19jbG9zZS1idG4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICY6bm90KDpjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIH4gLmdhbGxlcnktbGlzdF9fY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAudHJpYW5nbGUge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHotaW5kZXg6IGluaGVyaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC5nYWxsZXJ5LWxpc3QsIC5nYWxsZXJ5LWxpc3RfX2l0ZW0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICsgLmdhbGxlcnktbGlzdF9fY2xvc2UtYnRuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZ2FsbGVyeS1saXN0X19jb250YWluZXIge1xuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmdhbGxlcnktbGlzdF9fY2xvc2UtYnRuIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDEycHg7XG4gICAgICAgICAgICAgICAgdG9wOiAxMnB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoYmxhY2ssIC41KTtcbiAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgd2hpdGU7XG4gICAgICAgICAgICAgICAgei1pbmRleDogOTtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA1cHggMTBweDtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5nYWxsZXJ5LWxpc3RfX3JldmVhbCB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiA4O1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNpdCBsaW5rIHRleHQgb3ZlciB0aGUgdG9wIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogMS4gQ2VudGVyIHRoZSB0ZXh0LWJveCB2ZXJ0aWNhbGx5IGluIHRoZSBsaXN0IGl0ZW0uXG4gICAgICAgICAgICAgKiAyLiBPcHRpY2FsbHkgc2l0IHRoZSB0ZXh0IGl0c2VsZiBjZW50cmFsbHkgaW4gdGhlIGxpc3QgaXRlbS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgLmdhbGxlcnktbGlzdF9fdGl0bGUge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgxNnB4LCAxLjUpO1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGZvbnQtd2VpZ2h0KGJvbGQpO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiA1MCU7IC8qIFsxXSAqL1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgICAgIGxlZnQ6ICAwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICRzcGFjaW5nLXVuaXQtLXNtYWxsICRzcGFjaW5nLXVuaXQtLWxhcmdlO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAuNXMgZWFzZS1pbi1vdXQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIHRleHQtc2hhZG93OiAwcHggMHB4IDEycHggcmdiYShibGFjaywgLjgpO1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkoZGVzaykge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBmb250LXNpemUoMjBweCwgMS41KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAuZ2FsbGVyeS1saXN0X19zdWIge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgZm9udC1zaXplKDE0cHgpO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAkc3BhY2luZy11bml0LS10aW55O1xuICAgICAgICAgICAgICAgIH1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI0FOTk9UQVRFXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmFubm90YXRlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbiAgICAuYW5ub3RhdGVfX2ltYWdlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRicmFuZC1yb3VuZDtcbiAgICB9XG5cbiAgICAuYW5ub3RhdGVfX2xpc3Qge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAgICAwO1xuICAgICAgICByaWdodDogIDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogICAwO1xuICAgIH1cblxuICAgICAgICAuYW5ub3RhdGVfX2l0ZW0ge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgd2lkdGg6ICA1JTtcbiAgICAgICAgICAgIGhlaWdodDogNSU7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgIHRleHQtaW5kZW50OiAxMDAlO1xuICAgICAgICAgICAgY3Vyc29yOiBoZWxwO1xuICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAycHg7XG4gICAgICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRicmFuZC1yb3VuZDtcbiAgICAgICAgICAgIEBpbmNsdWRlIHZlbmRvcih0cmFuc2l0aW9uLCAwLjJzKTtcblxuICAgICAgICAgICAgLmFubm90YXRlOmhvdmVyICYge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2NjYztcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcblxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgLmFubm90YXRlX19jYXB0aW9uIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgIH1cbiIsIi50cmlhbmdsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDU7XG4gICAgbWluLWhlaWdodDogMjgwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTAwcHg7XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI2MnB4O1xuXG4gICAgfVxuXG4gICAgXG4gICAgJi50cmlhbmdsZS0tc3RhcnQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLnRyaWFuZ2xlLS1lbmQge1xuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4udHJpYW5nbGU6YmVmb3JlLCAudHJpYW5nbGU6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMzAwMHB4O1xuICAgIGhlaWdodDogMTAwcHg7XG4gICAgXG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtMTUwMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gICAgei1pbmRleDogLTE7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgIGhlaWdodDogMzAwcHg7XG4gICAgfVxufVxuXG4udHJpYW5nbGU6YmVmb3JlIHtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDA7XG4gICAgdG9wOiA4MHB4O1xuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcC1hbmQtdXApIHtcbiAgICAgICAgdG9wOiAwO1xuICAgIH1cbn1cblxuLnRyaWFuZ2xlOmFmdGVyIHtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwJSAxMDAlO1xuICAgIGJvdHRvbTogODBweDtcbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICB9XG59XG5cbi50cmlhbmdsZV9fY29udGVudC0tYWRqdXN0IHtcbiAgICBtYXJnaW4tdG9wOiAtNDBweDtcbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShsYXAtYW5kLXVwKSB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xMDBweDtcbiAgICB9XG4gICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkoZGVzaykge1xuICAgICAgICBtYXJnaW4tdG9wOiAtMTQwcHg7XG4gICAgfVxufSIsIi5wdW5jaG91dCB7XG4gICAgbWFyZ2luLXRvcDogLTMwMHB4O1xufSIsIi5zdmctd3JhcHBlciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4uc3ZnIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG59IiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjQ0xFQVJGSVhcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogTWljcm8gY2xlYXJmaXgsIGFzIHBlcjogY3NzLTEwMS5vcmcvYXJ0aWNsZXMvY2xlYXJmaXgvbGF0ZXN0LW5ldy1jbGVhcmZpeC1zby1mYXIucGhwXG4gKiBFeHRlbmQgdGhlIGNsZWFyZml4IGNsYXNzIHdpdGggU2FzcyB0byBhdm9pZCB0aGUgYC5jbGVhcmZpeGAgY2xhc3MgYXBwZWFyaW5nXG4gKiBvdmVyIGFuZCBvdmVyIGluIHlvdXIgbWFya3VwLlxuICovXG4uY2xlYXJmaXgsXG4lY2xlYXJmaXgge1xuXG4gICAgJjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICB9XG5cbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI0hFQURJTkdTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEhlYWRpbmdzIDHigJM24oCZcyBjb3JyZXNwb25kaW5nIEdyZWVrLWFscGhhYmV0IGFic3RyYWN0IGNsYXNzZXMgZm9yIGRvdWJsZS1cbiAqIHN0cmFuZGVkIGhlYWRpbmcgaGllcmFyY2h5OiBjc3N3aXphcmRyeS5jb20vMjAxMi8wMi9wcmFnbWF0aWMtcHJhY3RpY2FsLWZvbnQtc2l6aW5nLWluLWNzc1xuICpcbiAqIFVzZSB0aGVzZSBoZWxwZXIgY2xhc3NlcyB0byBjYXVzZSBvdGhlciBlbGVtZW50cyB0byBhZG9wdCB0aGUgc3R5bGluZyBvZiB0aGVcbiAqIHJlc3BlY3RpdmUgaGVhZGluZywgZS5nLjpcbiAqXG4gICA8aDIgY2xhc3M9XCJhbHBoYVwiPkxvcmVtIGlwc3VtPC9oMj5cbiAqXG4gKi9cblxuLiN7JGludWl0LW5hbWVzcGFjZX1hbHBoYSxcbiUjeyRpbnVpdC1uYW1lc3BhY2V9YWxwaGEge1xuICAgIEBpbmNsdWRlIGludWl0LWZvbnQtc2l6ZSgkaW51aXQtaGVhZGluZy1zaXplLTEpO1xufVxuXG4uI3skaW51aXQtbmFtZXNwYWNlfWJldGEsXG4lI3skaW51aXQtbmFtZXNwYWNlfWJldGEge1xuICAgIEBpbmNsdWRlIGludWl0LWZvbnQtc2l6ZSgkaW51aXQtaGVhZGluZy1zaXplLTIpO1xufVxuXG4uI3skaW51aXQtbmFtZXNwYWNlfWdhbW1hLFxuJSN7JGludWl0LW5hbWVzcGFjZX1nYW1tYSB7XG4gICAgQGluY2x1ZGUgaW51aXQtZm9udC1zaXplKCRpbnVpdC1oZWFkaW5nLXNpemUtMyk7XG59XG5cbi4jeyRpbnVpdC1uYW1lc3BhY2V9ZGVsdGEsXG4lI3skaW51aXQtbmFtZXNwYWNlfWRlbHRhIHtcbiAgICBAaW5jbHVkZSBpbnVpdC1mb250LXNpemUoJGludWl0LWhlYWRpbmctc2l6ZS00KTtcbn1cblxuLiN7JGludWl0LW5hbWVzcGFjZX1lcHNpbG9uLFxuJSN7JGludWl0LW5hbWVzcGFjZX1lcHNpbG9uIHtcbiAgICBAaW5jbHVkZSBpbnVpdC1mb250LXNpemUoJGludWl0LWhlYWRpbmctc2l6ZS01KTtcbn1cblxuLiN7JGludWl0LW5hbWVzcGFjZX16ZXRhLFxuJSN7JGludWl0LW5hbWVzcGFjZX16ZXRhIHtcbiAgICBAaW5jbHVkZSBpbnVpdC1mb250LXNpemUoJGludWl0LWhlYWRpbmctc2l6ZS02KTtcbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI1NQQUNJTkdcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogTWFyZ2luIGFuZCBwYWRkaW5nIGhlbHBlciBjbGFzc2VzLiBVc2UgdGhlc2UgdG8gdHdlYWsgbGF5b3V0IG9uIGEgbWljcm9cbiAqIGxldmVsLlxuICpcbiAqIGAuKG18cCkodHxyfGJ8bHxofHYpKC18K3wwKSB7fWAgPSBtYXJnaW4vcGFkZGluZyB0b3AvcmlnaHQvYm90dG9tL2xlZnQvaG9yaXpvbnRhbC92ZXJ0aWNhbCBsZXNzL21vcmUvbm9uZVxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtc3BhY2luZy1uYW1lc3BhY2U6ICAgICAgICAgICAgICAgJGludWl0LW5hbWVzcGFjZSAhZGVmYXVsdDtcblxuJGludWl0LW1hcmdpbjogICAgICAgICAgICAgICAgICAgICAgICAgICRpbnVpdC1iYXNlLXNwYWNpbmctdW5pdCAhZGVmYXVsdDtcbiRpbnVpdC1tYXJnaW4tLXNtYWxsOiAgICAgICAgICAgICAgICAgICAgICAgaGFsdmUoJGludWl0LW1hcmdpbikgIWRlZmF1bHQ7XG4kaW51aXQtbWFyZ2luLS10aW55OiAgICAgICAgICAgICAgICAgICAgICBxdWFydGVyKCRpbnVpdC1tYXJnaW4pICFkZWZhdWx0O1xuJGludWl0LW1hcmdpbi0tbGFyZ2U6ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSgkaW51aXQtbWFyZ2luKSAhZGVmYXVsdDtcbiRpbnVpdC1tYXJnaW4tLWh1Z2U6ICAgICAgICAgICAgICAgICAgICBxdWFkcnVwbGUoJGludWl0LW1hcmdpbikgIWRlZmF1bHQ7XG5cbiRpbnVpdC1wYWRkaW5nOiAgICAgICAgICAgICAgICAgICAgICAgICAkaW51aXQtYmFzZS1zcGFjaW5nLXVuaXQgIWRlZmF1bHQ7XG4kaW51aXQtcGFkZGluZy0tc21hbGw6ICAgICAgICAgICAgICAgICAgICAgIGhhbHZlKCRpbnVpdC1wYWRkaW5nKSAhZGVmYXVsdDtcbiRpbnVpdC1wYWRkaW5nLS10aW55OiAgICAgICAgICAgICAgICAgICAgIHF1YXJ0ZXIoJGludWl0LXBhZGRpbmcpICFkZWZhdWx0O1xuJGludWl0LXBhZGRpbmctLWxhcmdlOiAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSgkaW51aXQtcGFkZGluZykgIWRlZmF1bHQ7XG4kaW51aXQtcGFkZGluZy0taHVnZTogICAgICAgICAgICAgICAgICAgcXVhZHJ1cGxlKCRpbnVpdC1wYWRkaW5nKSAhZGVmYXVsdDtcblxuJGludWl0LWVuYWJsZS1tYXJnaW5zOiAgICAgICAgICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1tYXJnaW5zLS10aW55OiAgICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1tYXJnaW5zLS1zbWFsbDogICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1tYXJnaW5zLS1sYXJnZTogICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1tYXJnaW5zLS1odWdlOiAgICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuXG4kaW51aXQtZW5hYmxlLW1hcmdpbnMtLW5lZ2F0aXZlOiAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLW1hcmdpbnMtLW5lZ2F0aXZlLXRpbnk6ICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLW1hcmdpbnMtLW5lZ2F0aXZlLXNtYWxsOiAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLW1hcmdpbnMtLW5lZ2F0aXZlLWxhcmdlOiAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLW1hcmdpbnMtLW5lZ2F0aXZlLWh1Z2U6ICAgZmFsc2UgIWRlZmF1bHQ7XG5cbiRpbnVpdC1lbmFibGUtbWFyZ2lucy0tbm9uZTogICAgICAgICAgICBmYWxzZSAhZGVmYXVsdDtcblxuJGludWl0LWVuYWJsZS1wYWRkaW5nczogICAgICAgICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1wYWRkaW5ncy0tdGlueTogICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1wYWRkaW5ncy0tc21hbGw6ICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1wYWRkaW5ncy0tbGFyZ2U6ICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGludWl0LWVuYWJsZS1wYWRkaW5ncy0taHVnZTogICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuXG4kaW51aXQtZW5hYmxlLXBhZGRpbmdzLS1ub25lOiAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLW1hcmdpbnMgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogTWFyZ2luIGhlbHBlciBjbGFzc2VzLlxuICAgICAqXG4gICAgICogQWRkIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bSAgICAgICB7IG1hcmdpbjogICAgICAgICAgICRpbnVpdC1tYXJnaW4gIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tdCAgICAgIHsgbWFyZ2luLXRvcDogICAgICAgJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfW1yICAgICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAkaW51aXQtbWFyZ2luICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bWIgICAgICB7IG1hcmdpbi1ib3R0b206ICAgICRpbnVpdC1tYXJnaW4gIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tbCAgICAgIHsgbWFyZ2luLWxlZnQ6ICAgICAgJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfW1oICAgICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAkaW51aXQtbWFyZ2luICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiAgICAgICRpbnVpdC1tYXJnaW4gIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tdiAgICAgIHsgbWFyZ2luLXRvcDogICAgICAgJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAgICAkaW51aXQtbWFyZ2luICFpbXBvcnRhbnQ7IH1cblxufVxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1tYXJnaW5zLS10aW55ID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIEFkZCB0aW55IG1hcmdpbnMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bS0tICAgICB7IG1hcmdpbjogICAgICAgICAgICRpbnVpdC1tYXJnaW4tLXRpbnkgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tdC0tICAgIHsgbWFyZ2luLXRvcDogICAgICAgJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfW1yLS0gICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAkaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bWItLSAgICB7IG1hcmdpbi1ib3R0b206ICAgICRpbnVpdC1tYXJnaW4tLXRpbnkgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tbC0tICAgIHsgbWFyZ2luLWxlZnQ6ICAgICAgJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfW1oLS0gICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAkaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiAgICAgJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfW12LS0gICAgeyBtYXJnaW4tdG9wOiAgICAgICAkaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206ICAgJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyB9XG5cbn1cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbWFyZ2lucy0tc21hbGwgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogQWRkIHNtYWxsIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bS0gICAgICB7IG1hcmdpbjogICAgICAgICAgICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bXQtICAgICB7IG1hcmdpbi10b3A6ICAgICAgICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bXItICAgICB7IG1hcmdpbi1yaWdodDogICAgICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bWItICAgICB7IG1hcmdpbi1ib3R0b206ICAgICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bWwtICAgICB7IG1hcmdpbi1sZWZ0OiAgICAgICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bWgtICAgICB7IG1hcmdpbi1yaWdodDogICAgICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiAgICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bXYtICAgICB7IG1hcmdpbi10b3A6ICAgICAgICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206ICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cblxufVxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1tYXJnaW5zLS1sYXJnZSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBBZGQgbGFyZ2UgbWFyZ2lucy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tXFwrICAgICB7IG1hcmdpbjogICAgICAgICAgICRpbnVpdC1tYXJnaW4tLWxhcmdlICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bXRcXCsgICAgeyBtYXJnaW4tdG9wOiAgICAgICAkaW51aXQtbWFyZ2luLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfW1yXFwrICAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbi0tbGFyZ2UgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tYlxcKyAgICB7IG1hcmdpbi1ib3R0b206ICAgICRpbnVpdC1tYXJnaW4tLWxhcmdlICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bWxcXCsgICAgeyBtYXJnaW4tbGVmdDogICAgICAkaW51aXQtbWFyZ2luLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfW1oXFwrICAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbi0tbGFyZ2UgIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6ICAgICAgJGludWl0LW1hcmdpbi0tbGFyZ2UgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tdlxcKyAgICB7IG1hcmdpbi10b3A6ICAgICAgICRpbnVpdC1tYXJnaW4tLWxhcmdlICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206ICAgICRpbnVpdC1tYXJnaW4tLWxhcmdlICFpbXBvcnRhbnQ7IH1cblxufVxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1tYXJnaW5zLS1odWdlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIEFkZCBodWdlIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bVxcK1xcKyAgIHsgbWFyZ2luOiAgICAgICAgICAgJGludWl0LW1hcmdpbi0taHVnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfW10XFwrXFwrICB7IG1hcmdpbi10b3A6ICAgICAgICRpbnVpdC1tYXJnaW4tLWh1Z2UgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tclxcK1xcKyAgeyBtYXJnaW4tcmlnaHQ6ICAgICAkaW51aXQtbWFyZ2luLS1odWdlICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bWJcXCtcXCsgIHsgbWFyZ2luLWJvdHRvbTogICAgJGludWl0LW1hcmdpbi0taHVnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfW1sXFwrXFwrICB7IG1hcmdpbi1sZWZ0OiAgICAgICRpbnVpdC1tYXJnaW4tLWh1Z2UgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1taFxcK1xcKyAgeyBtYXJnaW4tcmlnaHQ6ICAgICAkaW51aXQtbWFyZ2luLS1odWdlICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiAgICRpbnVpdC1tYXJnaW4tLWh1Z2UgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tdlxcK1xcKyAgeyBtYXJnaW4tdG9wOiAgICAgICAkaW51aXQtbWFyZ2luLS1odWdlICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206ICRpbnVpdC1tYXJnaW4tLWh1Z2UgIWltcG9ydGFudDsgfVxuXG59XG5cblxuQGlmICgkaW51aXQtZW5hYmxlLW1hcmdpbnMtLW5vbmUgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bTAgICAgICB7IG1hcmdpbjogICAgICAgICAgIDAgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tdDAgICAgIHsgbWFyZ2luLXRvcDogICAgICAgMCAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfW1yMCAgICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAwICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9bWIwICAgICB7IG1hcmdpbi1ib3R0b206ICAgIDAgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tbDAgICAgIHsgbWFyZ2luLWxlZnQ6ICAgICAgMCAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfW1oMCAgICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAwICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiAgICAgIDAgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1tdjAgICAgIHsgbWFyZ2luLXRvcDogICAgICAgMCAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAgICAwICFpbXBvcnRhbnQ7IH1cblxufVxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1tYXJnaW5zLS1uZWdhdGl2ZSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBOZWdhdGl2ZSBtYXJnaW5zLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1tICAgICAgeyBtYXJnaW46ICAgICAgICAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1tdCAgICAgeyBtYXJnaW4tdG9wOiAgICAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1tciAgICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1tYiAgICAgeyBtYXJnaW4tYm90dG9tOiAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1tbCAgICAgeyBtYXJnaW4tbGVmdDogICAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1taCAgICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyBtYXJnaW4tbGVmdDogICAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1tdiAgICAgeyBtYXJnaW4tdG9wOiAgICAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG5cbn1cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbWFyZ2lucy0tbmVnYXRpdmUtdGlueSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaW55IG5lZ2F0aXZlIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW0tLSAgICB7IG1hcmdpbjogICAgICAgICAgIC0kaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW10LS0gICB7IG1hcmdpbi10b3A6ICAgICAgIC0kaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW1yLS0gICB7IG1hcmdpbi1yaWdodDogICAgIC0kaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW1iLS0gICB7IG1hcmdpbi1ib3R0b206ICAgIC0kaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW1sLS0gICB7IG1hcmdpbi1sZWZ0OiAgICAgIC0kaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW1oLS0gICB7IG1hcmdpbi1yaWdodDogICAgIC0kaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiAgICAgLSRpbnVpdC1tYXJnaW4tLXRpbnkgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0tbXYtLSAgIHsgbWFyZ2luLXRvcDogICAgICAgLSRpbnVpdC1tYXJnaW4tLXRpbnkgIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogICAtJGludWl0LW1hcmdpbi0taHVnZSAhaW1wb3J0YW50OyB9XG5cbn1cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbWFyZ2lucy0tbmVnYXRpdmUtc21hbGwgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogU21hbGwgbmVnYXRpdmUgbWFyZ2lucy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0tbS0gICAgIHsgbWFyZ2luOiAgICAgICAgICAgLSRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW10LSAgICB7IG1hcmdpbi10b3A6ICAgICAgIC0kaW51aXQtbWFyZ2luLS1zbWFsbCAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1tci0gICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAtJGludWl0LW1hcmdpbi0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0tbWItICAgIHsgbWFyZ2luLWJvdHRvbTogICAgLSRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW1sLSAgICB7IG1hcmdpbi1sZWZ0OiAgICAgIC0kaW51aXQtbWFyZ2luLS1zbWFsbCAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1taC0gICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAtJGludWl0LW1hcmdpbi0tc21hbGwgIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6ICAgLSRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW12LSAgICB7IG1hcmdpbi10b3A6ICAgICAgIC0kaW51aXQtbWFyZ2luLS1zbWFsbCAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAtJGludWl0LW1hcmdpbi0tc21hbGwgIWltcG9ydGFudDsgfVxuXG59XG5cblxuQGlmICgkaW51aXQtZW5hYmxlLW1hcmdpbnMtLW5lZ2F0aXZlLWxhcmdlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIExhcmdlIG5lZ2F0aXZlIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW1cXCsgICAgeyBtYXJnaW46ICAgICAgICAgICAtJGludWl0LW1hcmdpbi0tbGFyZ2UgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0tbXRcXCsgICB7IG1hcmdpbi10b3A6ICAgICAgIC0kaW51aXQtbWFyZ2luLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1tclxcKyAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgLSRpbnVpdC1tYXJnaW4tLWxhcmdlICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW1iXFwrICAgeyBtYXJnaW4tYm90dG9tOiAgICAtJGludWl0LW1hcmdpbi0tbGFyZ2UgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0tbWxcXCsgICB7IG1hcmdpbi1sZWZ0OiAgICAgIC0kaW51aXQtbWFyZ2luLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1taFxcKyAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgLSRpbnVpdC1tYXJnaW4tLWxhcmdlICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiAgICAgIC0kaW51aXQtbWFyZ2luLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1tdlxcKyAgIHsgbWFyZ2luLXRvcDogICAgICAgLSRpbnVpdC1tYXJnaW4tLWxhcmdlICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206ICAgIC0kaW51aXQtbWFyZ2luLS1sYXJnZSAhaW1wb3J0YW50OyB9XG5cbn1cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtbWFyZ2lucy0tbmVnYXRpdmUtaHVnZSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBIdWdlIG5lZ2F0aXZlIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW1cXCtcXCsgIHsgbWFyZ2luOiAgICAgICAgICAgLSRpbnVpdC1tYXJnaW4tLWh1Z2UgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0tbXRcXCtcXCsgeyBtYXJnaW4tdG9wOiAgICAgICAtJGludWl0LW1hcmdpbi0taHVnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1tclxcK1xcKyB7IG1hcmdpbi1yaWdodDogICAgIC0kaW51aXQtbWFyZ2luLS1odWdlICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW1iXFwrXFwrIHsgbWFyZ2luLWJvdHRvbTogICAgLSRpbnVpdC1tYXJnaW4tLWh1Z2UgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0tbWxcXCtcXCsgeyBtYXJnaW4tbGVmdDogICAgICAtJGludWl0LW1hcmdpbi0taHVnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfS1taFxcK1xcKyB7IG1hcmdpbi1yaWdodDogICAgIC0kaW51aXQtbWFyZ2luLS1odWdlICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiAgIC0kaW51aXQtbWFyZ2luLS1odWdlICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9LW12XFwrXFwrIHsgbWFyZ2luLXRvcDogICAgICAgLSRpbnVpdC1tYXJnaW4tLWh1Z2UgIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogLSRpbnVpdC1tYXJnaW4tLWh1Z2UgIWltcG9ydGFudDsgfVxuXG59XG5cblxuXG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXBhZGRpbmdzID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFBhZGRpbmcgaGVscGVyIGNsYXNzZXMuXG4gICAgICpcbiAgICAgKiBBZGQgcGFkZGluZ3MuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cCAgICAgICB7IHBhZGRpbmc6ICAgICAgICAgICRpbnVpdC1wYWRkaW5nICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cHQgICAgICB7IHBhZGRpbmctdG9wOiAgICAgICRpbnVpdC1wYWRkaW5nICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cHIgICAgICB7IHBhZGRpbmctcmlnaHQ6ICAgICRpbnVpdC1wYWRkaW5nICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cGIgICAgICB7IHBhZGRpbmctYm90dG9tOiAgICRpbnVpdC1wYWRkaW5nICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cGwgICAgICB7IHBhZGRpbmctbGVmdDogICAgICRpbnVpdC1wYWRkaW5nICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cGggICAgICB7IHBhZGRpbmctcmlnaHQ6ICAgICRpbnVpdC1wYWRkaW5nICFpbXBvcnRhbnQ7IHBhZGRpbmctbGVmdDogICAgJGludWl0LXBhZGRpbmcgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1wdiAgICAgIHsgcGFkZGluZy10b3A6ICAgICAgJGludWl0LXBhZGRpbmcgIWltcG9ydGFudDsgcGFkZGluZy1ib3R0b206ICAkaW51aXQtcGFkZGluZyAhaW1wb3J0YW50OyB9XG5cbn1cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtcGFkZGluZ3MtLXRpbnkgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogQWRkIHRpbnkgcGFkZGluZ3MuXG4gICAgICovXG5cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cC0tICAgICB7IHBhZGRpbmc6ICAgICAgICAgICAkaW51aXQtcGFkZGluZy0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXB0LS0gICAgeyBwYWRkaW5nLXRvcDogICAgICAgJGludWl0LXBhZGRpbmctLXRpbnkgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1wci0tICAgIHsgcGFkZGluZy1yaWdodDogICAgICRpbnVpdC1wYWRkaW5nLS10aW55ICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cGItLSAgICB7IHBhZGRpbmctYm90dG9tOiAgICAkaW51aXQtcGFkZGluZy0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXBsLS0gICAgeyBwYWRkaW5nLWxlZnQ6ICAgICAgJGludWl0LXBhZGRpbmctLXRpbnkgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1waC0tICAgIHsgcGFkZGluZy1yaWdodDogICAgICRpbnVpdC1wYWRkaW5nLS10aW55ICFpbXBvcnRhbnQ7IHBhZGRpbmctbGVmdDogICAgICAkaW51aXQtcGFkZGluZy0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXB2LS0gICAgeyBwYWRkaW5nLXRvcDogICAgICAgJGludWl0LXBhZGRpbmctLXRpbnkgIWltcG9ydGFudDsgcGFkZGluZy1ib3R0b206ICAgICRpbnVpdC1wYWRkaW5nLS10aW55ICFpbXBvcnRhbnQ7IH1cblxufVxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1wYWRkaW5ncy0tc21hbGwgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogQWRkIHNtYWxsIHBhZGRpbmdzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXAtICAgICAgeyBwYWRkaW5nOiAgICAgICAgICAgJGludWl0LXBhZGRpbmctLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cHQtICAgICB7IHBhZGRpbmctdG9wOiAgICAgICAkaW51aXQtcGFkZGluZy0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1wci0gICAgIHsgcGFkZGluZy1yaWdodDogICAgICRpbnVpdC1wYWRkaW5nLS1zbWFsbCAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXBiLSAgICAgeyBwYWRkaW5nLWJvdHRvbTogICAgJGludWl0LXBhZGRpbmctLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cGwtICAgICB7IHBhZGRpbmctbGVmdDogICAgICAkaW51aXQtcGFkZGluZy0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1waC0gICAgIHsgcGFkZGluZy1yaWdodDogICAgICRpbnVpdC1wYWRkaW5nLS1zbWFsbCAhaW1wb3J0YW50OyBwYWRkaW5nLWxlZnQ6ICAgICRpbnVpdC1wYWRkaW5nLS1zbWFsbCAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXB2LSAgICAgeyBwYWRkaW5nLXRvcDogICAgICAgJGludWl0LXBhZGRpbmctLXNtYWxsICFpbXBvcnRhbnQ7IHBhZGRpbmctYm90dG9tOiAgJGludWl0LXBhZGRpbmctLXNtYWxsICFpbXBvcnRhbnQ7IH1cblxufVxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1wYWRkaW5ncy0tbGFyZ2UgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogQWRkIGxhcmdlIHBhZGRpbmdzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXBcXCsgICAgIHsgcGFkZGluZzogICAgICAgICAgICRpbnVpdC1wYWRkaW5nLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXB0XFwrICAgIHsgcGFkZGluZy10b3A6ICAgICAgICRpbnVpdC1wYWRkaW5nLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXByXFwrICAgIHsgcGFkZGluZy1yaWdodDogICAgICRpbnVpdC1wYWRkaW5nLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXBiXFwrICAgIHsgcGFkZGluZy1ib3R0b206ICAgICRpbnVpdC1wYWRkaW5nLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXBsXFwrICAgIHsgcGFkZGluZy1sZWZ0OiAgICAgICRpbnVpdC1wYWRkaW5nLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXBoXFwrICAgIHsgcGFkZGluZy1yaWdodDogICAgICRpbnVpdC1wYWRkaW5nLS1sYXJnZSAhaW1wb3J0YW50OyBwYWRkaW5nLWxlZnQ6ICAgJGludWl0LXBhZGRpbmctLWxhcmdlICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cHZcXCsgICAgeyBwYWRkaW5nLXRvcDogICAgICAgJGludWl0LXBhZGRpbmctLWxhcmdlICFpbXBvcnRhbnQ7IHBhZGRpbmctYm90dG9tOiAkaW51aXQtcGFkZGluZy0tbGFyZ2UgIWltcG9ydGFudDsgfVxuXG59XG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXBhZGRpbmdzLS1odWdlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIEFkZCBodWdlIHBhZGRpbmdzLlxuICAgICAqL1xuXG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXBcXCtcXCsgICB7IHBhZGRpbmc6ICAgICAgICAgICAkaW51aXQtcGFkZGluZy0taHVnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXB0XFwrXFwrICB7IHBhZGRpbmctdG9wOiAgICAgICAkaW51aXQtcGFkZGluZy0taHVnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXByXFwrXFwrICB7IHBhZGRpbmctcmlnaHQ6ICAgICAkaW51aXQtcGFkZGluZy0taHVnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXBiXFwrXFwrICB7IHBhZGRpbmctYm90dG9tOiAgICAkaW51aXQtcGFkZGluZy0taHVnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXBsXFwrXFwrICB7IHBhZGRpbmctbGVmdDogICAgICAkaW51aXQtcGFkZGluZy0taHVnZSAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXBoXFwrXFwrICB7IHBhZGRpbmctcmlnaHQ6ICAgICAkaW51aXQtcGFkZGluZy0taHVnZSAhaW1wb3J0YW50OyBwYWRkaW5nLWxlZnQ6ICAgICRpbnVpdC1wYWRkaW5nLS1odWdlICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cHZcXCtcXCsgIHsgcGFkZGluZy10b3A6ICAgICAgICRpbnVpdC1wYWRkaW5nLS1odWdlICFpbXBvcnRhbnQ7IHBhZGRpbmctYm90dG9tOiAgJGludWl0LXBhZGRpbmctLWh1Z2UgIWltcG9ydGFudDsgfVxuXG59XG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXBhZGRpbmdzLS1ub25lID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBwYWRkaW5ncy5cbiAgICAgKi9cblxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1wMCAgICAgIHsgcGFkZGluZzogICAgICAgICAgMCAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXB0MCAgICAgeyBwYWRkaW5nLXRvcDogICAgICAwICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cHIwICAgICB7IHBhZGRpbmctcmlnaHQ6ICAgIDAgIWltcG9ydGFudDsgfVxuICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX1wYjAgICAgIHsgcGFkZGluZy1ib3R0b206ICAgMCAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXBsMCAgICAgeyBwYWRkaW5nLWxlZnQ6ICAgICAwICFpbXBvcnRhbnQ7IH1cbiAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9cGgwICAgICB7IHBhZGRpbmctcmlnaHQ6ICAgIDAgIWltcG9ydGFudDsgcGFkZGluZy1sZWZ0OiAgICAgMCAhaW1wb3J0YW50OyB9XG4gICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfXB2MCAgICAgeyBwYWRkaW5nLXRvcDogICAgICAwICFpbXBvcnRhbnQ7IHBhZGRpbmctYm90dG9tOiAgIDAgIWltcG9ydGFudDsgfVxuXG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICNTUEFDSU5HLVJFU1BPTlNJVkVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogTWFyZ2luIGFuZCBwYWRkaW5nIGhlbHBlciBjbGFzc2VzLiBVc2UgdGhlc2UgdG8gdHdlYWsgbGF5b3V0IG9uIGEgbWljcm9cbiAqIGxldmVsLlxuICpcbiAqIGAuKG18cCkodHxyfGJ8bHxofHYpKC18K3wwKSB7fWAgPSBtYXJnaW4vcGFkZGluZyB0b3AvcmlnaHQvYm90dG9tL2xlZnQvaG9yaXpvbnRhbC92ZXJ0aWNhbCBsZXNzL21vcmUvbm9uZVxuICovXG5cbi8vIFByZWRlZmluZSB0aGUgdmFyaWFibGVzIGJlbG93IGluIG9yZGVyIHRvIGFsdGVyIGFuZCBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXG4kaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtbWFyZ2luczogICAgICAgICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtbWFyZ2lucy0tdGlueTogICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtbWFyZ2lucy0tc21hbGw6ICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtbWFyZ2lucy0tbGFyZ2U6ICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtbWFyZ2lucy0taHVnZTogICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG5cbiRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1tYXJnaW5zLS1uZWdhdGl2ZTogICAgICAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1tYXJnaW5zLS1uZWdhdGl2ZS10aW55OiAgICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1tYXJnaW5zLS1uZWdhdGl2ZS1zbWFsbDogICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1tYXJnaW5zLS1uZWdhdGl2ZS1sYXJnZTogICBmYWxzZSAhZGVmYXVsdDtcbiRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1tYXJnaW5zLS1uZWdhdGl2ZS1odWdlOiAgICBmYWxzZSAhZGVmYXVsdDtcblxuJGludWl0LWVuYWJsZS1yZXNwb25zaXZlLW1hcmdpbnMtLW5vbmU6ICAgICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuXG4kaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtcGFkZGluZ3M6ICAgICAgICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtcGFkZGluZ3MtLXRpbnk6ICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtcGFkZGluZ3MtLXNtYWxsOiAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtcGFkZGluZ3MtLWxhcmdlOiAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtcGFkZGluZ3MtLWh1Z2U6ICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG5cbiRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1wYWRkaW5ncy0tbm9uZTogICAgICAgICAgICBmYWxzZSAhZGVmYXVsdDtcblxuXG5cblxuXG4vLyBJbnRlcm5hbGx5IHVzZWQgbWl4aW4gdG8gcXVpY2tseSBnZW5lcmF0ZSBvdXIgZGlmZmVyZW50IHZhcmlhbnRzIGJhc2VkIHVwb25cbi8vIHRoZSBicmVha3BvaW50cyBkZWZpbmVkIGluIGBzZXR0aW5ncy5yZXNwb25zaXZlYC5cblxuQG1peGluIGludWl0LWdlbmVyYXRlLXNwYWNpbmcoKSB7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggb3VyIHByZXZpb3VzbHktZGVmaW5lZCBicmVha3BvaW50cy5cbiAgICBAZWFjaCAkYnJlYWtwb2ludCBpbiAkYnJlYWtwb2ludHMge1xuXG4gICAgICAgICRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzOiAgICAgIG50aCgkYnJlYWtwb2ludCwgMSkgIWdsb2JhbDtcbiAgICAgICAgJGludWl0LWdlbmVyYXRlLXNwYWNpbmctY29uZGl0aW9uOiAgbnRoKCRicmVha3BvaW50LCAyKTtcblxuICAgICAgICAvLyBUaGlzIGlzbuKAmXQgaWRlYWwsIGJ1dCB3ZSBkZWZpbml0ZWx5IGRvbuKAmXQgd2FudCB0byBnZW5lcmF0ZSB3aWR0aHNcbiAgICAgICAgLy8gZm9yIHJldGluYSBkZXZpY2VzLiBFeGNsdWRlIHJldGluYSBtZWRpYS1xZXVyaWVzIG1hbnVhbGx5LlxuICAgICAgICBAaWYgKCRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzICE9IFwicmV0aW5hXCIpIHtcbiAgICBcbiAgICAgICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KCRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzKSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9IC8vIENsb3NlIG1lZGlhIHF1ZXJ5LlxuXG4gICAgICAgIH0gLy8gQ2xvc2UgcmV0aW5hIGNoZWNrLlxuXG4gICAgICAgIC8vIFRha2UgdGhlIGdsb2JhbCB2YXJpYWJsZSBiYWNrIG91dCBvZiBzY29wZS5cbiAgICAgICAgJGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXM6IG51bGwgIWdsb2JhbDtcblxuICAgIH0gLy8gQ2xvc2UgYnJlYWtwb2ludHMgbG9vcC5cblxufVxuXG5cblxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1yZXNwb25zaXZlLW1hcmdpbnMgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogTWFyZ2luIGhlbHBlciBjbGFzc2VzLlxuICAgICAqXG4gICAgICogQWRkIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICBAaW5jbHVkZSBpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nKCkge1xuXG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tICAgICAgeyBtYXJnaW46ICAgICAgICAgICAkaW51aXQtbWFyZ2luICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LW10ICAgICB7IG1hcmdpbi10b3A6ICAgICAgICRpbnVpdC1tYXJnaW4gIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbXIgICAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tYiAgICAgeyBtYXJnaW4tYm90dG9tOiAgICAkaW51aXQtbWFyZ2luICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LW1sICAgICB7IG1hcmdpbi1sZWZ0OiAgICAgICRpbnVpdC1tYXJnaW4gIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbWggICAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyBtYXJnaW4tbGVmdDogICAgICAkaW51aXQtbWFyZ2luICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LW12ICAgICB7IG1hcmdpbi10b3A6ICAgICAgICRpbnVpdC1tYXJnaW4gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogICAgJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG5cbiAgICB9XG5cbn1cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1tYXJnaW5zLS10aW55ID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIEFkZCB0aW55IG1hcmdpbnMuXG4gICAgICovXG5cbiAgICBAaW5jbHVkZSBpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nKCkge1xuXG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tLS0gICAgIHsgbWFyZ2luOiAgICAgICAgICAgJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tdC0tICAgIHsgbWFyZ2luLXRvcDogICAgICAgJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tci0tICAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tYi0tICAgIHsgbWFyZ2luLWJvdHRvbTogICAgJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tbC0tICAgIHsgbWFyZ2luLWxlZnQ6ICAgICAgJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1taC0tICAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyBtYXJnaW4tbGVmdDogICAgICRpbnVpdC1tYXJnaW4tLXRpbnkgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbXYtLSAgICB7IG1hcmdpbi10b3A6ICAgICAgICRpbnVpdC1tYXJnaW4tLXRpbnkgIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogICAkaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IH1cblxuICAgIH1cblxufVxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1yZXNwb25zaXZlLW1hcmdpbnMtLXNtYWxsID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIEFkZCBzbWFsbCBtYXJnaW5zLlxuICAgICAqL1xuXG4gICAgQGluY2x1ZGUgaW51aXQtZ2VuZXJhdGUtc3BhY2luZygpIHtcblxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbS0gICAgICB7IG1hcmdpbjogICAgICAgICAgICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LW10LSAgICAgeyBtYXJnaW4tdG9wOiAgICAgICAkaW51aXQtbWFyZ2luLS1zbWFsbCAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tci0gICAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbi0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbWItICAgICB7IG1hcmdpbi1ib3R0b206ICAgICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LW1sLSAgICAgeyBtYXJnaW4tbGVmdDogICAgICAkaW51aXQtbWFyZ2luLS1zbWFsbCAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1taC0gICAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbi0tc21hbGwgIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6ICAgJGludWl0LW1hcmdpbi0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbXYtICAgICB7IG1hcmdpbi10b3A6ICAgICAgICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206ICRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cblxuICAgIH1cblxufVxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1yZXNwb25zaXZlLW1hcmdpbnMtLWxhcmdlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIEFkZCBsYXJnZSBtYXJnaW5zLlxuICAgICAqL1xuXG4gICAgQGluY2x1ZGUgaW51aXQtZ2VuZXJhdGUtc3BhY2luZygpIHtcblxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbVxcKyAgICAgeyBtYXJnaW46ICAgICAgICAgICAkaW51aXQtbWFyZ2luLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tdFxcKyAgICB7IG1hcmdpbi10b3A6ICAgICAgICRpbnVpdC1tYXJnaW4tLWxhcmdlICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LW1yXFwrICAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbi0tbGFyZ2UgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbWJcXCsgICAgeyBtYXJnaW4tYm90dG9tOiAgICAkaW51aXQtbWFyZ2luLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tbFxcKyAgICB7IG1hcmdpbi1sZWZ0OiAgICAgICRpbnVpdC1tYXJnaW4tLWxhcmdlICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LW1oXFwrICAgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbi0tbGFyZ2UgIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6ICAgICAgJGludWl0LW1hcmdpbi0tbGFyZ2UgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbXZcXCsgICAgeyBtYXJnaW4tdG9wOiAgICAgICAkaW51aXQtbWFyZ2luLS1sYXJnZSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAgICAkaW51aXQtbWFyZ2luLS1sYXJnZSAhaW1wb3J0YW50OyB9XG5cbiAgICB9XG5cbn1cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1tYXJnaW5zLS1odWdlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIEFkZCBodWdlIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICBAaW5jbHVkZSBpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nKCkge1xuXG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tXFwrXFwrICAgeyBtYXJnaW46ICAgICAgICAgICAkaW51aXQtbWFyZ2luLS1odWdlICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LW10XFwrXFwrICB7IG1hcmdpbi10b3A6ICAgICAgICRpbnVpdC1tYXJnaW4tLWh1Z2UgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbXJcXCtcXCsgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbi0taHVnZSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tYlxcK1xcKyAgeyBtYXJnaW4tYm90dG9tOiAgICAkaW51aXQtbWFyZ2luLS1odWdlICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LW1sXFwrXFwrICB7IG1hcmdpbi1sZWZ0OiAgICAgICRpbnVpdC1tYXJnaW4tLWh1Z2UgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbWhcXCtcXCsgIHsgbWFyZ2luLXJpZ2h0OiAgICAgJGludWl0LW1hcmdpbi0taHVnZSAhaW1wb3J0YW50OyBtYXJnaW4tbGVmdDogICAkaW51aXQtbWFyZ2luLS1odWdlICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LW12XFwrXFwrICB7IG1hcmdpbi10b3A6ICAgICAgICRpbnVpdC1tYXJnaW4tLWh1Z2UgIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogJGludWl0LW1hcmdpbi0taHVnZSAhaW1wb3J0YW50OyB9XG5cbiAgICB9XG5cbn1cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1tYXJnaW5zLS1ub25lID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBtYXJnaW5zLlxuICAgICAqL1xuXG4gICAgQGluY2x1ZGUgaW51aXQtZ2VuZXJhdGUtc3BhY2luZygpIHtcblxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbTAgICAgICB7IG1hcmdpbjogICAgICAgICAgIDAgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbXQwICAgICB7IG1hcmdpbi10b3A6ICAgICAgIDAgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbXIwICAgICB7IG1hcmdpbi1yaWdodDogICAgIDAgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbWIwICAgICB7IG1hcmdpbi1ib3R0b206ICAgIDAgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbWwwICAgICB7IG1hcmdpbi1sZWZ0OiAgICAgIDAgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tbWgwICAgICB7IG1hcmdpbi1yaWdodDogICAgIDAgIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6ICAgICAgMCAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1tdjAgICAgIHsgbWFyZ2luLXRvcDogICAgICAgMCAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAgICAwICFpbXBvcnRhbnQ7IH1cblxuICAgIH1cblxufVxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1yZXNwb25zaXZlLW1hcmdpbnMtLW5lZ2F0aXZlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIE5lZ2F0aXZlIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICBAaW5jbHVkZSBpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nKCkge1xuXG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS0tbSAgICAgIHsgbWFyZ2luOiAgICAgICAgICAgLSRpbnVpdC1tYXJnaW4gIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW10ICAgICB7IG1hcmdpbi10b3A6ICAgICAgIC0kaW51aXQtbWFyZ2luICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1tciAgICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS0tbWIgICAgIHsgbWFyZ2luLWJvdHRvbTogICAgLSRpbnVpdC1tYXJnaW4gIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW1sICAgICB7IG1hcmdpbi1sZWZ0OiAgICAgIC0kaW51aXQtbWFyZ2luICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1taCAgICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyBtYXJnaW4tbGVmdDogICAgICAtJGludWl0LW1hcmdpbiAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS0tbXYgICAgIHsgbWFyZ2luLXRvcDogICAgICAgLSRpbnVpdC1tYXJnaW4gIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogICAgLSRpbnVpdC1tYXJnaW4gIWltcG9ydGFudDsgfVxuXG4gICAgfVxuXG59XG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtbWFyZ2lucy0tbmVnYXRpdmUtdGlueSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaW55IG5lZ2F0aXZlIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICBAaW5jbHVkZSBpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nKCkge1xuXG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS0tbS0tICAgIHsgbWFyZ2luOiAgICAgICAgICAgLSRpbnVpdC1tYXJnaW4tLXRpbnkgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW10LS0gICB7IG1hcmdpbi10b3A6ICAgICAgIC0kaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1tci0tICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAtJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS0tbWItLSAgIHsgbWFyZ2luLWJvdHRvbTogICAgLSRpbnVpdC1tYXJnaW4tLXRpbnkgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW1sLS0gICB7IG1hcmdpbi1sZWZ0OiAgICAgIC0kaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1taC0tICAgeyBtYXJnaW4tcmlnaHQ6ICAgICAtJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyBtYXJnaW4tbGVmdDogICAgIC0kaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1tdi0tICAgeyBtYXJnaW4tdG9wOiAgICAgICAtJGludWl0LW1hcmdpbi0tdGlueSAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAgIC0kaW51aXQtbWFyZ2luLS10aW55ICFpbXBvcnRhbnQ7IH1cblxuICAgIH1cblxufVxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1yZXNwb25zaXZlLW1hcmdpbnMtLW5lZ2F0aXZlLXNtYWxsID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFNtYWxsIG5lZ2F0aXZlIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICBAaW5jbHVkZSBpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nKCkge1xuXG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS0tbS0gICAgIHsgbWFyZ2luOiAgICAgICAgICAgLSRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1tdC0gICAgeyBtYXJnaW4tdG9wOiAgICAgICAtJGludWl0LW1hcmdpbi0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW1yLSAgICB7IG1hcmdpbi1yaWdodDogICAgIC0kaW51aXQtbWFyZ2luLS1zbWFsbCAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS0tbWItICAgIHsgbWFyZ2luLWJvdHRvbTogICAgLSRpbnVpdC1tYXJnaW4tLXNtYWxsICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1tbC0gICAgeyBtYXJnaW4tbGVmdDogICAgICAtJGludWl0LW1hcmdpbi0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW1oLSAgICB7IG1hcmdpbi1yaWdodDogICAgIC0kaW51aXQtbWFyZ2luLS1zbWFsbCAhaW1wb3J0YW50OyBtYXJnaW4tbGVmdDogICAtJGludWl0LW1hcmdpbi0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW12LSAgICB7IG1hcmdpbi10b3A6ICAgICAgIC0kaW51aXQtbWFyZ2luLS1zbWFsbCAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAtJGludWl0LW1hcmdpbi0tc21hbGwgIWltcG9ydGFudDsgfVxuXG4gICAgfVxuXG59XG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtbWFyZ2lucy0tbmVnYXRpdmUtbGFyZ2UgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogTGFyZ2UgbmVnYXRpdmUgbWFyZ2lucy5cbiAgICAgKi9cblxuICAgIEBpbmNsdWRlIGludWl0LWdlbmVyYXRlLXNwYWNpbmcoKSB7XG5cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1tXFwrICAgIHsgbWFyZ2luOiAgICAgICAgICAgZG91YmxlKC0kaW51aXQtbWFyZ2luKSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS0tbXRcXCsgICB7IG1hcmdpbi10b3A6ICAgICAgIGRvdWJsZSgtJGludWl0LW1hcmdpbikgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW1yXFwrICAgeyBtYXJnaW4tcmlnaHQ6ICAgICBkb3VibGUoLSRpbnVpdC1tYXJnaW4pICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1tYlxcKyAgIHsgbWFyZ2luLWJvdHRvbTogICAgZG91YmxlKC0kaW51aXQtbWFyZ2luKSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS0tbWxcXCsgICB7IG1hcmdpbi1sZWZ0OiAgICAgIGRvdWJsZSgtJGludWl0LW1hcmdpbikgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW1oXFwrICAgeyBtYXJnaW4tcmlnaHQ6ICAgICBkb3VibGUoLSRpbnVpdC1tYXJnaW4pICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiAgICAgIGRvdWJsZSgtJGludWl0LW1hcmdpbikgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW12XFwrICAgeyBtYXJnaW4tdG9wOiAgICAgICBkb3VibGUoLSRpbnVpdC1tYXJnaW4pICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206ICAgIGRvdWJsZSgtJGludWl0LW1hcmdpbikgIWltcG9ydGFudDsgfVxuXG4gICAgfVxuXG59XG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtbWFyZ2lucy0tbmVnYXRpdmUtaHVnZSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBIdWdlIG5lZ2F0aXZlIG1hcmdpbnMuXG4gICAgICovXG5cbiAgICBAaW5jbHVkZSBpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nKCkge1xuXG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS0tbVxcK1xcKyAgeyBtYXJnaW46ICAgICAgICAgICBxdWFkcnVwbGUoLSRpbnVpdC1tYXJnaW4pICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1tdFxcK1xcKyB7IG1hcmdpbi10b3A6ICAgICAgIHF1YWRydXBsZSgtJGludWl0LW1hcmdpbikgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW1yXFwrXFwrIHsgbWFyZ2luLXJpZ2h0OiAgICAgcXVhZHJ1cGxlKC0kaW51aXQtbWFyZ2luKSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS0tbWJcXCtcXCsgeyBtYXJnaW4tYm90dG9tOiAgICBxdWFkcnVwbGUoLSRpbnVpdC1tYXJnaW4pICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1tbFxcK1xcKyB7IG1hcmdpbi1sZWZ0OiAgICAgIHF1YWRydXBsZSgtJGludWl0LW1hcmdpbikgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tLW1oXFwrXFwrIHsgbWFyZ2luLXJpZ2h0OiAgICAgcXVhZHJ1cGxlKC0kaW51aXQtbWFyZ2luKSAhaW1wb3J0YW50OyBtYXJnaW4tbGVmdDogICBxdWFkcnVwbGUoLSRpbnVpdC1tYXJnaW4pICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LS1tdlxcK1xcKyB7IG1hcmdpbi10b3A6ICAgICAgIHF1YWRydXBsZSgtJGludWl0LW1hcmdpbikgIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogcXVhZHJ1cGxlKC0kaW51aXQtbWFyZ2luKSAhaW1wb3J0YW50OyB9XG5cbiAgICB9XG5cbn1cblxuXG5cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1wYWRkaW5ncyA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBQYWRkaW5nIGhlbHBlciBjbGFzc2VzLlxuICAgICAqXG4gICAgICogQWRkIHBhZGRpbmdzLlxuICAgICAqL1xuXG4gICAgQGluY2x1ZGUgaW51aXQtZ2VuZXJhdGUtc3BhY2luZygpIHtcblxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcCAgICAgICB7IHBhZGRpbmc6ICAgICAgICAgICRpbnVpdC1wYWRkaW5nICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXB0ICAgICAgeyBwYWRkaW5nLXRvcDogICAgICAkaW51aXQtcGFkZGluZyAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1wciAgICAgIHsgcGFkZGluZy1yaWdodDogICAgJGludWl0LXBhZGRpbmcgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcGIgICAgICB7IHBhZGRpbmctYm90dG9tOiAgICRpbnVpdC1wYWRkaW5nICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXBsICAgICAgeyBwYWRkaW5nLWxlZnQ6ICAgICAkaW51aXQtcGFkZGluZyAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1waCAgICAgIHsgcGFkZGluZy1yaWdodDogICAgJGludWl0LXBhZGRpbmcgIWltcG9ydGFudDsgcGFkZGluZy1sZWZ0OiAgICAkaW51aXQtcGFkZGluZyAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1wdiAgICAgIHsgcGFkZGluZy10b3A6ICAgICAgJGludWl0LXBhZGRpbmcgIWltcG9ydGFudDsgcGFkZGluZy1ib3R0b206ICAkaW51aXQtcGFkZGluZyAhaW1wb3J0YW50OyB9XG5cbiAgICB9XG5cbn1cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1wYWRkaW5ncy0tdGlueSA9PSB0cnVlKSB7XG5cbiAgICAvKipcbiAgICAgKiBBZGQgdGlueSBwYWRkaW5ncy5cbiAgICAgKi9cblxuICAgIEBpbmNsdWRlIGludWl0LWdlbmVyYXRlLXNwYWNpbmcoKSB7XG5cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXAtLSAgICAgeyBwYWRkaW5nOiAgICAgICAgICAgJGludWl0LXBhZGRpbmctLXRpbnkgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcHQtLSAgICB7IHBhZGRpbmctdG9wOiAgICAgICAkaW51aXQtcGFkZGluZy0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1wci0tICAgIHsgcGFkZGluZy1yaWdodDogICAgICRpbnVpdC1wYWRkaW5nLS10aW55ICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXBiLS0gICAgeyBwYWRkaW5nLWJvdHRvbTogICAgJGludWl0LXBhZGRpbmctLXRpbnkgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcGwtLSAgICB7IHBhZGRpbmctbGVmdDogICAgICAkaW51aXQtcGFkZGluZy0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1waC0tICAgIHsgcGFkZGluZy1yaWdodDogICAgICRpbnVpdC1wYWRkaW5nLS10aW55ICFpbXBvcnRhbnQ7IHBhZGRpbmctbGVmdDogICAgICAkaW51aXQtcGFkZGluZy0tdGlueSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1wdi0tICAgIHsgcGFkZGluZy10b3A6ICAgICAgICRpbnVpdC1wYWRkaW5nLS10aW55ICFpbXBvcnRhbnQ7IHBhZGRpbmctYm90dG9tOiAgICAkaW51aXQtcGFkZGluZy0tdGlueSAhaW1wb3J0YW50OyB9XG5cbiAgICB9XG5cbn1cblxuXG5AaWYgKCRpbnVpdC1lbmFibGUtcmVzcG9uc2l2ZS1wYWRkaW5ncy0tc21hbGwgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogQWRkIHNtYWxsIHBhZGRpbmdzLlxuICAgICAqL1xuXG4gICAgQGluY2x1ZGUgaW51aXQtZ2VuZXJhdGUtc3BhY2luZygpIHtcblxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcC0gICAgICB7IHBhZGRpbmc6ICAgICAgICAgICAkaW51aXQtcGFkZGluZy0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcHQtICAgICB7IHBhZGRpbmctdG9wOiAgICAgICAkaW51aXQtcGFkZGluZy0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcHItICAgICB7IHBhZGRpbmctcmlnaHQ6ICAgICAkaW51aXQtcGFkZGluZy0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcGItICAgICB7IHBhZGRpbmctYm90dG9tOiAgICAkaW51aXQtcGFkZGluZy0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcGwtICAgICB7IHBhZGRpbmctbGVmdDogICAgICAkaW51aXQtcGFkZGluZy0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcGgtICAgICB7IHBhZGRpbmctcmlnaHQ6ICAgICAkaW51aXQtcGFkZGluZy0tc21hbGwgIWltcG9ydGFudDsgcGFkZGluZy1sZWZ0OiAgICAkaW51aXQtcGFkZGluZy0tc21hbGwgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcHYtICAgICB7IHBhZGRpbmctdG9wOiAgICAgICAkaW51aXQtcGFkZGluZy0tc21hbGwgIWltcG9ydGFudDsgcGFkZGluZy1ib3R0b206ICAkaW51aXQtcGFkZGluZy0tc21hbGwgIWltcG9ydGFudDsgfVxuXG4gICAgfVxuXG59XG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtcGFkZGluZ3MtLWxhcmdlID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIEFkZCBsYXJnZSBwYWRkaW5ncy5cbiAgICAgKi9cblxuICAgIEBpbmNsdWRlIGludWl0LWdlbmVyYXRlLXNwYWNpbmcoKSB7XG5cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXBcXCsgICAgIHsgcGFkZGluZzogICAgICAgICAgICRpbnVpdC1wYWRkaW5nLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1wdFxcKyAgICB7IHBhZGRpbmctdG9wOiAgICAgICAkaW51aXQtcGFkZGluZy0tbGFyZ2UgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcHJcXCsgICAgeyBwYWRkaW5nLXJpZ2h0OiAgICAgJGludWl0LXBhZGRpbmctLWxhcmdlICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXBiXFwrICAgIHsgcGFkZGluZy1ib3R0b206ICAgICRpbnVpdC1wYWRkaW5nLS1sYXJnZSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1wbFxcKyAgICB7IHBhZGRpbmctbGVmdDogICAgICAkaW51aXQtcGFkZGluZy0tbGFyZ2UgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcGhcXCsgICAgeyBwYWRkaW5nLXJpZ2h0OiAgICAgJGludWl0LXBhZGRpbmctLWxhcmdlICFpbXBvcnRhbnQ7IHBhZGRpbmctbGVmdDogICAkaW51aXQtcGFkZGluZy0tbGFyZ2UgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcHZcXCsgICAgeyBwYWRkaW5nLXRvcDogICAgICAgJGludWl0LXBhZGRpbmctLWxhcmdlICFpbXBvcnRhbnQ7IHBhZGRpbmctYm90dG9tOiAkaW51aXQtcGFkZGluZy0tbGFyZ2UgIWltcG9ydGFudDsgfVxuXG4gICAgfVxuXG59XG5cblxuQGlmICgkaW51aXQtZW5hYmxlLXJlc3BvbnNpdmUtcGFkZGluZ3MtLWh1Z2UgPT0gdHJ1ZSkge1xuXG4gICAgLyoqXG4gICAgICogQWRkIGh1Z2UgcGFkZGluZ3MuXG4gICAgICovXG5cbiAgICBAaW5jbHVkZSBpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nKCkge1xuXG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1wXFwrXFwrICAgeyBwYWRkaW5nOiAgICAgICAgICAgJGludWl0LXBhZGRpbmctLWh1Z2UgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcHRcXCtcXCsgIHsgcGFkZGluZy10b3A6ICAgICAgICRpbnVpdC1wYWRkaW5nLS1odWdlICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXByXFwrXFwrICB7IHBhZGRpbmctcmlnaHQ6ICAgICAkaW51aXQtcGFkZGluZy0taHVnZSAhaW1wb3J0YW50OyB9XG4gICAgICAgIC4jeyRpbnVpdC1zcGFjaW5nLW5hbWVzcGFjZX0jeyRpbnVpdC1nZW5lcmF0ZS1zcGFjaW5nLWFsaWFzfS1wYlxcK1xcKyAgeyBwYWRkaW5nLWJvdHRvbTogICAgJGludWl0LXBhZGRpbmctLWh1Z2UgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcGxcXCtcXCsgIHsgcGFkZGluZy1sZWZ0OiAgICAgICRpbnVpdC1wYWRkaW5nLS1odWdlICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXBoXFwrXFwrICB7IHBhZGRpbmctcmlnaHQ6ICAgICAkaW51aXQtcGFkZGluZy0taHVnZSAhaW1wb3J0YW50OyBwYWRkaW5nLWxlZnQ6ICAgICRpbnVpdC1wYWRkaW5nLS1odWdlICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXB2XFwrXFwrICB7IHBhZGRpbmctdG9wOiAgICAgICAkaW51aXQtcGFkZGluZy0taHVnZSAhaW1wb3J0YW50OyBwYWRkaW5nLWJvdHRvbTogICRpbnVpdC1wYWRkaW5nLS1odWdlICFpbXBvcnRhbnQ7IH1cblxuICAgIH1cblxufVxuXG5cbkBpZiAoJGludWl0LWVuYWJsZS1yZXNwb25zaXZlLXBhZGRpbmdzLS1ub25lID09IHRydWUpIHtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBwYWRkaW5ncy5cbiAgICAgKi9cblxuICAgIEBpbmNsdWRlIGludWl0LWdlbmVyYXRlLXNwYWNpbmcoKSB7XG5cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXAwICAgICAgeyBwYWRkaW5nOiAgICAgICAgICAwICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXB0MCAgICAgeyBwYWRkaW5nLXRvcDogICAgICAwICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXByMCAgICAgeyBwYWRkaW5nLXJpZ2h0OiAgICAwICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXBiMCAgICAgeyBwYWRkaW5nLWJvdHRvbTogICAwICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXBsMCAgICAgeyBwYWRkaW5nLWxlZnQ6ICAgICAwICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLiN7JGludWl0LXNwYWNpbmctbmFtZXNwYWNlfSN7JGludWl0LWdlbmVyYXRlLXNwYWNpbmctYWxpYXN9LXBoMCAgICAgeyBwYWRkaW5nLXJpZ2h0OiAgICAwICFpbXBvcnRhbnQ7IHBhZGRpbmctbGVmdDogICAgIDAgIWltcG9ydGFudDsgfVxuICAgICAgICAuI3skaW51aXQtc3BhY2luZy1uYW1lc3BhY2V9I3skaW51aXQtZ2VuZXJhdGUtc3BhY2luZy1hbGlhc30tcHYwICAgICB7IHBhZGRpbmctdG9wOiAgICAgIDAgIWltcG9ydGFudDsgcGFkZGluZy1ib3R0b206ICAgMCAhaW1wb3J0YW50OyB9XG5cbiAgICB9XG5cbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI1dJRFRIU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBBIHNlcmllcyBvZiB3aWR0aCBoZWxwZXIgY2xhc3NlcyB0aGF0IHlvdSBjYW4gdXNlIHRvIHNpemUgdGhpbmdzIGxpa2UgZ3JpZFxuICogc3lzdGVtcy4gQ2xhc3NlcyBjYW4gdGFrZSBhIGZyYWN0aW9uLWxpa2UgZm9ybWF0IChlLmcuIGAudS0yLzNgKSBvciBhIHNwb2tlbi1cbiAqIHdvcmQgZm9ybWF0IChlLmcuIGAudS0yLW9mLTNgKS4gVXNlIHRoZXNlIGluIHlvdXIgbWFya3VwOlxuICpcbiAqIDxkaXYgY2xhc3M9XCJ1LTcvMTJcIj5cbiAqL1xuXG4vLyBCeSBkZWZhdWx0IHdlIHdpbGwgY3JlYXRlIHdob2xlcywgaGFsdmVzLCB0aGlyZHMsIHF1YXJ0ZXJzLCBhbmQgZmlmdGhzLlxuLy8gUHJlZGVmaW5lIHRoaXMgTWFwIHRvIG92ZXJyaWRlLlxuJGludWl0LXdpZHRocy1jb2x1bW5zOiAoXG4gICAgMSxcbiAgICAyLFxuICAgIDMsXG4gICAgNCxcbiAgICA1LFxuKSAhZGVmYXVsdDtcblxuQGluY2x1ZGUgaW51aXQtd2lkdGhzKCRpbnVpdC13aWR0aHMtY29sdW1ucyk7XG4iLCIvLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4vLyAgICAjV0lEVEhTXG4vL1xcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8vIEEgbWl4aW4gdG8gc3BpdCBvdXQgb3VyIHdpZHRoIGNsYXNzZXMuIFBhc3MgaW4gdGhlIGNvbHVtbnMgd2Ugd2FudCB0aGUgd2lkdGhzXG4vLyB0byBoYXZlLCBhbmQgYW4gb3B0aW9uYWwgc3VmZml4IGZvciByZXNwb25zaXZlIHdpZHRocy4gRS5nLiB0byBjcmVhdGUgdGhpcmRzXG4vLyBhbmQgcXVhcnRlcnMgZm9yIGEgc21hbGwgYnJlYWtwb2ludDpcbi8vXG4vLyBAaW5jbHVkZSBpbnVpdC13aWR0aHMoMyA0LCAtc20pO1xuXG4vLyBQcmVkZWZpbmUgdGhlIHZhcmlhYmxlcyBiZWxvdyBpbiBvcmRlciB0byBhbHRlciBhbmQgZW5hYmxlIHNwZWNpZmljIGZlYXR1cmVzLlxuJGludWl0LXdpZHRocy1uYW1lc3BhY2U6ICRpbnVpdC1uYW1lc3BhY2UgIWRlZmF1bHQ7XG5cbi8vIERvIHdlIHdhbnQgdG8gdXNlIGNsYXNzZXMgbGlrZSBgPGRpdiBjbGFzcz1cInUtMS80XCI+YCBpbnN0ZWFkIG9mXG4vLyBgPGRpdiBjbGFzcz1cInUtMS1vZi00XCI+YD9cbiRpbnVpdC11c2UtZnJhY3Rpb25zOiB0cnVlICFkZWZhdWx0O1xuXG4vLyBEZXBlbmRpbmcgb24gd2hhdCB3ZSBjaG9zZSBmb3IgYCRpbnVpdC11c2UtZnJhY3Rpb25zYCwgY3JlYXRlIHRoZSByZWxldmFudFxuLy8gZGVsaW1pdGVyLlxuQGlmICgkaW51aXQtdXNlLWZyYWN0aW9ucyA9PSB0cnVlKSB7XG4gICAgJGludWl0LXdpZHRocy1kZWxpbWl0ZXI6IFxcLyAhZ2xvYmFsO1xufSBAZWxzZSB7XG4gICAgJGludWl0LXdpZHRocy1kZWxpbWl0ZXI6IC1vZi0gIWdsb2JhbDtcbn1cblxuQG1peGluIGludWl0LXdpZHRocygkaW51aXQtd2lkdGhzLWNvbHVtbnMsICRpbnVpdC13aWR0aHMtYnJlYWtwb2ludDogbnVsbCkge1xuXG4gICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBudW1iZXIgb2YgY29sdW1ucyBmb3IgZWFjaCBkZW5vbWluYXRvciBvZiBvdXIgZnJhY3Rpb25zLlxuICAgIEBlYWNoICRpbnVpdC13aWR0aHMtZGVub21pbmF0b3IgaW4gJGludWl0LXdpZHRocy1jb2x1bW5zIHtcblxuICAgICAgICAvLyBJZiB3ZeKAmXJlIHRyeWluZyB0byBtYWtlIHdob2xlcywganVzdCBzcGl0IGEgMTAwJSB3aWR0aCB1dGlsaXR5IG91dFxuICAgICAgICAvLyBvbmUgdGltZSBvbmx5LlxuICAgICAgICBAaWYgKCRpbnVpdC13aWR0aHMtZGVub21pbmF0b3IgPT0gMSkge1xuICAgICAgICAgICAgLiN7JGludWl0LXdpZHRocy1uYW1lc3BhY2V9dS0xI3skaW51aXQtd2lkdGhzLWRlbGltaXRlcn0xI3skaW51aXQtd2lkdGhzLWJyZWFrcG9pbnR9IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIHtcblxuICAgICAgICAgICAgLy8gQmVnaW4gY3JlYXRpbmcgYSBudW1iZXJhdG9yIGZvciBvdXIgZnJhY3Rpb24gdXAgdW50aWwgd2UgaGl0IHRoZVxuICAgICAgICAgICAgLy8gZGVub21pbmF0b3IuXG4gICAgICAgICAgICBAZm9yICRpbnVpdC13aWR0aHMtbnVtZXJhdG9yIGZyb20gMSB0byAkaW51aXQtd2lkdGhzLWRlbm9taW5hdG9yIHtcblxuICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEgY2xhc3MgaW4gdGhlIGZvcm1hdCBgLnUtMy80YCBvciBgLnUtMy1vZi00YC5cbiAgICAgICAgICAgICAgICAuI3skaW51aXQtd2lkdGhzLW5hbWVzcGFjZX11LSN7JGludWl0LXdpZHRocy1udW1lcmF0b3J9I3skaW51aXQtd2lkdGhzLWRlbGltaXRlcn0jeyRpbnVpdC13aWR0aHMtZGVub21pbmF0b3J9I3skaW51aXQtd2lkdGhzLWJyZWFrcG9pbnR9IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICgkaW51aXQtd2lkdGhzLW51bWVyYXRvciAvICRpbnVpdC13aWR0aHMtZGVub21pbmF0b3IpICogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH1cblxufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjV0lEVEhTLVJFU1BPTlNJVkVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogUmVzcG9uc2l2ZSB3aWR0aCBjbGFzc2VzIGJhc2VkIG9uIHlvdXIgcmVzcG9uc2l2ZSBzZXR0aW5ncy5cbiAqL1xuXG4vLyBCeSBkZWZhdWx0IHdlIHdpbGwgY3JlYXRlIHdob2xlcywgaGFsdmVzLCB0aGlyZHMsIHF1YXJ0ZXJzLCBhbmQgZmlmdGhzLlxuLy8gUHJlZGVmaW5lIHRoaXMgTWFwIHRvIG92ZXJyaWRlLlxuJGludWl0LXdpZHRocy1jb2x1bW5zLXJlc3BvbnNpdmU6IChcbiAgICAxLFxuICAgIDIsXG4gICAgMyxcbiAgICA0LFxuICAgIDUsXG4pICFkZWZhdWx0O1xuXG4vLyBMb29wIG92ZXIgb3VyIGJyZWFrcG9pbnRzIGRlZmluZWQgaW4gX3NldHRpbmdzLnJlc3BvbnNpdmUuc2Nzc1xuQGVhY2ggJGJyZWFrcG9pbnQgaW4gJGJyZWFrcG9pbnRzIHtcblxuICAvLyBHZXQgdGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQuXG4gICRhbGlhczogbnRoKCRicmVha3BvaW50LCAxKTtcblxuICBAaW5jbHVkZSBtZWRpYS1xdWVyeSgkYWxpYXMpIHtcblxuICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIG9mIG91ciBjb2x1bW4gc2l6ZXMgYW5kIGdlbmVyYXRlIGl0cyByZXNwb25zaXZlIHdpZHRoXG4gICAgLy8gY2xhc3Nlcy5cbiAgICBAZWFjaCAkaW51aXQtd2lkdGhzLWNvbHVtbiBpbiAkaW51aXQtd2lkdGhzLWNvbHVtbnMtcmVzcG9uc2l2ZSB7XG4gICAgICBAaW5jbHVkZSBpbnVpdC13aWR0aHMoJGludWl0LXdpZHRocy1jb2x1bW4sIC0jeyRhbGlhc30pO1xuICAgIH1cblxuICB9XG5cbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgI1BSSU5UXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIFZlcnkgY3J1ZGUsIHJlc2V0LWxpa2Ugc3R5bGVzIHRha2VuIGZyb20gdGhlIEhUTUw1IEJvaWxlcnBsYXRlOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvYmxvYi8zYzNjNWU2NDYwNDIwOWE0ZDYzZTFlNGM0OGRkMjQ1ZDQ1ZmFkZmQ5L2Nzcy9tYWluLmNzcyNMMjAwLUwyMzRcbiAqL1xuXG5AbWVkaWEgcHJpbnQge1xuXG4gICAgKixcbiAgICAqOmJlZm9yZSxcbiAgICAqOmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDsgLyogQmxhY2sgcHJpbnRzIGZhc3RlcjogaDVicC5jb20vcyAqL1xuICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgYSxcbiAgICBhOnZpc2l0ZWQge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICB9XG5cbiAgICBhW2hyZWZdOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCIgKFwiIGF0dHIoaHJlZikgXCIpXCI7XG4gICAgfVxuXG4gICAgYWJiclt0aXRsZV06YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiBcIiAoXCIgYXR0cih0aXRsZSkgXCIpXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG9u4oCZdCBzaG93IGxpbmtzIHRoYXQgYXJlIGZyYWdtZW50IGlkZW50aWZpZXJzLCBvciB1c2UgdGhlIGBqYXZhc2NyaXB0OmBcbiAgICAgKiBwc2V1ZG8gcHJvdG9jb2wuXG4gICAgICovXG5cbiAgICBhW2hyZWZePVwiI1wiXTphZnRlcixcbiAgICBhW2hyZWZePVwiamF2YXNjcmlwdDpcIl06YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgIH1cblxufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAjU0hPVy1ISURFXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gaGlkZSgpIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMXB4OyB3aWR0aDogMXB4OyBcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNsaXA6IHJlY3QoMXB4IDFweCAxcHggMXB4KTsgLyogSUU2LCBJRTcgKi9cbiAgICBjbGlwOiByZWN0KDFweCwgMXB4LCAxcHgsIDFweCk7XG59XG5cbkBtaXhpbiBzaG93KCkge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG59XG5cbi5oaWRlIHsgQGluY2x1ZGUgaGlkZSgpOyB9XG4uc2hvdyB7IEBpbmNsdWRlIHNob3coKTsgfVxuXG4vLyBMb29wIG92ZXIgb3VyIGJyZWFrcG9pbnRzIGRlZmluZWQgaW4gX3NldHRpbmdzLnJlc3BvbnNpdmUuc2Nzc1xuQGVhY2ggJGJyZWFrcG9pbnQgaW4gJGJyZWFrcG9pbnRzIHtcblxuICAvLyBHZXQgdGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQuXG4gICRhbGlhczogbnRoKCRicmVha3BvaW50LCAxKTtcblxuICBAaW5jbHVkZSBtZWRpYS1xdWVyeSgkYWxpYXMpIHtcblxuICAgIC5oaWRlLSN7JGFsaWFzfXtcbiAgICAgICAgQGluY2x1ZGUgaGlkZSgpO1xuICAgIH1cblxuICB9XG5cbiAgLnNob3ctI3skYWxpYXN9e1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICBAaW5jbHVkZSBtZWRpYS1xdWVyeSgkYWxpYXMpIHtcblxuICAgIC5zaG93LSN7JGFsaWFzfXtcbiAgICAgICAgQGluY2x1ZGUgc2hvdygpO1xuICAgIH1cblxuICB9XG5cbn0iLCIvLy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4vLyAgICAjUE9TSVRJT05TXG4vL1xcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5yZWxhdGl2ZXtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59IiwiLnRpbnQge1xuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGRlc2spIHtcbiAgICAgICAgZmlsdGVyOiBncmF5c2NhbGUoMTAwJSk7XG4gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC1maWx0ZXIgLjJzIGVhc2UtaW4tb3V0O1xuICAgICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LWZpbHRlciAuMnMgZWFzZS1pbi1vdXQ7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcbiAgICB9XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLC41KTtcblxuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dDtcbiAgICB9XG5cbiAgICAmOmhvdmVye1xuICAgICAgICBmaWx0ZXI6IG5vbmU7XG5cbiAgICAgICAgJjpiZWZvcmUge1xuXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLC4zKTtcbiAgICAgXG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5zZWN0aW9uLWltZyB7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AgY2VudGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGhlaWdodDogMTAyOHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkocGFsbSkge1xuICAgICAgICBoZWlnaHQ6IDcyMHB4O1xuICAgIH1cbn1cblxuLmZvb3RlciB7XG4gICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkoZGVzaykge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgfVxufVxuXG4uZm9vdGVyX19jb3B5IHtcbn1cblxuLmZvb3Rlcl9fY3JlZGl0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGRlc2spIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG59XG5cbi5mb290ZXJfX2NyZWRpdC1jb3B5IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc2l6ZTogLjhlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAuNmVtO1xuICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGRlc2spIHtcbiAgICAgICAgYm90dG9tOiAxMDAlO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxufVxuXG4uZm9vdGVyX19pbWcge1xuICAgIGhlaWdodDogNDBweDtcbn0iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */
